<text id="syndicate/bmw-s-and-chinese-justice">
BMW 's and Chinese Justice * * * * * In most places , the name " BMW " implies luxury and exclusivity . But in China , the brand has unwittingly found itself enmeshed in tales that illustrate the powerlessness of ordinary Chinese against the powerful and corrupt . The first scandal occurred last year , after a tractor filled with green onions scraped the side of a BMW in Harbin . The drivers of both the tractor and the metallic-silver luxury car were 45-year-old women , but any similarity between them ended there : the former was a peasant , the latter the wife of a wealthy businessman . After a confrontation between the two , the wealthy wife drove her BMW into the growing crowd of spectators on the roadside , killing the peasant woman and injuring 12 others . The case went to the local court , where the judge ruled it an " accidental traffic disturbance " and gave the driver a two-year suspended sentence . The judge 's ruling spurred rumors that he went easy on her because her husband was related to senior provincial officials . It quickly became a story of " rich versus poor , " widely cited as an example of high-level corruption . Over the next few months , newspapers and television stations ran with the story as it snowballed into a national obsession . Alarmed by the public reaction , the Harbin magistrate ordered the case reopened , only to have the suspended sentence confirmed when the case was closed this March . The big BMW story of late 2003 resurfaced quietly , before being buried again forever . That same month , a lottery scandal threw the BMW brand into the limelight once again . Lottery officials in Shaanxi province rejected a winning ticket , calling it a fake and denying its bearer , a 17-year-old security guard named Liu Liang , the grand prize of a $58,000 BMW and 120,000 yuan ( $14,510 ) in cash . Liu became so angry about being accused of fraud and denied the car that he climbed atop a high advertising billboard and threatened to jump as a show of innocence . But the story did n't end when police officers managed to talk him down . News broadcasts covered his continued insistence that he did not forge his ticket , along with the lottery center 's claims that their rejection of the ticket was legitimate . The police finally stepped in and , after a careful investigation , announced that they had found the true criminal : Yang Yongming , a private businessman whom the local lottery administration had contracted to organize ticket sales . Yang had conspired with the government officials directing the lottery , who were arrested for malfeasance , to fraudulently obtain the top prizes . In June Liu Liang finally got what he deserved - a BMW-325i sedan and a sincere apology from the lottery center . If the first scandal was a tragedy , the second was more like a farce . But both offer keys to understanding contemporary Chinese psychology . The outcry after the first BMW case was not really about the light sentence given to a rich woman , but about the lack of confidence ordinary people have in China 's judicial system . In China , power , money , and connections trump the law . Even as they are becoming ever more litigious , many Chinese believe that they have no hope of securing justice against the powerful . The apathetic response of the dead peasant woman 's husband to the $10,000 in compensation he received was telling . " I do n't care about the verdict and whether it is justice or not , " he said . The most harmful consequence is the public 's loss of trust in the system . Social trust is not something you can buy with money . If an entire society believes that you cannot depend on legal rights for protection - that one must instead rely on a web of relationships with those who have power and influence - questions about whether such a society is livable or desirable will remain . Similarly , in the second BMW case , people did n't blame a corrupt businessman ; they ascribed culpability to the lottery center , a government body . So instead of mistrusting one person , they grew suspicious of an institution - even of government itself . When a stubborn teenager went up against the mighty lottery authority with its army of auditors and inspectors and initial alibis , this individual , not the system , was the clear winner of the public 's admiration . Liu Liang may have been just a working-class kid , but there was wisdom in his words that there is still a " silent majority " who can affect the workings of China 's fragile society . He refused to settle privately , because he believed that if he let corrupt government officials off the hook , " they 'll keep scamming the public . " Thanks to his perseverance and the media 's investigation , the fraud was laid bare . Power corrupts everywhere , but individuals in China such as Liu have come to form a countervailing force . Even so , such marginal forces do not yet constitute a system for redressing grievances . While pop music fans in China can listen to whatever they like , including Madonna singing " I 'm gonna shake up the system , " ordinary Chinese need courage to speak such messages aloud . As one saying goes , " There is not want of conscience in Chinese , but there is want of courage . " </text>
<text id="syndicate/china-and-a-new-balance-of-power">
China and a New Balance of Power SHANGHAI – The last rival superpower to the United States , the Soviet Union , collapsed in 1991. But , apart from its military strength , the USSR was never really powerful enough to counterbalance US influence . In the late 1980’s , Japan seemed capable of challenging America’s industrial leadership , but by the 1990’s it lost its competitive edge . China might itself wish to be a major force in a multi-polar world , but has been plagued by its lack of overall strength . Given these realities , China sees the expanding European Union as a likely counterweight to unchecked US power . In terms of economic output , today’s EU is on par with the US . But it has yet to build a strong defense system that can respond effectively either to regional contingencies or to global needs . What would be the strength of such a system if and when it is developed , and how will it compare with that of the US ? In assessing America’s strength , China follows US debates on the merits of a uni-polar or a multi-polar world with keen interest . Some Americans favor a uni-polar system in which the US dominates . Such a Pax Americana would cost the country less to sustain , but the world would worry if America adopts a wrong policy , as has been the case in Iraq . The US certainly has a right to curb terrorists like those who staged the attack on September 11 , 2001. But the “ war on terror ” did not warrant the decision to attack a sovereign state and topple its government on the flawed presumption that it housed weapons of mass destruction and was linked to the 2001 attacks . The US went to war despite strong opposition from France , Germany , Russia , China , and other United Nations Security Council members . France and Germany have since sought to restore good relations with the US , but continue to disapprove of the war . The Middle East , always a region of concern for Europe , has become even less stable as a result of the war . American leadership has been one of the war’s casualties . In China , the concept of an independent European defense – embodied in the European Security and Defense Policy ( ESDP ) , as well as the EU’s Rapid Reaction Force ( RRF ) and various police missions – is thus generally seen as necessary and effective in a multi-polar world system . China observes that on most security matters , the ESDP will ( for now ) mimic American security interests , because the EU and US share fundamental values of human rights and democracy . Moreover , many EU members have simultaneously pledged their defense capabilities to NATO , which has been led by the US since its creation . But the ESDP , once fully developed , will not necessarily follow America’s lead unconditionally , especially if American policy continues to deviate from the norm of international law , as in Iraq . As a result of acquiring a pan-European defense capacity , the Europeans are likely to play a more independent role than at present in managing intra-European security relations and carrying out global missions . China welcomes this expanded security role for the EU . Although it remains wary of international intervention by the EU , the substance and pattern of ESDP operations are likely to win China’s respect for several reasons . First , China’s leaders note that the ESDP gives priority to the legitimacy of its missions . So far , all ESDP missions have respected international law and governmental arrangements among disputing parties . Most of its military or police missions have been based on UN Security Council resolutions , and ESDP missions outside Europe have been at the invitation of local authorities . Of course , ESDP security missions , even those in accordance with Security Council resolutions , may not operate within the UN system – the EU prefers its own independent leadership . The ESDP does not necessarily require Security Council authorization as a condition for its missions , and it retains an independent role in executing them . However , when compared with the US , the ESDP ( in Chinese eyes ) cares far more about international legitimacy , backed by the authority of the UN . Second , the ESDP is concerned with good governance and institution building . The EU is keen to restore or establish human rights , stability , and prosperity . Outside Europe , the ESDP acts to enhance governance rather than promote regime change , and the EU has often assisted governments ’ efforts to improve security conditions . Third , the ESDP is open to international cooperation . The EU works with either non-EU states , such as NATO members like Canada , Norway , and Turkey , or applicants for EU membership . The ESDP cooperates with the UN and other regional organizations , such as the African Union and ASEAN . When the EU reaches out , it tends to play a leading role in these collaborations . There are good reasons to expect that China will continue to accept an independent European security mechanism . There is little concern , if any , about the ESDP intervening in internal Chinese affairs , such as Taiwan . Indeed , China wants a strong and independent Europe , and from that vantage point it is not too early for China to envisage a truly multi-polar global system . </text>
<text id="syndicate/china-and-russia-in-the-new-world-disorder">
China and Russia in the New World Disorder Can Kosovo achieve independence without the tacit consent of Russia , and can there be a humanitarian and political solution to the tragedy in Darfur without the active goodwill of China ? The two crises have nothing in common , but their resolution will depend in large part on whether these two permanent members of the United Nations Security Council use their veto power . Comparing the respective abilities of Russia and China to block key international initiatives makes no sense in itself , but it does constitute a useful tool for understanding the transformation of the international system that is now taking place as a direct consequence of the relative decline of America’s global power . From that standpoint , the deepening of chaos in the Middle East poses both opportunities and risks for Russia and China , which may force them to define the roles they want to play and the images they want to project in the world . The key question is this : Is Russia taking giant steps in the “ wrong direction ” while China is taking “ minuscule ” steps in the “ right direction ” ? Superficially , Russia and China may give the impression that they are pursuing the same path when they both proclaim with pride that they are “ back ” on the world stage . But this boast means different things for each country . For China , a deeply self-confident country , to be “ back ” simply means regaining the country’s historical centrality in the world after an absence of more than two centuries . After all , at the end of the eighteenth century , China became the world’s first producer of manufactured goods , and it perceives itself as a center of civilization unequalled by any other in Asia , if not the world . China’s renewed self-confidence is based on its remarkable economic prowess , which is derived not from natural resources , but from productivity and creativity . Whatever the huge political , social , and economic tensions may exist , there is a “ feel good ” factor in China , a sense of progress , with the 2008 Olympics in Beijing figuring as the symbolic moment that will proclaim to the world the scale of the country’s achievements . Above all , with the exception of the Taiwan issue , China is a satisfied status quo power when it comes to the evolution of the international system – a patient actor that finds it perfectly legitimate to behave and to be seen as the world’s number two power . By contrast , the Russians remain insecure about their status in the world . Russia’s explosive “ revisionist ” behavior on the eve of the recent G8 summit is an indication of the Kremlin’s “ unsatisfied ” nature . Because they know they are less potent , particularly in demographic and economic terms , Russians feel they have to do “ more . ” For them , to say “ Russia is back ” means that the humiliating Yeltsin years are over , and that they now must be treated as equals , particularly by the United States . Russians are nostalgic not for the Cold War as such , but for the international status they lost when it ended . Now that America is no longer a “ hyperpower ” with no strategic challengers , Russia has reasserted its status as a “ superpower , ” a claim that is not necessarily supported by reality . Unlike the Chinese , the Russians do not create economic wealth , but merely exploit their energy and mineral resources . Moreover , unlike the Chinese , they have not always been confident of their position in the world . Torn between Europe and Asia in cultural and political terms , victimized by a dark , narcissistic instinct that pervades their reading of their past and their visions of the future , it should surprise no one that Russia is now behaving like a “ revisionist ” power . Unsatisfied with their inner identity , it is only natural that Russians should demand changes that make them feel more secure and proud . Less than 20 years ago , the Czech Republic and Poland were part of their sphere of influence , so Russians understandably cannot accept the US unilaterally implanting its security system there . Of course , in their respective judgments on Russia and China , the West – and Europeans in particular – may be demonstrating selective emotions . “ We ” tend to be less demanding of China than of Russia , because we tend to see Russia as “ European ” ( at least culturally ) . As a result , the culture of physical violence and verbal provocation that is gaining ground in Putin’s Russia is deeply disturbing , whereas we tend to judge Chinese misdeeds with a greater sense of distance , if not indifference . But the differences between Russia and China today may prove to be less significant tomorrow if the deterioration in the Middle East imposes a sense of collective responsibility on all five permanent members of the UN Security Council . It is one thing for Russia and China to exploit America’s growing difficulties from Gaza to Kabul ; but it is quite another if the situation deteriorates to the point of general destabilization in the region . Indeed , the Middle East’s deepening problems may impose a sense of restraint in Russia and China by forcing them to calculate not in terms of their global “ nuisance value ” vis-à-vis the West , but in terms of their ability to make a positive and stabilizing contribution to the world order . </text>
<text id="syndicate/china-japan-protests-islands-by-liah-greenfeld">
The Roots of Chinese/Japanese Rivalry BOSTON – The anti-Japan protests that continue to roil China are just another indication of the rise of a potent Chinese nationalism . After a century slowly fomenting among Chinese intellectuals , national sentiment has captured and redefined the consciousness of the Chinese people during the last two decades of China’s economic boom . This mass national consciousness launched the Chinese colossus into global competition to achieve an international status commensurate with the country’s vast capacities and the Chinese people’s conception of their country’s rightful place in the world . Rapidly , visibly , and inevitably , China has risen . Indeed , our era will likely be remembered as the time when a new global order , with China at the helm , was born . Competitive national consciousness – the consciousness that one’s individual dignity is inseparably tied to the prestige of one’s “ people ” – worked its way into the minds of China’s best and brightest between 1895 and 1905. In 1895 , China was defeated by Japan , a tiny aggressor whom the Chinese dismissively called wa ( the dwarf ) . China was already accustomed to rapacious Western powers squabbling over its riches , but had remained self-confident in the knowledge of these powers ’ irrelevance . However , the assault from Japan , a speck of dust in its own backyard , shattered this self-assurance and was experienced as a shocking and intolerable humiliation . Japan’s triumph in 1905 over “ the Great White Power , ” Russia , repaired the damage to China’s sense of dignity . From the Chinese point of view , Russia was a formidable European power , one feared by other Western powers . Its defeat , therefore , was seen as a successful Asian challenge to the West , in which China , its intellectuals felt , was represented by Japan . Japan thus became the focus of Chinese attention . Gentlemen-scholars , who would reform and staff the Chinese army and civil service in the early decades of the twentieth century , went to study in Japan . The Revolution of 1911 was inspired by the example of Japan’s Meiji Restoration ; and , because early-twentieth-century Japan was stridently nationalistic , the new China that emerged from its image was constructed on nationalist principles as well . Thus Japan became the significant “ other ” for China , the model that was imitated and the anti-model that was resented . Chinese nationalism borrowed from Japan its concept of the nation , including the very word by which it was expressed ( kuoming , from the Japanese kokumin ) . The Kuomintang ( the Chinese Nationalist Movement ) was explicitly inspired by Japan and fueled by repeated Japanese aggression . Paradoxically , but not unexpectedly , Mao Zedong’s struggle against the Kuomintang was inspired by anti-Japanese nationalism as well . As was the case virtually everywhere else , communism in China was nationalism incarnate . Mao’s speech on the establishment of the People’s Republic plainly expressed the nationalist agenda behind it . Calling the nation “ communist ” assured the new People’s Republic of China of the Soviet Union’s support , which was viewed by Mao as more reliable than that of the United States . But neither the Russian nor the Chinese Communists were ever unclear about the nationalist nature of their respective projects . The upper echelons of the bureaucracy and intelligentsia in Russia and China were self-consciously nationalist and , throughout Communist rule , shrewdly pursued the supreme nationalist goal : prestige – the power , naked and otherwise , to impose the nation’s will on others . But national consciousness , particularly in China , was limited to a narrow elite , leaving the masses almost untouched . This changed dramatically with the Chinese government’s restoration of a capitalist economy . Much like in Germany in the 1840’s , when the appeal to private enterprise converted the entire middle class to nationalism , the explicit definition of economic power as the central pillar of China’s greatness awakened ordinary Chinese to nationalism’s appeal . Hundreds of millions now see themselves as sharing in the nation’s dignity , and are eager to contribute to it , as well as to defend it from insult . Competition for prestige , even when the contest is economic , is not a purely rational undertaking . So it should be no surprise that old injuries are likely to resurface . Some Chinese , especially those who are not economically successful , harp bitterly on Japan’s past depredations . Despite China’s embrace of capitalism and Japanese investment , Japan remains China’s reviled other . Indeed , a professor in Beijing told me not long ago , “ Two in every ten Chinese dislike the US , but nine in every ten hate Japan . ” For the West , there is a silver lining in this nationalist rivalry : neither China nor Japan is a rogue state , and , so long as their quarrels do not lead to the use of unconventional weapons , we may treat the friction between them as an internal Asian quarrel . Japan , moreover , is likely to let today’s passions over disputed islands in the East China Sea cool down , despite the anti-Japanese outbursts in Chinese cities . But the West – and the US in particular – is new to dignity games à la Chinois . If it gets carried away and presumes to talk down to the 5,000-year-old culture of the Sages , the West could become the next object of China’s nationalist resentment . </text>
<text id="syndicate/china-s-cyber-warriors">
China’s Cyber-Warriors NEW DELHI – The world now accepts that protecting our atmosphere , hydrosphere , lithosphere , and biosphere – the “ global commons ” – is the responsibility of all countries . The same norm must apply to cyberspace , which is critical to our everyday life , economic well-being , and security . At a time when cyber attacks are increasing worldwide , US Secretary of State Hillary Clinton was right to declare that an attack on one nation’s computer networks “ can be an attack on all . ” Indeed , the attacks are a reminder that , as a new part of the global commons , cyberspace already has come under threat . Cyberspace must be treated , along with outer space , international waters , and international airspace , as property held in common for the good of all . And , like ocean piracy and airplane hijacking , cyber-crime cannot be allowed to go unpunished if we are to safeguard our common assets and collective interests . Naming China among a handful of countries that have stepped up Internet censorship , Clinton warned that “ a new information curtain is descending across much of the world . ” Her statement , with its allusion to the Cold War-era Iron Curtain , amounted to an implicit admission that the central assumption guiding US policy on China since the 1990’s – that assisting China’s economic rise would usher in greater political openness there – has gone awry . The strategy of using market forces and the Internet to open up a closed political system simply is not working . Indeed , the more economic power China has accumulated , the more adept it has become in extending censorship to cyberspace . If anything , China has proven that a country can blend control , coercion , and patronage to stymie the Internet’s politically liberalizing elements . Through discreet but tough controls , Beijing pursues a policy of wai song , nei jin – relaxed on the outside , vigilant internally . Google is now crying foul over “ a highly sophisticated and targeted attack on our corporate infrastructure originating from China . ” But , despite its corporate motto – “ Don’t be evil ” – Google itself was instrumental in aiding online censorship in China , having custom-built a search engine that purges all references and Web sites that the Chinese government considers inappropriate . Now Google itself has become a victim of China’s growing cyber prowess , in the same way that appeasement of Hitler boomeranged onto France and Britain . China deploys tens of thousands of “ cyber police ” to block Web sites , patrol cyber-cafes , monitor the use of cellular telephones , and track down Internet activists . But the threat to the new global commons comes not from what China does domestically . Rather , it comes from the way in which the know-how that China has gained in fashioning domestic cyber oversight is proving invaluable to it in its efforts to engage in cyber intrusion across its frontiers . Canadian researchers have discovered a vast Chinese surveillance system called “ GhostNet , ” which can compromise computers in organizations abroad through booby-trapped e-mail messages that automatically scan and transfer documents to a digital storage facility in China . This is what happened when computers of the Tibetan government-in-exile in Dharamsala , India , were attacked last year . India’s national security adviser recently complained that his office was targeted yet again by hackers . “ People seem to be fairly sure it was the Chinese , ” he said . Officials in Germany , Britain , and the US have acknowledged that hackers believed to be from China also have broken into their government and military networks . The state-sponsored transnational cyber threat is at two levels . The first is national , with the hackers largely interested in two objectives . One is to steal secrets and gain an asymmetrical advantage over another country . Cyber intrusion in peacetime allows the prowler to read the content and understand the relative importance of different computer networks so that it knows what to disable in a conflict situation . The other objective is commercial : to pilfer intellectual property . The second level of cyber threat is against chosen individuals . The most common type of intrusion is an attempt to hack into e-mail accounts . The targets also can face Trojan-horse attacks by e-mail intended to breach their computers and allow the infiltrators to corrupt or transfer files remotely . To be sure , if a cyber attack is camouflaged , it is not easy to identify the country from which it originated . Through the use of so-called “ false-flag espionage ” and other methods , attacks can be routed through the computers of a third country . Just as some Chinese pharmaceutical firms exported to Africa spurious medicines with “ Made in India ” labels – a fact admitted by the Chinese government – some Chinese hackers are known to have routed their cyber intrusion through computers in Russia , Iran , Cuba , and other countries . But , like their comrades in the pharmaceutical industry , such hackers tend to leave telltale signs . Then there are many cases in which the attacks have originated directly from China . It seems unlikely that these hackers , especially those engaged in cyber espionage , pilferage , and intimidation , are private individuals with no links to the Chinese government . It is more likely that they are tied to the People’s Liberation Army . In war , this irregular contingent of hackers would become the vanguard behind which the PLA takes on the enemy . Systematic cyber attacks constitute a new frontier of asymmetrical warfare at a time when the world already confronts other unconventional threats , including transnational terrorism . With national security and prosperity now dependent on the safekeeping of cyberspace , cybercrime must be effectively countered as an international priority . If not , cyberspace will become the new global-commons battlefield . </text>
<text id="syndicate/china-s-gift-to-europe">
China’s Gift to Europe Europeans are wrong to be angry with China because its currency peg to the US dollar has boosted the euro against most currencies on foreign exchange markets . On the contrary , they should view the currency peg as a valuable gift . In New York and other American cities , European shoppers are on a spree . They’re enjoying first hand the euro’s enhanced purchasing power abroad . The currency peg has also helped make the euro into an important reserve currency , rivaling the dollar . Investments from all over the world are flowing into Europe as a result . It was predictable that China’s currency peg would have this effect . It forced China to accumulate huge amounts of dollars to stabilize its currency and gave the euro an extra boost as the dollar depreciated . To protect itself from the declining greenback , China and other countries are converting a portion of their accumulated dollar reserves into euros . The International Monetary Fund estimates that the euro’s share of foreign exchange reserves rose to 26.4 percent in third quarter of 2007 from 25.5 percent in the second quarter of 2007 , and 24.4 percent in the third quarter of 2006. The euro’s becoming a major reserve currency bestows important economic advantages on the euro-zone economy . Europeans should thank the Chinese currency peg for the part it is playing in this . Of course , with an augmented supply of euros , China can be expected to make substantial investments in Europe , which also is a good thing , especially since , in the United States at least , China has demonstrated a preference for investments in financial institutions rocked by the sub-prime crisis . Europe has plenty of those . So far , China’s biggest European investment has been in the Belgian financial company , Fortis N. V. , where Ping An Insurance recently acquired a 4.2 % stake , making it the largest shareholder in the company . China Development Bank also made an investment in Barclays to bolster its bid for ABN AMRO which , though it failed , helped the Dutch bank get the full value for its assets . This is only a start . Merrill Lynch predicts that , as currency reserves climb in countries like China , state-run investment funds will grow to $7.9 trillion , from $1.9 trillion now . China’s currency peg has also come in handy for Europe in its fight to keep inflation in check , while its monetary policy remains constrained by the sub-prime crisis . Experts estimate that , in terms of guarding against inflation , the euro’s appreciation has been equivalent to about 35 basis points rise in the interest rate . The strong euro has helped insulate Europe from skyrocketing oil and commodity prices , which are priced in dollars on the world markets . The big downside of the currency peg for Europe is supposed to be exports . That’s what sent French President Nicolas Sarkozy and other high-level European officials scurrying off to China last November—and why many ordinary Europeans continue to think of the Chinese as not playing by the rules . This is protectionist thinking par excellence . What makes exports so special ? Why are they more important than cheap imports or the bargains that European shoppers get in New York ? Should Europe give up all the advantages of the currency peg just because it makes European exports more expensive ? Of course not ! Note that it was French President Sarkozy who went to China to protest the currency peg , not German Chancellor Angela Merkel . German exports are not being substantially damaged by the strong euro—indeed , German costs are so competitive that exporters are confident they can cope with the euro at 1.50 dollars and even higher . This is not true for France-- but the answer is obvious : reduce costs and France too will be able to cope with the strong euro . In the final analysis , cutting costs is all the Europeans can do if they want to preserve the competitiveness of their exports . The Chinese are not going to change their exchange rate regime , which has strategic as well as economic motivations , just because the Europeans are unhappy with the currency peg . China has given the Europeans a gift . They should be grateful , rather than foolishly insist that China take it back . </text>
<text id="syndicate/china-s-threat-to-russia">
China’s Threat to Russia Last week , Russia and China held joint military maneuvers in the presence of both Russian President Vladimir Putin and Chinese President Hu Jintao . But a new strategic alliance between the two countries is not likely , as it is China that poses the greatest strategic threat to Russia , although many in the Kremlin seem blind to this as they rattle sabers at America and the West . Indeed , China officially considers several regions in Russia’s Far East to be only “ alienated ” from it . China’s territorial claims on Russia are often noted in Chinese grade school geography textbooks , which include a number of Russian Far Eastern regions within China’s borders . This is consistent with the Chinese strategic concept of “ vital space , ” which includes all spheres of a state’s strategic activities , on land , at sea , under water , in the air , and in space . The dimensions of “ vital space ” are determined by a country’s economic , scientific , technical , social , and military capabilities – in essence , its “ total power . ” According to Chinese theorists , the “ vital space ” of great powers extends far beyond a state’s borders , whereas the “ vital space ” of weak countries is limited to strategic boundaries that do not always correspond to the borders of their national territory . Today , China has territorial claims against 11 of its 24 neighbors , including India , Japan , Vietnam , and the Philippines , in addition to Russia . In China’s relations with all of them , the potential use of military force was and remains an important factor . In September 2006 , China’s People’s Liberation Army ( PLA ) conducted an unprecedentedly large 10-day exercise , involving the Shenyang and Beijing military districts , the two most powerful of China’s seven military districts . Shenyang abuts the Russian Armed Forces ’ Far Eastern District , and the Beijing district shares a border with Russia’s Siberian Military District . During the exercises , Shenyang units advanced 1,000 kilometers into the Beijing district , where they engaged in joint war games . To military observers , the Beijing/Shenyang exercises seemed to be practice for a possible offensive operation against Russia , because exercises on such a scale are undertaken only at the final stage of a multi-year program to train troops to enact specific strategic and operational plans . The geography of the exercises , and the offensive nature of the tasks undertaken , leaves little doubt that Russia was cast in the role of “ potential adversary . ” Such a show of force is an ancient , traditional Chinese political technique . Paradoxically , these exercises were undertaken during a period when bilateral political and economic ties appeared on the surface to be at their highest point . Russia has an important place in Chinese geopolitical calculations , as a supplier of both modern weaponry and energy resources needed to continue its modernization . Therefore , the Chinese are doing everything possible to strengthen their economic and political position in Russia , and to draw Russia into their sphere of influence . And China is succeeding , most importantly by consistently reinforcing Putin’s anti-American and anti-Western agenda . While Beijing/Shenyang exercise should have indicated to Russian leaders that China’s intentions toward Russia may not always be benign , Russia’s political and military leadership seem not to sense any threat ; on the contrary , they continue to sell the Chinese advanced weapons . Russia’s current diplomatic tilt , indeed , is clearly against its own long-term national security interests . China will never be interested in Russia’s economic and political modernization , for it prefers Russia to remain a source of mineral and energy resources and a vast “ strategic rear ” in its looming challenge with the United States . Likewise , the Shanghai Cooperation Organization ( SCO ) , which just concluded its annual meeting , is in China’s eyes a tool of regional policy that helps strengthen China’s influence and control over Central Asia’s natural resources at the expense of Russia . No nation threatens China’s land borders . China can solve its domestic problems , such as separatism , by itself . China is militarily self-sufficient and needs military cooperation under the SCO framework only in order to free its hands if any conflict should arise that affects its interests . In fact , conflict between Russia and China is possible precisely in Central Asia , given the clear differences in the two countries ’ economic and political interests in that region . Aside from control of the region’s energy supplies , water has become a potential source of conflict , given China’s serious shortages . Yet , while the Chinese clearly understand these contingencies and are preparing themselves to deal with them diplomatically and militarily , the Kremlin remains myopically obsessed with the phantom threat of America . Thus , as the Kremlin dreams of re-establishing its domination over what Russians refer to as the “ near abroad ” ( Ukraine , Belarus , the Baltic countries , and the other post-Soviet states ) , China is increasingly looking at Russia as its own “ near abroad . ” Will the Kremlin finally wake up to this ? Thirty-six years ago , Richard Nixon and Mao Zedong turned world politics upside down , as both America and China realized that it was the Soviet Union , and not each other , that posed the greater threat . Vladimir Putin needs his own “ Nixon moment . ” Alienating the West is a foolish strategy when the greatest long term threat to Russia comes from the East . </text>
<text id="syndicate/europe-s-vital-french-connection-by-kemal-dervi">
Europe’s Vital French Connection PARIS – In the debates raging over the future of the European Union and the eurozone , Germany always takes center stage . It has the largest economy , accounting for 28 % of eurozone GDP and 25 % of the eurozone’s population . It is running a current-account surplus that is now larger than China’s – indeed , the largest in the world in absolute value . And , while weighted majorities can overrule it on some issues , everyone acknowledges that little can be done in the eurozone unless Germany agrees . But the emphasis on Germany , though justified , should not lead to an underestimation of France’s critical role . France not only accounts for roughly 22 % of eurozone GDP and 20 % of its population – behind only Germany – but also has the healthiest demography in the eurozone , whereas the German population is projected to decline over the next decade . At the same time , France’s critical role reflects more than its size . Indeed , in terms of influencing outcomes in Europe , France is as important as Germany , for three reasons . First , France is an indispensable link between southern and northern Europe at a time of growing economic and financial division between creditors and debtors ( a fissure that has begun to assume a cultural dimension ) . An active France can play a bridging role , leveraging its strong relationship with Germany ( a friendship that is a pillar of the EU ) and its proximity and cultural affinities to the Mediterranean . France is “ southern ” in its current-account deficit , but “ northern ” in its borrowing costs ( slightly above Germany’s ) , owing partly to inflows of capital fleeing the south , as well as to modest but positive economic growth . Moreover , there is no perceived “ re-denomination ” risk affecting French assets , given markets ’ confidence that France will retain the euro . So , while France faces huge economic challenges , its northern and southern features permit it to play a proactive role in the European project’s survival . French President François Hollande has already given a rather successful preview of this role , meeting German Chancellor Angela Merkel in Berlin on his first day in office , and , a month later , participating in a high-profile meeting with the Italian and Spanish prime ministers in Rome . Indeed , he took the lead in adding a “ growth pact ” to the “ stability pact ” that had been negotiated under Merkel’s leadership . Second , France , under its new center-left government , must demonstrate that the “ European model ” of a market economy coupled with strong social solidarity can be reformed and strengthened , rather than abandoned – not just in Europe’s more pragmatic north , but also in its more ideological south . French Socialists will not renounce their traditional commitments ; nor should they . But they now have the opportunity to contribute to the European model’s renewal . Under Hollande , France’s Socialists favor achieving that renewal through a process of social dialogue that convinces rather than imposes , that focuses both on revenue measures and on boosting government efficiency , and that may adopt some of northern Europe’s more successful “ flexicurity ” policies , which combine greater labor-market flexibility with strong social protection . The reforms should also introduce much greater individual choice , permitting solutions to retirement , education , health , and lifestyle issues that can be more easily tailored to citizens ’ specific circumstances and needs . The government of Hollande and Prime Minister Jean-Marc Ayrault has strong majorities at all executive and legislative levels , giving it a rare opportunity to act . If it can renew the European model at home , it will be able to project that success much more widely , particularly in southern Europe , in turn reinforcing confidence and belief in the EU , particularly among the young generation . The French center-left must lead in conceiving a vision for Europe in which solidarity and equity reinforce long-term economic strength . Finally , along with the United Kingdom among European countries , France retains more of a global role than Germany has yet acquired . While the United Nations Security Council is outdated in its structure , it still plays a crucial legitimizing role ; and France , not Germany , is a member . In many other international organizations as well , France punches above its weight . Similarly , while France exports much less than Germany outside the EU , many large French enterprises rival Germany’s in global reach and technical know-how . And French is still a global language . In other words , France not only is a link between Europe’s north and south , but also contributes substantially to linking Europe to the rest of the world . Europe needs a renewed vision and effective policies to realize that vision . France’s Socialist-Green government can play a critical unifying role as Europeans confront their biggest challenge in decades . Its success will be highly consequential – not least for the political debate that will inform the outcome of Germany’s elections in 2013. </text>
<text id="syndicate/exchange-rate-disorder">
Exchange Rate Disorder NEW YORK – Two troubling features of the ongoing economic recovery are the depressed nature of world trade and the early revival of international global payment imbalances . Estimates by the International Monetary Fund and the United Nations indicate that the volume of international trade in 2010 will still be 7 % to 8 % below its 2008 peak , while many or most countries , including industrial nations , are seeking to boost their current accounts . Indeed , if we believe the IMF’s projections , the world economy’s accumulated current-account surpluses would increase by almost $1 trillion between 2009 and 2012 ! This is , of course , impossible , as surpluses and deficits must be in balance for the world economy as a whole . It simply reflects the recessionary ( or deflationary ) force of weak global demand hanging over the world economy . Under these conditions , export-led growth by major economies is a threat to the world economy . This is true for China , Germany ( as French Finance Minister Christine Lagarde has consistently reminded her neighbor ) , Japan , and the United States . Countries running surpluses must adopt expansionary policies and appreciate their currencies . More broadly , to the extent that major emerging-market countries will continue to lead the global recovery , they should reduce their current-account surpluses or even generate deficits to help , through increased imports , spread the benefits of their growth worldwide . But , while that implies that emerging-market currencies must strengthen , disorderly appreciations would do more harm than good . To use an American saying , it might mean throwing out the baby ( economic growth ) with the bathwater ( exchange rate appreciation ) . Consider China , which accounts for the largest share by far of world trade among emerging economies . Real appreciation of the renminbi is necessary for a balanced world economic recovery . But disorderly appreciation may seriously affect China’s economic growth by disrupting its export industries , which would generate major adverse effects on all of East Asia . China needs a major internal restructuring from exports and investments , its two engines of growth in past decades , to personal and government consumption ( education , health , and social protection in the latter case ) . But this restructuring will tend to reduce , not increase , import demand , as exports and investment are much more import-intensive than consumption . Moreover , a sharp appreciation of the renminbi could risk domestic deflation and a financial crisis . Chinese authorities certainly seem to have that interpretation of the roots of Japan’s malaise in mind as they seek to avoid rapid revaluation . The only desirable scenario , therefore , is a Chinese economy that transmits its stimulus to the rest of the world mainly through rising imports generated by rapid economic growth ( i. e. , the income effect on import demand ) , rather than by exchange-rate appreciation ( the substitution effect ) . This requires maintaining rapid growth while undertaking a major but necessarily gradual domestic restructuring , for which a smooth appreciation is much better suited . Now consider other major emerging markets . Here currency appreciation is already taking place , pushed by massive capital inflows since the second quarter of 2009 , and in some cases it can already be said to be excessive ( for example , in Brazil ) . These countries can , of course , resist upward pressure on their currencies by accumulating foreign-exchange reserves , like they did before the global financial crisis . The result is , of course , paradoxical : private funds that flow into these countries are recycled into US Treasury securities via investment of accumulated reserves . Why should emerging-market countries ’ central banks undertake this peculiar financial intermediation , which represents a major cost , as the yield of private funds is higher than that of reserves ? The implication here is that relying on free movement of capital to achieve exchange-rate appreciation and current-account deficits may generate a myriad of problems , including slower economic growth and the threat of asset bubbles and financial crises of their own . So , a more orderly way to induce current-account deficits without risking disruption of emerging economies ’ growth should be considered . One solution ( already advocated by some , including me , and adopted to some extent by a few countries ) is broader use of capital-account regulations . Surprisingly , however , this issue has been entirely absent from current global debates on financial reform . Fortunately , the IMF opened the door to discussion of this issue in a recent staff position paper . Equally important , a desirable global scenario is possibly one in which most developing countries run current-account deficits . But this requires major reforms in the global financial system to reduce the vulnerabilities that such deficits generated in the past , and that were reflected in major financial crises in the developing world . These past crises gave rise to a form of “ self-insurance ” among developing countries through reserve accumulation . This helped many of them weather the recent storm , but it also contributed to global payments imbalances . Recent IMF reforms are just a step in the direction of trying to create better financial instruments to help these countries . It is essential , in particular , to create reliable large-scale financing for developing countries during crises , through a mix of counter-cyclical issuance of SDRs and emergency financing without onerous conditions . </text>
<text id="syndicate/france-and-germany-must-act-in-iraq">
France and Germany Must Act in Iraq Next week , President Bush , President Chirac , and Chancellor Schroeder will meet on the cliffs of Normandy to mark the 60th anniversary of the D-Day invasions that led to the liberation of Europe . They should also seize the moment to liberate themselves from the bitterness that has divided the Atlantic Alliance over the Iraq War , argue Pierre Lellouche and Christoph Bertram . When the United States launched the war against Saddam Hussein 's Iraq , France and Germany rightly warned that the invasion could well end up worsening instability in the Middle East and increase the threat of radical Islamic terror . But now that America and its coalition have proven themselves to be incapable of bringing stability to Iraq on their own , the French and German governments can no longer rest and smugly say , " I told you so , " as the situation deteriorates even further . Both governments must now become seriously and fully engaged in what must now be a united Western effort . Of course , it would be best for everyone - France and Germany included - if the current US-led coalition were to succeed and Iraq could turn into a pillar of Middle East stability and modernization . Yet , however desirable this outcome , it is no longer likely ( if it ever was ) . Internal stability and economic recovery continue to be elusive , with the specter of civil war hovering ever closer . A divided Iraq at war with itself would be a disaster for the region , for America 's international credibility and authority , and for transatlantic relations . In an already fragile region , a major Arab country like Iraq would most likely prompt interventions by its nervous neighbors - of which there is no shortage - if it turns into a failed state . Instead of the rule of law , there would be the law of the mafia , of terrorist groups , and of tribal militias . Many of them are already in place . Instead of moving toward modernization and development , the region would be confirmed as a cockpit for conflict , a threat to itself and to the world beyond . Were the US forced to withdraw in failure , Islamic terrorist groups would claim a historic victory , promising more bloodshed for the West . Moreover , America might also once again retreat bitterly into isolationism , blaming her failure on the UN and on disloyal European allies . So the stakes are high in Iraq , for Europeans no less than for Americans . That is why it is time that even those who have been most skeptical about US policy in Iraq start to do something about it . Both Jacques Chirac and Gerhard Schroeder have repeatedly pronounced that what happens in Iraq is a strategic challenge to their countries . Yet their actions in response to this insight have been modest . The recent turmoil in Iraq has , on the contrary , strengthened those in both capitals who argue that there is now even less reason to get involved on the ground . At the very least , France and Germany are demanding that the Bush administration openly admit to its failure and the need for help . Yet not only is such a demand naïve , with the Bush team battling for re-election , it is not at all certain that most of America 's European allies would heed a US call for solidarity if one were issued . Confronting the threat that an unsettled Iraq poses to Europe and to the transatlantic relationship implies stopping these tactical games . The passing of authority in Iraq from the US-led coalition to an Iraqi government and the need for a much stronger UN role now offers the chance and imposes the need for everyone to stop posturing and get serious . For their part , EU governments should provide the UN - on whose involvement in Iraq they have long insisted - with the protective force it needs to prepare nation-wide elections in Iraq later in the year , and ask others to join . A UN staff protected by US marines simply cannot do that job . With the consent of both the US and Iraq 's new leadership , EU governments should also offer to organize an international conference uniting all those with a stake in Iraqi stability , including Iraq 's neighbors , to work out a strategy and commit resources in order to save Iraq from slipping into protracted turmoil . If Europe is to act , France and Germany must lead . Precisely because they opposed the war , they are now the only countries that can restore Europe 's unity of action in promoting stability . France professes to bearing a special responsibility for international order , but so does Germany ; only a few weeks ago , Chancellor Schroeder based his claim to a permanent German seat in the UN Security Council on Germany 's readiness to shoulder such responsibilities . Of all the crisis regions in the world today , instability in Iraq constitutes the greatest challenge to international order . But France and Germany can also block European responsibility for international order and for solidarity with a US facing possible defeat in Iraq . The decision is theirs . It is time for both to realize that the consequences of inaction will be no less severe for the region than for the Atlantic relationship . </text>
<text id="syndicate/france-s-fourth-moment">
France’s Fourth Moment KYIV – Since World War II’s end , France has consistently risen to the challenge of restructuring Europe in times of crisis . In doing so , France became the catalyst not only for building European unity , but also for creating the prosperity that marked Europe’s post-war decades – a prosperity now under threat because of the global financial and economic crisis . If we are to see a stronger Europe emerge from today’s challenges , visionary French leadership is needed again . The first moment when decisive French leadership began to unify Europe came when Robert Schuman and Konrad Adenauer created the European Coal and Steel Community . By rooting the then West Germany in the political , economic , and social fabric of the West , that step heralded the start of Germany’s rebirth and economic miracle . The second time that France consolidated Europe’s internal architecture came in 1983 , during the debates over the stationing of American cruise and Pershing missiles in Germany to counter the deployment of SS20 missiles by the Soviet Union . France’s resolve to stand with Germany helped prevent Germany from drifting into a dangerous neutrality that would have shaken the European community to its core . The third moment came after the Berlin Wall fell , and it was feared that an enlarged Germany might destabilize Europe . After initially trying to delay reunification , France embraced it , in exchange for Germany’s reaffirming its commitment to European unity and Franco-German leadership of the European community . As a result , Germany bound itself to the idea of “ ever closer union ” even more definitively by pledging to join the common European currency , the euro . It is now urgent that the insights that have animated Franco-German relations be applied to all of Central and Eastern Europe . Only by securing the European identity of this entire region , and by anchoring the growing Russo-German relationship in a European context , can the European Union continue on its path of stability and prosperity . Only by reinforcing open trading and financial relations across Europe can we hope to subdue today’s crisis . For it is in no European country’s interest , or in the interest of the EU as a whole , that Central and Eastern Europe feel that they have been cast adrift or that Germany and Russia fixate on each other in this time of crisis . As with Germany in the 1950’s , the nature of Russia’s links with its immediate neighbors is turning out to be the defining factor in shaping the country’s international image . Many observers regard these relations as a signal not just to the region , but to the rest of the world , of the sort of power that Russia wishes to be . The issue is partly one of “ internationalism ” itself . In contrast to Europe – with its close-knit network of multilateral organizations through which states formulate and conduct much of their foreign policies – Russia is not accustomed to intensively cooperative international procedures . But keeping Russia at arm’s length from Europe has only strengthened the sense of isolation that many Russians feel , tempting them to define the country’s interests in ways that are irreconcilable with those of Europe . It has also heightened Russia’s desire to construct a special , bilateral Russo-German relationship heedless of the context of the EU . European history during the past 60 years makes clear that the most promising approach to meeting the challenge of national reconciliation and stability is not to focus on specific contingencies , but to establish procedures that encourage orderly change . A singular vision has always animated this process : animosity between neighbors must not be allowed to fester , and the rule of law must reign not just within countries , but also between them . To believe that such a vision can work for Russia , Ukraine , and Europe is not wishful thinking , but rests on the successful experience of France and Germany in promoting amity . Indeed , the existence or absence of a framework of cooperation often determines whether a dispute mutates into a crisis . Such cooperative frameworks seek to reconcile national independence with regional interdependence , focusing political leaders ’ minds on prosperity for their people rather than on gaining unilateral advantages that ultimately impoverish and unsettle everyone . The first lesson of European unity is that times of crisis must draw the continent closer together , not divide it through protectionism , competitive devaluations , and expulsions of immigrants . Similarly , the euro must not be allowed to become an Iron Curtain that consigns non-members to a high-risk zone where investors dare not venture . For Ukraine , Europe can help by embracing the free-trade agreement that we are now negotiating . Coupled with our successful membership in the World Trade Organization , Ukraine would stand to benefit when world and European trade begins to recover . Europe can also consider using various stabilization funds to help our economy through the crisis that we are all enduring . I do not ask for these things out of a narrow concern for my country’s health . Just as the US Federal Reserve has engaged in credit and currency swaps with Brazil , Mexico , Singapore , and South Korea and other countries to ease their access to the dollars they need , the European Central Bank must offer such swap arrangements to Europe’s non-euro countries in order for trade and production processes to continue . Yes , these are dark times , and all politicians want to protect their voters . But Europe’s greatest postwar leaders understood that keeping the wider view of Europe in mind is the best way to achieve this goal . As at so many times before , now – with all of our economies in peril – is a moment for decisive French leadership . </text>
<text id="syndicate/fran-ois-hollande-s-wrong-idea-of-france-by-brigitte-granville">
François Hollande’s Wrong Idea of France LONDON – France’s new president , François Hollande , has achieved a remarkable series of political victories – at home and in Europe – since his election in May . Unfortunately , his streak of success will inevitably call forth an economic reckoning that will shock France’s apparently unsuspecting citizens and doom the French elite’s approach to the “ construction of Europe . ” Since winning the presidency , Hollande has won a parliamentary majority and pushed Germany toward accepting joint liability for eurozone countries ’ debts . But forebodings of crisis have become widespread in French business and economic circles . But the real danger – which even Hollande’s sternest critics may be underestimating – is not so much his individual policy failings ( serious though they may be ) as his approach to the twin challenges posed by France’s economic imbalances and the eurozone crisis . On each front separately , he might manage to muddle through ; together , they look likely to cement France’s loss of competitiveness . Declining competitiveness is best captured in a single indicator : unit labor costs , which measure the average cost of labor per unit of output . In a monetary union , discrepancies in wage growth relative to productivity gains – that is , unit labor costs – will result in a chronic accumulation of trade surpluses or deficits . Since the euro’s introduction , unit labor costs have risen dramatically faster in France than they have in Germany . According to Eurostat data published in April 2011 , the hourly labor cost in France was €34.2 , compared to €30.1 in Germany – and nearly 20 % higher than the eurozone average of €27.6 . France’s current-account deficit has risen to more than 2 % of GDP , even as its economic growth has ground to a halt . The high cost of employing workers in France is due not so much to wages and benefits as it is to payroll taxes levied on employers . The entire French political class has long delighted in taxing labor to finance the country’s generous welfare provisions , thus avoiding excessively high taxation of individuals ’ income and consumption – though that is about to come to an end as Hollande intends to slap a 75 % tax on incomes above €1 million . This is a version of the fallacy that taxing companies ( “ capital ” ) spares ordinary people ( “ workers ” ) . Of course , such taxes on firms are always passed on to households – usually through straightforward price hikes , and , in France , also through unemployment . High tax rates on labor – together with rigid regulation of hiring and firing – make employers extremely reluctant to recruit workers . As a result , France has had chronic long-term unemployment – forecast to reach 10.5 % by 2013 – for many years . Hollande’s predecessor , Nicolas Sarkozy , tried to address this problem . He exempted voluntary overtime pay from employment tax and shifted some of the burden of labor taxation onto consumption ( via a hike in VAT ) . But Hollande quickly reversed both of these reforms . The repeal of the tax break on overtime reflects another economic fallacy to which French Socialist politicians are deeply attached : the “ lump of labor ” notion that underlay the most disastrous of their economic policies – the 35-hour workweek , introduced in 2000. The idea behind the policy is that demand for labor is a constant , and that this fixed number of aggregate working hours required by employers to meet final demand can be spread more evenly among workers to reduce unemployment . Such measures , designed to create jobs by freeing up work hours , are futile at best , and are often detrimental . French Socialists should recall their school physics lesson about communicating vessels : when a homogeneous liquid is poured into a set of connected containers , it settles at the same level in all of them , regardless of their shape and volume . Generating more “ liquid ” ( jobs ) requires not discouraging the entrepreneurs on whose activities sustainable job creation ultimately depends . The effect of fiscal and regulatory pressure on employment is to encourage French firms to invest and hire outside France . Hollande’s apologists praise his gradualist and consensual approach to addressing the economy’s structural distortions . They argue that his penchant for setting up consultative commissions is the best way to forge the consensus required for structural reform , whereas Sarkozy’s combative style was counterproductive . Even banishing skepticism and assuming that Hollande could over time persuade his supporters to embrace competitiveness-boosting policies , the eurozone crisis is denying France the time that such gradualism requires . A simple , effective way to buy time would be to abandon the euro and restore competitiveness through a devalued national currency . But this expedient is incompatible with mainstream French politicians ’ devotion to the “ European project , ” which amounts to a projection of French soft power ; indeed , building Europe lies at the heart of the French establishment’s version of what Charles de Gaulle used to call “ a certain idea of France . ” For mainstream French politicians , renouncing the European project to buy the time required to restore competitiveness is as unthinkable as is the logical alternative : an all-out push for full European political union . This would reestablish monetary sovereignty and create a normal central bank ( like the Federal Reserve or the Bank of England ) at the European level . But it would also mean abandoning France’s republic in favor of a federal European government – anathema to that “ certain idea of France . ” The combination of gradualism ( on the most generous interpretation ) in domestic economic reform and the paralyzing effect of the eurozone crisis will lead to a massive shock . Remaining in a currency union with the much more competitive German economy will require wrenching and rapid reforms , for which Hollande’s tepid approach will fail to prepare the complacent French . The result will be even more support than was seen in last April’s presidential election for extremist political parties that reject both Europe and competitive market capitalism . </text>
<text id="syndicate/hollywood-s-favorite-villains">
Hollywood’s Favorite Villains Once upon a time , Cold War enemies , white supremacists , and evil geniuses reigned supreme as Hollywood’s favorite bad guys . No more . Today , it is multinational corporations that are increasingly being cast as the über-villains of our globalized world . For all their subliminal paid promotions and subtle product placements , corporations are getting drubbed in the main story lines of our popular culture . This treatment goes far beyond documentaries like Michael Moore’s polemical Fahrenheit 9/11 or The Corporation , an earnest if somewhat paranoid portrayal of multinational companies ’ role in globalization . It extends to mainstream hits like The Constant Gardener , in which the idealistic protagonists do battle with a malicious global pharmaceutical company that is bent on exploiting Africa’s misery to test experimental drugs . To be sure , sociopathic corporations have populated books and films for more than a century . But corporate villains , typically multinational companies , have never been so ubiquitous as today . Is it unfair ? Most corporations , after all , are merely convenient mechanisms for ensuring that scarce global capital is used at maximum efficiency , to the benefit of all . Are famously liberal Hollywood film directors spending too much time going to anti-globalization rallies ? Perhaps . But I would submit that Hollywood’s misgivings , however untutored , represent only the tip of a growing iceberg of resentment against the perceived injustices of globalization . The simple truth is that corporations represent capital , and capital – in the form of factories , equipment , machines , money , and even houses – has been the single biggest winner in the modern era of globalization . Corporate profits are bursting at the seams of investors ’ expectations in virtually every corner of the world . Even in moribund economies like Germany and Italy , where employment security is vanishing , corporations are swimming in cash . This phenomenon comes as no surprise to economists . Add two billion Indian and Chinese workers to the global labor force , and the value of other means of production – particularly capital and commodities ( for example , gold and oil ) – is bound to go up . And so it has , with capitalists everywhere gaining an ever larger share of the economic pie . ( In theory , capitalists in labor-abundant China and India could end up as losers , but in practice they , too , have benefited thanks to their governments ’ success in simultaneously liberalizing and globalizing . ) Many policymakers seem to be under the impression that surging profits are a purely cyclical phenomenon , as economies continue to grow out from the depths of the 2001 recession . Wait a bit , they predict , and wages will fully catch up later in the cycle . Not likely . Capital’s piece of the pie has been getting bigger for more than 20 years , and the trend looks set to continue . Indeed , corporations ’ growing share of income has been a major driver behind the long , if uneven , bull market in stocks that began in the early 1990’s . At the same time , inflation-adjusted wages for rich-country unskilled workers have barely budged over the last two decades . Some of these trends also have to do with the nature of modern technological change , which seems to favor capital and skilled workers disproportionately . But , regardless of their cause , rapidly growing inequalities are a powerful force for instability everywhere , from wealthy America to rapidly growing China to reform-challenged Europe . “ A rising tide lifts all boats , ” conservatives like to say . Fine , but what happens to people , like the poor of hurricane-struck New Orleans , who don’t own boats ? Growing inequality would not be such a problem if governments could simply raise taxes on the rich and strengthen subsidies to the poor . Unfortunately , any country that taxes capital too aggressively will only succeed in chasing it to regions where the tax burden is lighter . In a globalized world , national governments ’ ability to tax potentially mobile factors of production is sharply circumscribed . The same mechanism that pours profits into the pockets of global corporations also prevents governments from claiming a larger share of the spoils . Unfortunately , the long-term trend towards ever-lower income shares for unskilled workers is likely to continue over the coming decades , as modern technology permeates the globe , and as emerging markets like China , India , Brazil , and Eastern Europe continue to integrate into global production . This is not to say that unskilled workers are actually being made worse off by globalization in absolute terms ; the vast majority are actually breaking even or better . But unskilled workers ’ incomes are not keeping pace with overall economic growth , and the resulting social strains are a ticking bomb . If so , then Hollywood’s cartoon-like caricatures of evil multinational corporations may some day seize mainstream consciousness , leading to political upheavals that shatter today’s social contract . That won’t be good for profits , or for the poor . Governments – and corporations – must find better ways to provide equal opportunity through improved education , broader financial markets , and other channels . Otherwise , globalization’s storyline may not proceed according to the script . </text>
<text id="syndicate/japanese-lessons-for-china-s-currency">
Japanese Lessons for China’s Currency SHANGHAI – The question of how much China’s currency should appreciate to rebalance its trade has become a global hot-button issue . But the answers have been all over the map , with some finding that the yuan is not undervalued at all , while others argue that it should appreciate against the dollar by more than 30 % . Clearly , there must be major differences in the macroeconomic models used to produce such a wide range of estimates . But the one thing about which everyone seems to agree is the theoretically and empirically unjustified assumption that an equilibrium exchange rate actually exists . The theoretical problem is simple : a country’s trade balance depends on a lot more than the value of its currency in the foreign exchange markets . Interest rates , employment , aggregate demand , and technological and institutional innovation all play a role . As the economist Joan Robinson pointed out in 1947 , just about any exchange rate will be the equilibrium value for some combination of these other variables . The equilibrium exchange rate , she famously argued , is a chimera . Not surprisingly , the empirical evidence that trade imbalances can be resolved through exchange rate changes alone is unconvincing . In the case of China , the most useful precedent is probably that of Japan in the period from the end of the Bretton Woods fixed exchange-rate regime in August , 1971 , to the collapse of its “ bubble economy ” in 1990. During that period , the yen’s value more than doubled against the dollar , rising from its original fixed rate of 360 to 144 at the end of 1989. Yet , even as Japan’s exports became much more expensive in dollar terms and its imports much cheaper in yen , its trade surplus rose from $6 billion in 1971 to $80 billion in 1989. For two decades , expectations that an appreciating yen would restore external balance were repeatedly disappointed . At the time of the December 1971 Smithsonian Agreement , 308 yen to the dollar was supposed to do the trick . Fourteen years later , during the Plaza Accord negotiations , the Japanese argued for an eventual level of 200-210 , while some US Treasury officials thought the final target should be as high as 165-170 . At the end of the 1980’s , some analysts thought rates as high as 120 might finally produce the long-sought equilibrium . Yet , as Japan entered the “ lost decade ” of the 1990’s , its exports continued to grow faster than its imports . Japan’s trade surplus peaked only in 1994 , at $144 billion , just a few months before the yen’s April 1995 all-time high of 79.75 . In retrospect , it is easy to see why none of these supposed equilibrium exchange rates delivered external balance . As the yen appreciated , Japan responded not by exporting less but by improving productivity and quality control through plant and equipment investment and innovations in factory management , making possible rapid growth in exports of high-value-added products . Exchange-rate equilibrium calculations from the 1970’s and 1980’s , which could only have been based on the export sector’s contemporary structure , naturally would have little relevance subsequently . The same is true of calculations at the beginning of the 1990’s , which would have forecast Japanese import growth based on extrapolations from the high GDP growth rates of the previous 40 years rather than on the decade of stagnation that ensued . In China , changes in the export sector’s structure similar to those observed in Japan are now taking place . These changes are likely to make today’s attempts to find an equilibrium yuan-dollar exchange rate seem just as chimerical in hindsight as previous calculations of the yen-dollar equilibrium rate . For the 30 years since the beginning of China’s economic reforms , Chinese industry has achieved impressive efficiency gains by adopting new technologies and realizing economies of scale , leading to a huge expansion in locally made products suitable for export . While an appreciating currency might eventually drive labor-intensive manufacturers out of business , if Japan’s economic history is any guide , they are likely to be replaced by producers of things like ships , machine tools , semiconductors , and doubtless new products yet to be invented . The equilibrium yuan-dollar rate is a chimera not because China’s trade could never be balanced , but because the exchange rate alone does not determine equilibrium . The structure of the entire economy matters , too . As this is constantly evolving in unpredictable ways , there is no reason to expect that the assumptions underlying any particular macroeconomic model will ever remain valid long enough for its steady-state solution to be achieved in practice . </text>
<text id="syndicate/kennedy--khrushchev--the-cuban-missile-crisis-and-nuclear-deterrence-from-cuba-to-iran-by-joseph-s--nye">
The Cuban Missile Crisis at 50 CAMBRIDGE – This month marks the 50th anniversary of the Cuban missile crisis – those 13 days in October 1962 that were probably the closest the world has come to a major nuclear war . President John F. Kennedy had publicly warned the Soviet Union [ 178]not to introduce offensive missiles into Cuba . But Soviet leader Nikita Khrushchev decided to cross Kennedy’s red line surreptitiously and confront the Americans with a fait accompli . When an American surveillance plane discovered the missiles , the crisis erupted . Some of Kennedy’s advisers urged an air strike and invasion to destroy the missiles . Kennedy mobilized troops , but also bought time by [ 179]announcing a naval blockade of Cuba . The crisis subsided when Soviet ships carrying additional missiles turned back , and Khrushchev agreed to remove the existing missiles from the island . As then US Secretary of State Dean Rusk put it : “ We were eyeball to eyeball , and I think the other fellow just blinked . ” At first glance , this was a rational and predictable outcome . The United States had a 17-to-1 advantage in nuclear weaponry . The Soviets were simply outgunned . And yet the US did not preemptively attack Soviet missile sites , which were relatively vulnerable , because the risk that even one or two of the Soviet missiles would be fired at an American city was enough to deter a first strike . In addition , both Kennedy and Khrushchev feared that rational strategies and careful calculation might spin out of control . Khrushchev offered a vivid metaphor in one of his letters to Kennedy : [ 180]“We and you ought not now to pull on the ends of the rope in which you have tied the knot of war . ” In 1987 , I was part of a group of scholars that met at Harvard University with Kennedy’s surviving advisers to study the crisis . Robert McNamara , Kennedy’s secretary of defense , said he became more cautious as the crisis unfolded . At the time , he thought that the probability of nuclear war resulting from the crisis might have been one in 50 ( though he rated the risk much higher after he learned in the 1990’s that the Soviets had already delivered nuclear weapons to Cuba ) . Douglas Dillon , Kennedy’s treasury secretary , said he thought that the risk of nuclear war had been about zero . He did not see how the situation could possibly have escalated to nuclear war , and thus had been willing to push the Soviets harder and to take more risks than McNamara was . General Maxwell Taylor , the chairman of the Joint Chiefs of Staff , also believed that the risk of nuclear war was low , and he complained that the US let the Soviet Union off too easily . He felt that the Americans should have removed the Castro regime . But the risks of losing control of the situation weighed heavily on Kennedy , too , which is why he took a more prudent position than some of his advisers would have liked . The moral of the story is that a little nuclear deterrence goes a long way . Nonetheless , there are still ambiguities about the missile crisis that make it difficult to attribute the outcome entirely to the nuclear component . The public consensus was that the US won . But how much the US won , and why it won , is hard to determine . There are at least two possible explanations of the outcome , in addition to Soviet acquiescence to America’s superior nuclear firepower . One focuses on the importance of the two superpowers ’ relative stakes in the crisis : the US not only had a greater stake in neighboring Cuba than the Soviets did , but could also bring conventional forces to bear . The naval blockade and the possibility of a US invasion strengthened the credibility of American deterrence , placing the psychological burden on the Soviets . The other explanation questions the very premise that the Cuban missile crisis was an outright US victory . The Americans had three options : a “ shoot-out ” ( bomb the missile sites ) ; a “ squeeze out ” ( blockade Cuba to convince the Soviets to withdraw the missiles ) ; and a “ buyout ” ( give the Soviets something they want ) . For a long time , the participants said little about the buyout aspects of the solution . But subsequent evidence suggests that a quiet US promise to remove its obsolete missiles from Turkey and Italy was probably more important than was thought at the time ( the US also gave a public assurance that it would not invade Cuba ) . We can conclude that nuclear deterrence mattered in the crisis , and that the nuclear dimension certainly figured in Kennedy’s thinking . But it was not the ratio of nuclear weapons that mattered so much as the fear that even a few nuclear weapons would wreak intolerable devastation . How real were these risks ? On October 27 , 1962 , just after Soviet forces in Cuba shot down a US surveillance plane ( killing the pilot ) , a similar plane taking routine air samples near Alaska inadvertently violated Soviet air space in Siberia . Fortunately , it was not shot down . But , even more serious , unbeknownst to the Americans , Soviet forces in Cuba had been instructed to repel a US invasion , and had been authorized to use their tactical nuclear weapons to do so . It is hard to imagine that such a nuclear attack would have remained merely tactical . Kenneth Waltz , an American scholar , recently published an article entitled [ 181]“Why Iran Should Get the Bomb . ” In a rational , predictable world , such an outcome might produce stability . In the real world , the Cuban missile crisis suggests that it might not . As McNamara put it , “ We lucked out . ” </text>
<text id="syndicate/merkel-in-china-by-sanjaya-baru">
Merkel in China NEW DELHI – German Chancellor Angela Merkel’s second visit to China in a year comes against the backdrop of dire forecasts of a difficult September for the eurozone . Mindful of such concerns and persistent pessimism in global financial markets , Merkel is now taking bold political initiatives at home and overseas . Indeed , her China trip should be seen as an effort to assert leadership across the eurozone . At home , Merkel recently sent out a clear message to her critics that Germany must pay a price for eurozone leadership . She cautioned her colleagues against loose talk about a “ Grexit ” – Greece’s exit from the eurozone – and assured visiting Greek Prime Minister Antonis Samaras that Germany remained committed to his country’s membership of the eurozone . While it required courage to take such a tough stance , doing so helped to bolster her position at home and throughout the eurozone . There is now no doubt that Merkel is willing to commit Germany to the cause of preserving both the European Union and the eurozone , and that she will work to achieve that goal . If she succeeds , she will emerge as the first great European leader of the twenty-first century . This stance suggests that Merkel appreciates the essence of the argument that François Heisbourg , the chairman of the council of the International Institute for Strategic Studies ( IISS ) , advanced in a [ 179]recent essay : a federal arrangement does not fall apart because of problems at the periphery but because of “ failure at the heart of the system . ” Merkel has come to terms with Germany’s position – and that it must act to preserve the unity of the whole . The eurozone ( and probably the EU ) cannot be saved in Greece or Finland if it cannot be saved in Germany . Committing Germany to that objective is precisely what Merkel has defined as her political goal for the rest of her term in office . Within hours of declaring her leadership at home , Merkel announced her visit to Beijing . The timing was highly significant : Merkel goes to China , the emerging global power , after declaring her own commitment to strengthening the eurozone , if not the EU as a whole , as a credible pole of an emerging multipolar world . In recognition of Germany’s growing significance , Chinese Prime Minister Wen Jiabao welcomed a delegation of German business leaders to Beijing this May with the words : “ Stronger Chinese-German cooperation is good for the two countries , good for China-EU relations , and good for world prosperity and stability . The strategic dimension of Chinese-German relations , therefore , can only be strengthened , not weakened . ” There are several dimensions to the bilateral relationship . Germany needs both China’s markets and the funds that its government can deploy to purchase German and European bonds . It also has more than 7,500 enterprises operating in China , with gross investment totaling $18.5 billion . Moreover , Germany has sold $15 billion worth of technology to China , and bilateral trade hit a high of $169 billion in 2011 , accounting for 30 % of total China-EU trade . The two countries have set a bilateral trade target of $280 billion for 2015. Trade , however , is not the only immediate concern . Far more important , especially for Germany , is to get China to invest in and hold its bonds . In mid-August , at the First IISS Oberoi Lecture in Mumbai , Klaus Regling , the CEO of the European Financial Stability Facility , underscored the importance of Chinese demand for EFSF bonds and China’s role in stabilizing the eurozone . Regling also revealed that there is now increased and frequent coordination between monetary authorities in the United States , Germany , and China , drawing attention to the fact that the “ old Triad ” of the dollar , euro , and yen may now have been replaced by a “ new Triad ” of the dollar , euro , and Chinese renminbi . While Regling spoke of an emerging “ multipolar monetary system , ” his remarks clearly indicated the functioning of a “ tripolar ” system . Lying at two ends of that monetary triangle , the eurozone and China have acquired a geopolitical stake in helping each other . [ 180]Hans Kundnani and Jonas Parello-Plesner of the European Council on Foreign Relations view the China-Germany relationship as one that will shape the overall China-EU relationship . Like many strategic analysts , they worry whether Germany , in pursuit of purely short-term economic interests , might forsake long-term strategic interests and concerns about human rights , environmental problems , press freedoms , and other political and geopolitical issues . It is significant , therefore , that German political parties have emphasized the need for Merkel to raise such matters in her talks with Chinese leaders . However , Merkel’s focus may well remain on trade , investment , and currency flows . After all , unless she can turn around the eurozone , her rising profile at home and in Europe could easily wither . What this means is that to secure German leadership of Europe , and her own leadership of Germany , Merkel has to “ walk on two legs , ” so to speak . She needs to balance both geo-economic and geopolitical factors – both interests and values – in advancing Germany’s relations with China . </text>
<text id="syndicate/ms--europe-or-frau-germania-">
Ms. Europe or Frau Germania ? BERLIN – Just what is the matter with Angela Merkel ? Only a short while ago , she was celebrated as “ Ms. Europe ” ; now , she increasingly gives the impression of being Frau Germania . Instead of providing resolute leadership in the global financial and economic crisis , the European Union’s largest economy is withdrawing into its shell . Germany has always been the motor of European integration , in accordance with its political and economic interests . Every post-World War II government has always been willing to harness Germany’s financial strength to further that aim , i. e. , to foot the bill for Europe . The motto was simple : Germany gives and profits in turn . Should Germany spurn the first part of this formula , the European project would suffer serious damage – and so will German national interests . Yet this is the direction in which Chancellor Merkel seems to be heading . Indeed , in the wake of the Greek crisis , Merkel spoke publicly of the need to be able to exclude eurozone members that do not play by the rules . Does she seriously believe that the euro and the EU would survive such punitive action ? Instead of ideas for strengthening the solidarity and stability of the eurozone , absurd proposals are floated in Berlin . The idea that Germany would show financial solidarity with weakened eurozone members only if they accept draconian stabilization measures is similarly unrealistic . Such measures would only exacerbate deflation in these countries , which are the most important markets for German exports . What is essential is the right combination of stability and financial aid , even if the latter is unpopular with the German public . To be sure , eurozone member states also needed the courage to respond to the crisis of confidence confronting the common currency with concerted action for tighter control of national budgets and improved cooperation . As a first step , however , Greece must be given help , through the financial solidarity of EU governments . On the other hand , foreign criticism of Germany for running a current-account surplus similar to China’s is unfounded . Such criticism disregards two important differences : first , unlike China , Germany , as a member of the eurozone , cannot undervalue its currency . Second , German “ exports ” go mainly to the EU . To demand that Germany should stop increasing its competitiveness , or even reduce it , is simply bizarre . From 1990 to 2005 , Germany struggled with high unemployment , slow growth , and low competitiveness , and Europe’s economy suffered as a result . Recovery was difficult to achieve , but the Common Market has profited from Germany’s renewed competitiveness . The crucial point is not the German economy’s renewed strength , but whether Germany will use this strength in Europe’s interest or its own . Unfortunately , Merkel seems to have decided on the second option , because it entails fewer domestic political risks . The responsibility for the current conflict within the EU rests with eurozone governments , but primarily with Germany and France , the zone’s two strongest economies . Rather than lead , the Franco-German couple is constantly , and publicly , at each other’s throats . While today’s quarrel is about who should pay for restructuring Greece , the real issue is the latent distrust between the two partners , which carries the danger of a permanent estrangement . From the German point of view , France only wants to solve its national budget and debt problems at Germany’s expense , simultaneously weakening Germany’s competitiveness . The French government , on the other hand , fears that the Germans ’ commitment to eurozone stability is a ploy aimed at pushing France into a corner and leaving it behind economically . Since the global crisis erupted in the fall of 2008 , both Merkel and French President Nicolas Sarkozy have been faced with threats that their political majorities might disappear if they put aside their national interests in favor of a European compromise . France has no chance of meeting Germany’s stabilization objectives unless Sarkozy wants to forget about re-election . Merkel would cause outrage among her conservative voters ( as well as court defeat at the German Constitutional Court in Karlsruhe ) should she agree to a more free-spending policy , including any direct financial assistance for Greece . Soon , Helmut Kohl , Europe’s Honorary Citizen and Germany’s Chancellor of Reunification , will be celebrating his 80th birthday . As is usual on such occasions , there will be a lot of lofty speeches about Europe . But , in view of the current situation , we can safely ignore these . What Europe needs in this serious crisis are statesmen and women of Kohl’s caliber , not domestic politicians ! As the big economic and political winner of the eurozone , Germany , in particular , cannot let a serious crisis of confidence threaten the European project , because nearly two-thirds of its exports go to the EU . Ever since the collapse of Lehman Brothers in September 2008 , it has been clear that the global crisis would challenge the EU and the euro , because Europe lacks a common government and fiscal policy . Coordination within the eurozone – above all between its most important economies , France and Germany – is therefore all the more important . It is in Berlin and Paris , first and foremost , that the crisis-management strategy for the eurozone must be decided . </text>
<text id="syndicate/reshaping-china-s-government-services-supply-chain-by-andrew-sheng-and-geng-xiao">
Reshaping China’s Government-Services Supply Chain HONG KONG – A supply chain links producers and consumers through a complex web of outsourcing contracts , with market leaders in any product category orchestrating activities to produce components profitably along its entire length . For example , an iPad is designed in California – with chips from Japan and parts from South Korea , Taiwan , and elsewhere – and finally assembled in China for global distribution . But the ecology of supply chains is not as straightforward as this depiction suggests . Most studies of supply chains examine their operations , but take for granted governments ’ critical enabling role . Because the non-delivery of government services would inhibit the proper functioning of business supply chains , understanding how the government-services supply chain works is vital . For example , the Chinese economy’s transformation was enabled by the synchronized delivery of government services to support the logistics , finance , and manufacturing supply chains . This was a complex task that involved different levels of the Chinese government and many state agencies and ministries . A supply chain is not only a network for production , but also a live feedback mechanism , continually adjusting itself to ensure that production is coordinated and aligned efficiently to meet changes in global consumers ’ demand , tastes , and preferences . Technology has enabled faster , more efficient “ just-in-time ” delivery , taking full advantage of specialization and knowledge-sharing on a global scale . As Apple has discovered , the winner in orchestrating a supply chain emerges with the lowest global costs and the largest market share . The iPad could not be produced at such high speed and low cost without the “ made-in-the-world ” supply chain based in China . In addition to the macro and micro aspects of economics , understanding supply chains in private and public goods and services in China requires [ 178]mezo ( institutional ) and meta ( system-wide ) analysis . When China initiated its economic reforms in 1979 , it inherited a centrally planned economy that lacked the institutional infrastructure for markets . Recognizing the need for systemic change , China allowed local governments in special economic zones and cities to experiment with modern legal , administrative , and logistical practices for export industries , including investments in utilities and transport . Intense competition among local governments for foreign investment led to dramatic improvements in the business environment , featuring economic incentives in areas like land , labor , and taxation , as well as speedy issuance of permits and approvals . City leaders were given responsibility for mobilizing local resources to generate GDP and employment , and they were ( and continue to be ) rewarded with promotion for good performance . The result was considerable innovation and institutionalization of local government services to support market activities , including outsourcing of expertise in infrastructure project design , administration , and operations to private and foreign consulting and design companies . To support China’s participation in global manufacturing supply chains , many local governments sold and dismantled their state-owned enterprises ( SOEs ) , enabling many new private firms to provide the services needed for an export-oriented , market-based economy . At the national level , the consolidation of SOEs and banks , and the modernization of their corporate governance via public listing on stock exchanges , enabled improved efficiency in regulated utilities , hard infrastructure , and resource sectors , complementing liberalization and market growth . The Chinese government-services supply chain also benefited substantially from a meritocratic human-resources tradition . Officials with substantial and successful experience in local governments , ministries , or SOEs were deliberately promoted and cross-posted to less-developed regions to spread know-how , technology , and best practices and processes . Indeed , China’s economic success reflects the depth of administrative and market experience embedded in the Chinese bureaucracy . Chinese mayors are CEOs of their local economy , responsible not only for market development , but also for social stability . The critical mechanism for orchestrating and implementing the complex web of contracts embodied in China’s government-services supply chain is the Five-Year Plan , which foresees vertical and horizontal integration of almost all Party and administrative agencies . The FYP uses broad objectives and targets for social and economic development , formed after extensive internal and public consultations . These mandates are translated by sub-national officials into projects and work plans , such as targets for reducing energy use per unit of GDP in order to address resource constraints and concern about climate change . China’s success in developing from scratch a modern government-services delivery system explains why many foreign investors find it much easier to deal with Chinese governments than those in other developing countries . The 12th FYP aims to shift China from an export-driven growth model toward a balanced economy that relies on domestic demand , while simultaneously addressing industrial transformation , social inequities , and environmental degradation . This implies more complex contracts that go beyond promoting markets , GDP growth , and employment to ensure inclusive , equitable , and high-quality government-services delivery . Implementation of these evolving social goals through local government agencies by specific officials is a daunting task that requires profound changes in roles and performance metrics . No one doubts that Chinese local governments play a much more active and intrusive role than their counterparts in the West , which implies an additional complicating factor . Local governments now face not only growing demands from the emerging middle class for greater transparency , competition , fairness , and access to opportunities , but also deepening conflicts between local interests and global rules . Orchestrating a complex government-services supply chain in a substantially open continental economy with 1.3 billion people and five levels of government is difficult enough using a simple GDP growth objective . Adapting the governance metric in a country of China’s size to an economy that is green , inclusive , and equitable presents a novel challenge in human history . The only precedent for such an achievement is China itself . </text>
<text id="syndicate/russia-s-ukrainian-path-to-the-future">
Russia’s Ukrainian Path to the Future MOSCOW – Russia and the West are losing each other yet again . The magnetic attraction and repulsion between the two has been going on for centuries . Indeed , historians have counted as many as 25 such cycles since the reign of Tsar Ivan III . In the past , however , Russia’s sharp anti-Western turns were reversed – usually out of simple necessity – after relations reached rock bottom . Not this time . On the contrary , the deterioration of the relationship nowadays has developed a momentum of its own . There are four reasons for this . First , the “ loss ” of the Cold War , and with it imperial and superpower status , has created a deep and so far unresolved crisis in the collective mentality of Russia’s political class . Russian leaders continue to perceive the West as a phantom enemy in opposition to which all the traditional mythologies of Russian foreign policy are being resurrected . Second , by the end of Vladimir Putin’s second presidential term , Russia’s modernizing dreams had been shattered . Modernization , indeed , simply turned out to be yet another redistribution of property to those on top , particularly those who came out of the St. Petersburg mayoral office and the Federal Security Bureau ( FSB ) . The image of the West as an enemy has become the only ideological excuse for Putin’s model of the corporate state . Third , the soaring price of oil has made the Kremlin’s inhabitants believe that they are all-powerful . Today’s Russia , which thinks of itself as a “ great energy state , ” laughs at its previous meager desire to catch up with little Portugal in terms of living standards . Finally , a series of Western mistakes and misfortunes , a crisis in transatlantic relations , lack of leadership , and the growing threat of Islamic fundamentalism ( in both the Middle East and Europe ) have led Russian leaders to believe that the West is a sinking ship , to be abandoned as soon as possible . While this belief unfortunately does have some validity , it requires one very important caveat : Russia is part of that ship . Russia can make advances to Hamas , Hezbollah , and Iran , and it can remind the Arab world that the Soviet Union helped it develop and offered it protection in the United Nations Security Council . But in the eyes of Islamic extremists , Russia is part of the “ Satanic ” West – indeed , its most vulnerable part . Thus , it is Russia , with a soaring birth rate among its Muslim citizens that is the most attractive for expansion and take-over . But Russia’s self-destructive confrontation with the West can be halted , and its centuries-old debate between Westernizers and the Slavophiles put to rest once and for all . This , however , will depend on Ukraine’s success on the path of European development it chose in the Orange Revolution of 2004-2005 . Ukraine does , indeed , present a threat , but not to Russia’s security , as Kremlin propagandists claim . The real threat is to the Putin model of a corporate , authoritarian state , unfriendly to the West . For the Kremlin’s occupants , it is a matter of life and death that countries that were once part of the Soviet Union but chose a different model of development – Ukraine being the chief example – should never become attractive to ordinary Russians . The example posed by the Baltic nations does not threaten the Kremlin much , because they are perceived as foreign to the Russian psyche . Indeed , in Soviet films , Baltic actors were usually cast in the roles of Nazi generals and American spies . Ukrainians , on the other hand , are close to us in their culture and mentality . If they made a different choice , why can’t we do the same ? Ukraine’s success will mark the political death of Putinism , that squalid philosophy of “ KGB Capitalists . ” If Ukraine succeeds in its European choice , if it is able to make it work , it can settle the question that has bedeviled Russian culture for centuries – Russia or the West ? So the best way to help Russia today is to support Ukraine’s claim that it belongs to Europe and its institutions . This will influence Russia 's political mentality more than anything else . For if Russia’s anti-Western paranoia continues and the Kremlin’s Eurasian fantasy of allying with China lasts another 10-15 years , Russia will end up seeing China swallowing its Far East and Siberia . Indeed , the weakened Russia that will be Putin’s legacy will then also lose the Northern Caucasus and the Volga region to their growing Muslim populations . The remaining Russian lands would then have no other choice but to attach themselves to Ukraine , which should by then have become a successful member of the European Union . After 1,000 years , Russia will have come full circle , returning to Kievan Rus after wandering on the roads of the Mongol hordes , empire , communism , and farcical Putinism . So Russia now has a choice : Ukrainian plan A or Ukrainian plan B. </text>
<text id="syndicate/should-europe-regulate-sovereign-wealth-funds-">
Should Europe Regulate Sovereign Wealth Funds ? WIESBADEN – State-controlled investments from overseas – so-called sovereign wealth funds ( SWFs ) – are now the subject of intense debate . The United States and France have made their fears known . In Germany , too , the debate centers on SWFs ’ political and economic significance for the country’s future . The problem has been exacerbated by the growing wealth of a number of countries , some of them formerly run by socialist or communist regimes . China , Russia , India , and the Gulf States have integrated their wealth into the global economy , to the immense benefit of world trade . The openness of Germany’s markets makes them especially attractive to global trade . This openness will not change , yet there are some who now call for new safety fences – in other words , for protection . For example , Russian investors are interested in taking a massive share in the German-French aerospace company EADS , which is already 5%-owned by a Russian bank . For many , this proposal has underscored a change in investors ’ behavior . But what , exactly , has changed ? SWFs have been around for years . Among the first countries to invest their considerable state-owned funds were Kuwait , the United Arab Emirates , Norway , and Singapore . They invested , and still invest , their budgetary surpluses worldwide in government bonds and state-owned enterprises . Industrialized countries like the US and Japan also have so-called “ reserve funds . ” Some of these funds are huge . In the UAE , the Abu Dhabi Investment Authority has estimated capital assets of $875 billion , making it probably the world’s largest state-owned investment company . In July 2007 , another rich UAE fund , Dubai International Capital , bought 3 % of EADS , after taking a stake of almost 2 % in the automotive manufacturer Daimler in January 2006. The Kuwait Investment Authority , also a state-owned fund , holds 7 % of Daimler . Singapore possesses two SWFs – Temasek-Holdings , with capital assets of roughly $100 billion , and the Government of Singapore Investment Corporation , with approximately $330 billion . Both funds are invested worldwide , including with the port operator PSA . Some funds are subject to considerable restrictions . Japan limits its state investments overseas to bonds , mostly those issued by the US . Until recently , China , which holds foreign currency reserves of more than $1.2 trillion ( the world’s largest ) , followed this policy , too . But a $3 billion investment by the Chinese SWF in the US investment firm Blackstone suggests a more worryingly strategic investment policy , one that appears aimed at advancing its own industrial interests in certain markets . Russia , where the line between state-controlled and privately controlled companies is often blurry , has demonstrated this strategy in Europe . Indeed , Russian investments in aerospace , telecommunications , and , most of all , in the energy sector , are the main source of concern for Germany . Are state-controlled investors now aiming primarily for strategic rather than purely financial returns ? Because SWFs ’ resources are so substantial , it is advisable to take precautions to avoid becoming a target of politically motivated market manipulation , or becoming economically and psychologically dependent on foreign governments ’ decisions . Most Western countries already have instruments to deter foreigners from making unwanted investments , not only in defense industries , but also in other sectors . But , while Germany’s Foreign Trade and Payments Act protects against takeovers in the defense industry ( though the law needs strengthening ) elsewhere Germany has no system for examining investments by SWFs that may be strategically motivated . The International Monetary Fund now encourages more transparency by foreign investors , and has plans for a code of conduct . The EU Commission also favors voluntary agreements aimed at strengthening transparency . Some SWFs now seem willing to engage in constructive dialogue . But assessing potential threats is not easy . Most investments are seen to benefit a country’s economy , if not its security . We in Germany need to distinguish one from the other . Bills have been drafted that amount to amendments to the Foreign Trade and Payments Act and related regulations . While strengthening the act , they seek to avoid affecting the openness of the German economy . Under proposed new legislation , if a foreign investment in a German company amounts to more than 25 % , an assessment can be made of whether public order or safety might be threatened . In my view , this would address the concerns about SWFs , while not generally impeding investment because it would apply only in a very few cases . Germany has also drawn up a plan to protect its industries that is modeled on US regulation . Since 1988 , the US president can prohibit foreign direct investment if it is seen as a threat to national security . An additional control was introduced last year , so now all direct investments in which a foreign government is involved are scrutinized by the Committee on Foreign Direct Investment . The principle of reciprocity should clearly apply to transnational investments . Germany is open to foreign investors , but in return we Germans demand the same market access abroad . Much remains to be done in this area even in Europe , as Germany’s own experiences with France and Spain demonstrate . In China and almost all Middle Eastern countries , foreigners are restricted to minority shareholdings and must contend with high import duties and numerous non-tariff barriers . Protective measures must remain the exception rather than the rule . We Europeans must accept the challenges of global competition , and transnational investments are the basis of thriving economic development at home and abroad . Nevertheless , we must not allow ourselves to become the passive economic playthings of other nations , or of big state-owned enterprises . We must play an active part in shaping globalization , and that means crafting appropriate rules . </text>
<text id="syndicate/the--browning--of-african-technology">
The “ Browning ” of African Technology Forget MIT . Hello , Tsing Hua University . For Clothilde Tingiri , a hot young programmer at Rwanda’s top software company , dreams of Beijing , not Cambridge , animate her ambitions . Desperate for more education , this fall she plans to attend graduate school for computer science – in China , not America . The Chinese are no strangers to Rwanda . Near Tingiri’s office , Rwanda’s largest telecom company , Rwandatel , is installing new wireless telephony equipment made by Huawei of Shenzen . Africa boasts the world’s fastest-growing market for wireless telephony , and Huawei – with offices in 14 African countries – is running away with the business , sending scores of engineers into the bush to bring a new generation of low-cost technology to some of the planet’s poorest people . Motivated by profit and market share rather than philanthropy , Huawei is outpacing American and European rivals through lower prices , faster action , and a greater willingness to work in difficult environments . According to Chris Lundh , the American chief of Rwandatel , “ That’s the way things work in Africa now . The Chinese do it all . ” Well , not quite . Across sub-Saharan Africa , engineers from India – armed with appropriate technologies honed in their home market – are also making their mark . India supplies Africa with computer-education courses , the most reliable water pumps , low-cost rice-milling equipment , and dozens of other technologies . The sudden influx of Chinese and Indian technologies represents the “ browning ” of African technology , which has long been the domain of “ white ” Americans and Europeans who want to apply their saving hand to African problems . “ It is a tectonic shift to the East with shattering implications , ” says Calestous Juma , a Kenyan professor at Harvard University who advises the African Union on technology policy . One big change is in education . There are roughly 2,000 African students in China , most of whom are pursuing engineering and science courses . According to Juma , that number is expected to double over the next two years , making China “ Africa’s leading destination for science and engineering education . ” The “ browning ” of technology in Africa is only in its infancy , but the shift is likely to accelerate . Chinese and Indian engineers hail from places that have much more in common with nitty-gritty Africa than comfortable Silicon Valley or Cambridge . Africa also offers a testing ground for Asian-designed technologies that are not yet ready for US or European markets . A good example is a solar-powered cooking stove from India , which has experimented with such stoves for decades . Wood-burning stoves are responsible for much of Africa’s deforestation , and , in many African cities , where wood accounts for the majority of cooking fuel , its price is soaring . The Indian stove is clearly a work-in-progress ; it is too bulky and not durable enough to survive the rigors of an African village . But with India’s vast internal market , many designers have an incentive to improve it . How many designers in America or Europe can say the same ? Of course , technology transfer from China and India could be a mere smokescreen for a new “ brown imperialism ” aimed at exploiting African oil , food , and minerals . In recent years , China’s government alone has invested billions of dollars in African infrastructure and resource extraction , raising suspicions that a new scramble for Africa is underway . But Africans genuinely need foreign technology , and the Chinese , in particular , are pushing hard – even flamboyantly – to fill the gap . This year , Nigeria’s government bought a Chinese-made satellite , and even paid the Chinese to launch it into space in May . China was so eager to provide space technology to Africa’s most populous country that it beat out 21 other bidders for a contract worth $300 million . China’s technology inroads are usually less dramatic , but no less telling . In African medicine , Chinese herbs and pharmaceuticals are quietly gaining share . For example , the Chinese-made anti-malarial drug artesunate has become part of the standard treatment within just a few years . Likewise , Chinese mastery over ultra-small , cheap “ micro-hydro ” dams , which can generate tiny amounts of electricity from mere trickles of water , appeals to power-short , river-rich Africans . Tens of thousands of micro-hydro systems operate in China , and nearly none in Africa . Americans do-gooders like Nicholas Negroponte , with his $100 laptop , have identified the right problem : Africa is way behind technologically and rapid leap-frogging is possible . But Chinese and Indian scientists argue that Africa can benefit from a changing of the technological guard . They may be right . </text>
<text id="syndicate/the-china-question">
The China Question President Bush’s recent visit to Asia made little news – by design . But that’s because Bush didn’t begin to address the issue that is looming ever larger in the region : the changing face of security in Asia in view of China’s growing economic and military might . This summer , for example , China and Russia conducted their first-ever grand-scale joint military exercise . This was followed by Russian news reports that China , Russia , and India would conduct trilateral military exercises , named “ Indira 2005 , ” on the same scale before the end of this year . In the past , such a combination of countries was almost unthinkable , and these exercises cannot be explained away as simple “ one-off ” affairs with little resonance . Instead , they reflect China’s long-term strategic goal of establishing hegemony across Asia . One tool of this ambition is the Shanghai Cooperation Organization ( SCO ) , under which the Sino-Russian exercises took place . Established in June 2001 , the SCO includes China , Russia , Kazakhstan , Kyrgyzstan , Tajikistan , and Uzbekistan . The SCO’s original purpose was to mitigate tensions on the borders of China and the Central Asian countries after the collapse of the Soviet Union and the arrival of the United States military with the war in Afghanistan . China regards the SCO as a stage for broadening its influence over a vast region , ranging from the Asia-Pacific to Southwest Asia , the Middle East , East Africa , and the Indian Ocean . Indeed , its members include about 45 % of the world’s population , and 28 % of the landmass ranging across the Eurasian continent . China’s active leadership of the SCO has resulted in policies that it favors . Gradually , the SCO shifted its focus to fighting Islamic radicals . Nowadays , however , the SCO is often used as a forum to campaign against supposed American unilateralism and to provide a united front – especially between China and Russia – against the US with respect to security and arms-reduction issues in the region . This includes joint anti-terror training and demands to reduce US forces in the region , particularly from Uzbekistan and Kyrgyzstan . The SCO provides China not only with a platform to confront the existing US-led alliance in the Asia-Pacific region , but is increasingly being used to prevent the formation of a US-led network to restrain China’s advance . Ultimately , it is feared that the SCO could develop into a military alliance similar to the Warsaw Pact of the Cold War era , with an embryonic “ Great China Union ” at its core . But China’s regional diplomacy goes far beyond the SCO . It seizes every opportunity that comes its way , including the Six Party Talks on North Korea’s nuclear ambitions , to emphasize its centrality to the settlement of any and all Asian issues . Moreover , it continues to build its “ string of pearls ” of military bases at every key point on maritime transportation routes along the “ arc of instability ” from the Middle East to China’s coast . No one seems to know how to respond to China’s diplomatic and military muscle flexing in Asia , for the extent of China’s ambitions remains utterly unclear . But , while everyone else ponders China’s motives , its government is acting . Indeed , the UK’s premier security think tank , the Institute for International Strategic Studies , recently warned that , while the world focuses on the fight against international terrorism and the unfolding events in the Middle East , China is rapidly expanding its influence from Asia to Africa . The “ pearls ” in Africa include Sudan , Angola , Algeria , Gabon , Namibia , Zambia , Tanzania , Zimbabwe , Uganda , Djibouti , Mali , Central Africa , Liberia , Ethiopia , Mozambique , Sierra Leone , and the Democratic Republic of Congo . In each country , China is nurturing special military and commercial relations intended to promote loyalty to Chinese interests . As in Asia , there is a pattern at work : growing Chinese influence begets increased support for Chinese policies . Of course , it’s a two-way street . Whenever complaints come up in the United Nations ’ Human Rights Committee , China can count on the support of many African countries that have their own human rights problems . Even the selection of Beijing as the site of the 2008 Olympics benefited from “ African votes . ” And China has publicly stated that it will back African nations in potential disputes at the World Trade Organization ( WTO ) and other international organizations . Similarly , many African states now seem to be leaning heavily toward China in its dispute with Taiwan . When Japan’s government tried to become a permanent member of the UN Security Council , few African countries backed its bid , despite receiving economic aid for decades . China likes to boast of its “ peaceful rise . ” But the rise of Bismarck’s Germany at the end of the nineteenth century was also peaceful – for a while . The question is not whether China rises to great-power status peacefully , but whether it intends to remain peaceful when it gets there . Just as the world confronted the “ German Question ” 125 years ago , it is now confronting the “ China Question . ” We need a better answer this time . </text>
<text id="syndicate/the-end-of-the-russia-china-debate">
The End of the Russia-China Debate Ten years ago , comparing the reform processes in China and Russia was an intellectual fashion . Was it preferable to start with economics – try and get rich , quick , but don’t rock the boat politically – in the manner of the Chinese ? Or was it better to start with politics – recover liberty and prosperity may follow – which seemed to be Russia’s path under Mikhail Gorbachev and Boris Yeltsin ? Today , a new comparative debate has started . This time the subject is no longer Russia versus China , because Russia has long ceased to be a point of comparison . Instead , the new comparative debate involves Asia’s two new economic , demographic , and political giants , China and India . China’s annual economic growth has been roughly 8-9 % for the last 26 years ; India has recorded similar rates for the last decade . In the “ flat world ” of globalization – to borrow Thomas Friedman’s powerful metaphor – it seems that Russia no longer has a place . Of course , Russia is still the second-largest nuclear power in the world , and , as one of the world’s leading exporters of oil and gas , it benefits from today’s high energy prices . But Russia’s population is disappearing before our eyes . With average male life expectancy just 57 years , the country is losing close to 800,000 people annually . Indeed , Russia is more a fragile oil-producing state than a modernizing economic giant . To put it bluntly , Russia is no longer in the same category as China . Whereas the “ Middle Kingdom ” is proudly regaining its former global status after centuries of decline , Russia is defiantly trying to resurrect its former imperial status , but in a manner that appears doomed to fail . Russia has clearly taken giant steps in the wrong direction , at a time when China has taken steps , however small , in the right direction . When you meet today’s “ new Russian Nomenklatura , ” you experience a sudden feeling of being 20 years younger , awash as they are in nostalgia for Cold War posturing . By contrast , seen from afar , in their new suits , you might think that Chinese economic elites are Japanese . Where Russia represents a return to the past , one sees in China an opening , however ambiguous , to the future . Of course , some bias is involved here . As a European , I and people like me almost instinctively expect more from Russia . It is , after all , a European nation in cultural , if not political terms , whereas progress in China will not be measured by the introduction of Western-style democracy , but eventually , one hopes , by Singapore-style rule of law . The diverse paths followed by Russia and China may be explained in part by how the two peoples perceive themselves . The Chinese are comforted in their self-image by the world’s combination of admiration for their dynamism , greed for the market they constitute , and apprehension for the competition they represent . Russians , by contrast , seem to be animated by a dark form of narcissism . They do not find anything to be proud of in the eyes of others . They are respected for what they control – the Soviet legacy of nuclear arms and “ Christian energy resources , ” to quote Vladimir Putin’s bizarre remark on his first official trip to Paris – but not for their economic performance or their essence . China and Russia tend to relate to their respective pasts and futures in very different ways – with self-confidence in China’s case , with self-diffidence in the case of Russia . Chinese elites are convinced that time is working in their favor , and that it is only natural that China should regain its rank amongst the world leading powers , perhaps even emerging on top one day . Indeed , their serene patience stands in stark contrast to the anxious reticence of Russian leaders , who have yet to surmount the humiliation that Russia suffered as a result of the Soviet Union’s disintegration at the end of the Cold War . Russia may be experiencing a global “ restoration ” phase , but in politics and economics , and also with respect to its empire , restoration is headed in the wrong direction . With Putin’s current clampdown on civil society , re-nationalization of key segments of the economy , failure to develop any political approach to resolving the conflict in Chechnya , and cultivation of imperial nostalgia , Russia is killing its only chance to matter in the future . Yet there is no reason for China to declare victory . The gap between the respective qualities of China’s economic and scientific elites , on the one hand , and its ruling political elites , on the other , is simply too monumental – and still growing – for stability to be taken for granted . One senses in China the birth pangs of civil society , making the introduction of the rule of law increasingly urgent . Without political reforms , China’s confidence in herself will quickly turn into disillusion , or even delusion . If that happens , the Russia-China debate might be revived , this time as a comparison of competitive decadence . </text>
<text id="syndicate/the-making-of-china-s-trade-deficit">
The Making of China’s Trade Deficit BEIJING – China registered a monthly trade deficit of $7.2 billion in March 2010 , its first since April 2004. And yet , at around the same time , the United States Congress issued its loudest call ever to classify China as an exchange-rate manipulator , accusing Chinese leaders of maintaining the renminbi’s peg to the dollar in order to guarantee a permanent bilateral trade surplus . China’s March trade deficit indicates , first of all , that it is incorrect to claim that Chinese economic growth depends mainly on exports . Exports are an important part of the Chinese economy , and any global market fluctuation or external shock will certainly have an impact on overall growth . But , like any other large economy , China’s economy is driven by domestic consumption and investment . Indeed , China’s exports fell by 16 % year on year in 2009 , owing to the global financial crisis and recession . Nevertheless , annual GDP grew by 8.7 % , thanks to 16.9 % growth in consumption ( measured by gross sale of consumer goods ) and a 33.3 % surge in fixed-investment demand . Moreover , although China’s “ trade dependency ” is now reckoned to be 70 % of GDP , that figure is greatly distorted by the fact that Chinese exports require massive imports of materials and parts . The net value added of total Chinese foreign trade accounts for only about 15 % of GDP . Thus , net exports contributed 10.8 % to China’s overall GDP growth rate , or only about 1.1 percentage point of 9 % growth in 2008. Compare that figure to Germany , where net exports accounted for 64 % of growth in 2008. Similarly , the figure was 33 % in Japan , 28.6 % in Korea , and 20 % in the Philippines . Clearly , China is nothing special in this regard . To be sure , China’s domestic consumption is not as high as it should be , standing at 49 % of GDP in 2008 , with household consumption accounting for only 35 % . Such figures have led many observers to believe that overall domestic demand must be low , leaving China dependent on external markets for growth . But domestic demand , which determines imports , consists not only of consumption , but also of fixed-asset investment . Indeed , rapid growth in investment may translate into high import growth and trade deficits . That is exactly what is happening in China now . Some people may argue that investment growth without consumption growth will result in overcapacity and eventually lead to recession . Perhaps . But we need to remind ourselves that housing investment accounts for about 30 % of China’s total fixed investment , with much of the rest directed toward infrastructure – that is , long-term , durable public infrastructure investments – including subways , railways , highways , urban public facilities , and the national water system . Moreover , one can easily imagine that import demand would soar further if the US and the European Union lifted their bans on exports of high-tech products to China . In that case , the trade deficit recorded in March could be at least 40 % higher . The renminbi’s exchange rate , then , is really a secondary factor in China’s external account . Put another way , the global imbalance could be corrected more efficiently by addressing other , more fundamental factors . The fundamental factors underlying the US external imbalance are large fiscal deficits and low household savings , owing to excessive financial leverage . The fundamental factors on the Chinese side are high corporate and household savings , together with some distortion of resource/utility prices . Indeed , the current situation indicates that a significant adjustment in exchange rates may not be needed at all in order to redress global imbalances . If that is true , and China shouldn’t worry about the renminbi’s exchange rate , should it worry about its economy overheating ? After all , its previous trade deficits in the era of reform – such as in 1992-1996 and 2003-2004 – all occurred at times of overheating . But there are differences between now and those earlier periods . For example , when rapid investment growth in 2004 led to overheating , world markets were booming . At that time , both domestic investment and exports required immediate tightening . Today , by contrast , although domestic investment is growing very strongly , external demand has not recovered to its previous levels . The result is the March trade deficit , caused mainly by exceptionally high annual import growth ( 65 % ) coupled with relatively low export growth , which reached a nominally impressive 24 % only because of the sharp decline recorded in the base period . Such a single-factor situation is easier to deal with than the double-factor situation of 2004 , and because the high investment demand has been mainly stimulus-related this time , policymakers can handle it in a more timely fashion if they perceive a problem . That said , the ratio of capital formation does require careful monitoring . The last time China saw such high growth in domestic investment , the savings rate was not as high as it is now . The problem currently is that a trade deficit has emerged at a time when the national saving rate is as high as 51 % . That means that investment is extremely high – and that , despite the high share of infrastructure investment , there is an urgent need to manage the potential risks . </text>
<text id="syndicate/the-return-of-franco-german-leadership">
The Return of Franco-German Leadership PARIS – Whoever wins September’s parliamentary election in Germany , the time has come once again for a major Franco-German initiative . Regardless of their economic conditions or their confidence – or lack of it – in each other , France and Germany are more than ever jointly responsible for the future , if not the very survival , of the European project . Are there alternatives to Franco-German leadership of the European Union ? Joining Great Britain with them in a Club of Three would be a good idea , but it is out of the question nowadays . Britain has largely excluded itself from any leadership role in Europe . Gordon Brown is barely surviving as prime minister , and the Conservatives , whose return to power in the next year is almost certain , are as provincially euro-skeptic as ever , if not more so . Europe simply cannot count on the British , at least for a while . The idea of a Club of Six , floated by Nicolas Sarkozy early in his presidency , was always abstract and is now untenable . Given Silvio Berlusconi’s sexcapades , the Italy that he leads cannot be taken seriously , while Spain is out of the running for an EU leadership role , owing to its dire economic conditions . As for Poland , although the bumbling Kaczynski “ twins ” have been removed from power , the country’s fixation on security in its immediate neighborhood is incompatible with true European leadership . Since the other 21 EU members never liked the idea of a Club of Six to begin with , it is just as well that such a vision has been buried , probably forever . So where but France and Germany can Europe turn for leadership ? A positive referendum result on the Lisbon Treaty in Ireland in October would be a necessary but insufficient condition to jump-start an institutional re-launch of the EU . Above all , the EU needs political will and direction . Only Germany and France , acting together , can convey to Europe’s citizens and to the world the sense that the EU is at long last waking up to today’s global realities . Of course , it is impossible to underestimate the combination of suspicion , tension , and exasperation that characterizes Franco-German relations lately . To a large extent , Germany has become a “ second France ” in Europe , at a time when France is more French than ever . And they are not only putting their respective nationalisms first . They disagree on fundamentals – most of all , about how to surmount the economic crisis . But the two giants of Europe can agree to disagree about the virtues of German-style budgetary rigor or French-style fiscal stimulus as long as they don’t insult each other , and , more importantly , as long as they compensate for their philosophical differences with a well publicized program of joint initiatives on key subjects . As long as each remains convinced that no alternative to cooperation exists within the EU , and that European cooperation remains a priority for both , it should not be overly difficult to restore their leadership . After all , France and Germany are closer to each other on many key topics than they have been for a long time . With the return of France to NATO’s integrated military structure , the two countries are on the same “ Atlantic ” wavelength for the first time since 1966. Despite both sides ’ deep reservations about the mission in Afghanistan , they are clearly in the same boat , even if French troops , being closer to British troops in terms of combat , are more vulnerable than the Germans . And both countries would probably subscribe to the following formulation : “ Turkey’s future is with Europe , but not necessarily in the European Union , at least in the foreseeable future . ” The fundamental question about how to deal with Russia remains a divisive issue , however . France and Germany have different sensitivities on the subject , which is both natural and inevitable , as these differences reflect both geography and history . Germany is not only much closer physically to Russia ; it is also much more dependent on Russia in terms of energy security . France must not delude itself : Germany is not about to convert to nuclear energy to reduce its reliance on Russian oil and gas . Yet Germany also must realize that Russia’s negative evolution has consequences that Germans cannot escape . A spectacular Franco-German security initiative following the election in Germany , accompanied by a joint message to the Kremlin , would also have the benefit of sending a message to the rest of the EU , particularly to its Václav Klauses : “ If you decide to paralyze the Union through stubborn ill will , you will only end up excluding yourselves , rather than dictating Europe’s fate . ” France and Germany cannot move Europe alone , but Europe without them cannot move at all . </text>
<text id="syndicate/the-transatlantic-index">
The Transatlantic Index How should we assess the state of transatlantic relations nowadays ? With a nod to Wall Street , we can say that the Alliance is up , Europe is flat , and the United States is clearly down . The Alliance is “ up ” for one key reason : the warming of France’s relations with the US following Nicolas Sarkozy’s election as French president . For the first time since Charles de Gaulle established the Fifth Republic , France’s priority is no longer to live in opposition to the US . The signs of this shift are profound , even spectacular . From a toughening of France’s position on Iran to a real warming of relations with Israel , not to mention symbolic gestures like Sarkozy’s summer vacation in America , or Foreign Minister Bernard Kouchner’s arrival in Baghdad , this is a New France , one seriously considering a return to NATO’s integrated military structure . France’s shift is the result of both political calculus and deeply felt emotion . For Sarkozy , the French are not anti-Americans , but simply anti-Bush . In his willingness to break with the past – in particular with Jacques Chirac’s legacy – and in adding a global spin to his “ mandate for change , ” Sarkozy is paving the way for the post-Bush America that will soon be here . He knows that the “ return of France ” as an influential actor in Europe presupposes a France that is closer to America , which will automatically bring France closer to Germany and Great-Britain , not to mention Poland and Italy . Emotionally , too , “ Sarkozy the American , Sarkozy the doer , ” who wants to be judged by his actions , tends to see himself as a Gallic incarnation of the American dream . He is the son of immigrants , the outsider whose rise to the top is living proof of French openness . In the US , too , the attitude towards the alliance with Europe has changed mightily . The failure in Iraq , the risk of an “ Iraqization ” of Afghanistan , and Russia’s newfound assertiveness have moved America from the arrogant indifference that characterized most of Bush’s presidency to a rediscovery of the Alliance’s value . America needs allies , and is not preoccupied by their potential independent strength . As one top American diplomat put it , “ The last worry I have when I wake up at three in the morning is that Europe is becoming too strong . ” But rapprochement between France and the US should not hide other realities . First , in Afghanistan , NATO is in danger of suffering its first military defeat . Where will the new troops that are needed come from ? And a key member of the Alliance , Turkey , may be about to embark in a dangerous military adventure in Kurdish northern Iraq . Second , one cannot speak of NATO without noting that the Alliance’s twin pillars – Europe and the US – are not in great shape . If Europe is “ flat , ” one reason is Sarkozy . He may be encouraging news for the Alliance , his European policy is a source of worry for Europe . While Sarkozy claims that Europe is his priority , his methods seem to contradict his intentions . The difficult personal chemistry he has with German Chancellor Angela Merkel is reinforced by his constant attacks on the European Central Bank and its president , Jean-Claude Trichet . One cannot simultaneously defend the Alliance in the name of Europe and weaken Europe with fits of populism and economic nationalism . Europe’s three key new leaders – Britain’s Gordon Brown , Merkel , and Sarkozy – all belong to a generation that is no longer emotionally moved by the project of European integration . Their links with Europe – if they exist at all – are at best rational , not emotional . But will cool rationality be enough to create a European security pillar within the context of the Alliance ? As for America , it is “ down ” in terms of both “ soft ” ideological power and “ hard ” military power . The US remains by far the world’s strongest country , particularly in military terms , but it is confronted with fundamental questions about the use and utility of force at a time when power is relative . Today , Americans and Europeans alike must demonstrate modesty . Unlike when the Alliance was created , a multi-polar world system has taken shape , in which the West’s demographic and economic share has fallen , and in which it must now compete with successful authoritarian models such as China or even Russia . In this new context , solidarity is as crucial as ever . Opinion about the US remains largely negative in Europe , and will remain so at least until the US presidential election in 2008. Likewise , US perceptions of France and of Europe are only slowly improving . It is only by respecting our common values and not exacerbating our differences that the West will be able to reinvent itself . The Alliance may be “ up , ” but its outlook remains uncertain . </text>
<text id="syndicate/will-russia-save-the-west-">
Will Russia Save the West ? MOSCOW – Rapid changes in the global economy and international politics are raising , once more , an eternal issue in Russia : the country’s relations with Europe , and with the Euro-Atlantic region as a whole . Of course , Russia partly belongs to this region . Yet it cannot and does not want to join the West wholeheartedly – at least not yet . Meanwhile , this choice looks very different now compared to just a few years ago . It is becoming obvious that the Euro-Atlantic world , whose economic and political model seemed so triumphant 20 years ago , is now lagging somewhat behind China and other Asian countries . So is Russia , where , despite encouraging talk about innovation-based development , the economy continues to de-modernize as corruption has been allowed to metastasize , and as the country relies increasingly on its natural-resource wealth . Indeed , it is Asia that has turned out to be the true winner of the Cold War . These rising powers raise problems regarding Russia’s geo-strategic choices . For the first time in decades , the values gap between Russia and the EU appears to be increasing . Europe is overcoming state nationalism , while Russia is building a nation state . Broken by history and not wishing to be ravaged by war again , Europeans have embraced compromise and renounced the direct use of force in international relations . Russians , on the other hand , emphasize their “ hard power , ” including military force , because they know that they live in a dangerous world and have no one to hide behind . And , because of the country’s comparative lack of “ soft power ” – social , cultural , and economic attractiveness – it stands ready to use the competitive advantages ( i. e. , its resource wealth ) available to it . Internal political developments in Russia are also pushing the country in a different direction from the West . Quite simply , Russia is moving away from democracy . This emerging values gap is not an insurmountable obstacle to geostrategic rapprochement . But , coupled with mutual irritation , which is particularly strong in Russia , closing the gap is becoming much harder . For , while Russia ’ s elite never considered itself defeated in the Cold War , the West essentially treated Russia as a defeated country – an attitude symbolized by NATO’s eastward expansion , which laid a deep foundation for ongoing tension . It was only after the West encountered an armed rebuff in South Ossetia that NATO expansion was stopped in its tracks . Yet NATO has not given up on further enlargement . NATO expansion is nothing more than the extension of its zone of influence – and in the most sensitive , military-political sphere . And yet the West’s unwillingness to abandon that effort is coupled with a repeated refusal to recognize Russia’s right to have its own zone of interest . So NATO expansion has left the Cold War unfinished . The ideological and military confrontation that underlay it is gone , but the geopolitical rivalry that it entailed has returned to the fore . Thus , the old mentality survived on both sides . Energy debates are another example of this . Non-Russian Europe should thank the Almighty for the presence of energy-rich Russia at its borders , while Russia should be thankful for having such wealthy customers . But the natural differences in the interests of energy consumers and producers have been given a political/security twist – witness the discussions about an “ Energy NATO . ” F aced with the impossibility of advantageous accession to Euro-Atlantic institutions , Russia is drifting fast towards alignment with China – a “ younger brother , ” though a respected one . Russia’s “ Asian choice ” of today is not the same as the Slavophile/Eurasian choice of the past . On the surface , it looks like a choice in favor of a rapidly rising civilization . But the current estrangement from Europe – the cradle of Russian civilization and modernization – threatens Russia’s identity and will increase its geostrategic risks in the future . Europe does not benefit from this estrangement either . It will continue to move towards beautiful decay – Venice writ large . The United States also loses . Without Russia , which will remain the world’s third strongest power for the foreseeable future , it is impossible to solve the key problems of international security . The current Euro-Atlantic security architecture seems to suit the majority of Americans and Europeans , though it is becoming increasingly fragile and counterproductive . So Russia will struggle to create a new architecture largely on its own – whether through a new treaty on collective European security , or even through its accession to NATO . This is not only in Russian political and civilizational interest , but it also reflects our duty to the entire community of Euro-Atlantic nations , which is being weakened by the “ unfinished Cold War . ” The idea of a “ Union of Europe ” between Russia and the EU should be put on the long-term agenda . That Union should be based on a common human , economic , and energy space . The combination of a new security arrangement for the Euro-Atlantic community and the establishment of the Union of Europe could arrest the decline in the international weight of the West . </text>
<text id="Bib1Amos_Prophecy_12_EN.txt">
﻿ Amos 1 1 The words of Amos , one of the shepherds of Tekoa—what he saw concerning Israel two years before the earthquake , when Uzziah was king of Judah and Jeroboam son of Jehoash[a ] was king of Israel . 2 He said : “ The LORD roars from Zion and thunders from Jerusalem ; the pastures of the shepherds dry up , [ b ] and the top of Carmel withers . ” Judgment on Israel’s Neighbors 3 This is what the LORD says : “ For three sins of Damascus , even for four , I will not turn back my wrath . Because she threshed Gilead with sledges having iron teeth , 4 I will send fire upon the house of Hazael that will consume the fortresses of Ben-Hadad . 5 I will break down the gate of Damascus ; I will destroy the king who is in[c ] the Valley of Aven[d ] and the one who holds the scepter in Beth Eden . The people of Aram will go into exile to Kir , ” says the LORD . 6 This is what the LORD says : “ For three sins of Gaza , even for four , I will not turn back my wrath . Because she took captive whole communities and sold them to Edom , 7 I will send fire upon the walls of Gaza that will consume her fortresses . 8 I will destroy the king[e ] of Ashdod and the one who holds the scepter in Ashkelon . I will turn my hand against Ekron , till the last of the Philistines is dead , ” says the Sovereign LORD . 9 This is what the LORD says : “ For three sins of Tyre , even for four , I will not turn back my wrath . Because she sold whole communities of captives to Edom , disregarding a treaty of brotherhood , 10 I will send fire upon the walls of Tyre that will consume her fortresses . ” 11 This is what the LORD says : “ For three sins of Edom , even for four , I will not turn back my wrath . Because he pursued his brother with a sword , stifling all compassion , [ f ] because his anger raged continually and his fury flamed unchecked , 12 I will send fire upon Teman that will consume the fortresses of Bozrah . ” 13 This is what the LORD says : “ For three sins of Ammon , even for four , I will not turn back my wrath . Because he ripped open the pregnant women of Gilead in order to extend his borders , 14 I will set fire to the walls of Rabbah that will consume her fortresses amid war cries on the day of battle , amid violent winds on a stormy day . 15 Her king[g ] will go into exile , he and his officials together , ” says the LORD . ** Amos 2 1 This is what the LORD says : “ For three sins of Moab , even for four , I will not turn back my wrath . Because he burned , as if to lime , the bones of Edom’s king , 2 I will send fire upon Moab that will consume the fortresses of Kerioth . [ a ] Moab will go down in great tumult amid war cries and the blast of the trumpet . 3 I will destroy her ruler and kill all her officials with him , ” says the LORD . 4 This is what the LORD says : “ For three sins of Judah , even for four , I will not turn back my wrath . Because they have rejected the law of the LORD and have not kept his decrees , because they have been led astray by false gods , [ b ] the gods[c ] their ancestors followed , 5 I will send fire upon Judah that will consume the fortresses of Jerusalem . ” Judgment on Israel 6 This is what the LORD says : “ For three sins of Israel , even for four , I will not turn back my wrath . They sell the righteous for silver , and the needy for a pair of sandals . 7 They trample on the heads of the poor as upon the dust of the ground and deny justice to the oppressed . Father and son use the same girl and so profane my holy name . 8 They lie down beside every altar on garments taken in pledge . In the house of their god they drink wine taken as fines . 9 “ I destroyed the Amorite before them , though he was tall as the cedars and strong as the oaks . I destroyed his fruit above and his roots below . 10 “ I brought you up out of Egypt , and I led you forty years in the desert to give you the land of the Amorites . 11 I also raised up prophets from among your sons and Nazirites from among your young men . Is this not true , people of Israel ? ” declares the LORD . 12 “ But you made the Nazirites drink wine and commanded the prophets not to prophesy . 13 “ Now then , I will crush you as a cart crushes when loaded with grain . 14 The swift will not escape , the strong will not muster their strength , and the warrior will not save his life . 15 The archer will not stand his ground , the fleet-footed soldier will not get away , and the horseman will not save his life . 16 Even the bravest warriors will flee naked on that day , ” declares the LORD . </text>
<text id="Bib1Amos_Prophecy_89_EN.txt">
﻿ Amos 8 A Basket of Ripe Fruit 1 This is what the Sovereign LORD showed me : a basket of ripe fruit . 2 “ What do you see , Amos ? ” he asked . “ A basket of ripe fruit , ” I answered . Then the LORD said to me , “ The time is ripe for my people Israel ; I will spare them no longer . 3 “ In that day , ” declares the Sovereign LORD , “ the songs in the temple will turn to wailing . [ a ] Many , many bodies—flung everywhere ! Silence ! ” 4 Hear this , you who trample the needy and do away with the poor of the land , 5 saying , “ When will the New Moon be over that we may sell grain , and the Sabbath be ended that we may market wheat ? ” — skimping the measure , boosting the price and cheating with dishonest scales , 6 buying the poor with silver and the needy for a pair of sandals , selling even the sweepings with the wheat . 7 The LORD has sworn by the Pride of Jacob : “ I will never forget anything they have done . 8 “ Will not the land tremble for this , and all who live in it mourn ? The whole land will rise like the Nile ; it will be stirred up and then sink like the river of Egypt . 9 “ In that day , ” declares the Sovereign LORD , “ I will make the sun go down at noon and darken the earth in broad daylight . 10 I will turn your religious feasts into mourning and all your singing into weeping . I will make all of you wear sackcloth and shave your heads . I will make that time like mourning for an only son and the end of it like a bitter day . 11 “ The days are coming , ” declares the Sovereign LORD , “ when I will send a famine through the land — not a famine of food or a thirst for water , but a famine of hearing the words of the LORD . 12 Men will stagger from sea to sea and wander from north to east , searching for the word of the LORD , but they will not find it . 13 “ In that day “ the lovely young women and strong young men will faint because of thirst . 14 They who swear by the shame[b ] of Samaria , or say , ‘ As surely as your god lives , O Dan , ' or , ‘ As surely as the god[c ] of Beersheba lives ' — they will fall , never to rise again . ” Amos 9 Israel to Be Destroyed 1 I saw the Lord standing by the altar , and he said : “ Strike the tops of the pillars so that the thresholds shake . Bring them down on the heads of all the people ; those who are left I will kill with the sword . Not one will get away , none will escape . 2 Though they dig down to the depths of the grave , [ a ] from there my hand will take them . Though they climb up to the heavens , from there I will bring them down . 3 Though they hide themselves on the top of Carmel , there I will hunt them down and seize them . Though they hide from me at the bottom of the sea , there I will command the serpent to bite them . 4 Though they are driven into exile by their enemies , there I will command the sword to slay them . I will fix my eyes upon them for evil and not for good . ” 5 The Lord , the LORD Almighty , he who touches the earth and it melts , and all who live in it mourn — the whole land rises like the Nile , then sinks like the river of Egypt — 6 he who builds his lofty palace[b ] in the heavens and sets its foundation[c ] on the earth , who calls for the waters of the sea and pours them out over the face of the land — the LORD is his name . 7 “ Are not you Israelites the same to me as the Cushites[d ] ? ” declares the LORD . “ Did I not bring Israel up from Egypt , the Philistines from Caphtor[e ] and the Arameans from Kir ? 8 “ Surely the eyes of the Sovereign LORD are on the sinful kingdom . I will destroy it from the face of the earth — yet I will not totally destroy the house of Jacob , ” declares the LORD . 9 “ For I will give the command , and I will shake the house of Israel among all the nations as grain is shaken in a sieve , and not a pebble will reach the ground . 10 All the sinners among my people will die by the sword , all those who say , ‘ Disaster will not overtake or meet us . ' Israel 's Restoration 11 “ In that day I will restore David 's fallen tent . I will repair its broken places , restore its ruins , and build it as it used to be , 12 so that they may possess the remnant of Edom and all the nations that bear my name , [ f ] ” declares the LORD , who will do these things . 13 “ The days are coming , ” declares the LORD , “ when the reaper will be overtaken by the plowman and the planter by the one treading grapes . New wine will drip from the mountains and flow from all the hills . 14 I will bring back my exiled[g ] people Israel ; they will rebuild the ruined cities and live in them . They will plant vineyards and drink their wine ; they will make gardens and eat their fruit . 15 I will plant Israel in their own land , never again to be uprooted from the land I have given them , ” says the LORD your God . </text>
<text id="Bib1Ezra_History_12_EN.txt">
﻿ Ezra 1 Cyrus Helps the Exiles to Return 1 In the first year of Cyrus king of Persia , in order to fulfill the word of the LORD spoken by Jeremiah , the LORD moved the heart of Cyrus king of Persia to make a proclamation throughout his realm and to put it in writing : 2 “ This is what Cyrus king of Persia says : “ ‘ The LORD , the God of heaven , has given me all the kingdoms of the earth and he has appointed me to build a temple for him at Jerusalem in Judah . 3 Anyone of his people among you—may his God be with him , and let him go up to Jerusalem in Judah and build the temple of the LORD , the God of Israel , the God who is in Jerusalem . 4 And the people of any place where survivors may now be living are to provide him with silver and gold , with goods and livestock , and with freewill offerings for the temple of God in Jerusalem . ’ ” 5 Then the family heads of Judah and Benjamin , and the priests and Levites—everyone whose heart God had moved—prepared to go up and build the house of the LORD in Jerusalem . 6 All their neighbors assisted them with articles of silver and gold , with goods and livestock , and with valuable gifts , in addition to all the freewill offerings . 7 Moreover , King Cyrus brought out the articles belonging to the temple of the LORD , which Nebuchadnezzar had carried away from Jerusalem and had placed in the temple of his god . [ a ] 8 Cyrus king of Persia had them brought by Mithredath the treasurer , who counted them out to Sheshbazzar the prince of Judah . 9 This was the inventory : gold dishes 30 silver dishes 1,000 silver pans[b ] 29 10 gold bowls 30 matching silver bowls 410 other articles 1,000 11 In all , there were 5,400 articles of gold and of silver . Sheshbazzar brought all these along when the exiles came up from Babylon to Jerusalem . Ezra 2 The List of the Exiles Who Returned 1 Now these are the people of the province who came up from the captivity of the exiles , whom Nebuchadnezzar king of Babylon had taken captive to Babylon ( they returned to Jerusalem and Judah , each to his own town , 2 in company with Zerubbabel , Jeshua , Nehemiah , Seraiah , Reelaiah , Mordecai , Bilshan , Mispar , Bigvai , Rehum and Baanah ) : The list of the men of the people of Israel : 3 the descendants of Parosh 2,172 4 of Shephatiah 372 5 of Arah 775 6 of Pahath-Moab ( through the line of Jeshua and Joab ) 2,812 7 of Elam 1,254 8 of Zattu 945 9 of Zaccai 760 10 of Bani 642 11 of Bebai 623 12 of Azgad 1,222 13 of Adonikam 666 14 of Bigvai 2,056 15 of Adin 454 16 of Ater ( through Hezekiah ) 98 17 of Bezai 323 18 of Jorah 112 19 of Hashum 223 20 of Gibbar 95 21 the men of Bethlehem 123 22 of Netophah 56 23 of Anathoth 128 24 of Azmaveth 42 25 of Kiriath Jearim , [ a ] Kephirah and Beeroth 743 26 of Ramah and Geba 621 27 of Micmash 122 28 of Bethel and Ai 223 29 of Nebo 52 30 of Magbish 156 31 of the other Elam 1,254 32 of Harim 320 33 of Lod , Hadid and Ono 725 34 of Jericho 345 35 of Senaah 3,630 36 The priests : the descendants of Jedaiah ( through the family of Jeshua ) 973 37 of Immer 1,052 38 of Pashhur 1,247 39 of Harim 1,017 40 The Levites : the descendants of Jeshua and Kadmiel ( through the line of Hodaviah ) 74 41 The singers : the descendants of Asaph 128 42 The gatekeepers of the temple : the descendants of Shallum , Ater , Talmon , Akkub , Hatita and Shobai 139 43 The temple servants : the descendants of Ziha , Hasupha , Tabbaoth , 44 Keros , Siaha , Padon , 45 Lebanah , Hagabah , Akkub , 46 Hagab , Shalmai , Hanan , 47 Giddel , Gahar , Reaiah , 48 Rezin , Nekoda , Gazzam , 49 Uzza , Paseah , Besai , 50 Asnah , Meunim , Nephusim , 51 Bakbuk , Hakupha , Harhur , 52 Bazluth , Mehida , Harsha , 53 Barkos , Sisera , Temah , 54 Neziah and Hatipha 55 The descendants of the servants of Solomon : the descendants of Sotai , Hassophereth , Peruda , 56 Jaala , Darkon , Giddel , 57 Shephatiah , Hattil , Pokereth-Hazzebaim and Ami 58 The temple servants and the descendants of the servants of Solomon 392 59 The following came up from the towns of Tel Melah , Tel Harsha , Kerub , Addon and Immer , but they could not show that their families were descended from Israel : 60 The descendants of Delaiah , Tobiah and Nekoda 652 61 And from among the priests : The descendants of Hobaiah , Hakkoz and Barzillai ( a man who had married a daughter of Barzillai the Gileadite and was called by that name ) . 62 These searched for their family records , but they could not find them and so were excluded from the priesthood as unclean . 63 The governor ordered them not to eat any of the most sacred food until there was a priest ministering with the Urim and Thummim . 64 The whole company numbered 42,360 , 65 besides their 7,337 menservants and maidservants ; and they also had 200 men and women singers . 66 They had 736 horses , 245 mules , 67 435 camels and 6,720 donkeys . 68 When they arrived at the house of the LORD in Jerusalem , some of the heads of the families gave freewill offerings toward the rebuilding of the house of God on its site . 69 According to their ability they gave to the treasury for this work 61,000 drachmas[b ] of gold , 5,000 minas[c ] of silver and 100 priestly garments . 70 The priests , the Levites , the singers , the gatekeepers and the temple servants settled in their own towns , along with some of the other people , and the rest of the Israelites settled in their towns . </text>
<text id="Bib1Joel_Prophecy_12_EN.txt">
﻿ Joel 1 1 The word of the LORD that came to Joel son of Pethuel . An Invasion of Locusts 2 Hear this , you elders ; listen , all who live in the land . Has anything like this ever happened in your days or in the days of your forefathers ? 3 Tell it to your children , and let your children tell it to their children , and their children to the next generation . 4 What the locust swarm has left the great locusts have eaten ; what the great locusts have left the young locusts have eaten ; what the young locusts have left other locusts[a ] have eaten . 5 Wake up , you drunkards , and weep ! Wail , all you drinkers of wine ; wail because of the new wine , for it has been snatched from your lips . 6 A nation has invaded my land , powerful and without number ; it has the teeth of a lion , the fangs of a lioness . 7 It has laid waste my vines and ruined my fig trees . It has stripped off their bark and thrown it away , leaving their branches white . 8 Mourn like a virgin[b ] in sackcloth grieving for the husband[c ] of her youth . 9 Grain offerings and drink offerings are cut off from the house of the LORD . The priests are in mourning , those who minister before the LORD . 10 The fields are ruined , the ground is dried up[d ] ; the grain is destroyed , the new wine is dried up , the oil fails . 11 Despair , you farmers , wail , you vine growers ; grieve for the wheat and the barley , because the harvest of the field is destroyed . 12 The vine is dried up and the fig tree is withered ; the pomegranate , the palm and the apple tree — all the trees of the field—are dried up . Surely the joy of mankind is withered away . A Call to Repentance 13 Put on sackcloth , O priests , and mourn ; wail , you who minister before the altar . Come , spend the night in sackcloth , you who minister before my God ; for the grain offerings and drink offerings are withheld from the house of your God . 14 Declare a holy fast ; call a sacred assembly . Summon the elders and all who live in the land to the house of the LORD your God , and cry out to the LORD . 15 Alas for that day ! For the day of the LORD is near ; it will come like destruction from the Almighty . [ e ] 16 Has not the food been cut off before our very eyes — joy and gladness from the house of our God ? 17 The seeds are shriveled beneath the clods . [ f ] The storehouses are in ruins , the granaries have been broken down , for the grain has dried up . 18 How the cattle moan ! The herds mill about because they have no pasture ; even the flocks of sheep are suffering . 19 To you , O LORD , I call , for fire has devoured the open pastures and flames have burned up all the trees of the field . 20 Even the wild animals pant for you ; the streams of water have dried up and fire has devoured the open pastures . Joel 2 An Army of Locusts 1 Blow the trumpet in Zion ; sound the alarm on my holy hill . Let all who live in the land tremble , for the day of the LORD is coming . It is close at hand — 2 a day of darkness and gloom , a day of clouds and blackness . Like dawn spreading across the mountains a large and mighty army comes , such as never was of old nor ever will be in ages to come . 3 Before them fire devours , behind them a flame blazes . Before them the land is like the garden of Eden , behind them , a desert waste — nothing escapes them . 4 They have the appearance of horses ; they gallop along like cavalry . 5 With a noise like that of chariots they leap over the mountaintops , like a crackling fire consuming stubble , like a mighty army drawn up for battle . 6 At the sight of them , nations are in anguish ; every face turns pale . 7 They charge like warriors ; they scale walls like soldiers . They all march in line , not swerving from their course . 8 They do not jostle each other ; each marches straight ahead . They plunge through defenses without breaking ranks . 9 They rush upon the city ; they run along the wall . They climb into the houses ; like thieves they enter through the windows . 10 Before them the earth shakes , the sky trembles , the sun and moon are darkened , and the stars no longer shine . 11 The LORD thunders at the head of his army ; his forces are beyond number , and mighty are those who obey his command . The day of the LORD is great ; it is dreadful . Who can endure it ? Rend Your Heart 12 “ Even now , ” declares the LORD , “ return to me with all your heart , with fasting and weeping and mourning . ” 13 Rend your heart and not your garments . Return to the LORD your God , for he is gracious and compassionate , slow to anger and abounding in love , and he relents from sending calamity . 14 Who knows ? He may turn and have pity and leave behind a blessing — grain offerings and drink offerings for the LORD your God . 15 Blow the trumpet in Zion , declare a holy fast , call a sacred assembly . 16 Gather the people , consecrate the assembly ; bring together the elders , gather the children , those nursing at the breast . Let the bridegroom leave his room and the bride her chamber . 17 Let the priests , who minister before the LORD , weep between the temple porch and the altar . Let them say , “ Spare your people , O LORD . Do not make your inheritance an object of scorn , a byword among the nations . Why should they say among the peoples , ‘ Where is their God ? ' ” The LORD 's Answer 18 Then the LORD will be jealous for his land and take pity on his people . 19 The LORD will reply[a ] to them : “ I am sending you grain , new wine and oil , enough to satisfy you fully ; never again will I make you an object of scorn to the nations . 20 “ I will drive the northern army far from you , pushing it into a parched and barren land , with its front columns going into the eastern sea[b ] and those in the rear into the western sea . [ c ] And its stench will go up ; its smell will rise . ” Surely he has done great things . [ d ] 21 Be not afraid , O land ; be glad and rejoice . Surely the LORD has done great things . 22 Be not afraid , O wild animals , for the open pastures are becoming green . The trees are bearing their fruit ; the fig tree and the vine yield their riches . 23 Be glad , O people of Zion , rejoice in the LORD your God , for he has given you the autumn rains in righteousness . [ e ] He sends you abundant showers , both autumn and spring rains , as before . 24 The threshing floors will be filled with grain ; the vats will overflow with new wine and oil . 25 “ I will repay you for the years the locusts have eaten — the great locust and the young locust , the other locusts and the locust swarm[f ] — my great army that I sent among you . 26 You will have plenty to eat , until you are full , and you will praise the name of the LORD your God , who has worked wonders for you ; never again will my people be shamed . 27 Then you will know that I am in Israel , that I am the LORD your God , and that there is no other ; never again will my people be shamed . The Day of the LORD 28 “ And afterward , I will pour out my Spirit on all people . Your sons and daughters will prophesy , your old men will dream dreams , your young men will see visions . 29 Even on my servants , both men and women , I will pour out my Spirit in those days. 30 I will show wonders in the heavens and on the earth , blood and fire and billows of smoke . 31 The sun will be turned to darkness and the moon to blood before the coming of the great and dreadful day of the LORD . 32 And everyone who calls on the name of the LORD will be saved ; for on Mount Zion and in Jerusalem there will be deliverance , as the LORD has said , among the survivors whom the LORD calls . </text>
<text id="Bib1Ruth_History_12_EN.txt">
﻿ Ruth 1 Naomi and Ruth 1 In the days when the judges ruled , [ a ] there was a famine in the land , and a man from Bethlehem in Judah , together with his wife and two sons , went to live for a while in the country of Moab . 2 The man 's name was Elimelech , his wife 's name Naomi , and the names of his two sons were Mahlon and Kilion . They were Ephrathites from Bethlehem , Judah . And they went to Moab and lived there . 3 Now Elimelech , Naomi 's husband , died , and she was left with her two sons . 4 They married Moabite women , one named Orpah and the other Ruth . After they had lived there about ten years , 5 both Mahlon and Kilion also died , and Naomi was left without her two sons and her husband . 6 When she heard in Moab that the LORD had come to the aid of his people by providing food for them , Naomi and her daughters-in-law prepared to return home from there . 7 With her two daughters-in-law she left the place where she had been living and set out on the road that would take them back to the land of Judah . 8 Then Naomi said to her two daughters-in-law , “ Go back , each of you , to your mother 's home . May the LORD show kindness to you , as you have shown to your dead and to me . 9 May the LORD grant that each of you will find rest in the home of another husband . ” Then she kissed them and they wept aloud 10 and said to her , “ We will go back with you to your people . ” 11 But Naomi said , “ Return home , my daughters . Why would you come with me ? Am I going to have any more sons , who could become your husbands ? 12 Return home , my daughters ; I am too old to have another husband . Even if I thought there was still hope for me—even if I had a husband tonight and then gave birth to sons — 13 would you wait until they grew up ? Would you remain unmarried for them ? No , my daughters . It is more bitter for me than for you , because the LORD 's hand has gone out against me ! ” 14 At this they wept again . Then Orpah kissed her mother-in-law good-by , but Ruth clung to her . 15 “ Look , ” said Naomi , “ your sister-in-law is going back to her people and her gods . Go back with her . ” 16 But Ruth replied , “ Do n't urge me to leave you or to turn back from you . Where you go I will go , and where you stay I will stay . Your people will be my people and your God my God . 17 Where you die I will die , and there I will be buried . May the LORD deal with me , be it ever so severely , if anything but death separates you and me . ” 18 When Naomi realized that Ruth was determined to go with her , she stopped urging her . 19 So the two women went on until they came to Bethlehem . When they arrived in Bethlehem , the whole town was stirred because of them , and the women exclaimed , “ Can this be Naomi ? ” 20 “ Do n't call me Naomi , [ b ] ” she told them . “ Call me Mara , [ c ] because the Almighty[d ] has made my life very bitter . 21 I went away full , but the LORD has brought me back empty . Why call me Naomi ? The LORD has afflicted[e ] me ; the Almighty has brought misfortune upon me . ” 22 So Naomi returned from Moab accompanied by Ruth the Moabitess , her daughter-in-law , arriving in Bethlehem as the barley harvest was beginning . Ruth 2 Ruth Meets Boaz 1 Now Naomi had a relative on her husband 's side , from the clan of Elimelech , a man of standing , whose name was Boaz . 2 And Ruth the Moabitess said to Naomi , “ Let me go to the fields and pick up the leftover grain behind anyone in whose eyes I find favor . ” Naomi said to her , “ Go ahead , my daughter . ” 3 So she went out and began to glean in the fields behind the harvesters . As it turned out , she found herself working in a field belonging to Boaz , who was from the clan of Elimelech . 4 Just then Boaz arrived from Bethlehem and greeted the harvesters , “ The LORD be with you ! ” “ The LORD bless you ! ” they called back . 5 Boaz asked the foreman of his harvesters , “ Whose young woman is that ? ” 6 The foreman replied , “ She is the Moabitess who came back from Moab with Naomi . 7 She said , ‘ Please let me glean and gather among the sheaves behind the harvesters . ' She went into the field and has worked steadily from morning till now , except for a short rest in the shelter . ” 8 So Boaz said to Ruth , “ My daughter , listen to me . Do n't go and glean in another field and do n't go away from here . Stay here with my servant girls . 9 Watch the field where the men are harvesting , and follow along after the girls . I have told the men not to touch you . And whenever you are thirsty , go and get a drink from the water jars the men have filled . ” 10 At this , she bowed down with her face to the ground . She exclaimed , “ Why have I found such favor in your eyes that you notice me—a foreigner ? ” 11 Boaz replied , “ I 've been told all about what you have done for your mother-in-law since the death of your husband—how you left your father and mother and your homeland and came to live with a people you did not know before . 12 May the LORD repay you for what you have done . May you be richly rewarded by the LORD , the God of Israel , under whose wings you have come to take refuge . ” 13 “ May I continue to find favor in your eyes , my lord , ” she said . “ You have given me comfort and have spoken kindly to your servant—though I do not have the standing of one of your servant girls . ” 14 At mealtime Boaz said to her , “ Come over here . Have some bread and dip it in the wine vinegar . ” When she sat down with the harvesters , he offered her some roasted grain . She ate all she wanted and had some left over . 15 As she got up to glean , Boaz gave orders to his men , “ Even if she gathers among the sheaves , do n't embarrass her . 16 Rather , pull out some stalks for her from the bundles and leave them for her to pick up , and do n't rebuke her . ” 17 So Ruth gleaned in the field until evening . Then she threshed the barley she had gathered , and it amounted to about an ephah . [ a ] 18 She carried it back to town , and her mother-in-law saw how much she had gathered . Ruth also brought out and gave her what she had left over after she had eaten enough . 19 Her mother-in-law asked her , “ Where did you glean today ? Where did you work ? Blessed be the man who took notice of you ! ” Then Ruth told her mother-in-law about the one at whose place she had been working . “ The name of the man I worked with today is Boaz , ” she said . 20 “ The LORD bless him ! ” Naomi said to her daughter-in-law . “ He has not stopped showing his kindness to the living and the dead . ” She added , “ That man is our close relative ; he is one of our kinsman-redeemers . ” 21 Then Ruth the Moabitess said , “ He even said to me , ‘ Stay with my workers until they finish harvesting all my grain . ' ” 22 Naomi said to Ruth her daughter-in-law , “ It will be good for you , my daughter , to go with his girls , because in someone else 's field you might be harmed . ” 23 So Ruth stayed close to the servant girls of Boaz to glean until the barley and wheat harvests were finished . And she lived with her mother-in-law . </text>
<text id="Bib2John_Gospel_12_EN.txt">
﻿ John 1 The Word Became Flesh 1 In the beginning was the Word , and the Word was with God , and the Word was God . 2 He was with God in the beginning . 3 Through him all things were made ; without him nothing was made that has been made . 4 In him was life , and that life was the light of men . 5 The light shines in the darkness , but the darkness has not understood[a ] it . 6 There came a man who was sent from God ; his name was John . 7 He came as a witness to testify concerning that light , so that through him all men might believe . 8 He himself was not the light ; he came only as a witness to the light . 9 The true light that gives light to every man was coming into the world . [ b ] 10 He was in the world , and though the world was made through him , the world did not recognize him . 11 He came to that which was his own , but his own did not receive him . 12 Yet to all who received him , to those who believed in his name , he gave the right to become children of God — 13 children born not of natural descent , [ c ] nor of human decision or a husband 's will , but born of God . 14 The Word became flesh and made his dwelling among us . We have seen his glory , the glory of the One and Only , [ d ] who came from the Father , full of grace and truth . 15 John testifies concerning him . He cries out , saying , “ This was he of whom I said , ‘ He who comes after me has surpassed me because he was before me . ' ” 16 From the fullness of his grace we have all received one blessing after another . 17 For the law was given through Moses ; grace and truth came through Jesus Christ . 18 No one has ever seen God , but God the One and Only , [ e][f ] who is at the Father 's side , has made him known . John the Baptist Denies Being the Christ 19 Now this was John 's testimony when the Jews of Jerusalem sent priests and Levites to ask him who he was . 20 He did not fail to confess , but confessed freely , “ I am not the Christ . [ g ] ” 21 They asked him , “ Then who are you ? Are you Elijah ? ” He said , “ I am not . ” “ Are you the Prophet ? ” He answered , “ No. ” 22 Finally they said , “ Who are you ? Give us an answer to take back to those who sent us . What do you say about yourself ? ” 23 John replied in the words of Isaiah the prophet , “ I am the voice of one calling in the desert , ‘ Make straight the way for the Lord . '”[h ] 24 Now some Pharisees who had been sent 25 questioned him , “ Why then do you baptize if you are not the Christ , nor Elijah , nor the Prophet ? ” 26 “ I baptize with[i ] water , ” John replied , “ but among you stands one you do not know . 27 He is the one who comes after me , the thongs of whose sandals I am not worthy to untie . ” 28 This all happened at Bethany on the other side of the Jordan , where John was baptizing . Jesus the Lamb of God 29 The next day John saw Jesus coming toward him and said , “ Look , the Lamb of God , who takes away the sin of the world ! 30 This is the one I meant when I said , ‘ A man who comes after me has surpassed me because he was before me . ' 31 I myself did not know him , but the reason I came baptizing with water was that he might be revealed to Israel . ” 32 Then John gave this testimony : “ I saw the Spirit come down from heaven as a dove and remain on him . 33 I would not have known him , except that the one who sent me to baptize with water told me , ‘ The man on whom you see the Spirit come down and remain is he who will baptize with the Holy Spirit . ' 34 I have seen and I testify that this is the Son of God . ” Jesus ' First Disciples 35 The next day John was there again with two of his disciples . 36 When he saw Jesus passing by , he said , “ Look , the Lamb of God ! ” 37 When the two disciples heard him say this , they followed Jesus . 38 Turning around , Jesus saw them following and asked , “ What do you want ? ” They said , “ Rabbi ” ( which means Teacher ) , “ where are you staying ? ” 39 “ Come , ” he replied , “ and you will see . ” So they went and saw where he was staying , and spent that day with him . It was about the tenth hour . 40 Andrew , Simon Peter 's brother , was one of the two who heard what John had said and who had followed Jesus . 41 The first thing Andrew did was to find his brother Simon and tell him , “ We have found the Messiah ” ( that is , the Christ ) . 42 And he brought him to Jesus . Jesus looked at him and said , “ You are Simon son of John . You will be called Cephas ” ( which , when translated , is Peter[j ] ) . Jesus Calls Philip and Nathanael 43 The next day Jesus decided to leave for Galilee . Finding Philip , he said to him , “ Follow me . ” 44 Philip , like Andrew and Peter , was from the town of Bethsaida . 45 Philip found Nathanael and told him , “ We have found the one Moses wrote about in the Law , and about whom the prophets also wrote—Jesus of Nazareth , the son of Joseph . ” 46 “ Nazareth ! Can anything good come from there ? ” Nathanael asked . “ Come and see , ” said Philip . 47 When Jesus saw Nathanael approaching , he said of him , “ Here is a true Israelite , in whom there is nothing false . ” 48 “ How do you know me ? ” Nathanael asked . Jesus answered , “ I saw you while you were still under the fig tree before Philip called you . ” 49 Then Nathanael declared , “ Rabbi , you are the Son of God ; you are the King of Israel . ” 50 Jesus said , “ You believe[k ] because I told you I saw you under the fig tree . You shall see greater things than that . ” 51 He then added , “ I tell you[l ] the truth , you[m ] shall see heaven open , and the angels of God ascending and descending on the Son of Man . ” John 2 Jesus Changes Water to Wine 1 On the third day a wedding took place at Cana in Galilee . Jesus ' mother was there , 2 and Jesus and his disciples had also been invited to the wedding . 3 When the wine was gone , Jesus ' mother said to him , “ They have no more wine . ” 4 “ Dear woman , why do you involve me ? ” Jesus replied . “ My time has not yet come . ” 5 His mother said to the servants , “ Do whatever he tells you . ” 6 Nearby stood six stone water jars , the kind used by the Jews for ceremonial washing , each holding from twenty to thirty gallons . [ a ] 7 Jesus said to the servants , “ Fill the jars with water ” ; so they filled them to the brim . 8 Then he told them , “ Now draw some out and take it to the master of the banquet . ” They did so , 9 and the master of the banquet tasted the water that had been turned into wine . He did not realize where it had come from , though the servants who had drawn the water knew . Then he called the bridegroom aside 10 and said , “ Everyone brings out the choice wine first and then the cheaper wine after the guests have had too much to drink ; but you have saved the best till now . ” 11 This , the first of his miraculous signs , Jesus performed at Cana in Galilee . He thus revealed his glory , and his disciples put their faith in him . Jesus Clears the Temple 12 After this he went down to Capernaum with his mother and brothers and his disciples . There they stayed for a few days. 13 When it was almost time for the Jewish Passover , Jesus went up to Jerusalem . 14 In the temple courts he found men selling cattle , sheep and doves , and others sitting at tables exchanging money . 15 So he made a whip out of cords , and drove all from the temple area , both sheep and cattle ; he scattered the coins of the money changers and overturned their tables . 16 To those who sold doves he said , “ Get these out of here ! How dare you turn my Father 's house into a market ! ” 17 His disciples remembered that it is written : “ Zeal for your house will consume me . ” [ b ] 18 Then the Jews demanded of him , “ What miraculous sign can you show us to prove your authority to do all this ? ” 19 Jesus answered them , “ Destroy this temple , and I will raise it again in three days. ” 20 The Jews replied , “ It has taken forty-six years to build this temple , and you are going to raise it in three days ? ” 21 But the temple he had spoken of was his body . 22 After he was raised from the dead , his disciples recalled what he had said . Then they believed the Scripture and the words that Jesus had spoken . 23 Now while he was in Jerusalem at the Passover Feast , many people saw the miraculous signs he was doing and believed in his name . [ c ] 24 But Jesus would not entrust himself to them , for he knew all men . 25 He did not need man 's testimony about man , for he knew what was in a man . </text>
<text id="Bib2Jude_Epistle_1_EN.txt">
﻿ Jude 1 1 Jude , a servant of Jesus Christ and a brother of James , To those who have been called , who are loved by God the Father and kept by[a ] Jesus Christ : 2 Mercy , peace and love be yours in abundance . The Sin and Doom of Godless Men 3 Dear friends , although I was very eager to write to you about the salvation we share , I felt I had to write and urge you to contend for the faith that was once for all entrusted to the saints . 4 For certain men whose condemnation was written about[b ] long ago have secretly slipped in among you . They are godless men , who change the grace of our God into a license for immorality and deny Jesus Christ our only Sovereign and Lord . 5 Though you already know all this , I want to remind you that the Lord[c ] delivered his people out of Egypt , but later destroyed those who did not believe . 6 And the angels who did not keep their positions of authority but abandoned their own home—these he has kept in darkness , bound with everlasting chains for judgment on the great Day . 7 In a similar way , Sodom and Gomorrah and the surrounding towns gave themselves up to sexual immorality and perversion . They serve as an example of those who suffer the punishment of eternal fire . 8 In the very same way , these dreamers pollute their own bodies , reject authority and slander celestial beings . 9 But even the archangel Michael , when he was disputing with the devil about the body of Moses , did not dare to bring a slanderous accusation against him , but said , “ The Lord rebuke you ! ” 10 Yet these men speak abusively against whatever they do not understand ; and what things they do understand by instinct , like unreasoning animals—these are the very things that destroy them . 11 Woe to them ! They have taken the way of Cain ; they have rushed for profit into Balaam 's error ; they have been destroyed in Korah 's rebellion . 12 These men are blemishes at your love feasts , eating with you without the slightest qualm—shepherds who feed only themselves . They are clouds without rain , blown along by the wind ; autumn trees , without fruit and uprooted—twice dead . 13 They are wild waves of the sea , foaming up their shame ; wandering stars , for whom blackest darkness has been reserved forever . 14 Enoch , the seventh from Adam , prophesied about these men : “ See , the Lord is coming with thousands upon thousands of his holy ones 15 to judge everyone , and to convict all the ungodly of all the ungodly acts they have done in the ungodly way , and of all the harsh words ungodly sinners have spoken against him . ” 16 These men are grumblers and faultfinders ; they follow their own evil desires ; they boast about themselves and flatter others for their own advantage . A Call to Persevere 17 But , dear friends , remember what the apostles of our Lord Jesus Christ foretold . 18 They said to you , “ In the last times there will be scoffers who will follow their own ungodly desires . ” 19 These are the men who divide you , who follow mere natural instincts and do not have the Spirit . 20 But you , dear friends , build yourselves up in your most holy faith and pray in the Holy Spirit . 21 Keep yourselves in God 's love as you wait for the mercy of our Lord Jesus Christ to bring you to eternal life . 22 Be merciful to those who doubt ; 23 snatch others from the fire and save them ; to others show mercy , mixed with fear—hating even the clothing stained by corrupted flesh . Doxology 24 To him who is able to keep you from falling and to present you before his glorious presence without fault and with great joy — 25 to the only God our Savior be glory , majesty , power and authority , through Jesus Christ our Lord , before all ages , now and forevermore ! Amen . </text>
<text id="Bib2Luke_Acts_12_EN.txt">
﻿ Acts 1 Jesus Taken Up Into Heaven 1 In my former book , Theophilus , I wrote about all that Jesus began to do and to teach 2 until the day he was taken up to heaven , after giving instructions through the Holy Spirit to the apostles he had chosen . 3 After his suffering , he showed himself to these men and gave many convincing proofs that he was alive . He appeared to them over a period of forty days and spoke about the kingdom of God . 4 On one occasion , while he was eating with them , he gave them this command : “ Do not leave Jerusalem , but wait for the gift my Father promised , which you have heard me speak about . 5 For John baptized with[a ] water , but in a few days you will be baptized with the Holy Spirit . ” 6 So when they met together , they asked him , “ Lord , are you at this time going to restore the kingdom to Israel ? ” 7 He said to them : “ It is not for you to know the times or dates the Father has set by his own authority . 8 But you will receive power when the Holy Spirit comes on you ; and you will be my witnesses in Jerusalem , and in all Judea and Samaria , and to the ends of the earth . ” 9 After he said this , he was taken up before their very eyes , and a cloud hid him from their sight . 10 They were looking intently up into the sky as he was going , when suddenly two men dressed in white stood beside them . 11 “ Men of Galilee , ” they said , “ why do you stand here looking into the sky ? This same Jesus , who has been taken from you into heaven , will come back in the same way you have seen him go into heaven . ” Matthias Chosen to Replace Judas 12 Then they returned to Jerusalem from the hill called the Mount of Olives , a Sabbath day’s walk[b ] from the city . 13 When they arrived , they went upstairs to the room where they were staying . Those present were Peter , John , James and Andrew ; Philip and Thomas , Bartholomew and Matthew ; James son of Alphaeus and Simon the Zealot , and Judas son of James . 14 They all joined together constantly in prayer , along with the women and Mary the mother of Jesus , and with his brothers . 15 In those days Peter stood up among the believers[c ] ( a group numbering about a hundred and twenty ) 16 and said , “ Brothers , the Scripture had to be fulfilled which the Holy Spirit spoke long ago through the mouth of David concerning Judas , who served as guide for those who arrested Jesus — 17 he was one of our number and shared in this ministry . ” 18 ( With the reward he got for his wickedness , Judas bought a field ; there he fell headlong , his body burst open and all his intestines spilled out . 19 Everyone in Jerusalem heard about this , so they called that field in their language Akeldama , that is , Field of Blood . ) 20 “ For , ” said Peter , “ it is written in the book of Psalms , “ ‘ May his place be deserted ; let there be no one to dwell in it , ’ [ d ] and , “ ‘ May another take his place of leadership . ’ [ e ] 21 Therefore it is necessary to choose one of the men who have been with us the whole time the Lord Jesus went in and out among us , 22 beginning from John’s baptism to the time when Jesus was taken up from us . For one of these must become a witness with us of his resurrection . ” 23 So they proposed two men : Joseph called Barsabbas ( also known as Justus ) and Matthias . 24 Then they prayed , “ Lord , you know everyone’s heart . Show us which of these two you have chosen 25 to take over this apostolic ministry , which Judas left to go where he belongs . ” 26 Then they cast lots , and the lot fell to Matthias ; so he was added to the eleven apostles . Acts 2 The Holy Spirit Comes at Pentecost 1 When the day of Pentecost came , they were all together in one place . 2 Suddenly a sound like the blowing of a violent wind came from heaven and filled the whole house where they were sitting . 3 They saw what seemed to be tongues of fire that separated and came to rest on each of them . 4 All of them were filled with the Holy Spirit and began to speak in other tongues[a ] as the Spirit enabled them . 5 Now there were staying in Jerusalem God-fearing Jews from every nation under heaven . 6 When they heard this sound , a crowd came together in bewilderment , because each one heard them speaking in his own language . 7 Utterly amazed , they asked : “ Are not all these men who are speaking Galileans ? 8 Then how is it that each of us hears them in his own native language ? 9 Parthians , Medes and Elamites ; residents of Mesopotamia , Judea and Cappadocia , Pontus and Asia , 10 Phrygia and Pamphylia , Egypt and the parts of Libya near Cyrene ; visitors from Rome 11 ( both Jews and converts to Judaism ) ; Cretans and Arabs—we hear them declaring the wonders of God in our own tongues ! ” 12 Amazed and perplexed , they asked one another , “ What does this mean ? ” 13 Some , however , made fun of them and said , “ They have had too much wine . [ b ] ” Peter Addresses the Crowd 14 Then Peter stood up with the Eleven , raised his voice and addressed the crowd : “ Fellow Jews and all of you who live in Jerusalem , let me explain this to you ; listen carefully to what I say . 15 These men are not drunk , as you suppose . It’s only nine in the morning ! 16 No , this is what was spoken by the prophet Joel : 17 “ ‘ In the last days , God says , I will pour out my Spirit on all people . Your sons and daughters will prophesy , your young men will see visions , your old men will dream dreams . 18 Even on my servants , both men and women , I will pour out my Spirit in those days , and they will prophesy . 19 I will show wonders in the heaven above and signs on the earth below , blood and fire and billows of smoke . 20 The sun will be turned to darkness and the moon to blood before the coming of the great and glorious day of the Lord . 21 And everyone who calls on the name of the Lord will be saved . ’ [ c ] 22 “ Men of Israel , listen to this : Jesus of Nazareth was a man accredited by God to you by miracles , wonders and signs , which God did among you through him , as you yourselves know . 23 This man was handed over to you by God’s set purpose and foreknowledge ; and you , with the help of wicked men , [ d ] put him to death by nailing him to the cross . 24 But God raised him from the dead , freeing him from the agony of death , because it was impossible for death to keep its hold on him . 25 David said about him : “ ‘ I saw the Lord always before me . Because he is at my right hand , I will not be shaken . 26 Therefore my heart is glad and my tongue rejoices ; my body also will live in hope , 27 because you will not abandon me to the grave , nor will you let your Holy One see decay . 28 You have made known to me the paths of life ; you will fill me with joy in your presence . ’ [ e ] 29 “ Brothers , I can tell you confidently that the patriarch David died and was buried , and his tomb is here to this day . 30 But he was a prophet and knew that God had promised him on oath that he would place one of his descendants on his throne . 31 Seeing what was ahead , he spoke of the resurrection of the Christ , [ f ] that he was not abandoned to the grave , nor did his body see decay . 32 God has raised this Jesus to life , and we are all witnesses of the fact . 33 Exalted to the right hand of God , he has received from the Father the promised Holy Spirit and has poured out what you now see and hear . 34 For David did not ascend to heaven , and yet he said , “ ‘ The Lord said to my Lord : “ Sit at my right hand 35 until I make your enemies a footstool for your feet . ” ’ [ g ] 36 “ Therefore let all Israel be assured of this : God has made this Jesus , whom you crucified , both Lord and Christ . ” 37 When the people heard this , they were cut to the heart and said to Peter and the other apostles , “ Brothers , what shall we do ? ” 38 Peter replied , “ Repent and be baptized , every one of you , in the name of Jesus Christ for the forgiveness of your sins . And you will receive the gift of the Holy Spirit . 39 The promise is for you and your children and for all who are far off—for all whom the Lord our God will call . ” 40 With many other words he warned them ; and he pleaded with them , “ Save yourselves from this corrupt generation . ” 41 Those who accepted his message were baptized , and about three thousand were added to their number that day . The Fellowship of the Believers 42 They devoted themselves to the apostles ’ teaching and to the fellowship , to the breaking of bread and to prayer . 43 Everyone was filled with awe , and many wonders and miraculous signs were done by the apostles . 44 All the believers were together and had everything in common . 45 Selling their possessions and goods , they gave to anyone as he had need . 46 Every day they continued to meet together in the temple courts . They broke bread in their homes and ate together with glad and sincere hearts , 47 praising God and enjoying the favor of all the people . And the Lord added to their number daily those who were being saved . </text>
<text id="Bib2Luke_Acts_2728_EN.txt">
﻿ Acts 27 Paul Sails for Rome 1 When it was decided that we would sail for Italy , Paul and some other prisoners were handed over to a centurion named Julius , who belonged to the Imperial Regiment . 2 We boarded a ship from Adramyttium about to sail for ports along the coast of the province of Asia , and we put out to sea . Aristarchus , a Macedonian from Thessalonica , was with us . 3 The next day we landed at Sidon ; and Julius , in kindness to Paul , allowed him to go to his friends so they might provide for his needs . 4 From there we put out to sea again and passed to the lee of Cyprus because the winds were against us . 5 When we had sailed across the open sea off the coast of Cilicia and Pamphylia , we landed at Myra in Lycia . 6 There the centurion found an Alexandrian ship sailing for Italy and put us on board . 7 We made slow headway for many days and had difficulty arriving off Cnidus . When the wind did not allow us to hold our course , we sailed to the lee of Crete , opposite Salmone . 8 We moved along the coast with difficulty and came to a place called Fair Havens , near the town of Lasea . 9 Much time had been lost , and sailing had already become dangerous because by now it was after the Fast . [ a ] So Paul warned them , 10 “ Men , I can see that our voyage is going to be disastrous and bring great loss to ship and cargo , and to our own lives also . ” 11 But the centurion , instead of listening to what Paul said , followed the advice of the pilot and of the owner of the ship . 12 Since the harbor was unsuitable to winter in , the majority decided that we should sail on , hoping to reach Phoenix and winter there . This was a harbor in Crete , facing both southwest and northwest . The Storm 13 When a gentle south wind began to blow , they thought they had obtained what they wanted ; so they weighed anchor and sailed along the shore of Crete . 14 Before very long , a wind of hurricane force , called the “ northeaster , ” swept down from the island . 15 The ship was caught by the storm and could not head into the wind ; so we gave way to it and were driven along . 16 As we passed to the lee of a small island called Cauda , we were hardly able to make the lifeboat secure . 17 When the men had hoisted it aboard , they passed ropes under the ship itself to hold it together . Fearing that they would run aground on the sandbars of Syrtis , they lowered the sea anchor and let the ship be driven along . 18 We took such a violent battering from the storm that the next day they began to throw the cargo overboard . 19 On the third day , they threw the ship 's tackle overboard with their own hands . 20 When neither sun nor stars appeared for many days and the storm continued raging , we finally gave up all hope of being saved . 21 After the men had gone a long time without food , Paul stood up before them and said : “ Men , you should have taken my advice not to sail from Crete ; then you would have spared yourselves this damage and loss . 22 But now I urge you to keep up your courage , because not one of you will be lost ; only the ship will be destroyed . 23 Last night an angel of the God whose I am and whom I serve stood beside me 24 and said , ‘ Do not be afraid , Paul . You must stand trial before Caesar ; and God has graciously given you the lives of all who sail with you . ' 25 So keep up your courage , men , for I have faith in God that it will happen just as he told me . 26 Nevertheless , we must run aground on some island . ” The Shipwreck 27 On the fourteenth night we were still being driven across the Adriatic[b ] Sea , when about midnight the sailors sensed they were approaching land . 28 They took soundings and found that the water was a hundred and twenty feet[c ] deep . A short time later they took soundings again and found it was ninety feet[d ] deep . 29 Fearing that we would be dashed against the rocks , they dropped four anchors from the stern and prayed for daylight . 30 In an attempt to escape from the ship , the sailors let the lifeboat down into the sea , pretending they were going to lower some anchors from the bow . 31 Then Paul said to the centurion and the soldiers , “ Unless these men stay with the ship , you cannot be saved . ” 32 So the soldiers cut the ropes that held the lifeboat and let it fall away . 33 Just before dawn Paul urged them all to eat . “ For the last fourteen days , ” he said , “ you have been in constant suspense and have gone without food—you have n't eaten anything . 34 Now I urge you to take some food . You need it to survive . Not one of you will lose a single hair from his head . ” 35 After he said this , he took some bread and gave thanks to God in front of them all . Then he broke it and began to eat . 36 They were all encouraged and ate some food themselves . 37 Altogether there were 276 of us on board . 38 When they had eaten as much as they wanted , they lightened the ship by throwing the grain into the sea . 39 When daylight came , they did not recognize the land , but they saw a bay with a sandy beach , where they decided to run the ship aground if they could . 40 Cutting loose the anchors , they left them in the sea and at the same time untied the ropes that held the rudders . Then they hoisted the foresail to the wind and made for the beach . 41 But the ship struck a sandbar and ran aground . The bow stuck fast and would not move , and the stern was broken to pieces by the pounding of the surf . 42 The soldiers planned to kill the prisoners to prevent any of them from swimming away and escaping . 43 But the centurion wanted to spare Paul 's life and kept them from carrying out their plan . He ordered those who could swim to jump overboard first and get to land . 44 The rest were to get there on planks or on pieces of the ship . In this way everyone reached land in safety . Acts 28 Ashore on Malta 1 Once safely on shore , we found out that the island was called Malta . 2 The islanders showed us unusual kindness . They built a fire and welcomed us all because it was raining and cold . 3 Paul gathered a pile of brushwood and , as he put it on the fire , a viper , driven out by the heat , fastened itself on his hand . 4 When the islanders saw the snake hanging from his hand , they said to each other , “ This man must be a murderer ; for though he escaped from the sea , Justice has not allowed him to live . ” 5 But Paul shook the snake off into the fire and suffered no ill effects . 6 The people expected him to swell up or suddenly fall dead , but after waiting a long time and seeing nothing unusual happen to him , they changed their minds and said he was a god . 7 There was an estate nearby that belonged to Publius , the chief official of the island . He welcomed us to his home and for three days entertained us hospitably . 8 His father was sick in bed , suffering from fever and dysentery . Paul went in to see him and , after prayer , placed his hands on him and healed him . 9 When this had happened , the rest of the sick on the island came and were cured . 10 They honored us in many ways and when we were ready to sail , they furnished us with the supplies we needed . Arrival at Rome 11 After three months we put out to sea in a ship that had wintered in the island . It was an Alexandrian ship with the figurehead of the twin gods Castor and Pollux . 12 We put in at Syracuse and stayed there three days. 13 From there we set sail and arrived at Rhegium . The next day the south wind came up , and on the following day we reached Puteoli . 14 There we found some brothers who invited us to spend a week with them . And so we came to Rome . 15 The brothers there had heard that we were coming , and they traveled as far as the Forum of Appius and the Three Taverns to meet us . At the sight of these men Paul thanked God and was encouraged . 16 When we got to Rome , Paul was allowed to live by himself , with a soldier to guard him . Paul Preaches at Rome Under Guard 17 Three days later he called together the leaders of the Jews . When they had assembled , Paul said to them : “ My brothers , although I have done nothing against our people or against the customs of our ancestors , I was arrested in Jerusalem and handed over to the Romans . 18 They examined me and wanted to release me , because I was not guilty of any crime deserving death . 19 But when the Jews objected , I was compelled to appeal to Caesar—not that I had any charge to bring against my own people . 20 For this reason I have asked to see you and talk with you . It is because of the hope of Israel that I am bound with this chain . ” 21 They replied , “ We have not received any letters from Judea concerning you , and none of the brothers who have come from there has reported or said anything bad about you . 22 But we want to hear what your views are , for we know that people everywhere are talking against this sect . ” 23 They arranged to meet Paul on a certain day , and came in even larger numbers to the place where he was staying . From morning till evening he explained and declared to them the kingdom of God and tried to convince them about Jesus from the Law of Moses and from the Prophets . 24 Some were convinced by what he said , but others would not believe . 25 They disagreed among themselves and began to leave after Paul had made this final statement : “ The Holy Spirit spoke the truth to your forefathers when he said through Isaiah the prophet : 26 “ ‘ Go to this people and say , “ You will be ever hearing but never understanding ; you will be ever seeing but never perceiving . ” 27 For this people 's heart has become calloused ; they hardly hear with their ears , and they have closed their eyes . Otherwise they might see with their eyes , hear with their ears , understand with their hearts and turn , and I would heal them . '[a ] 28 “ Therefore I want you to know that God 's salvation has been sent to the Gentiles , and they will listen ! ” [ b ] 30 For two whole years Paul stayed there in his own rented house and welcomed all who came to see him . 31 Boldly and without hindrance he preached the kingdom of God and taught about the Lord Jesus Christ . </text>
<text id="Bib2Luke_Gospel_12_EN.txt">
﻿ Luke 1 Introduction 1 Many have undertaken to draw up an account of the things that have been fulfilled[a ] among us , 2 just as they were handed down to us by those who from the first were eyewitnesses and servants of the word . 3 Therefore , since I myself have carefully investigated everything from the beginning , it seemed good also to me to write an orderly account for you , most excellent Theophilus , 4 so that you may know the certainty of the things you have been taught . The Birth of John the Baptist Foretold 5 In the time of Herod king of Judea there was a priest named Zechariah , who belonged to the priestly division of Abijah ; his wife Elizabeth was also a descendant of Aaron . 6 Both of them were upright in the sight of God , observing all the Lord’s commandments and regulations blamelessly . 7 But they had no children , because Elizabeth was barren ; and they were both well along in years . 8 Once when Zechariah’s division was on duty and he was serving as priest before God , 9 he was chosen by lot , according to the custom of the priesthood , to go into the temple of the Lord and burn incense . 10 And when the time for the burning of incense came , all the assembled worshipers were praying outside . 11 Then an angel of the Lord appeared to him , standing at the right side of the altar of incense . 12 When Zechariah saw him , he was startled and was gripped with fear . 13 But the angel said to him : “ Do not be afraid , Zechariah ; your prayer has been heard . Your wife Elizabeth will bear you a son , and you are to give him the name John . 14 He will be a joy and delight to you , and many will rejoice because of his birth , 15 for he will be great in the sight of the Lord . He is never to take wine or other fermented drink , and he will be filled with the Holy Spirit even from birth . [ b ] 16 Many of the people of Israel will he bring back to the Lord their God . 17 And he will go on before the Lord , in the spirit and power of Elijah , to turn the hearts of the fathers to their children and the disobedient to the wisdom of the righteous—to make ready a people prepared for the Lord . ” 18 Zechariah asked the angel , “ How can I be sure of this ? I am an old man and my wife is well along in years . ” 19 The angel answered , “ I am Gabriel . I stand in the presence of God , and I have been sent to speak to you and to tell you this good news . 20 And now you will be silent and not able to speak until the day this happens , because you did not believe my words , which will come true at their proper time . ” 21 Meanwhile , the people were waiting for Zechariah and wondering why he stayed so long in the temple . 22 When he came out , he could not speak to them . They realized he had seen a vision in the temple , for he kept making signs to them but remained unable to speak . 23 When his time of service was completed , he returned home . 24 After this his wife Elizabeth became pregnant and for five months remained in seclusion . 25 “ The Lord has done this for me , ” she said . “ In these days he has shown his favor and taken away my disgrace among the people . ” The Birth of Jesus Foretold 26 In the sixth month , God sent the angel Gabriel to Nazareth , a town in Galilee , 27 to a virgin pledged to be married to a man named Joseph , a descendant of David . The virgin’s name was Mary . 28 The angel went to her and said , “ Greetings , you who are highly favored ! The Lord is with you . ” 29 Mary was greatly troubled at his words and wondered what kind of greeting this might be . 30 But the angel said to her , “ Do not be afraid , Mary , you have found favor with God . 31 You will be with child and give birth to a son , and you are to give him the name Jesus . 32 He will be great and will be called the Son of the Most High . The Lord God will give him the throne of his father David , 33 and he will reign over the house of Jacob forever ; his kingdom will never end . ” 34 “ How will this be , ” Mary asked the angel , “ since I am a virgin ? ” 35 The angel answered , “ The Holy Spirit will come upon you , and the power of the Most High will overshadow you . So the holy one to be born will be called[c ] the Son of God . 36 Even Elizabeth your relative is going to have a child in her old age , and she who was said to be barren is in her sixth month . 37 For nothing is impossible with God . ” 38 “ I am the Lord’s servant , ” Mary answered . “ May it be to me as you have said . ” Then the angel left her . Mary Visits Elizabeth 39 At that time Mary got ready and hurried to a town in the hill country of Judea , 40 where she entered Zechariah’s home and greeted Elizabeth . 41 When Elizabeth heard Mary’s greeting , the baby leaped in her womb , and Elizabeth was filled with the Holy Spirit . 42 In a loud voice she exclaimed : “ Blessed are you among women , and blessed is the child you will bear ! 43 But why am I so favored , that the mother of my Lord should come to me ? 44 As soon as the sound of your greeting reached my ears , the baby in my womb leaped for joy . 45 Blessed is she who has believed that what the Lord has said to her will be accomplished ! ” Mary’s Song 46 And Mary said : “ My soul glorifies the Lord 47 and my spirit rejoices in God my Savior , 48 for he has been mindful of the humble state of his servant . From now on all generations will call me blessed , 49 for the Mighty One has done great things for me — holy is his name . 50 His mercy extends to those who fear him , from generation to generation . 51 He has performed mighty deeds with his arm ; he has scattered those who are proud in their inmost thoughts . 52 He has brought down rulers from their thrones but has lifted up the humble . 53 He has filled the hungry with good things but has sent the rich away empty . 54 He has helped his servant Israel , remembering to be merciful 55 to Abraham and his descendants forever , even as he said to our fathers . ” 56 Mary stayed with Elizabeth for about three months and then returned home . The Birth of John the Baptist 57 When it was time for Elizabeth to have her baby , she gave birth to a son . 58 Her neighbors and relatives heard that the Lord had shown her great mercy , and they shared her joy . 59 On the eighth day they came to circumcise the child , and they were going to name him after his father Zechariah , 60 but his mother spoke up and said , “ No ! He is to be called John . ” 61 They said to her , “ There is no one among your relatives who has that name . ” 62 Then they made signs to his father , to find out what he would like to name the child . 63 He asked for a writing tablet , and to everyone’s astonishment he wrote , “ His name is John . ” 64 Immediately his mouth was opened and his tongue was loosed , and he began to speak , praising God . 65 The neighbors were all filled with awe , and throughout the hill country of Judea people were talking about all these things . 66 Everyone who heard this wondered about it , asking , “ What then is this child going to be ? ” For the Lord’s hand was with him . Zechariah’s Song 67 His father Zechariah was filled with the Holy Spirit and prophesied : 68 “ Praise be to the Lord , the God of Israel , because he has come and has redeemed his people . 69 He has raised up a horn[d ] of salvation for us in the house of his servant David 70 ( as he said through his holy prophets of long ago ) , 71 salvation from our enemies and from the hand of all who hate us — 72 to show mercy to our fathers and to remember his holy covenant , 73 the oath he swore to our father Abraham : 74 to rescue us from the hand of our enemies , and to enable us to serve him without fear 75 in holiness and righteousness before him all our days. 76 And you , my child , will be called a prophet of the Most High ; for you will go on before the Lord to prepare the way for him , 77 to give his people the knowledge of salvation through the forgiveness of their sins , 78 because of the tender mercy of our God , by which the rising sun will come to us from heaven 79 to shine on those living in darkness and in the shadow of death , to guide our feet into the path of peace . ” 80 And the child grew and became strong in spirit ; and he lived in the desert until he appeared publicly to Israel . Luke 2 The Birth of Jesus 1 In those days Caesar Augustus issued a decree that a census should be taken of the entire Roman world . 2 ( This was the first census that took place while Quirinius was governor of Syria . ) 3 And everyone went to his own town to register . 4 So Joseph also went up from the town of Nazareth in Galilee to Judea , to Bethlehem the town of David , because he belonged to the house and line of David . 5 He went there to register with Mary , who was pledged to be married to him and was expecting a child . 6 While they were there , the time came for the baby to be born , 7 and she gave birth to her firstborn , a son . She wrapped him in cloths and placed him in a manger , because there was no room for them in the inn . The Shepherds and the Angels 8 And there were shepherds living out in the fields nearby , keeping watch over their flocks at night . 9 An angel of the Lord appeared to them , and the glory of the Lord shone around them , and they were terrified . 10 But the angel said to them , “ Do not be afraid . I bring you good news of great joy that will be for all the people . 11 Today in the town of David a Savior has been born to you ; he is Christ[a ] the Lord . 12 This will be a sign to you : You will find a baby wrapped in cloths and lying in a manger . ” 13 Suddenly a great company of the heavenly host appeared with the angel , praising God and saying , 14 “ Glory to God in the highest , and on earth peace to men on whom his favor rests . ” 15 When the angels had left them and gone into heaven , the shepherds said to one another , “ Let’s go to Bethlehem and see this thing that has happened , which the Lord has told us about . ” 16 So they hurried off and found Mary and Joseph , and the baby , who was lying in the manger . 17 When they had seen him , they spread the word concerning what had been told them about this child , 18 and all who heard it were amazed at what the shepherds said to them . 19 But Mary treasured up all these things and pondered them in her heart . 20 The shepherds returned , glorifying and praising God for all the things they had heard and seen , which were just as they had been told . Jesus Presented in the Temple 21 On the eighth day , when it was time to circumcise him , he was named Jesus , the name the angel had given him before he had been conceived . 22 When the time of their purification according to the Law of Moses had been completed , Joseph and Mary took him to Jerusalem to present him to the Lord 23 ( as it is written in the Law of the Lord , “ Every firstborn male is to be consecrated to the Lord”[b ] ) , 24 and to offer a sacrifice in keeping with what is said in the Law of the Lord : “ a pair of doves or two young pigeons . ” [ c ] 25 Now there was a man in Jerusalem called Simeon , who was righteous and devout . He was waiting for the consolation of Israel , and the Holy Spirit was upon him . 26 It had been revealed to him by the Holy Spirit that he would not die before he had seen the Lord’s Christ . 27 Moved by the Spirit , he went into the temple courts . When the parents brought in the child Jesus to do for him what the custom of the Law required , 28 Simeon took him in his arms and praised God , saying : 29 “ Sovereign Lord , as you have promised , you now dismiss[d ] your servant in peace . 30 For my eyes have seen your salvation , 31 which you have prepared in the sight of all people , 32 a light for revelation to the Gentiles and for glory to your people Israel . ” 33 The child’s father and mother marveled at what was said about him . 34 Then Simeon blessed them and said to Mary , his mother : “ This child is destined to cause the falling and rising of many in Israel , and to be a sign that will be spoken against , 35 so that the thoughts of many hearts will be revealed . And a sword will pierce your own soul too . ” 36 There was also a prophetess , Anna , the daughter of Phanuel , of the tribe of Asher . She was very old ; she had lived with her husband seven years after her marriage , 37 and then was a widow until she was eighty-four . [ e ] She never left the temple but worshiped night and day , fasting and praying . 38 Coming up to them at that very moment , she gave thanks to God and spoke about the child to all who were looking forward to the redemption of Jerusalem . 39 When Joseph and Mary had done everything required by the Law of the Lord , they returned to Galilee to their own town of Nazareth . 40 And the child grew and became strong ; he was filled with wisdom , and the grace of God was upon him . The Boy Jesus at the Temple 41 Every year his parents went to Jerusalem for the Feast of the Passover . 42 When he was twelve years old , they went up to the Feast , according to the custom . 43 After the Feast was over , while his parents were returning home , the boy Jesus stayed behind in Jerusalem , but they were unaware of it . 44 Thinking he was in their company , they traveled on for a day . Then they began looking for him among their relatives and friends . 45 When they did not find him , they went back to Jerusalem to look for him . 46 After three days they found him in the temple courts , sitting among the teachers , listening to them and asking them questions . 47 Everyone who heard him was amazed at his understanding and his answers . 48 When his parents saw him , they were astonished . His mother said to him , “ Son , why have you treated us like this ? Your father and I have been anxiously searching for you . ” 49 “ Why were you searching for me ? ” he asked . “ Didn’t you know I had to be in my Father’s house ? ” 50 But they did not understand what he was saying to them . 51 Then he went down to Nazareth with them and was obedient to them . But his mother treasured all these things in her heart . 52 And Jesus grew in wisdom and stature , and in favor with God and men . </text>
<text id="Bib2Mark_Gospel_12_EN.txt">
﻿ Mark 1 John the Baptist Prepares the Way 1 The beginning of the gospel about Jesus Christ , the Son of God . [ a ] 2 It is written in Isaiah the prophet : “ I will send my messenger ahead of you , who will prepare your way”[b ] — 3 “ a voice of one calling in the desert , ‘ Prepare the way for the Lord , make straight paths for him . '”[c ] 4 And so John came , baptizing in the desert region and preaching a baptism of repentance for the forgiveness of sins . 5 The whole Judean countryside and all the people of Jerusalem went out to him . Confessing their sins , they were baptized by him in the Jordan River . 6 John wore clothing made of camel 's hair , with a leather belt around his waist , and he ate locusts and wild honey . 7 And this was his message : “ After me will come one more powerful than I , the thongs of whose sandals I am not worthy to stoop down and untie . 8 I baptize you with[d ] water , but he will baptize you with the Holy Spirit . ” The Baptism and Temptation of Jesus 9 At that time Jesus came from Nazareth in Galilee and was baptized by John in the Jordan . 10 As Jesus was coming up out of the water , he saw heaven being torn open and the Spirit descending on him like a dove . 11 And a voice came from heaven : “ You are my Son , whom I love ; with you I am well pleased . ” 12 At once the Spirit sent him out into the desert , 13 and he was in the desert forty days , being tempted by Satan . He was with the wild animals , and angels attended him . The Calling of the First Disciples 14 After John was put in prison , Jesus went into Galilee , proclaiming the good news of God . 15 “ The time has come , ” he said . “ The kingdom of God is near . Repent and believe the good news ! ” 16 As Jesus walked beside the Sea of Galilee , he saw Simon and his brother Andrew casting a net into the lake , for they were fishermen . 17 “ Come , follow me , ” Jesus said , “ and I will make you fishers of men . ” 18 At once they left their nets and followed him . 19 When he had gone a little farther , he saw James son of Zebedee and his brother John in a boat , preparing their nets . 20 Without delay he called them , and they left their father Zebedee in the boat with the hired men and followed him . Jesus Drives Out an Evil Spirit 21 They went to Capernaum , and when the Sabbath came , Jesus went into the synagogue and began to teach . 22 The people were amazed at his teaching , because he taught them as one who had authority , not as the teachers of the law . 23 Just then a man in their synagogue who was possessed by an evil[e ] spirit cried out , 24 “ What do you want with us , Jesus of Nazareth ? Have you come to destroy us ? I know who you are—the Holy One of God ! ” 25 “ Be quiet ! ” said Jesus sternly . “ Come out of him ! ” 26 The evil spirit shook the man violently and came out of him with a shriek . 27 The people were all so amazed that they asked each other , “ What is this ? A new teaching—and with authority ! He even gives orders to evil spirits and they obey him . ” 28 News about him spread quickly over the whole region of Galilee . Jesus Heals Many 29 As soon as they left the synagogue , they went with James and John to the home of Simon and Andrew . 30 Simon 's mother-in-law was in bed with a fever , and they told Jesus about her . 31 So he went to her , took her hand and helped her up . The fever left her and she began to wait on them . 32 That evening after sunset the people brought to Jesus all the sick and demon-possessed . 33 The whole town gathered at the door , 34 and Jesus healed many who had various diseases . He also drove out many demons , but he would not let the demons speak because they knew who he was . Jesus Prays in a Solitary Place 35 Very early in the morning , while it was still dark , Jesus got up , left the house and went off to a solitary place , where he prayed . 36 Simon and his companions went to look for him , 37 and when they found him , they exclaimed : “ Everyone is looking for you ! ” 38 Jesus replied , “ Let us go somewhere else—to the nearby villages—so I can preach there also . That is why I have come . ” 39 So he traveled throughout Galilee , preaching in their synagogues and driving out demons . A Man With Leprosy 40 A man with leprosy[f ] came to him and begged him on his knees , “ If you are willing , you can make me clean . ” 41 Filled with compassion , Jesus reached out his hand and touched the man . “ I am willing , ” he said . “ Be clean ! ” 42 Immediately the leprosy left him and he was cured . 43 Jesus sent him away at once with a strong warning : 44 “ See that you do n't tell this to anyone . But go , show yourself to the priest and offer the sacrifices that Moses commanded for your cleansing , as a testimony to them . ” 45 Instead he went out and began to talk freely , spreading the news . As a result , Jesus could no longer enter a town openly but stayed outside in lonely places . Yet the people still came to him from everywhere . Mark 2 Jesus Heals a Paralytic 1 A few days later , when Jesus again entered Capernaum , the people heard that he had come home . 2 So many gathered that there was no room left , not even outside the door , and he preached the word to them . 3 Some men came , bringing to him a paralytic , carried by four of them . 4 Since they could not get him to Jesus because of the crowd , they made an opening in the roof above Jesus and , after digging through it , lowered the mat the paralyzed man was lying on . 5 When Jesus saw their faith , he said to the paralytic , “ Son , your sins are forgiven . ” 6 Now some teachers of the law were sitting there , thinking to themselves , 7 “ Why does this fellow talk like that ? He 's blaspheming ! Who can forgive sins but God alone ? ” 8 Immediately Jesus knew in his spirit that this was what they were thinking in their hearts , and he said to them , “ Why are you thinking these things ? 9 Which is easier : to say to the paralytic , ‘ Your sins are forgiven , ' or to say , ‘ Get up , take your mat and walk ' ? 10 But that you may know that the Son of Man has authority on earth to forgive sins … ” He said to the paralytic , 11 “ I tell you , get up , take your mat and go home . ” 12 He got up , took his mat and walked out in full view of them all . This amazed everyone and they praised God , saying , “ We have never seen anything like this ! ” The Calling of Levi 13 Once again Jesus went out beside the lake . A large crowd came to him , and he began to teach them . 14 As he walked along , he saw Levi son of Alphaeus sitting at the tax collector 's booth . “ Follow me , ” Jesus told him , and Levi got up and followed him . 15 While Jesus was having dinner at Levi 's house , many tax collectors and “ sinners ” were eating with him and his disciples , for there were many who followed him . 16 When the teachers of the law who were Pharisees saw him eating with the “ sinners ” and tax collectors , they asked his disciples : “ Why does he eat with tax collectors and ‘ sinners ' ? ” 17 On hearing this , Jesus said to them , “ It is not the healthy who need a doctor , but the sick . I have not come to call the righteous , but sinners . ” Jesus Questioned About Fasting 18 Now John 's disciples and the Pharisees were fasting . Some people came and asked Jesus , “ How is it that John 's disciples and the disciples of the Pharisees are fasting , but yours are not ? ” 19 Jesus answered , “ How can the guests of the bridegroom fast while he is with them ? They cannot , so long as they have him with them . 20 But the time will come when the bridegroom will be taken from them , and on that day they will fast . 21 “ No one sews a patch of unshrunk cloth on an old garment . If he does , the new piece will pull away from the old , making the tear worse . 22 And no one pours new wine into old wineskins . If he does , the wine will burst the skins , and both the wine and the wineskins will be ruined . No , he pours new wine into new wineskins . ” Lord of the Sabbath 23 One Sabbath Jesus was going through the grainfields , and as his disciples walked along , they began to pick some heads of grain . 24 The Pharisees said to him , “ Look , why are they doing what is unlawful on the Sabbath ? ” 25 He answered , “ Have you never read what David did when he and his companions were hungry and in need ? 26 In the days of Abiathar the high priest , he entered the house of God and ate the consecrated bread , which is lawful only for priests to eat . And he also gave some to his companions . ” 27 Then he said to them , “ The Sabbath was made for man , not man for the Sabbath . 28 So the Son of Man is Lord even of the Sabbath . ” </text>
<text id="CorpApple_Environment_EN.txt">
﻿ Apple and the Environment Frequently Asked Questions Q : How does Apple review the company’s progress and status regarding its environmental impact ? A : Apple’s Executive Team is responsible for setting and implementing environmental policies . This group of the company’s most senior executives is advised by teams from across Apple , including environmental engineering , product development , operations , facilities , and supplier responsibility . Apple’s climate change strategy is built into all facilities development plans and plays an important role in the product development process . In 2009 , at the direction of the Executive Team , Apple became the first company in the electronics industry to report its entire carbon footprint including the impact of its products on the environment through consumer use . In addition to providing consumers with an unprecedented level of detail and transparency on which to base their purchasing decisions , measuring the company’s carbon footprint helps the company identify areas where it can make the most significant reductions . We understand that the vast majority of greenhouse gas emissions ( up to 98 percent ) come from the product life cycle , which is why decisions about the environmental attributes of our products are an integral aspect of all decisions related to the design and manufacture of those products . The same is true of all the environmental decisions for our facilities . Our integrated approach means that decisions about environmental issues are reviewed at the highest levels of the company . This structure has been an important factor in Apple’s success , particularly in the area of environmental responsibility . Executive Team members regularly review each new product during its development , focusing on material and design choices , the supply chain , packaging , and product energy efficiency . Each of these areas has a direct impact on our environmental footprint . This strategy , which we’ve been using for well over two decades , has yielded the most environmentally forward-looking product designs in our industry . Every product we offer meets the ENERGY STAR guidelines for energy efficiency , is free of harmful toxins , and is made of highly recyclable materials . Our facilities and operations teams also regularly review our programs and investments to reduce carbon emissions with Executive Team members . The results of these reviews include increased use of green power , new technology investments , commute programs , and conservation . The efforts of this team have produced the highest product recycling rate in our industry . Apple delivers important environmental attributes across all the company’s products and product families . Not only does Apple deliver where others have only promised to do so in the future , Apple has delivered where it’s most meaningful . The Apple Executive Team is committed to our environmental strategy : to reduce our carbon footprint , to remove toxins , and to report on the environmental impact of every product we make so that our customers can measure our progress . We are also committed to reporting our global corporate emissions annually and to reporting at the product level with each new product introduction . Q : What is Life Cycle Assessment ( LCA ) ? A : LCA is a process of evaluating the effects that a product has on the environment throughout its life cycle . The objective of completing a full life cycle analysis is to improve resource efficiency while reducing the environmental impact of all activities required to manufacture , distribute , use , and dispose of a product . Cradle-to-grave life cycle assessments , for instance , begin with the extraction of raw materials from the earth , their transformation into finished materials , the manufacturing of materials into parts and products , transportation to end users , the energy consumed during use , and ultimately recycling . During each of these phases , activities occur that use materials and energy , generating waste and emissions . Life cycle assessment is the process used to accurately measure the emissions associated with each phase of these activities . LCA results are often categorized in several ways , including global warming potential , acidification , eutrophication , tropospheric ozone creation , and stratospheric ozone depletion . The procedures followed for life cycle assessment are defined as part of the internationally recognized ISO 14000 environmental management standards : in ISO 14040:2006 and 14044:2006 . Successful implementations of LCAs have been achieved in many industries , including automobile , airline , and consumer goods companies . For complex products and processes composed of several thousand materials , the analysis requires dedicated software applications designed to accurately capture the environmental impact of very specific processes . Software tools provide an efficient and objective assessment of the environmental impacts a company measures by using third-party databases created and updated by independent industrial engineers who are experts in specific manufacturing processes . Apple has found that a combination of data collected directly from our internal and supplier processes as well as independent third-party data sets achieves the most accurate results . Q : How does Apple use LCA ? A : Apple uses five steps when conducting a product LCA : 1. Data collection starts with measuring the power consumed by a product while it is running under a simulated use scenario . Different scenarios are used for different product lines . For example , we assume a four-year average use period for Mac computers . To be conservative , we also assume an office scenario use pattern for every computer shipped and apply that use pattern to 365 days of use per year . For handheld products , such as iPod and iPhone , we assume a three-year use period . For these products , charging patterns are defined according to a “ power user , ” which we define as intense daily use over the three-year period . More information on our product power modes is provided in our Product Environmental Reports . 2. The second step is a part-by-part measurement of the entire product . This helps us accurately measure the size and weight of the components and materials in the product . Since a single product can contain several hundred parts , this step is supported by double-checking individual part details with the product’s bill of materials . We include material and component yield loss during production as part of this process . We also account for the transportation of materials between manufacturing sites . Production emissions for external accessories , such as keyboards and mice , and packaging are also included in this step . 3. The third step assesses emissions from transportation of finished products to sales regions . Data is collected on single units and multipack units of product shipments as they are transported over land , by sea , and by air . The majority of the product transportation emissions are associated with getting the products from Asia to sales distribution hubs in Europe , Asia , and the Americas . The final leg of transport between regional hubs and individual customers is accounted for using an overall adjustment factor . 4. The last step of the product life cycle measurement is the collection and recycling of the product when it reaches the end of its useful life . Transportation between customers and recycling plants along with the treatment steps carried out by the recycler to obtain metal , plastic , and glass material streams are all accounted for in this calculation . Subsequent processing and smelting steps are not included as these are considered stages of production and not end-of-life processing . 5. After we collect all the data , the final step is to run the product data model in our LCA tool and compile detailed results for GHG emissions as they relate to the product . The data and life cycle model used in the tool are checked for quality and accuracy by the Fraunhofer Institute in Germany . Q : Does Apple index its environmental performance data using Global Reporting Initiative ( GRI ) Sustainability Reporting Guidelines ( G3 ) ? A : Yes . Environmental performance data covering energy and water consumption , greenhouse gas emissions , and waste production is provided in the 2009 Facilities Report ( PDF ) . Q : What is ISO 14001 , and is Apple ISO 14001 certified ? A : ISO 14001 is a voluntary international standard that establishes the requirements for an organization’s environmental management system ( EMS ) . The ISO 14001 standard helps a company manage the environmental impact of its operations in a systematic way that is integrated with overall business management processes . Apple first achieved ISO 14001 certification for a manufacturing site in 1996. Q : Does Apple ban environmentally sensitive substances ? A : Yes . Apple’s Regulated Substances Specification details a broad range of substances that are restricted or banned from use in Apple products , packaging , and manufacturing . Q : Do Apple products contain lead ? A : Apple is in compliance with the European RoHS Directive , which restricts the use of lead and other substances . As a result of our precautionary approach to substances , Apple phased out lead in plastic parts , paint , and packaging material long before the RoHS Directive came into effect . Q : What are Apple’s restrictions on brominated flame retardant-free ( BFR-free ) and polyvinyl chloride-free ( PVC-free ) products ? A : Apple defines a material as BFR-free and PVC-free if it contains less than 900 parts per million ( ppm ) of bromine and chlorine . The 900-ppm limit is one of the strictest in the electronics industry and a concentration lower than the ban on lead in the European RoHS Directive . Since BFRs and PVC need to be present in much higher quantities to be effective , most materials that contain less than 900-ppm bromine and chlorine do not have any detectable levels of bromine or chlorine present . Q : Which products are covered by Apple’s BFR-free and PVC-free transition ? A : Apple’s phaseout of BFRs and PVC covers all parts of new Apple product designs manufactured after December 31 , 2008. The iPod nano , iPod classic , and iPod touch are examples of products that are BFR-free and PVC-free . While Apple’s phaseout will cover the vast majority of products and components , older product designs , replacement parts , and accessories for older product designs may not be fully BFR-free and PVC-free . Q : What is REACH , and how is Apple complying with the REACH regulation ? A : The Registration , Evaluation , Authorization and Restriction of Chemicals Regulation EC 1907/2007 , commonly referred to as REACH , is a European regulation on chemicals and their safe use . With the publication of the candidate list for authorization on October 28 , 2008 , the European Chemicals Agency identified a set of substances of very high concern ( SVHC ) that manufacturers must disclose to customers if used in their products above 0.1 percent . Based on the current version of the candidate list for authorization , Apple products do not contain SVHC above 0.1 percent , with the exception of AC power cords . AC power cords used in Apple notebooks , desktops , servers , displays , Apple TV , AirPort Extreme , Time Capsule , and power adapters are made of polyvinyl chloride ( PVC ) that contains the SVHC bis 2-ethyl(hexyl)phthalate , also known as DEHP . Apple is in the final stages of developing and certifying PVC-free AC power cords that will also be free of DEHP . Q : Does Apple use ozone-depleting substances ? A : No ozone-depleting substances ( ODCs ) are used in any processes to manufacture components , materials , or product packaging materials used by Apple , as stipulated by the Montreal Protocol on Substances That Deplete the Ozone Layer . Q : Does Apple have an Environmental Health and Safety Policy ? A : Apple is committed to protecting the environment , health , and safety of our employees , customers , and the global communities in which we operate . For more information , read our Environmental Health and Safety Policy statement ( PDF ) . Q : What happens to computers when they are recycled ? A : When you recycle with Apple , your used equipment is disassembled , and key components that can be reused are removed . Glass and metal can be reprocessed for use in new products . A majority of the plastics can be pelletized into a raw secondary material . With materials reprocessing and component reuse , Apple often achieves a 90 percent recovery rate by weight of the original product . Learn more about the Apple Recycling Program </text>
<text id="CorpHandM_Quality_EN.txt">
﻿ FAQ Will my H&M garments shrink ? H&M accept a shrinkage of up to 3 % for woven garments and 5 % for knits/ jerseys . To avoid shrinkage , certain items might need ironing after washes , to regain their original shape and fit . If needed , this will always be mentioned on the care label . Are hazardous or allergenic substances being used in your production methods ? H&M ban the use of hazardous and environmentally damaging substances thoughout all production processes . All H&M suppliers commit to comply with our requirements and are educated in how to run production to our standards . Regular controls and inspections are also conducted to ensure your safety . What do you do with defective and surplus garments ? Clothes that do not meet H&M’s quality requirements are not passed on to the stores . Instead , such garments are donated to organizations like UNHCR , the Red Cross and Caritas . We do not give away garments that do not comply with our safety requirements and chemical restrictions , or that are damaged . When feasible , our stores donate defective but usable garments that have been returned by our customers . We are reviewing our routines to see whether there is scope for further improvement . Do I need to wash my H&M clothes before wearing them for the first time ? As hazardous chemicals are banned thoughout our production , washing before wearing is not neccessary . Is my ski jacket or overall from H&M waterproof ? H&M has three levels of functional garments with water repellent properties . Information will be found on the label . Waterproof : The fabric is waterproof and has sealed seams . Suitable for heavy rain conditions . Water resistant : The fabric is waterproof and has folded seams . Suitable for rainy or snowy conditions . Water repellent : The fabric 's surface has been treated to repel water . Suitable for light rain . Can I wash at a lower temperature than recommended on the care label ? The highest recommended washing temperature is stated on the garment 's label . You can , of course , choose a lower temperature to save energy . However , heavily soiled clothes might require the higher temperature . Can wire bras be machine washed ? We always recommend hand washing for wire bras , as machine washing could cause the wire to separate and damage the machine . Do H&M sunglasses come with UV-protection ? Yes , all H&M sunglasses have a special UV filter which locks out all UV radiations ( UVA and UVB ) . How do I wash knitted wool garments ? Make sure you follow the care instructions on the label . If your washing machine has a wool program , use this . If hand washed , remember to carefully squeeze any extra water out of the garment . Reshape the garment after wash and dry flat for optimal care . How do I choose my right size at H&M ? An easy way to calculate your size is to use our Size Guide , found here . Please note that same size garments may still vary depending on fit . H&M follow the standard body measurement lists , based on average body measurements for all sizes . Do your accessories contain nickel metals ? H&M abide by the recommended limitation of nickel metal use in all products . We also conduct regular tests to make sure the limit is not exceeded . </text>
<text id="CorpHandM_Responsibility_EN.txt">
﻿ FAQ How does H&M check that suppliers abide by the Code of Conduct ? We employ full-time auditors whose job it is to check compliance with our Code of Conduct . During audits they go through a list containing over 300 points , relating to working conditions , the working environment , etc. After each audit we collate the results in a report that specifies the areas where improvements are needed , and the supplier is set a deadline for submitting an action plan . The auditors then visit the factories to follow up whether these actions have been taken . H&M also supports suppliers ’ improvement work through training and projects of various kinds . Read more about our Code of Conduct follow-up here . Is it possible to buy clothes produced with limited environmental impact at a good price ? H&M’s business concept is to offer fashion and quality at the best price . We manage this by buying direct from the manufacturers , by having efficient logistics and by having our own stores – not by compromising on our environmental requirements . We are also cost-conscious at every stage and the fact is that a cheaper mode of transport – such as by ship – causes lower carbon dioxide emissions than more expensive means of transport , such as aircraft . So there is no conflict of interest between good prices and low climate impact . We make efforts to support our suppliers so that production takes place with consideration for the health of customers and workers as well as for the environment . What is H&M 's policy regarding fur and leather products ? H&M does not sell real fur . H&M only sells leather from sheep , pigs , goats and cattle that have been bred for meat production , not just for their skin . No other leather is permitted in products sold by H&M . Are H&M cosmetics tested on animals ? No animal testing is carried out on our cosmetics products , neither during production nor on the finished products . Why do H&M not use Fairtrade cerified cotton ? H&M constantly works to improve conditions in cotton farming . One of the ways we do so , is through our active involvement in the Better Cotton Initiative ( BCI ) , where we are members of the steering comittee . BCI 's vision is to enable millions of farmers around the world to grow cotton in a way thats more beneficial for both the farming community and the environment . Read more about BCI at www . bettercotton . org . H&M also offers clothes made with organic cotton . The cotton used in these clothes is 100 % organically grown cotton , certified by the Control Union . We also incorporate organic cotton into some of our children’s and babies ’ wear . We hope that we can thereby show cotton farmers that there is a demand for organic cotton and encourage them to switch from conventional to organic production . Read more about the certification of organic cotton at www . controlunion . com . How can H&M ensure that your products are free from harmful chemicals ? The health and safety of our customers is a very high priority concern , which is why we have been actively working for more than ten years on restricting the use of chemicals that may be harmful to both your health and the environment . We do this by means of our Chemical Restrictions – a list of restrictions that all suppliers must undertake to observe . We regularly test our products to ensure that they do not contain harmful chemicals . We apply the precautionary principle , which means that we do not only ban the use of substances that have been proven to be harmful , but also those merely suspected of being so . This completely ensures that our customers can feel safe with our products . Why does H&M have their own auditors ? Having our own auditors makes it easier to work for long-term improvements in our suppliers ’ factories . Moreover , integrating CSR work into our day-to-day operations takes very high priority at H&M . When choosing suppliers , for example , compliance with our Code of Conduct is one of the aspects we consider . This work is made considerably easier by having our own audit team at the offices in the countries that handle production . Monitoring and improvement work in the factories is the H&M auditors sole task . They are not required to consider commercial aspects , but instead make independent decisions that our buying organisation must respect . To complement our own monitoring programme , H&M participates in the Fair Labor Association ( FLA ) . Among other things , this participation means that the FLA makes unannounced independent external monitoring visits to a number of H&M’s suppliers ' factories in China and Turkey . We hope that this will show our customers and other stakeholders how well our follow-up in the factories is working . In addition , participating in the FLA provides good opportunities to cooperate with other companies and the FLA’s partner organisations , with the aim of improving working standards in our supply chain . We also use the results of the FLA’s audits as a point of reference for quality assurance of our internal monitoring programme . How can you guarantee merino wool products are mulesing-free ? H&M considers it important that animals are not mistreated . We have therefore distanced ourselves from mulesing and concentrated our buying on suppliers that can guarantee mulesing-free merino wool . How do you ensure that child labour is n't used during production ? H&M’s auditors carry out regular checks to ensure that there are no underage workers in the factories . It is extremely rare for child labour to be discovered at H&M 's suppliers or their subcontractors . Should this nonetheless happen , H&M requires the supplier to take responsibility and , together with H&M and the family , to find a solution in the best interests of the child . An investigation is then carried out , looking at how best to resolve the situation based on the child’s interests . On many occasions , the solution will involve the supplier contributing financially so that the child can receive an education , while compensating the family for the loss of income . If H&M discovers repeated breaches of its ban on child labour at a supplier – or one of its subcontractors – the cooperation will be ended for good . How do I know where my H&M items were produced ? All products in H&M’s range have the country of origin stated on the label . Why are the factory workers wages so low ? Since H&M neither owns nor operates the factories that make our clothes , we do not set or pay the factory employees ’ wages . We are rarely the suppliers ’ only customer and a worker may produce items for a number of different buyers in the same month . We believe that all the employees of a factory should have the same earnings potential , regardless of which buyer they are making clothes for . But we demand – and check – that everyone receives the pay and overtime remuneration to which they are legally entitled . That is the only practicable solution – and the most competition-neutral . Our Code of Conduct states that the statutory minimum wage is the lowest acceptable pay level for our suppliers ’ employees , but not the recommended level . We prefer to see pay levels based on negotiations between employer and employees , and for the law to lay down a reasonable minimum wage . </text>
<text id="CorpHP_Objectives_EN.txt">
﻿ Corporate Objectives “ It is necessary that people work together in unison toward common objectives and avoid working at cross purposes at all levels if the ultimate in efficiency and achievement is to be obtained . ” – Dave Packard HP 's Corporate Objectives have guided the company in the conduct of its business since 1957 , when first written by co-founders Bill Hewlett and Dave Packard . Customer loyalty To provide products , services and solutions of the highest quality and deliver more value to our customers that earns their respect and loyalty . Underlying beliefs supporting this objective : * Our continued success is dependent on increasing the loyalty of our customers . * Listening attentively to customers to truly understands their needs , then delivering solutions that translate into customer success is essential to earn customer loyalty . * Competitive total cost of ownership , quality , inventiveness , and the way we do business drives customer loyalty . Profit To achieve sufficient profit to finance our company growth , create value for our shareholders and provide the resources we need to achieve our other corporate objectives . Underlying beliefs supporting this objective : * Profit is the responsibility of all . * Balance of long-term and short-term objectives is key to profitability . * Profit allows us to reinvest in new and emerging business opportunities . * Profit is highly correlated to generating cash , which brings more flexibility to the business at a lower cost . * Profit enables the achievement of our corporate objectives . Market leadership To grow by continually providing useful and significant products , services and solutions to markets we already serve—and to expand into new areas that build on our technologies , competencies and customer interests . Underlying beliefs supporting this objective : * There are more places we can contribute than we will be capable of contributing : We must focus . * To be average in the marketplace is not good enough , we play to win . * We must be No. 1 or No. 2 in our chosen fields . Growth To view change in the market as an opportunity to grow ; to use our profits and our ability to develop and produce innovative products , services and solutions that satisfy emerging customer needs . Underlying beliefs supporting this objective : * Growth comes from taking smart risks , based on the state of the industry—that requires both a conviction in studying the trends , but also in inducing change in our industry . * Our size ( and diversity of businesses ) gives us an ability to weather economic cycles and turn them to our favor . Employee commitment To help HP employees share in the company 's success that they make possible ; to provide people with employment opportunities based on performance ; to create with them a safe , exciting and inclusive work environment that values their diversity and recognizes individual contributions ; and to help them gain a sense of satisfaction and accomplishment from their work . Underlying beliefs supporting this objective : * HP 's performance starts with motivated employees ; their loyalty is key . * We trust our employees to do the right thing and to make a difference . * Everyone has something to contribute : It 's not about title , level or tenure . * An exciting , stimulating work environment is critical to invention . * A diverse workforce gives us a competitive advantage . * Employees are responsible for lifelong learning . Leadership capability To develop leaders at every level who are accountable for achieving business results and exemplifying our values . Underlying beliefs supporting this objective : * Leaders inspire , foster collaboration and turn vision and strategies into action—with focused , clear goals . * Effective leaders coach , relay good news and bad , and give feedback that works . * Leaders demonstrate self-awareness and a willingness to accept feedback and continuously develop . * Leaders speak with one voice and act to eliminate busy work . * It is important to measure people on the results they achieve against goals they helped to create . Global citizenship Good citizenship is good business . We live up to our responsibility to society by being an economic , intellectual and social asset to each country and community in which we do business . Underlying beliefs supporting this objective : * The highest standards of honesty and integrity are critical to developing customer and stakeholder loyalty . * The betterment of our society is not a job to be left to a few ; it is the responsibility to be shared by all . * This objective is essential to delivering on the brand promise . </text>
<text id="CorpJaguar_Sustainability_EN.txt">
﻿ SUSTAINABLE DEVELOPMENT POLICY Jaguar Sustainability Our Policy * We are committed to addressing the challenges of sustainable development and operating as a responsible corporate business . We will strive to achieve sustainability by integrating and balancing our economic , social and environmental responsibilities within all our activities . We will develop and operate efficient business processes that are holistic , encompassing economic , social and environmental requirements , and that are an integral part of the decision-making process . We will implement tools and techniques to enable us to assess our sustainability impacts , to ensure performance improvement , and periodically we will report on our performance . Fundamental to our operation is the commitment to continual improvement , and to meet or exceed legal and regulatory requirements in all of our activities . * ECONOMIC - Deliver financial growth with a focus on a long term sustainability , recognising our responsibilities to the wide range of stakeholders - Account for the true impact of our activities to better inform decision making * SOCIAL - Recognise and meet our corporate responsibilities to the many stakeholders in our business , including shareholders , employees , suppliers , dealers and customers , and neighbouring communities - Understand our contribution to society in the broader context of " sustainable mobility " to support our long term planning . * ENVIRONMENT - Improve environmental performance throughout the business by reducing and preventing pollution , conserving resources , managing materials of concern responsibly , minimising wastes , and implementing effective and efficient processes - Optimise the potential for the use of alternative fuels , renewable energy , and recycled and sustainable materials David M Smith Chief Executive Officer </text>
<text id="CorpZara_Environment_EN.txt">
﻿ Our Mission Statement Environmental policy Through Zara’s business model , we aim to contribute to the sustainable development of society and that of the environment with which we interacts . The company 's commitment to the environment is included in Inditex Group’s Corporate Responsibility Statement , published on our website : www . inditex . com . The following are some of the objectives and actions included in the framework of the group 's environmental commitment and have a direct impact on our shops and customers : At the store * - We save energy . * - The eco-friendly shop . * - We produce less waste , and recycle . * - Our commitment extends to all our staff . * - An environmentally aware team . We save energy . The eco-friendly store . We are implementing an eco-friendly management model in our shops in order to reduce energy consumption by 20 % , introducing sustainability and efficiency criteria . This management model sets out measures to be applied to all processes , including the design of the shop itself , the lighting , heating and cooling systems and the possibility of recycling furniture and decoration . We produce less waste and recycle . Recycling hangers and alarms , which are picked up from our shops and processed into other plastic elements , is an example of our waste management policy . Millions of hangers and alarms are processed each year and both the cardboard and plastic used for packaging are also recycled . - Our commitment extends to all our staff . Increased awareness among our team members . We hold In-company awareness campaigns and specific multimedia-based training programmes to educate our staff in sustainable practices , such as limiting energy consumption , using sustainable transport and modifying behaviour patterns . With the product * - We use ecological fabrics . * - Organic cotton . * - We manufacture PVC-free footwear . We use ecological fabrics . Organic cotton . Zara supports organic farming and makes some of its garments out of organic cotton ( 100 % cotton , completely free of pesticides , chemicals and bleach ) . They have specific labels and are easy to spot in our shops . We produce PVC-free footwear . No petroleum derivatives or non-biodegradable materials are used in the production of our footwear ( PVC free ) . In transport - We use biodiesel fuel . Zara 's fleet of lorries , which transport more than 200 million items of clothing a year , use 5 % biodiesel fuel . This allows us to reduce our CO2 emissions by 500 tons . Animal welfare policy All products of animal origin sold in our shops , including fur and leather , come exclusively from animals raised on food farms and under no circumstances come from animals sacrificed exclusively for the sale of their hide . </text>
<text id="FictAndersenH_Mermaid_EN.txt">
﻿ The little mermaid Far out in the ocean , where the water is as blue as the prettiest cornflower , and as clear as crystal , it is very , very deep ; so deep , indeed , that no cable could fathom it : many church steeples , piled one upon another , would not reach from the ground beneath to the surface of the water above . There dwell the Sea King and his subjects . We must not imagine that there is nothing at the bottom of the sea but bare yellow sand . No , indeed ; the most singular flowers and plants grow there ; the leaves and stems of which are so pliant , that the slightest agitation of the water causes them to stir as if they had life . Fishes , both large and small , glide between the branches , as birds fly among the trees here upon land . In the deepest spot of all , stands the castle of the Sea King . Its walls are built of coral , and the long , gothic windows are of the clearest amber . The roof is formed of shells , that open and close as the water flows over them . Their appearance is very beautiful , for in each lies a glittering pearl , which would be fit for the diadem of a queen . The Sea King had been a widower for many years , and his aged mother kept house for him . She was a very wise woman , and exceedingly proud of her high birth ; on that account she wore twelve oysters on her tail ; while others , also of high rank , were only allowed to wear six . She was , however , deserving of very great praise , especially for her care of the little sea-princesses , her grand-daughters . They were six beautiful children ; but the youngest was the prettiest of them all ; her skin was as clear and delicate as a rose-leaf , and her eyes as blue as the deepest sea ; but , like all the others , she had no feet , and her body ended in a fish 's tail . All day long they played in the great halls of the castle , or among the living flowers that grew out of the walls . The large amber windows were open , and the fish swam in , just as the swallows fly into our houses when we open the windows , excepting that the fishes swam up to the princesses , ate out of their hands , and allowed themselves to be stroked . Outside the castle there was a beautiful garden , in which grew bright red and dark blue flowers , and blossoms like flames of fire ; the fruit glittered like gold , and the leaves and stems waved to and fro continually . The earth itself was the finest sand , but blue as the flame of burning sulphur . Over everything lay a peculiar blue radiance , as if it were surrounded by the air from above , through which the blue sky shone , instead of the dark depths of the sea . In calm weather the sun could be seen , looking like a purple flower , with the light streaming from the calyx . Each of the young princesses had a little plot of ground in the garden , where she might dig and plant as she pleased . One arranged her flower-bed into the form of a whale ; another thought it better to make hers like the figure of a little mermaid ; but that of the youngest was round like the sun , and contained flowers as red as his rays at sunset . She was a strange child , quiet and thoughtful ; and while her sisters would be delighted with the wonderful things which they obtained from the wrecks of vessels , she cared for nothing but her pretty red flowers , like the sun , excepting a beautiful marble statue . It was the representation of a handsome boy , carved out of pure white stone , which had fallen to the bottom of the sea from a wreck . She planted by the statue a rose-colored weeping willow . It grew splendidly , and very soon hung its fresh branches over the statue , almost down to the blue sands . The shadow had a violet tint , and waved to and fro like the branches ; it seemed as if the crown of the tree and the root were at play , and trying to kiss each other . Nothing gave her so much pleasure as to hear about the world above the sea . She made her old grandmother tell her all she knew of the ships and of the towns , the people and the animals . To her it seemed most wonderful and beautiful to hear that the flowers of the land should have fragrance , and not those below the sea ; that the trees of the forest should be green ; and that the fishes among the trees could sing so sweetly , that it was quite a pleasure to hear them . Her grandmother called the little birds fishes , or she would not have understood her ; for she had never seen birds . “ When you have reached your fifteenth year , ” said the grand-mother , “ you will have permission to rise up out of the sea , to sit on the rocks in the moonlight , while the great ships are sailing by ; and then you will see both forests and towns . ” In the following year , one of the sisters would be fifteen : but as each was a year younger than the other , the youngest would have to wait five years before her turn came to rise up from the bottom of the ocean , and see the earth as we do . However , each promised to tell the others what she saw on her first visit , and what she thought the most beautiful ; for their grandmother could not tell them enough ; there were so many things on which they wanted information . None of them longed so much for her turn to come as the youngest , she who had the longest time to wait , and who was so quiet and thoughtful . Many nights she stood by the open window , looking up through the dark blue water , and watching the fish as they splashed about with their fins and tails . She could see the moon and stars shining faintly ; but through the water they looked larger than they do to our eyes . When something like a black cloud passed between her and them , she knew that it was either a whale swimming over her head , or a ship full of human beings , who never imagined that a pretty little mermaid was standing beneath them , holding out her white hands towards the keel of their ship . As soon as the eldest was fifteen , she was allowed to rise to the surface of the ocean . When she came back , she had hundreds of things to talk about ; but the most beautiful , she said , was to lie in the moonlight , on a sandbank , in the quiet sea , near the coast , and to gaze on a large town nearby , where the lights were twinkling like hundreds of stars ; to listen to the sounds of the music , the noise of carriages , and the voices of human beings , and then to hear the merry bells peal out from the church steeples ; and because she could not go near to all those wonderful things , she longed for them more than ever . Oh , did not the youngest sister listen eagerly to all these descriptions ? and afterwards , when she stood at the open window looking up through the dark blue water , she thought of the great city , with all its bustle and noise , and even fancied she could hear the sound of the church bells , down in the depths of the sea . In another year the second sister received permission to rise to the surface of the water , and to swim about where she pleased . She rose just as the sun was setting , and this , she said , was the most beautiful sight of all . The whole sky looked like gold , while violet and rose-colored clouds , which she could not describe , floated over her ; and , still more rapidly than the clouds , flew a large flock of wild swans towards the setting sun , looking like a long white veil across the sea . She also swam towards the sun ; but it sunk into the waves , and the rosy tints faded from the clouds and from the sea . The third sister 's turn followed ; she was the boldest of them all , and she swam up a broad river that emptied itself into the sea . On the banks she saw green hills covered with beautiful vines ; palaces and castles peeped out from amid the proud trees of the forest ; she heard the birds singing , and the rays of the sun were so powerful that she was obliged often to dive down under the water to cool her burning face . In a narrow creek she found a whole troop of little human children , quite naked , and sporting about in the water ; she wanted to play with them , but they fled in a great fright ; and then a little black animal came to the water ; it was a dog , but she did not know that , for she had never before seen one . This animal barked at her so terribly that she became frightened , and rushed back to the open sea . But she said she should never forget the beautiful forest , the green hills , and the pretty little children who could swim in the water , although they had not fish 's tails . The fourth sister was more timid ; she remained in the midst of the sea , but she said it was quite as beautiful there as nearer the land . She could see for so many miles around her , and the sky above looked like a bell of glass . She had seen the ships , but at such a great distance that they looked like sea-gulls . The dolphins sported in the waves , and the great whales spouted water from their nostrils till it seemed as if a hundred fountains were playing in every direction . The fifth sister 's birthday occurred in the winter ; so when her turn came , she saw what the others had not seen the first time they went up . The sea looked quite green , and large icebergs were floating about , each like a pearl , she said , but larger and loftier than the churches built by men . They were of the most singular shapes , and glittered like diamonds . She had seated herself upon one of the largest , and let the wind play with her long hair , and she remarked that all the ships sailed by rapidly , and steered as far away as they could from the iceberg , as if they were afraid of it . Towards evening , as the sun went down , dark clouds covered the sky , the thunder rolled and the lightning flashed , and the red light glowed on the icebergs as they rocked and tossed on the heaving sea . On all the ships the sails were reefed with fear and trembling , while she sat calmly on the floating iceberg , watching the blue lightning , as it darted its forked flashes into the sea . When first the sisters had permission to rise to the surface , they were each delighted with the new and beautiful sights they saw ; but now , as grown-up girls , they could go when they pleased , and they had become indifferent about it . They wished themselves back again in the water , and after a month had passed they said it was much more beautiful down below , and pleasanter to be at home . Yet often , in the evening hours , the five sisters would twine their arms round each other , and rise to the surface , in a row . They had more beautiful voices than any human being could have ; and before the approach of a storm , and when they expected a ship would be lost , they swam before the vessel , and sang sweetly of the delights to be found in the depths of the sea , and begging the sailors not to fear if they sank to the bottom . But the sailors could not understand the song , they took it for the howling of the storm . And these things were never to be beautiful for them ; for if the ship sank , the men were drowned , and their dead bodies alone reached the palace of the Sea King . When the sisters rose , arm-in-arm , through the water in this way , their youngest sister would stand quite alone , looking after them , ready to cry , only that the mermaids have no tears , and therefore they suffer more . “ Oh , were I but fifteen years old , ” said she : “ I know that I shall love the world up there , and all the people who live in it . ” At last she reached her fifteenth year . “ Well , now , you are grown up , ” said the old dowager , her grandmother ; “ so you must let me adorn you like your other sisters ; ” and she placed a wreath of white lilies in her hair , and every flower leaf was half a pearl . Then the old lady ordered eight great oysters to attach themselves to the tail of the princess to show her high rank . “ But they hurt me so , ” said the little mermaid . “ Pride must suffer pain , ” replied the old lady . Oh , how gladly she would have shaken off all this grandeur , and laid aside the heavy wreath ! The red flowers in her own garden would have suited her much better , but she could not help herself : so she said , “ Farewell , ” and rose as lightly as a bubble to the surface of the water . The sun had just set as she raised her head above the waves ; but the clouds were tinted with crimson and gold , and through the glimmering twilight beamed the evening star in all its beauty . The sea was calm , and the air mild and fresh . A large ship , with three masts , lay becalmed on the water , with only one sail set ; for not a breeze stiffed , and the sailors sat idle on deck or amongst the rigging . There was music and song on board ; and , as darkness came on , a hundred colored lanterns were lighted , as if the flags of all nations waved in the air . The little mermaid swam close to the cabin windows ; and now and then , as the waves lifted her up , she could look in through clear glass window-panes , and see a number of well-dressed people within . Among them was a young prince , the most beautiful of all , with large black eyes ; he was sixteen years of age , and his birthday was being kept with much rejoicing . The sailors were dancing on deck , but when the prince came out of the cabin , more than a hundred rockets rose in the air , making it as bright as day . The little mermaid was so startled that she dived under water ; and when she again stretched out her head , it appeared as if all the stars of heaven were falling around her , she had never seen such fireworks before . Great suns spurted fire about , splendid fireflies flew into the blue air , and everything was reflected in the clear , calm sea beneath . The ship itself was so brightly illuminated that all the people , and even the smallest rope , could be distinctly and plainly seen . And how handsome the young prince looked , as he pressed the hands of all present and smiled at them , while the music resounded through the clear night air . It was very late ; yet the little mermaid could not take her eyes from the ship , or from the beautiful prince . The colored lanterns had been extinguished , no more rockets rose in the air , and the cannon had ceased firing ; but the sea became restless , and a moaning , grumbling sound could be heard beneath the waves : still the little mermaid remained by the cabin window , rocking up and down on the water , which enabled her to look in . After a while , the sails were quickly unfurled , and the noble ship continued her passage ; but soon the waves rose higher , heavy clouds darkened the sky , and lightning appeared in the distance . A dreadful storm was approaching ; once more the sails were reefed , and the great ship pursued her flying course over the raging sea . The waves rose mountains high , as if they would have overtopped the mast ; but the ship dived like a swan between them , and then rose again on their lofty , foaming crests . To the little mermaid this appeared pleasant sport ; not so to the sailors . At length the ship groaned and creaked ; the thick planks gave way under the lashing of the sea as it broke over the deck ; the mainmast snapped asunder like a reed ; the ship lay over on her side ; and the water rushed in . The little mermaid now perceived that the crew were in danger ; even she herself was obliged to be careful to avoid the beams and planks of the wreck which lay scattered on the water . At one moment it was so pitch dark that she could not see a single object , but a flash of lightning revealed the whole scene ; she could see every one who had been on board excepting the prince ; when the ship parted , she had seen him sink into the deep waves , and she was glad , for she thought he would now be with her ; and then she remembered that human beings could not live in the water , so that when he got down to her father 's palace he would be quite dead . But he must not die . So she swam about among the beams and planks which strewed the surface of the sea , forgetting that they could crush her to pieces . Then she dived deeply under the dark waters , rising and falling with the waves , till at length she managed to reach the young prince , who was fast losing the power of swimming in that stormy sea . His limbs were failing him , his beautiful eyes were closed , and he would have died had not the little mermaid come to his assistance . She held his head above the water , and let the waves drift them where they would . In the morning the storm had ceased ; but of the ship not a single fragment could be seen . The sun rose up red and glowing from the water , and its beams brought back the hue of health to the prince 's cheeks ; but his eyes remained closed . The mermaid kissed his high , smooth forehead , and stroked back his wet hair ; he seemed to her like the marble statue in her little garden , and she kissed him again , and wished that he might live . Presently they came in sight of land ; she saw lofty blue mountains , on which the white snow rested as if a flock of swans were lying upon them . Near the coast were beautiful green forests , and close by stood a large building , whether a church or a convent she could not tell . Orange and citron trees grew in the garden , and before the door stood lofty palms . The sea here formed a little bay , in which the water was quite still , but very deep ; so she swam with the handsome prince to the beach , which was covered with fine , white sand , and there she laid him in the warm sunshine , taking care to raise his head higher than his body . Then bells sounded in the large white building , and a number of young girls came into the garden . The little mermaid swam out farther from the shore and placed herself between some high rocks that rose out of the water ; then she covered her head and neck with the foam of the sea so that her little face might not be seen , and watched to see what would become of the poor prince . She did not wait long before she saw a young girl approach the spot where he lay . She seemed frightened at first , but only for a moment ; then she fetched a number of people , and the mermaid saw that the prince came to life again , and smiled upon those who stood round him . But to her he sent no smile ; he knew not that she had saved him . This made her very unhappy , and when he was led away into the great building , she dived down sorrowfully into the water , and returned to her father 's castle . She had always been silent and thoughtful , and now she was more so than ever . Her sisters asked her what she had seen during her first visit to the surface of the water ; but she would tell them nothing . Many an evening and morning did she rise to the place where she had left the prince . She saw the fruits in the garden ripen till they were gathered , the snow on the tops of the mountains melt away ; but she never saw the prince , and therefore she returned home , always more sorrowful than before . It was her only comfort to sit in her own little garden , and fling her arm round the beautiful marble statue which was like the prince ; but she gave up tending her flowers , and they grew in wild confusion over the paths , twining their long leaves and stems round the branches of the trees , so that the whole place became dark and gloomy . At length she could bear it no longer , and told one of her sisters all about it . Then the others heard the secret , and very soon it became known to two mermaids whose intimate friend happened to know who the prince was . She had also seen the festival on board ship , and she told them where the prince came from , and where his palace stood . “ Come , little sister , ” said the other princesses ; then they entwined their arms and rose up in a long row to the surface of the water , close by the spot where they knew the prince 's palace stood . It was built of bright yellow shining stone , with long flights of marble steps , one of which reached quite down to the sea . Splendid gilded cupolas rose over the roof , and between the pillars that surrounded the whole building stood life-like statues of marble . Through the clear crystal of the lofty windows could be seen noble rooms , with costly silk curtains and hangings of tapestry ; while the walls were covered with beautiful paintings which were a pleasure to look at . In the centre of the largest saloon a fountain threw its sparkling jets high up into the glass cupola of the ceiling , through which the sun shone down upon the water and upon the beautiful plants growing round the basin of the fountain . Now that she knew where he lived , she spent many an evening and many a night on the water near the palace . She would swim much nearer the shore than any of the others ventured to do ; indeed once she went quite up the narrow channel under the marble balcony , which threw a broad shadow on the water . Here she would sit and watch the young prince , who thought himself quite alone in the bright moonlight . She saw him many times of an evening sailing in a pleasant boat , with music playing and flags waving . She peeped out from among the green rushes , and if the wind caught her long silvery-white veil , those who saw it believed it to be a swan , spreading out its wings . On many a night , too , when the fishermen , with their torches , were out at sea , she heard them relate so many good things about the doings of the young prince , that she was glad she had saved his life when he had been tossed about half-dead on the waves . And she remembered that his head had rested on her bosom , and how heartily she had kissed him ; but he knew nothing of all this , and could not even dream of her . She grew more and more fond of human beings , and wished more and more to be able to wander about with those whose world seemed to be so much larger than her own . They could fly over the sea in ships , and mount the high hills which were far above the clouds ; and the lands they possessed , their woods and their fields , stretched far away beyond the reach of her sight . There was so much that she wished to know , and her sisters were unable to answer all her questions . Then she applied to her old grandmother , who knew all about the upper world , which she very rightly called the lands above the sea . “ If human beings are not drowned , ” asked the little mermaid , “ can they live forever ? do they never die as we do here in the sea ? ” “ Yes , ” replied the old lady , “ they must also die , and their term of life is even shorter than ours . We sometimes live to three hundred years , but when we cease to exist here we only become the foam on the surface of the water , and we have not even a grave down here of those we love . We have not immortal souls , we shall never live again ; but , like the green sea-weed , when once it has been cut off , we can never flourish more . Human beings , on the contrary , have a soul which lives forever , lives after the body has been turned to dust . It rises up through the clear , pure air beyond the glittering stars . As we rise out of the water , and behold all the land of the earth , so do they rise to unknown and glorious regions which we shall never see . ” “ Why have not we an immortal soul ? ” asked the little mermaid mournfully ; “ I would give gladly all the hundreds of years that I have to live , to be a human being only for one day , and to have the hope of knowing the happiness of that glorious world above the stars . ” “ You must not think of that , ” said the old woman ; “ we feel ourselves to be much happier and much better off than human beings . ” “ So I shall die , ” said the little mermaid , “ and as the foam of the sea I shall be driven about never again to hear the music of the waves , or to see the pretty flowers nor the red sun . Is there anything I can do to win an immortal soul ? ” “ No , ” said the old woman , “ unless a man were to love you so much that you were more to him than his father or mother ; and if all his thoughts and all his love were fixed upon you , and the priest placed his right hand in yours , and he promised to be true to you here and hereafter , then his soul would glide into your body and you would obtain a share in the future happiness of mankind . He would give a soul to you and retain his own as well ; but this can never happen . Your fish 's tail , which amongst us is considered so beautiful , is thought on earth to be quite ugly ; they do not know any better , and they think it necessary to have two stout props , which they call legs , in order to be handsome . ” Then the little mermaid sighed , and looked sorrowfully at her fish 's tail . “ Let us be happy , ” said the old lady , “ and dart and spring about during the three hundred years that we have to live , which is really quite long enough ; after that we can rest ourselves all the better . This evening we are going to have a court ball . ” It is one of those splendid sights which we can never see on earth . The walls and the ceiling of the large ball-room were of thick , but transparent crystal . May hundreds of colossal shells , some of a deep red , others of a grass green , stood on each side in rows , with blue fire in them , which lighted up the whole saloon , and shone through the walls , so that the sea was also illuminated . Innumerable fishes , great and small , swam past the crystal walls ; on some of them the scales glowed with a purple brilliancy , and on others they shone like silver and gold . Through the halls flowed a broad stream , and in it danced the mermen and the mermaids to the music of their own sweet singing . No one on earth has such a lovely voice as theirs . The little mermaid sang more sweetly than them all . The whole court applauded her with hands and tails ; and for a moment her heart felt quite gay , for she knew she had the loveliest voice of any on earth or in the sea . But she soon thought again of the world above her , for she could not forget the charming prince , nor her sorrow that she had not an immortal soul like his ; therefore she crept away silently out of her father 's palace , and while everything within was gladness and song , she sat in her own little garden sorrowful and alone . Then she heard the bugle sounding through the water , and thought – “ He is certainly sailing above , he on whom my wishes depend , and in whose hands I should like to place the happiness of my life . I will venture all for him , and to win an immortal soul , while my sisters are dancing in my father 's palace , I will go to the sea witch , of whom I have always been so much afraid , but she can give me counsel and help . ” And then the little mermaid went out from her garden , and took the road to the foaming whirlpools , behind which the sorceress lived . She had never been that way before : neither flowers nor grass grew there ; nothing but bare , gray , sandy ground stretched out to the whirlpool , where the water , like foaming mill-wheels , whirled round everything that it seized , and cast it into the fathomless deep . Through the midst of these crushing whirlpools the little mermaid was obliged to pass , to reach the dominions of the sea witch ; and also for a long distance the only road lay right across a quantity of warm , bubbling mire , called by the witch her turfmoor . Beyond this stood her house , in the centre of a strange forest , in which all the trees and flowers were polypi , half animals and half plants ; they looked like serpents with a hundred heads growing out of the ground . The branches were long slimy arms , with fingers like flexible worms , moving limb after limb from the root to the top . All that could be reached in the sea they seized upon , and held fast , so that it never escaped from their clutches . The little mermaid was so alarmed at what she saw , that she stood still , and her heart beat with fear , and she was very nearly turning back ; but she thought of the prince , and of the human soul for which she longed , and her courage returned . She fastened her long flowing hair round her head , so that the polypi might not seize hold of it . She laid her hands together across her bosom , and then she darted forward as a fish shoots through the water , between the supple arms and fingers of the ugly polypi , which were stretched out on each side of her . She saw that each held in its grasp something it had seized with its numerous little arms , as if they were iron bands . The white skeletons of human beings who had perished at sea , and had sunk down into the deep waters , skeletons of land animals , oars , rudders , and chests of ships were lying tightly grasped by their clinging arms ; even a little mermaid , whom they had caught and strangled ; and this seemed the most shocking of all to the little princess . She now came to a space of marshy ground in the wood , where large , fat water-snakes were rolling in the mire , and showing their ugly , drab-colored bodies . In the midst of this spot stood a house , built with the bones of shipwrecked human beings . There sat the sea witch , allowing a toad to eat from her mouth , just as people sometimes feed a canary with a piece of sugar . She called the ugly water-snakes her little chickens , and allowed them to crawl all over her bosom . “ I know what you want , ” said the sea witch ; “ it is very stupid of you , but you shall have your way , and it will bring you to sorrow , my pretty princess . You want to get rid of your fish 's tail , and to have two supports instead of it , like human beings on earth , so that the young prince may fall in love with you , and that you may have an immortal soul . ” And then the witch laughed so loud and disgustingly , that the toad and the snakes fell to the ground , and lay there wriggling about . “ You are but just in time , ” said the witch ; “ for after sunrise to-morrow I should not be able to help you till the end of another year . I will prepare a draught for you , with which you must swim to land tomorrow before sunrise , and sit down on the shore and drink it . Your tail will then disappear , and shrink up into what mankind calls legs , and you will feel great pain , as if a sword were passing through you . But all who see you will say that you are the prettiest little human being they ever saw . You will still have the same floating gracefulness of movement , and no dancer will ever tread so lightly ; but at every step you take it will feel as if you were treading upon sharp knives , and that the blood must flow . If you will bear all this , I will help you . ” “ Yes , I will , ” said the little princess in a trembling voice , as she thought of the prince and the immortal soul . “ But think again , ” said the witch ; “ for when once your shape has become like a human being , you can no more be a mermaid . You will never return through the water to your sisters , or to your father 's palace again ; and if you do not win the love of the prince , so that he is willing to forget his father and mother for your sake , and to love you with his whole soul , and allow the priest to join your hands that you may be man and wife , then you will never have an immortal soul . The first morning after he marries another your heart will break , and you will become foam on the crest of the waves . ” “ I will do it , ” said the little mermaid , and she became pale as death . “ But I must be paid also , ” said the witch , “ and it is not a trifle that I ask . You have the sweetest voice of any who dwell here in the depths of the sea , and you believe that you will be able to charm the prince with it also , but this voice you must give to me ; the best thing you possess will I have for the price of my draught . My own blood must be mixed with it , that it may be as sharp as a two-edged sword . ” “ But if you take away my voice , ” said the little mermaid , “ what is left for me ? ” “ Your beautiful form , your graceful walk , and your expressive eyes ; surely with these you can enchain a man 's heart . Well , have you lost your courage ? Put out your little tongue that I may cut it off as my payment ; then you shall have the powerful draught . ” “ It shall be , ” said the little mermaid . Then the witch placed her cauldron on the fire , to prepare the magic draught . “ Cleanliness is a good thing , ” said she , scouring the vessel with snakes , which she had tied together in a large knot ; then she pricked herself in the breast , and let the black blood drop into it . The steam that rose formed itself into such horrible shapes that no one could look at them without fear . Every moment the witch threw something else into the vessel , and when it began to boil , the sound was like the weeping of a crocodile . When at last the magic draught was ready , it looked like the clearest water . “ There it is for you , ” said the witch . Then she cut off the mermaid 's tongue , so that she became dumb , and would never again speak or sing . “ If the polypi should seize hold of you as you return through the wood , ” said the witch , “ throw over them a few drops of the potion , and their fingers will be torn into a thousand pieces . ” But the little mermaid had no occasion to do this , for the polypi sprang back in terror when they caught sight of the glittering draught , which shone in her hand like a twinkling star . So she passed quickly through the wood and the marsh , and between the rushing whirlpools . She saw that in her father 's palace the torches in the ballroom were extinguished , and all within asleep ; but she did not venture to go in to them , for now she was dumb and going to leave them forever , she felt as if her heart would break . She stole into the garden , took a flower from the flower-beds of each of her sisters , kissed her hand a thousand times towards the palace , and then rose up through the dark blue waters . The sun had not risen when she came in sight of the prince 's palace , and approached the beautiful marble steps , but the moon shone clear and bright . Then the little mermaid drank the magic draught , and it seemed as if a two-edged sword went through her delicate body : she fell into a swoon , and lay like one dead . When the sun arose and shone over the sea , she recovered , and felt a sharp pain ; but just before her stood the handsome young prince . He fixed his coal-black eyes upon her so earnestly that she cast down her own , and then became aware that her fish 's tail was gone , and that she had as pretty a pair of white legs and tiny feet as any little maiden could have ; but she had no clothes , so she wrapped herself in her long , thick hair . The prince asked her who she was , and where she came from , and she looked at him mildly and sorrowfully with her deep blue eyes ; but she could not speak . Every step she took was as the witch had said it would be , she felt as if treading upon the points of needles or sharp knives ; but she bore it willingly , and stepped as lightly by the prince 's side as a soap-bubble , so that he and all who saw her wondered at her graceful-swaying movements . She was very soon arrayed in costly robes of silk and muslin , and was the most beautiful creature in the palace ; but she was dumb , and could neither speak nor sing . Beautiful female slaves , dressed in silk and gold , stepped forward and sang before the prince and his royal parents : one sang better than all the others , and the prince clapped his hands and smiled at her . This was great sorrow to the little mermaid ; she knew how much more sweetly she herself could sing once , and she thought , “ Oh if he could only know that ! I have given away my voice forever , to be with him . ” The slaves next performed some pretty fairy-like dances , to the sound of beautiful music . Then the little mermaid raised her lovely white arms , stood on the tips of her toes , and glided over the floor , and danced as no one yet had been able to dance . At each moment her beauty became more revealed , and her expressive eyes appealed more directly to the heart than the songs of the slaves . Every one was enchanted , especially the prince , who called her his little foundling ; and she danced again quite readily , to please him , though each time her foot touched the floor it seemed as if she trod on sharp knives . The prince said she should remain with him always , and she received permission to sleep at his door , on a velvet cushion . He had a page 's dress made for her , that she might accompany him on horseback . They rode together through the sweet-scented woods , where the green boughs touched their shoulders , and the little birds sang among the fresh leaves . She climbed with the prince to the tops of high mountains ; and although her tender feet bled so that even her steps were marked , she only laughed , and followed him till they could see the clouds beneath them looking like a flock of birds travelling to distant lands . While at the prince 's palace , and when all the household were asleep , she would go and sit on the broad marble steps ; for it eased her burning feet to bathe them in the cold sea-water ; and then she thought of all those below in the deep . Once during the night her sisters came up arm-in-arm , singing sorrowfully , as they floated on the water . She beckoned to them , and then they recognized her , and told her how she had grieved them . After that , they came to the same place every night ; and once she saw in the distance her old grandmother , who had not been to the surface of the sea for many years , and the old Sea King , her father , with his crown on his head . They stretched out their hands towards her , but they did not venture so near the land as her sisters did . As the days passed , she loved the prince more fondly , and he loved her as he would love a little child , but it never came into his head to make her his wife ; yet , unless he married her , she could not receive an immortal soul ; and , on the morning after his marriage with another , she would dissolve into the foam of the sea . “ Do you not love me the best of them all ? ” the eyes of the little mermaid seemed to say , when he took her in his arms , and kissed her fair forehead . “ Yes , you are dear to me , ” said the prince ; “ for you have the best heart , and you are the most devoted to me ; you are like a young maiden whom I once saw , but whom I shall never meet again . I was in a ship that was wrecked , and the waves cast me ashore near a holy temple , where several young maidens performed the service . The youngest of them found me on the shore , and saved my life . I saw her but twice , and she is the only one in the world whom I could love ; but you are like her , and you have almost driven her image out of my mind . She belongs to the holy temple , and my good fortune has sent you to me instead of her ; and we will never part . ” “ Ah , he knows not that it was I who saved his life , ” thought the little mermaid . “ I carried him over the sea to the wood where the temple stands : I sat beneath the foam , and watched till the human beings came to help him . I saw the pretty maiden that he loves better than he loves me ; ” and the mermaid sighed deeply , but she could not shed tears . “ He says the maiden belongs to the holy temple , therefore she will never return to the world . They will meet no more : while I am by his side , and see him every day . I will take care of him , and love him , and give up my life for his sake . ” Very soon it was said that the prince must marry , and that the beautiful daughter of a neighboring king would be his wife , for a fine ship was being fitted out . Although the prince gave out that he merely intended to pay a visit to the king , it was generally supposed that he really went to see his daughter . A great company were to go with him . The little mermaid smiled , and shook her head . She knew the prince 's thoughts better than any of the others . “ I must travel , ” he had said to her ; “ I must see this beautiful princess ; my parents desire it ; but they will not oblige me to bring her home as my bride . I cannot love her ; she is not like the beautiful maiden in the temple , whom you resemble . If I were forced to choose a bride , I would rather choose you , my dumb foundling , with those expressive eyes . ” And then he kissed her rosy mouth , played with her long waving hair , and laid his head on her heart , while she dreamed of human happiness and an immortal soul . “ You are not afraid of the sea , my dumb child , ” said he , as they stood on the deck of the noble ship which was to carry them to the country of the neighboring king . And then he told her of storm and of calm , of strange fishes in the deep beneath them , and of what the divers had seen there ; and she smiled at his descriptions , for she knew better than any one what wonders were at the bottom of the sea . In the moonlight , when all on board were asleep , excepting the man at the helm , who was steering , she sat on the deck , gazing down through the clear water . She thought she could distinguish her father 's castle , and upon it her aged grandmother , with the silver crown on her head , looking through the rushing tide at the keel of the vessel . Then her sisters came up on the waves , and gazed at her mournfully , wringing their white hands . She beckoned to them , and smiled , and wanted to tell them how happy and well off she was ; but the cabin-boy approached , and when her sisters dived down he thought it was only the foam of the sea which he saw . The next morning the ship sailed into the harbor of a beautiful town belonging to the king whom the prince was going to visit . The church bells were ringing , and from the high towers sounded a flourish of trumpets ; and soldiers , with flying colors and glittering bayonets , lined the rocks through which they passed . Every day was a festival ; balls and entertainments followed one another . But the princess had not yet appeared . People said that she was being brought up and educated in a religious house , where she was learning every royal virtue . At last she came . Then the little mermaid , who was very anxious to see whether she was really beautiful , was obliged to acknowledge that she had never seen a more perfect vision of beauty . Her skin was delicately fair , and beneath her long dark eye-lashes her laughing blue eyes shone with truth and purity . “ It was you , ” said the prince , “ who saved my life when I lay dead on the beach , ” and he folded his blushing bride in his arms . “ Oh , I am too happy , ” said he to the little mermaid ; “ my fondest hopes are all fulfilled . You will rejoice at my happiness ; for your devotion to me is great and sincere . ” The little mermaid kissed his hand , and felt as if her heart were already broken . His wedding morning would bring death to her , and she would change into the foam of the sea . All the church bells rung , and the heralds rode about the town proclaiming the betrothal . Perfumed oil was burning in costly silver lamps on every altar . The priests waved the censers , while the bride and bridegroom joined their hands and received the blessing of the bishop . The little mermaid , dressed in silk and gold , held up the bride 's train ; but her ears heard nothing of the festive music , and her eyes saw not the holy ceremony ; she thought of the night of death which was coming to her , and of all she had lost in the world . On the same evening the bride and bridegroom went on board ship ; cannons were roaring , flags waving , and in the centre of the ship a costly tent of purple and gold had been erected . It contained elegant couches , for the reception of the bridal pair during the night . The ship , with swelling sails and a favorable wind , glided away smoothly and lightly over the calm sea . When it grew dark a number of colored lamps were lit , and the sailors danced merrily on the deck . The little mermaid could not help thinking of her first rising out of the sea , when she had seen similar festivities and joys ; and she joined in the dance , poised herself in the air as a swallow when he pursues his prey , and all present cheered her with wonder . She had never danced so elegantly before . Her tender feet felt as if cut with sharp knives , but she cared not for it ; a sharper pang had pierced through her heart . She knew this was the last evening she should ever see the prince , for whom she had forsaken her kindred and her home ; she had given up her beautiful voice , and suffered unheard-of pain daily for him , while he knew nothing of it . This was the last evening that she would breathe the same air with him , or gaze on the starry sky and the deep sea ; an eternal night , without a thought or a dream , awaited her : she had no soul and now she could never win one . All was joy and gayety on board ship till long after midnight ; she laughed and danced with the rest , while the thoughts of death were in her heart . The prince kissed his beautiful bride , while she played with his raven hair , till they went arm-in-arm to rest in the splendid tent . Then all became still on board the ship ; the helmsman , alone awake , stood at the helm . The little mermaid leaned her white arms on the edge of the vessel , and looked towards the east for the first blush of morning , for that first ray of dawn that would bring her death . She saw her sisters rising out of the flood : they were as pale as herself ; but their long beautiful hair waved no more in the wind , and had been cut off . “ We have given our hair to the witch , ” said they , “ to obtain help for you , that you may not die to-night . She has given us a knife : here it is , see it is very sharp . Before the sun rises you must plunge it into the heart of the prince ; when the warm blood falls upon your feet they will grow together again , and form into a fish 's tail , and you will be once more a mermaid , and return to us to live out your three hundred years before you die and change into the salt sea foam . Haste , then ; he or you must die before sunrise . Our old grandmother moans so for you , that her white hair is falling off from sorrow , as ours fell under the witch 's scissors . Kill the prince and come back ; hasten : do you not see the first red streaks in the sky ? In a few minutes the sun will rise , and you must die . ” And then they sighed deeply and mournfully , and sank down beneath the waves . The little mermaid drew back the crimson curtain of the tent , and beheld the fair bride with her head resting on the prince 's breast . She bent down and kissed his fair brow , then looked at the sky on which the rosy dawn grew brighter and brighter ; then she glanced at the sharp knife , and again fixed her eyes on the prince , who whispered the name of his bride in his dreams . She was in his thoughts , and the knife trembled in the hand of the little mermaid : then she flung it far away from her into the waves ; the water turned red where it fell , and the drops that spurted up looked like blood . She cast one more lingering , half-fainting glance at the prince , and then threw herself from the ship into the sea , and thought her body was dissolving into foam . The sun rose above the waves , and his warm rays fell on the cold foam of the little mermaid , who did not feel as if she were dying . She saw the bright sun , and all around her floated hundreds of transparent beautiful beings ; she could see through them the white sails of the ship , and the red clouds in the sky ; their speech was melodious , but too ethereal to be heard by mortal ears , as they were also unseen by mortal eyes . The little mermaid perceived that she had a body like theirs , and that she continued to rise higher and higher out of the foam . “ Where am I ? ” asked she , and her voice sounded ethereal , as the voice of those who were with her ; no earthly music could imitate it . “ Among the daughters of the air , ” answered one of them . “ A mermaid has not an immortal soul , nor can she obtain one unless she wins the love of a human being . On the power of another hangs her eternal destiny . But the daughters of the air , although they do not possess an immortal soul , can , by their good deeds , procure one for themselves . We fly to warm countries , and cool the sultry air that destroys mankind with the pestilence . We carry the perfume of the flowers to spread health and restoration . After we have striven for three hundred years to all the good in our power , we receive an immortal soul and take part in the happiness of mankind . You , poor little mermaid , have tried with your whole heart to do as we are doing ; you have suffered and endured and raised yourself to the spirit-world by your good deeds ; and now , by striving for three hundred years in the same way , you may obtain an immortal soul . ” The little mermaid lifted her glorified eyes towards the sun , and felt them , for the first time , filling with tears . On the ship , in which she had left the prince , there were life and noise ; she saw him and his beautiful bride searching for her ; sorrowfully they gazed at the pearly foam , as if they knew she had thrown herself into the waves . Unseen she kissed the forehead of her bride , and fanned the prince , and then mounted with the other children of the air to a rosy cloud that floated through the aether . “ After three hundred years , thus shall we float into the kingdom of heaven , ” said she . “ And we may even get there sooner , ” whispered one of her companions . “ Unseen we can enter the houses of men , where there are children , and for every day on which we find a good child , who is the joy of his parents and deserves their love , our time of probation is shortened . The child does not know , when we fly through the room , that we smile with joy at his good conduct , for we can count one year less of our three hundred years . But when we see a naughty or a wicked child , we shed tears of sorrow , and for every tear a day is added to our time of trial ! ” </text>
<text id="FictAndersenH_Ugly_EN.txt">
﻿ The ugly duckling It was lovely summer weather in the country , and the golden corn , the green oats , and the haystacks piled up in the meadows looked beautiful . The stork walking about on his long red legs chattered in the Egyptian language which he had learnt from his mother . The corn-fields and meadows were surrounded by large forests , in the midst of which were deep pools . It was , indeed , delightful to walk about in the country . In a sunny spot stood a pleasant old farm-house close by a deep river , and from the house down to the water side grew great burdock leaves , so high , that under the tallest of them a little child could stand upright . The spot was as wild as the centre of a thick wood . In this snug retreat sat a duck on her nest , watching for her young brood to hatch ; she was beginning to get tired of her task , for the little ones were a long time coming out of their shells , and she seldom had any visitors . The other ducks liked much better to swim about in the river than to climb the slippery banks , and sit under a burdock leaf , to have a gossip with her . At length one shell cracked , and then another , and from each egg came a living creature that lifted its head and cried , “ Peep , peep . ” “ Quack , quack , ” said the mother , and then they all quacked as well as they could , and looked about them on every side at the large green leaves . Their mother allowed them to look as much as they liked , because green is good for the eyes . “ How large the world is , ” said the young ducks , when they found how much more room they now had than while they were inside the egg-shell . “ Do you imagine this is the whole world ? ” asked the mother ; “ Wait till you have seen the garden ; it stretches far beyond that to the parson 's field , but I have never ventured to such a distance . Are you all out ? ” she continued , rising ; “ No , I declare , the largest egg lies there still . I wonder how long this is to last , I am quite tired of it ; ” and she seated herself again on the nest . “ Well , how are you getting on ? ” asked an old duck , who paid her a visit . “ One egg is not hatched yet , ” said the duck , “ it will not break . But just look at all the others , are they not the prettiest little ducklings you ever saw ? They are the image of their father , who is so unkind , he never comes to see . ” “ Let me see the egg that will not break , ” said the duck ; “ I have no doubt it is a turkey 's egg . I was persuaded to hatch some once , and after all my care and trouble with the young ones , they were afraid of the water . I quacked and clucked , but all to no purpose . I could not get them to venture in . Let me look at the egg . Yes , that is a turkey 's egg ; take my advice , leave it where it is and teach the other children to swim . ” “ I think I will sit on it a little while longer , ” said the duck ; “ as I have sat so long already , a few days will be nothing . ” “ Please yourself , ” said the old duck , and she went away . At last the large egg broke , and a young one crept forth crying , “ Peep , peep . ” It was very large and ugly . The duck stared at it and exclaimed , “ It is very large and not at all like the others . I wonder if it really is a turkey . We shall soon find it out , however when we go to the water . It must go in , if I have to push it myself . ” On the next day the weather was delightful , and the sun shone brightly on the green burdock leaves , so the mother duck took her young brood down to the water , and jumped in with a splash . “ Quack , quack , ” cried she , and one after another the little ducklings jumped in . The water closed over their heads , but they came up again in an instant , and swam about quite prettily with their legs paddling under them as easily as possible , and the ugly duckling was also in the water swimming with them . “ Oh , ” said the mother , “ that is not a turkey ; how well he uses his legs , and how upright he holds himself ! He is my own child , and he is not so very ugly after all if you look at him properly . Quack , quack ! come with me now , I will take you into grand society , and introduce you to the farmyard , but you must keep close to me or you may be trodden upon ; and , above all , beware of the cat . ” When they reached the farmyard , there was a great disturbance , two families were fighting for an eel 's head , which , after all , was carried off by the cat . “ See , children , that is the way of the world , ” said the mother duck , whetting her beak , for she would have liked the eel 's head herself . “ Come , now , use your legs , and let me see how well you can behave . You must bow your heads prettily to that old duck yonder ; she is the highest born of them all , and has Spanish blood , therefore , she is well off . Do n't you see she has a red flag tied to her leg , which is something very grand , and a great honor for a duck ; it shows that every one is anxious not to lose her , as she can be recognized both by man and beast . Come , now , do n't turn your toes , a well-bred duckling spreads his feet wide apart , just like his father and mother , in this way ; now bend your neck , and say ‘ quack . ’ ” The ducklings did as they were bid , but the other duck stared , and said , “ Look , here comes another brood , as if there were not enough of us already ! and what a queer looking object one of them is ; we do n't want him here , ” and then one flew out and bit him in the neck . “ Let him alone , ” said the mother ; “ he is not doing any harm . ” “ Yes , but he is so big and ugly , ” said the spiteful duck “ and therefore he must be turned out . ” “ The others are very pretty children , ” said the old duck , with the rag on her leg , “ all but that one ; I wish his mother could improve him a little . ” “ That is impossible , your grace , ” replied the mother ; “ he is not pretty ; but he has a very good disposition , and swims as well or even better than the others . I think he will grow up pretty , and perhaps be smaller ; he has remained too long in the egg , and therefore his figure is not properly formed ; ” and then she stroked his neck and smoothed the feathers , saying , “ It is a drake , and therefore not of so much consequence . I think he will grow up strong , and able to take care of himself . ” “ The other ducklings are graceful enough , ” said the old duck . “ Now make yourself at home , and if you can find an eel 's head , you can bring it to me . ” And so they made themselves comfortable . But the poor duckling , who had crept out of his shell last of all , and looked so ugly , was bitten and pushed and made fun of , not only by the ducks , but by all the poultry . “ He is too big , ” they all said , and the turkey cock , who had been born into the world with spurs , and fancied himself really an emperor , puffed himself out like a vessel in full sail , and flew at the duckling , and became quite red in the head with passion , so that the poor little thing did not know where to go , and was quite miserable because he was so ugly and laughed at by the whole farmyard . So it went on from day to day till it got worse and worse . The poor duckling was driven about by every one ; even his brothers and sisters were unkind to him , and would say , “ Ah , you ugly creature , I wish the cat would get you , ” and his mother said she wished he had never been born . The ducks pecked him , the chickens beat him , and the girl who fed the poultry kicked him with her feet . So at last he ran away , frightening the little birds in the hedge as he flew over the palings . “ They are afraid of me because I am ugly , ” he said . So he closed his eyes , and flew still farther , until he came out on a large moor , inhabited by wild ducks . Here he remained the whole night , feeling very tired and sorrowful . In the morning , when the wild ducks rose in the air , they stared at their new comrade . “ What sort of a duck are you ? ” they all said , coming round him . He bowed to them , and was as polite as he could be , but he did not reply to their question . “ You are exceedingly ugly , ” said the wild ducks , “ but that will not matter if you do not want to marry one of our family . ” Poor thing ! he had no thoughts of marriage ; all he wanted was permission to lie among the rushes , and drink some of the water on the moor . After he had been on the moor two days , there came two wild geese , or rather goslings , for they had not been out of the egg long , and were very saucy . “ Listen , friend , ” said one of them to the duckling , “ you are so ugly , that we like you very well . Will you go with us , and become a bird of passage ? Not far from here is another moor , in which there are some pretty wild geese , all unmarried . It is a chance for you to get a wife ; you may be lucky , ugly as you are . ” “ Pop , pop , ” sounded in the air , and the two wild geese fell dead among the rushes , and the water was tinged with blood . “ Pop , pop , ” echoed far and wide in the distance , and whole flocks of wild geese rose up from the rushes . The sound continued from every direction , for the sportsmen surrounded the moor , and some were even seated on branches of trees , overlooking the rushes . The blue smoke from the guns rose like clouds over the dark trees , and as it floated away across the water , a number of sporting dogs bounded in among the rushes , which bent beneath them wherever they went . How they terrified the poor duckling ! He turned away his head to hide it under his wing , and at the same moment a large terrible dog passed quite near him . His jaws were open , his tongue hung from his mouth , and his eyes glared fearfully . He thrust his nose close to the duckling , showing his sharp teeth , and then , “ splash , splash , ” he went into the water without touching him . “ Oh , ” sighed the duckling , “ how thankful I am for being so ugly ; even a dog will not bite me . ” And so he lay quite still , while the shot rattled through the rushes , and gun after gun was fired over him . It was late in the day before all became quiet , but even then the poor young thing did not dare to move . He waited quietly for several hours , and then , after looking carefully around him , hastened away from the moor as fast as he could . He ran over field and meadow till a storm arose , and he could hardly struggle against it . Towards evening , he reached a poor little cottage that seemed ready to fall , and only remained standing because it could not decide on which side to fall first . The storm continued so violent , that the duckling could go no farther ; he sat down by the cottage , and then he noticed that the door was not quite closed in consequence of one of the hinges having given way . There was therefore a narrow opening near the bottom large enough for him to slip through , which he did very quietly , and got a shelter for the night . A woman , a tom cat , and a hen lived in this cottage . The tom cat , whom the mistress called , “ My little son , ” was a great favorite ; he could raise his back , and purr , and could even throw out sparks from his fur if it were stroked the wrong way . The hen had very short legs , so she was called “ Chickie short legs . ” She laid good eggs , and her mistress loved her as if she had been her own child . In the morning , the strange visitor was discovered , and the tom cat began to purr , and the hen to cluck . “ What is that noise about ? ” said the old woman , looking round the room , but her sight was not very good ; therefore , when she saw the duckling she thought it must be a fat duck , that had strayed from home . “ Oh what a prize ! ” she exclaimed , “ I hope it is not a drake , for then I shall have some duck 's eggs . I must wait and see . ” So the duckling was allowed to remain on trial for three weeks , but there were no eggs . Now the tom cat was the master of the house , and the hen was mistress , and they always said , “ We and the world , ” for they believed themselves to be half the world , and the better half too . The duckling thought that others might hold a different opinion on the subject , but the hen would not listen to such doubts . “ Can you lay eggs ? ” she asked . “ No. ” “ Then have the goodness to hold your tongue . ” “ Can you raise your back , or purr , or throw out sparks ? ” said the tom cat . “ No. ” “ Then you have no right to express an opinion when sensible people are speaking . ” So the duckling sat in a corner , feeling very low spirited , till the sunshine and the fresh air came into the room through the open door , and then he began to feel such a great longing for a swim on the water , that he could not help telling the hen . “ What an absurd idea , ” said the hen . “ You have nothing else to do , therefore you have foolish fancies . If you could purr or lay eggs , they would pass away . ” “ But it is so delightful to swim about on the water , ” said the duckling , “ and so refreshing to feel it close over your head , while you dive down to the bottom . ” “ Delightful , indeed ! ” said the hen , “ why you must be crazy ! Ask the cat , he is the cleverest animal I know , ask him how he would like to swim about on the water , or to dive under it , for I will not speak of my own opinion ; ask our mistress , the old woman – there is no one in the world more clever than she is . Do you think she would like to swim , or to let the water close over her head ? ” “ You do n't understand me , ” said the duckling . “ We do n't understand you ? Who can understand you , I wonder ? Do you consider yourself more clever than the cat , or the old woman ? I will say nothing of myself . Do n't imagine such nonsense , child , and thank your good fortune that you have been received here . Are you not in a warm room , and in society from which you may learn something . But you are a chatterer , and your company is not very agreeable . Believe me , I speak only for your own good . I may tell you unpleasant truths , but that is a proof of my friendship . I advise you , therefore , to lay eggs , and learn to purr as quickly as possible . ” “ I believe I must go out into the world again , ” said the duckling . “ Yes , do , ” said the hen . So the duckling left the cottage , and soon found water on which it could swim and dive , but was avoided by all other animals , because of its ugly appearance . Autumn came , and the leaves in the forest turned to orange and gold . Then , as winter approached , the wind caught them as they fell and whirled them in the cold air . The clouds , heavy with hail and snow-flakes , hung low in the sky , and the raven stood on the ferns crying , “ Croak , croak . ” It made one shiver with cold to look at him . All this was very sad for the poor little duckling . One evening , just as the sun set amid radiant clouds , there came a large flock of beautiful birds out of the bushes . The duckling had never seen any like them before . They were swans , and they curved their graceful necks , while their soft plumage shown with dazzling whiteness . They uttered a singular cry , as they spread their glorious wings and flew away from those cold regions to warmer countries across the sea . As they mounted higher and higher in the air , the ugly little duckling felt quite a strange sensation as he watched them . He whirled himself in the water like a wheel , stretched out his neck towards them , and uttered a cry so strange that it frightened himself . Could he ever forget those beautiful , happy birds ; and when at last they were out of his sight , he dived under the water , and rose again almost beside himself with excitement . He knew not the names of these birds , nor where they had flown , but he felt towards them as he had never felt for any other bird in the world . He was not envious of these beautiful creatures , but wished to be as lovely as they . Poor ugly creature , how gladly he would have lived even with the ducks had they only given him encouragement . The winter grew colder and colder ; he was obliged to swim about on the water to keep it from freezing , but every night the space on which he swam became smaller and smaller . At length it froze so hard that the ice in the water crackled as he moved , and the duckling had to paddle with his legs as well as he could , to keep the space from closing up . He became exhausted at last , and lay still and helpless , frozen fast in the ice . Early in the morning , a peasant , who was passing by , saw what had happened . He broke the ice in pieces with his wooden shoe , and carried the duckling home to his wife . The warmth revived the poor little creature . But when the children wanted to play with him , the duckling thought they would do him some harm ; so he started up in terror , fluttered into the milk-pan , and splashed the milk about the room . Then the woman clapped her hands , which frightened him still more . He flew first into the butter-cask , then into the meal-tub , and out again . What a condition he was in ! The woman screamed , and struck at him with the tongs ; the children laughed and screamed , and tumbled over each other , in their efforts to catch him ; but luckily he escaped . The door stood open ; the poor creature could just manage to slip out among the bushes , and lie down quite exhausted in the newly fallen snow . It would be very sad , were I to relate all the misery and privations which the poor little duckling endured during the hard winter ; but when it had passed , he found himself lying one morning in a moor , amongst the rushes . He felt the warm sun shining , and heard the lark singing , and saw that all around was beautiful spring . Then the young bird felt that his wings were strong , as he flapped them against his sides , and rose high into the air . They bore him onwards , until he found himself in a large garden , before he well knew how it had happened . The apple-trees were in full blossom , and the fragrant elders bent their long green branches down to the stream which wound round a smooth lawn . Everything looked beautiful , in the freshness of early spring . From a thicket close by came three beautiful white swans , rustling their feathers , and swimming lightly over the smooth water . The duckling remembered the lovely birds , and felt more strangely unhappy than ever . “ I will fly to those royal birds , ” he exclaimed , “ and they will kill me , because I am so ugly , and dare to approach them ; but it does not matter : better be killed by them than pecked by the ducks , beaten by the hens , pushed about by the maiden who feeds the poultry , or starved with hunger in the winter . ” Then he flew to the water , and swam towards the beautiful swans . The moment they espied the stranger , they rushed to meet him with outstretched wings . “ Kill me , ” said the poor bird ; and he bent his head down to the surface of the water , and awaited death . But what did he see in the clear stream below ? His own image ; no longer a dark , gray bird , ugly and disagreeable to look at , but a graceful and beautiful swan . To be born in a duck 's nest , in a farmyard , is of no consequence to a bird , if it is hatched from a swan 's egg . He now felt glad at having suffered sorrow and trouble , because it enabled him to enjoy so much better all the pleasure and happiness around him ; for the great swans swam round the new-comer , and stroked his neck with their beaks , as a welcome . Into the garden presently came some little children , and threw bread and cake into the water . “ See , ” cried the youngest , “ there is a new one ; ” and the rest were delighted , and ran to their father and mother , dancing and clapping their hands , and shouting joyously , “ There is another swan come ; a new one has arrived . ” Then they threw more bread and cake into the water , and said , “ The new one is the most beautiful of all ; he is so young and pretty . ” And the old swans bowed their heads before him . Then he felt quite ashamed , and hid his head under his wing ; for he did not know what to do , he was so happy , and yet not at all proud . He had been persecuted and despised for his ugliness , and now he heard them say he was the most beautiful of all the birds . Even the elder-tree bent down its bows into the water before him , and the sun shone warm and bright . Then he rustled his feathers , curved his slender neck , and cried joyfully , from the depths of his heart , “ I never dreamed of such happiness as this , while I was an ugly duckling . ” </text>
<text id="FictBalzacH_Goriot_Ia_EN.txt">
﻿ FATHER GORIOT To the great and illustrious Geoffroy Saint-Hilaire , a token of admiration for his works and genius . DE BALZAC . FATHER GORIOT Mme . Vauquer ( _nee_ de Conflans ) is an elderly person , who for the past forty years has kept a lodging-house in the Rue Nueve-Sainte-Genevieve , in the district that lies between the Latin Quarter and the Faubourg Saint-Marcel . Her house ( known in the neighborhood as the _Maison Vauquer_ ) receives men and women , old and young , and no word has ever been breathed against her respectable establishment ; but , at the same time , it must be said that as a matter of fact no young woman has been under her roof for thirty years , and that if a young man stays there for any length of time it is a sure sign that his allowance must be of the slenderest . In 1819 , however , the time when this drama opens , there was an almost penniless young girl among Mme . Vauquer 's boarders . That word drama has been somewhat discredited of late ; it has been overworked and twisted to strange uses in these days of dolorous literature ; but it must do service again here , not because this story is dramatic in the restricted sense of the word , but because some tears may perhaps be shed _intra et extra muros_ before it is over . Will any one without the walls of Paris understand it ? It is open to doubt . The only audience who could appreciate the results of close observation , the careful reproduction of minute detail and local color , are dwellers between the heights of Montrouge and Montmartre , in a vale of crumbling stucco watered by streams of black mud , a vale of sorrows which are real and joys too often hollow ; but this audience is so accustomed to terrible sensations , that only some unimaginable and well-neigh impossible woe could produce any lasting impression there . Now and again there are tragedies so awful and so grand by reason of the complication of virtues and vices that bring them about , that egotism and selfishness are forced to pause and are moved to pity ; but the impression that they receive is like a luscious fruit , soon consumed . Civilization , like the car of Juggernaut , is scarcely stayed perceptibly in its progress by a heart less easy to break than the others that lie in its course ; this also is broken , and Civilization continues on her course triumphant . And you , too , will do the like ; you who with this book in your white hand will sink back among the cushions of your armchair , and say to yourself , " Perhaps this may amuse me . " You will read the story of Father Goriot 's secret woes , and , dining thereafter with an unspoiled appetite , will lay the blame of your insensibility upon the writer , and accuse him of exaggeration , of writing romances . Ah ! once for all , this drama is neither a fiction nor a romance ! _All is true_ , --so true , that every one can discern the elements of the tragedy in his own house , perhaps in his own heart . The lodging-house is Mme . Vauquer 's own property . It is still standing in the lower end of the Rue Nueve-Sainte-Genevieve , just where the road slopes so sharply down to the Rue de l'Arbalete , that wheeled traffic seldom passes that way , because it is so stony and steep . This position is sufficient to account for the silence prevalent in the streets shut in between the dome of the Pantheon and the dome of the Val-de-Grace , two conspicuous public buildings which give a yellowish tone to the landscape and darken the whole district that lies beneath the shadow of their leaden-hued cupolas . In that district the pavements are clean and dry , there is neither mud nor water in the gutters , grass grows in the chinks of the walls . The most heedless passer-by feels the depressing influences of a place where the sound of wheels creates a sensation ; there is a grim look about the houses , a suggestion of a jail about those high garden walls . A Parisian straying into a suburb apparently composed of lodging-houses and public institutions would see poverty and dullness , old age lying down to die , and joyous youth condemned to drudgery . It is the ugliest quarter of Paris , and , it may be added , the least known . But , before all things , the Rue Nueve-Sainte-Genevieve is like a bronze frame for a picture for which the mind cannot be too well prepared by the contemplation of sad hues and sober images . Even so , step by step the daylight decreases , and the cicerone 's droning voice grows hollower as the traveler descends into the Catacombs . The comparison holds good ! Who shall say which is more ghastly , the sight of the bleached skulls or of dried-up human hearts ? The front of the lodging-house is at right angles to the road , and looks out upon a little garden , so that you see the side of the house in section , as it were , from the Rue Nueve-Sainte-Genevieve . Beneath the wall of the house front there lies a channel , a fathom wide , paved with cobble-stones , and beside it runs a graveled walk bordered by geraniums and oleanders and pomegranates set in great blue and white glazed earthenware pots . Access into the graveled walk is afforded by a door , above which the words MAISON VAUQUER may be read , and beneath , in rather smaller letters , " _Lodgings for both sexes , etc. _ " During the day a glimpse into the garden is easily obtained through a wicket to which a bell is attached . On the opposite wall , at the further end of the graveled walk , a green marble arch was painted once upon a time by a local artist , and in this semblance of a shrine a statue representing Cupid is installed ; a Parisian Cupid , so blistered and disfigured that he looks like a candidate for one of the adjacent hospitals , and might suggest an allegory to lovers of symbolism . The half-obliterated inscription on the pedestal beneath determines the date of this work of art , for it bears witness to the widespread enthusiasm felt for Voltaire on his return to Paris in 1777 : " Whoe'er thou art , thy master see ; He is , or was , or ought to be . " At night the wicket gate is replaced by a solid door . The little garden is no wider than the front of the house ; it is shut in between the wall of the street and the partition wall of the neighboring house . A mantle of ivy conceals the bricks and attracts the eyes of passers-by to an effect which is picturesque in Paris , for each of the walls is covered with trellised vines that yield a scanty dusty crop of fruit , and furnish besides a subject of conversation for Mme . Vauquer and her lodgers ; every year the widow trembles for her vintage . A straight path beneath the walls on either side of the garden leads to a clump of lime-trees at the further end of it ; _line_-trees , as Mme . Vauquer persists in calling them , in spite of the fact that she was a de Conflans , and regardless of repeated corrections from her lodgers . The central space between the walls is filled with artichokes and rows of pyramid fruit-trees , and surrounded by a border of lettuce , pot-herbs , and parsley . Under the lime-trees there are a few green-painted garden seats and a wooden table , and hither , during the dog-days , such of the lodgers as are rich enough to indulge in a cup of coffee come to take their pleasure , though it is hot enough to roast eggs even in the shade . The house itself is three stories high , without counting the attics under the roof . It is built of rough stone , and covered with the yellowish stucco that gives a mean appearance to almost every house in Paris . There are five windows in each story in the front of the house ; all the blinds visible through the small square panes are drawn up awry , so that the lines are all at cross purposes . At the side of the house there are but two windows on each floor , and the lowest of all are adorned with a heavy iron grating . Behind the house a yard extends for some twenty feet , a space inhabited by a happy family of pigs , poultry , and rabbits ; the wood-shed is situated on the further side , and on the wall between the wood-shed and the kitchen window hangs the meat-safe , just above the place where the sink discharges its greasy streams . The cook sweeps all the refuse out through a little door into the Rue Nueve-Sainte-Genevieve , and frequently cleanses the yard with copious supplies of water , under pain of pestilence . The house might have been built on purpose for its present uses . Access is given by a French window to the first room on the ground floor , a sitting-room which looks out upon the street through the two barred windows already mentioned . Another door opens out of it into the dining-room , which is separated from the kitchen by the well of the staircase , the steps being constructed partly of wood , partly of tiles , which are colored and beeswaxed . Nothing can be more depressing than the sight of that sitting-room . The furniture is covered with horse hair woven in alternate dull and glossy stripes . There is a round table in the middle , with a purplish-red marble top , on which there stands , by way of ornament , the inevitable white china tea-service , covered with a half-effaced gilt network . The floor is sufficiently uneven , the wainscot rises to elbow height , and the rest of the wall space is decorated with a varnished paper , on which the principal scenes from _Telemaque_ are depicted , the various classical personages being colored . The subject between the two windows is the banquet given by Calypso to the son of Ulysses , displayed thereon for the admiration of the boarders , and has furnished jokes these forty years to the young men who show themselves superior to their position by making fun of the dinners to which poverty condemns them . The hearth is always so clean and neat that it is evident that a fire is only kindled there on great occasions ; the stone chimney-piece is adorned by a couple of vases filled with faded artificial flowers imprisoned under glass shades , on either side of a bluish marble clock in the very worst taste . The first room exhales an odor for which there is no name in the language , and which should be called the _odeur de pension_ . The damp atmosphere sends a chill through you as you breathe it ; it has a stuffy , musty , and rancid quality ; it permeates your clothing ; after-dinner scents seem to be mingled in it with smells from the kitchen and scullery and the reek of a hospital . It might be possible to describe it if some one should discover a process by which to distil from the atmosphere all the nauseating elements with which it is charged by the catarrhal exhalations of every individual lodger , young or old . Yet , in spite of these stale horrors , the sitting-room is as charming and as delicately perfumed as a boudoir , when compared with the adjoining dining-room . The paneled walls of that apartment were once painted some color , now a matter of conjecture , for the surface is incrusted with accumulated layers of grimy deposit , which cover it with fantastic outlines . A collection of dim-ribbed glass decanters , metal discs with a satin sheen on them , and piles of blue-edged earthenware plates of Touraine ware cover the sticky surfaces of the sideboards that line the room . In a corner stands a box containing a set of numbered pigeon-holes , in which the lodgers ' table napkins , more or less soiled and stained with wine , are kept . Here you see that indestructible furniture never met with elsewhere , which finds its way into lodging-houses much as the wrecks of our civilization drift into hospitals for incurables . You expect in such places as these to find the weather-house whence a Capuchin issues on wet days ; you look to find the execrable engravings which spoil your appetite , framed every one in a black varnished frame , with a gilt beading round it ; you know the sort of tortoise-shell clock-case , inlaid with brass ; the green stove , the Argand lamps , covered with oil and dust , have met your eyes before . The oilcloth which covers the long table is so greasy that a waggish _externe_ will write his name on the surface , using his thumb-nail as a style . The chairs are broken-down invalids ; the wretched little hempen mats slip away from under your feet without slipping away for good ; and finally , the foot-warmers are miserable wrecks , hingeless , charred , broken away about the holes . It would be impossible to give an idea of the old , rotten , shaky , cranky , worm-eaten , halt , maimed , one-eyed , rickety , and ramshackle condition of the furniture without an exhaustive description , which would delay the progress of the story to an extent that impatient people would not pardon . The red tiles of the floor are full of depressions brought about by scouring and periodical renewings of color . In short , there is no illusory grace left to the poverty that reigns here ; it is dire , parsimonious , concentrated , threadbare poverty ; as yet it has not sunk into the mire , it is only splashed by it , and though not in rags as yet , its clothing is ready to drop to pieces . This apartment is in all its glory at seven o'clock in the morning , when Mme . Vauquer 's cat appears , announcing the near approach of his mistress , and jumps upon the sideboards to sniff at the milk in the bowls , each protected by a plate , while he purrs his morning greeting to the world . A moment later the widow shows her face ; she is tricked out in a net cap attached to a false front set on awry , and shuffles into the room in her slipshod fashion . She is an oldish woman , with a bloated countenance , and a nose like a parrot 's beak set in the middle of it ; her fat little hands ( she is as sleek as a church rat ) and her shapeless , slouching figure are in keeping with the room that reeks of misfortune , where hope is reduced to speculate for the meanest stakes . Mme . Vauquer alone can breathe that tainted air without being disheartened by it . Her face is as fresh as a frosty morning in autumn ; there are wrinkles about the eyes that vary in their expression from the set smile of a ballet-dancer to the dark , suspicious scowl of a discounter of bills ; in short , she is at once the embodiment and interpretation of her lodging-house , as surely as her lodging-house implies the existence of its mistress . You can no more imagine the one without the other , than you can think of a jail without a turnkey . The unwholesome corpulence of the little woman is produced by the life she leads , just as typhus fever is bred in the tainted air of a hospital . The very knitted woolen petticoat that she wears beneath a skirt made of an old gown , with the wadding protruding through the rents in the material , is a sort of epitome of the sitting-room , the dining-room , and the little garden ; it discovers the cook , it foreshadows the lodgers--the picture of the house is completed by the portrait of its mistress . Mme . Vauquer at the age of fifty is like all women who " have seen a deal of trouble . " She has the glassy eyes and innocent air of a trafficker in flesh and blood , who will wax virtuously indignant to obtain a higher price for her services , but who is quite ready to betray a Georges or a Pichegru , if a Georges or a Pichegru were in hiding and still to be betrayed , or for any other expedient that may alleviate her lot . Still , " she is a good woman at bottom , " said the lodgers who believed that the widow was wholly dependent upon the money that they paid her , and sympathized when they heard her cough and groan like one of themselves . What had M. Vauquer been ? The lady was never very explicit on this head . How had she lost her money ? " Through trouble , " was her answer . He had treated her badly , had left her nothing but her eyes to cry over his cruelty , the house she lived in , and the privilege of pitying nobody , because , so she was wont to say , she herself had been through every possible misfortune . Sylvie , the stout cook , hearing her mistress ' shuffling footsteps , hastened to serve the lodgers ' breakfasts . Beside those who lived in the house , Mme . Vauquer took boarders who came for their meals ; but these _externes_ usually only came to dinner , for which they paid thirty francs a month . At the time when this story begins , the lodging-house contained seven inmates . The best rooms in the house were on the first story , Mme . Vauquer herself occupying the least important , while the rest were let to a Mme . Couture , the widow of a commissary-general in the service of the Republic . With her lived Victorine Taillefer , a schoolgirl , to whom she filled the place of mother . These two ladies paid eighteen hundred francs a year . The two sets of rooms on the second floor were respectively occupied by an old man named Poiret and a man of forty or thereabouts , the wearer of a black wig and dyed whiskers , who gave out that he was a retired merchant , and was addressed as M. Vautrin . Two of the four rooms on the third floor were also let--one to an elderly spinster , a Mlle . Michonneau , and the other to a retired manufacturer of vermicelli , Italian paste and starch , who allowed the others to address him as " Father Goriot . " The remaining rooms were allotted to various birds of passage , to impecunious students , who like " Father Goriot " and Mlle . Michonneau , could only muster forty-five francs a month to pay for their board and lodging . Mme . Vauquer had little desire for lodgers of this sort ; they ate too much bread , and she only took them in default of better . At that time one of the rooms was tenanted by a law student , a young man from the neighborhood of Angouleme , one of a large family who pinched and starved themselves to spare twelve hundred francs a year for him . Misfortune had accustomed Eugene de Rastignac , for that was his name , to work . He belonged to the number of young men who know as children that their parents ' hopes are centered on them , and deliberately prepare themselves for a great career , subordinating their studies from the first to this end , carefully watching the indications of the course of events , calculating the probable turn that affairs will take , that they may be the first to profit by them . But for his observant curiosity , and the skill with which he managed to introduce himself into the salons of Paris , this story would not have been colored by the tones of truth which it certainly owes to him , for they are entirely due to his penetrating sagacity and desire to fathom the mysteries of an appalling condition of things , which was concealed as carefully by the victim as by those who had brought it to pass . Above the third story there was a garret where the linen was hung to dry , and a couple of attics . Christophe , the man-of-all-work , slept in one , and Sylvie , the stout cook , in the other . Beside the seven inmates thus enumerated , taking one year with another , some eight law or medical students dined in the house , as well as two or three regular comers who lived in the neighborhood . There were usually eighteen people at dinner , and there was room , if need be , for twenty at Mme . Vauquer 's table ; at breakfast , however , only the seven lodgers appeared . It was almost like a family party . Every one came down in dressing-gown and slippers , and the conversation usually turned on anything that had happened the evening before ; comments on the dress or appearance of the dinner contingent were exchanged in friendly confidence . These seven lodgers were Mme . Vauquer 's spoiled children . Among them she distributed , with astronomical precision , the exact proportion of respect and attention due to the varying amounts they paid for their board . One single consideration influenced all these human beings thrown together by chance . The two second-floor lodgers only paid seventy-two francs a month . Such prices as these are confined to the Faubourg Saint-Marcel and the district between La Bourbe and the Salpetriere ; and , as might be expected , poverty , more or less apparent , weighed upon them all , Mme . Couture being the sole exception to the rule . The dreary surroundings were reflected in the costumes of the inmates of the house ; all were alike threadbare . The color of the men 's coats were problematical ; such shoes , in more fashionable quarters , are only to be seen lying in the gutter ; the cuffs and collars were worn and frayed at the edges ; every limp article of clothing looked like the ghost of its former self . The women 's dresses were faded , old-fashioned , dyed and re-dyed ; they wore gloves that were glazed with hard wear , much-mended lace , dingy ruffles , crumpled muslin fichus . So much for their clothing ; but , for the most part , their frames were solid enough ; their constitutions had weathered the storms of life ; their cold , hard faces were worn like coins that have been withdrawn from circulation , but there were greedy teeth behind the withered lips . Dramas brought to a close or still in progress are foreshadowed by the sight of such actors as these , not the dramas that are played before the footlights and against a background of painted canvas , but dumb dramas of life , frost-bound dramas that sere hearts like fire , dramas that do not end with the actors ' lives . Mlle . Michonneau , that elderly young lady , screened her weak eyes from the daylight by a soiled green silk shade with a rim of brass , an object fit to scare away the Angel of Pity himself . Her shawl , with its scanty , draggled fringe , might have covered a skeleton , so meagre and angular was the form beneath it . Yet she must have been pretty and shapely once . What corrosive had destroyed the feminine outlines ? Was it trouble , or vice , or greed ? Had she loved too well ? Had she been a second-hand clothes dealer , a frequenter of the backstairs of great houses , or had she been merely a courtesan ? Was she expiating the flaunting triumphs of a youth overcrowded with pleasures by an old age in which she was shunned by every passer-by ? Her vacant gaze sent a chill through you ; her shriveled face seemed like a menace . Her voice was like the shrill , thin note of the grasshopper sounding from the thicket when winter is at hand . She said that she had nursed an old gentleman , ill of catarrh of the bladder , and left to die by his children , who thought that he had nothing left . His bequest to her , a life annuity of a thousand francs , was periodically disputed by his heirs , who mingled slander with their persecutions . In spite of the ravages of conflicting passions , her face retained some traces of its former fairness and fineness of tissue , some vestiges of the physical charms of her youth still survived . M. Poiret was a sort of automaton . He might be seen any day sailing like a gray shadow along the walks of the Jardin des Plantes , on his head a shabby cap , a cane with an old yellow ivory handle in the tips of his thin fingers ; the outspread skirts of his threadbare overcoat failed to conceal his meagre figure ; his breeches hung loosely on his shrunken limbs ; the thin , blue-stockinged legs trembled like those of a drunken man ; there was a notable breach of continuity between the dingy white waistcoat and crumpled shirt frills and the cravat twisted about a throat like a turkey gobbler 's ; altogether , his appearance set people wondering whether this outlandish ghost belonged to the audacious race of the sons of Japhet who flutter about on the Boulevard Italien . What devouring kind of toil could have so shriveled him ? What devouring passions had darkened that bulbous countenance , which would have seemed outrageous as a caricature ? What had he been ? Well , perhaps he had been part of the machinery of justice , a clerk in the office to which the executioner sends in his accounts , --so much for providing black veils for parricides , so much for sawdust , so much for pulleys and cord for the knife . Or he might have been a receiver at the door of a public slaughter-house , or a sub-inspector of nuisances . Indeed , the man appeared to have been one of the beasts of burden in our great social mill ; one of those Parisian Ratons whom their Bertrands do not even know by sight ; a pivot in the obscure machinery that disposes of misery and things unclean ; one of those men , in short , at sight of whom we are prompted to remark that , " After all , we cannot do without them . " Stately Paris ignores the existence of these faces bleached by moral or physical suffering ; but , then , Paris is in truth an ocean that no line can plumb . You may survey its surface and describe it ; but no matter how numerous and painstaking the toilers in this sea , there will always be lonely and unexplored regions in its depths , caverns unknown , flowers and pearls and monsters of the deep overlooked or forgotten by the divers of literature . The Maison Vauquer is one of these curious monstrosities . Two , however , of Mme . Vauquer 's boarders formed a striking contrast to the rest . There was a sickly pallor , such as is often seen in anaemic girls , in Mlle . Victorine Taillefer 's face ; and her unvarying expression of sadness , like her embarrassed manner and pinched look , was in keeping with the general wretchedness of the establishment in the Rue Nueve-Saint-Genevieve , which forms a background to this picture ; but her face was young , there was youthfulness in her voice and elasticity in her movements . This young misfortune was not unlike a shrub , newly planted in an uncongenial soil , where its leaves have already begun to wither . The outlines of her figure , revealed by her dress of the simplest and cheapest materials , were also youthful . There was the same kind of charm about her too slender form , her faintly colored face and light-brown hair , that modern poets find in mediaeval statuettes ; and a sweet expression , a look of Christian resignation in the dark gray eyes . She was pretty by force of contrast ; if she had been happy , she would have been charming . Happiness is the poetry of woman , as the toilette is her tinsel . If the delightful excitement of a ball had made the pale face glow with color ; if the delights of a luxurious life had brought the color to the wan cheeks that were slightly hollowed already ; if love had put light into the sad eyes , then Victorine might have ranked among the fairest ; but she lacked the two things which create woman a second time--pretty dresses and love-letters . A book might have been made of her story . Her father was persuaded that he had sufficient reason for declining to acknowledge her , and allowed her a bare six hundred francs a year ; he had further taken measures to disinherit his daughter , and had converted all his real estate into personalty , that he might leave it undivided to his son . Victorine 's mother had died broken-hearted in Mme . Couture 's house ; and the latter , who was a near relation , had taken charge of the little orphan . Unluckily , the widow of the commissary-general to the armies of the Republic had nothing in the world but her jointure and her widow 's pension , and some day she might be obliged to leave the helpless , inexperienced girl to the mercy of the world . The good soul , therefore , took Victorine to mass every Sunday , and to confession once a fortnight , thinking that , in any case , she would bring up her ward to be devout . She was right ; religion offered a solution of the problem of the young girl 's future . The poor child loved the father who refused to acknowledge her . Once every year she tried to see him to deliver her mother 's message of forgiveness , but every year hitherto she had knocked at that door in vain ; her father was inexorable . Her brother , her only means of communication , had not come to see her for four years , and had sent her no assistance ; yet she prayed to God to unseal her father 's eyes and to soften her brother 's heart , and no accusations mingled with her prayers . Mme . Couture and Mme . Vauquer exhausted the vocabulary of abuse , and failed to find words that did justice to the banker 's iniquitous conduct ; but while they heaped execrations on the millionaire , Victorine 's words were as gentle as the moan of the wounded dove , and affection found expression even in the cry drawn from her by pain . Eugene de Rastignac was a thoroughly southern type ; he had a fair complexion , blue eyes , black hair . In his figure , manner , and his whole bearing it was easy to see that he had either come of a noble family , or that , from his earliest childhood , he had been gently bred . If he was careful of his wardrobe , only taking last year 's clothes into daily wear , still upon occasion he could issue forth as a young man of fashion . Ordinarily he wore a shabby coat and waistcoat , the limp black cravat , untidily knotted , that students affect , trousers that matched the rest of his costume , and boots that had been resoled . Vautrin ( the man of forty with the dyed whiskers ) marked a transition stage between these two young people and the others . He was the kind of man that calls forth the remark : " He looks a jovial sort ! " He had broad shoulders , a well-developed chest , muscular arms , and strong square-fisted hands ; the joints of his fingers were covered with tufts of fiery red hair . His face was furrowed by premature wrinkles ; there was a certain hardness about it in spite of his bland and insinuating manner . His bass voice was by no means unpleasant , and was in keeping with his boisterous laughter . He was always obliging , always in good spirits ; if anything went wrong with one of the locks , he would soon unscrew it , take it to pieces , file it , oil and clean and set it in order , and put it back in its place again ; " I am an old hand at it , " he used to say . Not only so , he knew all about ships , the sea , France , foreign countries , men , business , law , great houses and prisons , --there was nothing that he did not know . If any one complained rather more than usual , he would offer his services at once . He had several times lent money to Mme . Vauquer , or to the boarders ; but , somehow , those whom he obliged felt that they would sooner face death than fail to repay him ; a certain resolute look , sometimes seen on his face , inspired fear of him , for all his appearance of easy good-nature . In the way he spat there was an imperturbable coolness which seemed to indicate that this was a man who would not stick at a crime to extricate himself from a false position . His eyes , like those of a pitiless judge , seemed to go to the very bottom of all questions , to read all natures , all feelings and thoughts . His habit of life was very regular ; he usually went out after breakfast , returning in time for dinner , and disappeared for the rest of the evening , letting himself in about midnight with a latch key , a privilege that Mme . Vauquer accorded to no other boarder . But then he was on very good terms with the widow ; he used to call her " mamma , " and put his arm round her waist , a piece of flattery perhaps not appreciated to the full ! The worthy woman might imagine this to be an easy feat ; but , as a matter of fact , no arm but Vautrin 's was long enough to encircle her . It was a characteristic trait of his generously to pay fifteen francs a month for the cup of coffee with a dash of brandy in it , which he took after dinner . Less superficial observers than young men engulfed by the whirlpool of Parisian life , or old men , who took no interest in anything that did not directly concern them , would not have stopped short at the vaguely unsatisfactory impression that Vautrin made upon them . He knew or guessed the concerns of every one about him ; but none of them had been able to penetrate his thoughts , or to discover his occupation . He had deliberately made his apparent good-nature , his unfailing readiness to oblige , and his high spirits into a barrier between himself and the rest of them , but not seldom he gave glimpses of appalling depths of character . He seemed to delight in scourging the upper classes of society with the lash of his tongue , to take pleasure in convicting it of inconsistency , in mocking at law and order with some grim jest worthy of Juvenal , as if some grudge against the social system rankled in him , as if there were some mystery carefully hidden away in his life . Mlle . Taillefer felt attracted , perhaps unconsciously , by the strength of the one man , and the good looks of the other ; her stolen glances and secret thoughts were divided between them ; but neither of them seemed to take any notice of her , although some day a chance might alter her position , and she would be a wealthy heiress . For that matter , there was not a soul in the house who took any trouble to investigate the various chronicles of misfortunes , real or imaginary , related by the rest . Each one regarded the others with indifference , tempered by suspicion ; it was a natural result of their relative positions . Practical assistance not one could give , this they all knew , and they had long since exhausted their stock of condolence over previous discussions of their grievances . They were in something the same position as an elderly couple who have nothing left to say to each other . The routine of existence kept them in contact , but they were parts of a mechanism which wanted oil . There was not one of them but would have passed a blind man begging in the street , not one that felt moved to pity by a tale of misfortune , not one who did not see in death the solution of the all-absorbing problem of misery which left them cold to the most terrible anguish in others . The happiest of these hapless beings was certainly Mme . Vauquer , who reigned supreme over this hospital supported by voluntary contributions . For her , the little garden , which silence , and cold , and rain , and drought combined to make as dreary as an Asian _steppe_ , was a pleasant shaded nook ; the gaunt yellow house , the musty odors of a back shop had charms for her , and for her alone . Those cells belonged to her . She fed those convicts condemned to penal servitude for life , and her authority was recognized among them . Where else in Paris would they have found wholesome food in sufficient quantity at the prices she charged them , and rooms which they were at liberty to make , if not exactly elegant or comfortable , at any rate clean and healthy ? If she had committed some flagrant act of injustice , the victim would have borne it in silence . Such a gathering contained , as might have been expected , the elements out of which a complete society might be constructed . And , as in a school , as in the world itself , there was among the eighteen men and women who met round the dinner table a poor creature , despised by all the others , condemned to be the butt of all their jokes . At the beginning of Eugene de Rastignac 's second twelvemonth , this figure suddenly started out into bold relief against the background of human forms and faces among which the law student was yet to live for another two years to come . This laughing-stock was the retired vermicelli-merchant , Father Goriot , upon whose face a painter , like the historian , would have concentrated all the light in his picture . How had it come about that the boarders regarded him with a half-malignant contempt ? Why did they subject the oldest among their number to a kind of persecution , in which there was mingled some pity , but no respect for his misfortunes ? Had he brought it on himself by some eccentricity or absurdity , which is less easily forgiven or forgotten than more serious defects ? The question strikes at the root of many a social injustice . Perhaps it is only human nature to inflict suffering on anything that will endure suffering , whether by reason of its genuine humility , or indifference , or sheer helplessness . Do we not , one and all , like to feel our strength even at the expense of some one or of something ? The poorest sample of humanity , the street arab , will pull the bell handle at every street door in bitter weather , and scramble up to write his name on the unsullied marble of a monument . In the year 1813 , at the age of sixty-nine or thereabouts , " Father Goriot " had sold his business and retired--to Mme . Vauquer 's boarding house . When he first came there he had taken the rooms now occupied by Mme . Couture ; he had paid twelve hundred francs a year like a man to whom five louis more or less was a mere trifle . For him Mme . Vauquer had made various improvements in the three rooms destined for his use , in consideration of a certain sum paid in advance , so it was said , for the miserable furniture , that is to say , for some yellow cotton curtains , a few chairs of stained wood covered with Utrecht velvet , several wretched colored prints in frames , and wall papers that a little suburban tavern would have disdained . Possibly it was the careless generosity with which Father Goriot allowed himself to be overreached at this period of his life ( they called him Monsieur Goriot very respectfully then ) that gave Mme . Vauquer the meanest opinion of his business abilities ; she looked on him as an imbecile where money was concerned . Goriot had brought with him a considerable wardrobe , the gorgeous outfit of a retired tradesman who denies himself nothing . Mme . Vauquer 's astonished eyes beheld no less than eighteen cambric-fronted shirts , the splendor of their fineness being enhanced by a pair of pins each bearing a large diamond , and connected by a short chain , an ornament which adorned the vermicelli-maker 's shirt front . He usually wore a coat of corn-flower blue ; his rotund and portly person was still further set off by a clean white waistcoat , and a gold chain and seals which dangled over that broad expanse . When his hostess accused him of being " a bit of a beau , " he smiled with the vanity of a citizen whose foible is gratified . His cupboards ( _ormoires_ , as he called them in the popular dialect ) were filled with a quantity of plate that he brought with him . The widow 's eyes gleamed as she obligingly helped him to unpack the soup ladles , table-spoons , forks , cruet-stands , tureens , dishes , and breakfast services--all of silver , which were duly arranged upon shelves , besides a few more or less handsome pieces of plate , all weighing no inconsiderable number of ounces ; he could not bring himself to part with these gifts that reminded him of past domestic festivals . " This was my wife 's present to me on the first anniversary of our wedding day , " he said to Mme . Vauquer , as he put away a little silver posset dish , with two turtle-doves billing on the cover . " Poor dear ! she spent on it all the money she had saved before we were married . Do you know , I would sooner scratch the earth with my nails for a living , madame , than part with that . But I shall be able to take my coffee out of it every morning for the rest of my days , thank the Lord ! I am not to be pitied . There 's not much fear of my starving for some time to come . " Finally , Mme . Vauquer 's magpie 's eye had discovered and read certain entries in the list of shareholders in the funds , and , after a rough calculation , was disposed to credit Goriot ( worthy man ) with something like ten thousand francs a year . From that day forward Mme . Vauquer ( _nee_ de Conflans ) , who , as a matter of fact , had seen forty-eight summers , though she would only own to thirty-nine of them--Mme . Vauquer had her own ideas . Though Goriot 's eyes seemed to have shrunk in their sockets , though they were weak and watery , owing to some glandular affection which compelled him to wipe them continually , she considered him to be a very gentlemanly and pleasant-looking man . Moreover , the widow saw favorable indications of character in the well-developed calves of his legs and in his square-shaped nose , indications still further borne out by the worthy man 's full-moon countenance and look of stupid good-nature . This , in all probability , was a strongly-build animal , whose brains mostly consisted in a capacity for affection . His hair , worn in _ailes de pigeon_ , and duly powdered every morning by the barber from the Ecole Polytechnique , described five points on his low forehead , and made an elegant setting to his face . Though his manners were somewhat boorish , he was always as neat as a new pin and he took his snuff in a lordly way , like a man who knows that his snuff-box is always likely to be filled with maccaboy , so that when Mme . Vauquer lay down to rest on the day of M. Goriot 's installation , her heart , like a larded partridge , sweltered before the fire of a burning desire to shake off the shroud of Vauquer and rise again as Goriot . She would marry again , sell her boarding-house , give her hand to this fine flower of citizenship , become a lady of consequence in the quarter , and ask for subscriptions for charitable purposes ; she would make little Sunday excursions to Choisy , Soissy , Gentilly ; she would have a box at the theatre when she liked , instead of waiting for the author 's tickets that one of her boarders sometimes gave her , in July ; the whole Eldorado of a little Parisian household rose up before Mme . Vauquer in her dreams . Nobody knew that she herself possessed forty thousand francs , accumulated _sou by sou_ , that was her secret ; surely as far as money was concerned she was a very tolerable match . " And in other respects , I am quite his equal , " she said to herself , turning as if to assure herself of the charms of a form that the portly Sylvie found moulded in down feathers every morning . For three months from that day Mme . Veuve Vauquer availed herself of the services of M. Goriot 's coiffeur , and went to some expense over her toilette , expense justifiable on the ground that she owed it to herself and her establishment to pay some attention to appearances when such highly-respectable persons honored her house with their presence . She expended no small amount of ingenuity in a sort of weeding process of her lodgers , announcing her intention of receiving henceforward none but people who were in every way select . If a stranger presented himself , she let him know that M. Goriot , one of the best known and most highly-respected merchants in Paris , had singled out her boarding-house for a residence . She drew up a prospectus headed MAISON VAUQUER , in which it was asserted that hers was " _one of the oldest and most highly recommended boarding-houses in the Latin Quarter_ . " " From the windows of the house , " thus ran the prospectus , " there is a charming view of the Vallee des Gobelins ( so there is--from the third floor ) , and a _beautiful_ garden , _extending_ down to _an avenue of lindens_ at the further end . " Mention was made of the bracing air of the place and its quiet situation . It was this prospectus that attracted Mme . la Comtesse de l'Ambermesnil , a widow of six and thirty , who was awaiting the final settlement of her husband 's affairs , and of another matter regarding a pension due to her as the wife of a general who had died " on the field of battle . " On this Mme . Vauquer saw to her table , lighted a fire daily in the sitting-room for nearly six months , and kept the promise of her prospectus , even going to some expense to do so . And the Countess , on her side , addressed Mme . Vauquer as " my dear , " and promised her two more boarders , the Baronne de Vaumerland and the widow of a colonel , the late Comte de Picquoisie , who were about to leave a boarding-house in the Marais , where the terms were higher than at the Maison Vauquer . Both these ladies , moreover , would be very well to do when the people at the War Office had come to an end of their formalities . " But Government departments are always so dilatory , " the lady added . After dinner the two widows went together up to Mme . Vauquer 's room , and had a snug little chat over some cordial and various delicacies reserved for the mistress of the house . Mme . Vauquer 's ideas as to Goriot were cordially approved by Mme . de l'Ambermesnil ; it was a capital notion , which for that matter she had guessed from the very first ; in her opinion the vermicelli maker was an excellent man . " Ah ! my dear lady , such a well-preserved man of his age , as sound as my eyesight--a man who might make a woman happy ! " said the widow . The good-natured Countess turned to the subject of Mme . Vauquer 's dress , which was not in harmony with her projects . " You must put yourself on a war footing , " said she . After much serious consideration the two widows went shopping together--they purchased a hat adorned with ostrich feathers and a cap at the Palais Royal , and the Countess took her friend to the Magasin de la Petite Jeannette , where they chose a dress and a scarf . Thus equipped for the campaign , the widow looked exactly like the prize animal hung out for a sign above an a la mode beef shop ; but she herself was so much pleased with the improvement , as she considered it , in her appearance , that she felt that she lay under some obligation to the Countess ; and , though by no means open-handed , she begged that lady to accept a hat that cost twenty francs . The fact was that she needed the Countess ' services on the delicate mission of sounding Goriot ; the countess must sing her praises in his ears . Mme . de l'Ambermesnil lent herself very good-naturedly to this manoeuvre , began her operations , and succeeded in obtaining a private interview ; but the overtures that she made , with a view to securing him for herself , were received with embarrassment , not to say a repulse . She left him , revolted by his coarseness . " My angel , " said she to her dear friend , " you will make nothing of that man yonder . He is absurdly suspicious , and he is a mean curmudgeon , an idiot , a fool ; you would never be happy with him . " After what had passed between M. Goriot and Mme . de l'Ambermesnil , the Countess would no longer live under the same roof . She left the next day , forgot to pay for six months ' board , and left behind her wardrobe , cast-off clothing to the value of five francs . Eagerly and persistently as Mme . Vauquer sought her quondam lodger , the Comtesse de l'Ambermesnil was never heard of again in Paris . The widow often talked of this deplorable business , and regretted her own too confiding disposition . As a matter of fact , she was as suspicious as a cat ; but she was like many other people , who cannot trust their own kin and put themselves at the mercy of the next chance comer--an odd but common phenomenon , whose causes may readily be traced to the depths of the human heart . Perhaps there are people who know that they have nothing more to look for from those with whom they live ; they have shown the emptiness of their hearts to their housemates , and in their secret selves they are conscious that they are severely judged , and that they deserve to be judged severely ; but still they feel an unconquerable craving for praises that they do not hear , or they are consumed by a desire to appear to possess , in the eyes of a new audience , the qualities which they have not , hoping to win the admiration or affection of strangers at the risk of forfeiting it again some day . Or , once more , there are other mercenary natures who never do a kindness to a friend or a relation simply because these have a claim upon them , while a service done to a stranger brings its reward to self-love . Such natures feel but little affection for those who are nearest to them ; they keep their kindness for remoter circles of acquaintance , and show most to those who dwell on its utmost limits . Mme . Vauquer belonged to both these essentially mean , false , and execrable classes . " If I had been there at the time , " Vautrin would say at the end of the story , " I would have shown her up , and that misfortune would not have befallen you . I know that kind of phiz ! " Like all narrow natures , Mme . Vauquer was wont to confine her attention to events , and did not go very deeply into the causes that brought them about ; she likewise preferred to throw the blame of her own mistakes on other people , so she chose to consider that the honest vermicelli maker was responsible for her misfortune . It had opened her eyes , so she said , with regard to him . As soon as she saw that her blandishments were in vain , and that her outlay on her toilette was money thrown away , she was not slow to discover the reason of his indifference . It became plain to her at once that there was _some other attraction_ , to use her own expression . In short , it was evident that the hope she had so fondly cherished was a baseless delusion , and that she would " never make anything out of that man yonder , " in the Countess ' forcible phrase . The Countess seemed to have been a judge of character . Mme . Vauquer 's aversion was naturally more energetic than her friendship , for her hatred was not in proportion to her love , but to her disappointed expectations . The human heart may find here and there a resting-place short of the highest height of affection , but we seldom stop in the steep , downward slope of hatred . Still , M. Goriot was a lodger , and the widow 's wounded self-love could not vent itself in an explosion of wrath ; like a monk harassed by the prior of his convent , she was forced to stifle her sighs of disappointment , and to gulp down her craving for revenge . Little minds find gratification for their feelings , benevolent or otherwise , by a constant exercise of petty ingenuity . The widow employed her woman 's malice to devise a system of covert persecution . She began by a course of retrenchment--various luxuries which had found their way to the table appeared there no more . " No more gherkins , no more anchovies ; they have made a fool of me ! " she said to Sylvie one morning , and they returned to the old bill of fare . The thrifty frugality necessary to those who mean to make their way in the world had become an inveterate habit of life with M. Goriot . Soup , boiled beef , and a dish of vegetables had been , and always would be , the dinner he liked best , so Mme . Vauquer found it very difficult to annoy a boarder whose tastes were so simple . He was proof against her malice , and in desperation she spoke to him and of him slightingly before the other lodgers , who began to amuse themselves at his expense , and so gratified her desire for revenge . Towards the end of the first year the widow 's suspicions had reached such a pitch that she began to wonder how it was that a retired merchant with a secure income of seven or eight thousand livres , the owner of such magnificent plate and jewelry handsome enough for a kept mistress , should be living in her house . Why should he devote so small a proportion of his money to his expenses ? Until the first year was nearly at an end , Goriot had dined out once or twice every week , but these occasions came less frequently , and at last he was scarcely absent from the dinner-table twice a month . It was hardly expected that Mme . Vauquer should regard the increased regularity of her boarder 's habits with complacency , when those little excursions of his had been so much to her interest . She attributed the change not so much to a gradual diminution of fortune as to a spiteful wish to annoy his hostess . It is one of the most detestable habits of a Liliputian mind to credit other people with its own malignant pettiness . Unluckily , towards the end of the second year , M. Goriot 's conduct gave some color to the idle talk about him . He asked Mme . Vauquer to give him a room on the second floor , and to make a corresponding reduction in her charges . Apparently , such strict economy was called for , that he did without a fire all through the winter . Mme . Vauquer asked to be paid in advance , an arrangement to which M. Goriot consented , and thenceforward she spoke of him as " Father Goriot . " What had brought about this decline and fall ? Conjecture was keen , but investigation was difficult . Father Goriot was not communicative ; in the sham countess ' phrase he was " a curmudgeon . " Empty-headed people who babble about their own affairs because they have nothing else to occupy them , naturally conclude that if people say nothing of their doings it is because their doings will not bear being talked about ; so the highly respectable merchant became a scoundrel , and the late beau was an old rogue . Opinion fluctuated . Sometimes , according to Vautrin , who came about this time to live in the Maison Vauquer , Father Goriot was a man who went on 'Change and _dabbled_ ( to use the sufficiently expressive language of the Stock Exchange ) in stocks and shares after he had ruined himself by heavy speculation . Sometimes it was held that he was one of those petty gamblers who nightly play for small stakes until they win a few francs . A theory that he was a detective in the employ of the Home Office found favor at one time , but Vautrin urged that " Goriot was not sharp enough for one of that sort . " There were yet other solutions ; Father Goriot was a skinflint , a shark of a money-lender , a man who lived by selling lottery tickets . He was by turns all the most mysterious brood of vice and shame and misery ; yet , however vile his life might be , the feeling of repulsion which he aroused in others was not so strong that he must be banished from their society--he paid his way . Besides , Goriot had his uses , every one vented his spleen or sharpened his wit on him ; he was pelted with jokes and belabored with hard words . The general consensus of opinion was in favor of a theory which seemed the most likely ; this was Mme . Vauquer 's view . According to her , the man so well preserved at his time of life , as sound as her eyesight , with whom a woman might be very happy , was a libertine who had strange tastes . These are the facts upon which Mme . Vauquer 's slanders were based . Early one morning , some few months after the departure of the unlucky Countess who had managed to live for six months at the widow 's expense , Mme . Vauquer ( not yet dressed ) heard the rustle of a silk dress and a young woman 's light footstep on the stair ; some one was going to Goriot 's room . He seemed to expect the visit , for his door stood ajar . The portly Sylvie presently came up to tell her mistress that a girl too pretty to be honest , " dressed like a goddess , " and not a speck of mud on her laced cashmere boots , had glided in from the street like a snake , had found the kitchen , and asked for M. Goriot 's room . Mme . Vauquer and the cook , listening , overheard several words affectionately spoken during the visit , which lasted for some time . When M. Goriot went downstairs with the lady , the stout Sylvie forthwith took her basket and followed the lover-like couple , under pretext of going to do her marketing . " M. Goriot must be awfully rich , all the same , madame , " she reported on her return , " to keep her in such style . Just imagine it ! There was a splendid carriage waiting at the corner of the Place de l'Estrapade , and _she_ got into it . " While they were at dinner that evening , Mme . Vauquer went to the window and drew the curtain , as the sun was shining into Goriot 's eyes . " You are beloved of fair ladies , M. Goriot--the sun seeks you out , " she said , alluding to his visitor . " _Peste ! _ you have good taste ; she was very pretty . " " That was my daughter , " he said , with a kind of pride in his voice , and the rest chose to consider this as the fatuity of an old man who wishes to save appearances . A month after this visit M. Goriot received another . The same daughter who had come to see him that morning came again after dinner , this time in evening dress . The boarders , in deep discussion in the dining-room , caught a glimpse of a lovely , fair-haired woman , slender , graceful , and much too distinguished-looking to be a daughter of Father Goriot 's . " Two of them ! " cried the portly Sylvie , who did not recognize the lady of the first visit . A few days later , and another young lady--a tall , well-moulded brunette , with dark hair and bright eyes--came to ask for M. Goriot . " Three of them ! " said Sylvie . Then the second daughter , who had first come in the morning to see her father , came shortly afterwards in the evening . She wore a ball dress , and came in a carriage . " Four of them ! " commented Mme . Vauquer and her plump handmaid . Sylvie saw not a trace of resemblance between this great lady and the girl in her simple morning dress who had entered her kitchen on the occasion of her first visit . At that time Goriot was paying twelve hundred francs a year to his landlady , and Mme . Vauquer saw nothing out of the common in the fact that a rich man had four or five mistresses ; nay , she thought it very knowing of him to pass them off as his daughters . She was not at all inclined to draw a hard-and-fast line , or to take umbrage at his sending for them to the Maison Vauquer ; yet , inasmuch as these visits explained her boarder 's indifference to her , she went so far ( at the end of the second year ) as to speak of him as an " ugly old wretch . " When at length her boarder declined to nine hundred francs a year , she asked him very insolently what he took her house to be , after meeting one of these ladies on the stairs . Father Goriot answered that the lady was his eldest daughter . " So you have two or three dozen daughters , have you ? " said Mme . Vauquer sharply . " I have only two , " her boarder answered meekly , like a ruined man who is broken in to all the cruel usage of misfortune . Towards the end of the third year Father Goriot reduced his expenses still further ; he went up to the third story , and now paid forty-five francs a month . He did without snuff , told his hairdresser that he no longer required his services , and gave up wearing powder . When Goriot appeared for the first time in this condition , an exclamation of astonishment broke from his hostess at the color of his hair--a dingy olive gray . He had grown sadder day by day under the influence of some hidden trouble ; among all the faces round the table , his was the most woe-begone . There was no longer any doubt . Goriot was an elderly libertine , whose eyes had only been preserved by the skill of the physician from the malign influence of the remedies necessitated by the state of his health . The disgusting color of his hair was a result of his excesses and of the drugs which he had taken that he might continue his career . The poor old man 's mental and physical condition afforded some grounds for the absurd rubbish talked about him . When his outfit was worn out , he replaced the fine linen by calico at fourteen _sous_ the ell . His diamonds , his gold snuff-box , watch-chain and trinkets , disappeared one by one . He had left off wearing the corn-flower blue coat , and was sumptuously arrayed , summer as well as winter , in a coarse chestnut-brown coat , a plush waistcoat , and doeskin breeches . He grew thinner and thinner ; his legs were shrunken , his cheeks , once so puffed out by contented bourgeois prosperity , were covered with wrinkles , and the outlines of the jawbones were distinctly visible ; there were deep furrows in his forehead . In the fourth year of his residence in the Rue Neuve-Sainte-Genevieve he was no longer like his former self . The hale vermicelli manufacturer , sixty-two years of age , who had looked scarce forty , the stout , comfortable , prosperous tradesman , with an almost bucolic air , and such a brisk demeanor that it did you good to look at him ; the man with something boyish in his smile , had suddenly sunk into his dotage , and had become a feeble , vacillating septuagenarian . The keen , bright blue eyes had grown dull , and faded to a steel-gray color ; the red inflamed rims looked as though they had shed tears of blood . He excited feelings of repulsion in some , and of pity in others . The young medical students who came to the house noticed the drooping of his lower lip and the conformation of the facial angle ; and , after teasing him for some time to no purpose , they declared that cretinism was setting in . One evening after dinner Mme . Vauquer said half banteringly to him , " So those daughters of yours do n't come to see you any more , eh ? " meaning to imply her doubts as to his paternity ; but Father Goriot shrank as if his hostess had touched him with a sword-point . " They come sometimes , " he said in a tremulous voice . " Aha ! you still see them sometimes ? " cried the students . " Bravo , Father Goriot ! " The old man scarcely seemed to hear the witticisms at his expense that followed on the words ; he had relapsed into the dreamy state of mind that these superficial observers took for senile torpor , due to his lack of intelligence . If they had only known , they might have been deeply interested by the problem of his condition ; but few problems were more obscure . It was easy , of course , to find out whether Goriot had really been a vermicelli manufacturer ; the amount of his fortune was readily discoverable ; but the old people , who were most inquisitive as to his concerns , never went beyond the limits of the Quarter , and lived in the lodging-house much as oysters cling to a rock . As for the rest , the current of life in Paris daily awaited them , and swept them away with it ; so soon as they left the Rue Neuve-Sainte-Genevieve , they forgot the existence of the old man , their butt at dinner . For those narrow souls , or for careless youth , the misery in Father Goriot 's withered face and its dull apathy were quite incompatible with wealth or any sort of intelligence . As for the creatures whom he called his daughters , all Mme . Vauquer 's boarders were of her opinion . With the faculty for severe logic sedulously cultivated by elderly women during long evenings of gossip till they can always find an hypothesis to fit all circumstances , she was wont to reason thus : " If Father Goriot had daughters of his own as rich as those ladies who came here seemed to be , he would not be lodging in my house , on the third floor , at forty-five francs a month ; and he would not go about dressed like a poor man . " No objection could be raised to these inferences . So by the end of the month of November 1819 , at the time when the curtain rises on this drama , every one in the house had come to have a very decided opinion as to the poor old man . He had never had either wife or daughter ; excesses had reduced him to this sluggish condition ; he was a sort of human mollusk who should be classed among the capulidoe , so one of the dinner contingent , an _employe_ at the Museum , who had a pretty wit of his own . Poiret was an eagle , a gentleman , compared with Goriot . Poiret would join the talk , argue , answer when he was spoken to ; as a matter of fact , his talk , arguments , and responses contributed nothing to the conversation , for Poiret had a habit of repeating what the others said in different words ; still , he did join in the talk ; he was alive , and seemed capable of feeling ; while Father Goriot ( to quote the Museum official again ) was invariably at zero degrees--Reaumur . Eugene de Rastignac had just returned to Paris in a state of mind not unknown to young men who are conscious of unusual powers , and to those whose faculties are so stimulated by a difficult position , that for the time being they rise above the ordinary level . Rastignac 's first year of study for the preliminary examinations in law had left him free to see the sights of Paris and to enjoy some of its amusements . A student has not much time on his hands if he sets himself to learn the repertory of every theatre , and to study the ins and outs of the labyrinth of Paris . To know its customs ; to learn the language , and become familiar with the amusements of the capital , he must explore its recesses , good and bad , follow the studies that please him best , and form some idea of the treasures contained in galleries and museums . At this stage of his career a student grows eager and excited about all sorts of follies that seem to him to be of immense importance . He has his hero , his great man , a professor at the College de France , paid to talk down to the level of his audience . He adjusts his cravat , and strikes various attitudes for the benefit of the women in the first galleries at the Opera-Comique . As he passes through all these successive initiations , and breaks out of his sheath , the horizons of life widen around him , and at length he grasps the plan of society with the different human strata of which it is composed . If he begins by admiring the procession of carriages on sunny afternoons in the Champs-Elysees , he soon reaches the further stage of envying their owners . Unconsciously , Eugene had served his apprenticeship before he went back to Angouleme for the long vacation after taking his degrees as bachelor of arts and bachelor of law . The illusions of childhood had vanished , so also had the ideas he brought with him from the provinces ; he had returned thither with an intelligence developed , with loftier ambitions , and saw things as they were at home in the old manor house . His father and mother , his two brothers and two sisters , with an aged aunt , whose whole fortune consisted in annuities , lived on the little estate of Rastignac . The whole property brought in about three thousand francs ; and though the amount varied with the season ( as must always be the case in a vine-growing district ) , they were obliged to spare an unvarying twelve hundred francs out of their income for him . He saw how constantly the poverty , which they had generously hidden from him , weighed upon them ; he could not help comparing the sisters , who had seemed so beautiful to his boyish eyes , with women in Paris , who had realized the beauty of his dreams . The uncertain future of the whole family depended upon him . It did not escape his eyes that not a crumb was wasted in the house , nor that the wine they drank was made from the second pressing ; a multitude of small things , which it is useless to speak of in detail here , made him burn to distinguish himself , and his ambition to succeed increased tenfold . He meant , like all great souls , that his success should be owing entirely to his merits ; but his was pre-eminently a southern temperament , the execution of his plans was sure to be marred by the vertigo that seizes on youth when youth sees itself alone in a wide sea , uncertain how to spend its energies , whither to steer its course , how to adapt its sails to the winds . At first he determined to fling himself heart and soul into his work , but he was diverted from this purpose by the need of society and connections ; then he saw how great an influence women exert in social life , and suddenly made up his mind to go out into this world to seek a protectress there . Surely a clever and high-spirited young man , whose wit and courage were set off to advantage by a graceful figure and the vigorous kind of beauty that readily strikes a woman 's imagination , need not despair of finding a protectress . These ideas occurred to him in his country walks with his sisters , whom he had once joined so gaily . The girls thought him very much changed . His aunt , Mme . de Marcillac , had been presented at court , and had moved among the brightest heights of that lofty region . Suddenly the young man 's ambition discerned in those recollections of hers , which had been like nursery fairy tales to her nephews and nieces , the elements of a social success at least as important as the success which he had achieved at the Ecole de Droit . He began to ask his aunt about those relations ; some of the old ties might still hold good . After much shaking of the branches of the family tree , the old lady came to the conclusion that of all persons who could be useful to her nephew among the selfish genus of rich relations , the Vicomtesse de Beauseant was the least likely to refuse . To this lady , therefore , she wrote in the old-fashioned style , recommending Eugene to her ; pointing out to her nephew that if he succeeded in pleasing Mme . de Beauseant , the Vicomtesse would introduce him to other relations . A few days after his return to Paris , therefore , Rastignac sent his aunt 's letter to Mme . de Beauseant . The Vicomtesse replied by an invitation to a ball for the following evening . This was the position of affairs at the Maison Vauquer at the end of November 1819. A few days later , after Mme . de Beauseant 's ball , Eugene came in at two o'clock in the morning . The persevering student meant to make up for the lost time by working until daylight . It was the first time that he had attempted to spend the night in this way in that silent quarter . The spell of a factitious energy was upon him ; he had beheld the pomp and splendor of the world . He had not dined at the Maison Vauquer ; the boarders probably would think that he would walk home at daybreak from the dance , as he had done sometimes on former occasions , after a fete at the Prado , or a ball at the Odeon , splashing his silk stockings thereby , and ruining his pumps . It so happened that Christophe took a look into the street before drawing the bolts of the door ; and Rastignac , coming in at that moment , could go up to his room without making any noise , followed by Christophe , who made a great deal . Eugene exchanged his dress suit for a shabby overcoat and slippers , kindled a fire with some blocks of patent fuel , and prepared for his night 's work in such a sort that the faint sounds he made were drowned by Christophe 's heavy tramp on the stairs . Eugene sat absorbed in thought for a few moments before plunging into his law books . He had just become aware of the fact that the Vicomtesse de Beauseant was one of the queens of fashion , that her house was thought to be the pleasantest in the Faubourg Saint-Germain . And not only so , she was , by right of her fortune , and the name she bore , one of the most conspicuous figures in that aristocratic world . Thanks to the aunt , thanks to Mme . de Marcillac 's letter of introduction , the poor student had been kindly received in that house before he knew the extent of the favor thus shown to him . It was almost like a patent of nobility to be admitted to those gilded salons ; he had appeared in the most exclusive circle in Paris , and now all doors were open for him . Eugene had been dazzled at first by the brilliant assembly , and had scarcely exchanged a few words with the Vicomtesse ; he had been content to single out a goddess among this throng of Parisian divinities , one of those women who are sure to attract a young man 's fancy . The Comtesse Anastasie de Restaud was tall and gracefully made ; she had one of the prettiest figures in Paris . Imagine a pair of great dark eyes , a magnificently moulded hand , a shapely foot . There was a fiery energy in her movements ; the Marquis de Ronquerolles had called her " a thoroughbred , " " a pure pedigree , " these figures of speech have replaced the " heavenly angel " and Ossianic nomenclature ; the old mythology of love is extinct , doomed to perish by modern dandyism . But for Rastignac , Mme . Anastasie de Restaud was the woman for whom he had sighed . He had contrived to write his name twice upon the list of partners upon her fan , and had snatched a few words with her during the first quadrille . " Where shall I meet you again , Madame ? " he asked abruptly , and the tones of his voice were full of the vehement energy that women like so well . " Oh , everywhere ! " said she , " in the Bois , at the Bouffons , in my own house . " With the impetuosity of his adventurous southern temper , he did all he could to cultivate an acquaintance with this lovely countess , making the best of his opportunities in the quadrille and during a waltz that she gave him . When he told her that he was a cousin of Mme . de Beauseant 's , the Countess , whom he took for a great lady , asked him to call at her house , and after her parting smile , Rastignac felt convinced that he must make this visit . He was so lucky as to light upon some one who did not laugh at his ignorance , a fatal defect among the gilded and insolent youth of that period ; the coterie of Maulincourts , Maximes de Trailles , de Marsays , Ronquerolles , Ajuda-Pintos , and Vandenesses who shone there in all the glory of coxcombry among the best-dressed women of fashion in Paris--Lady Brandon , the Duchesse de Langeais , the Comtesse de Kergarouet , Mme . de Serizy , the Duchesse de Carigliano , the Comtesse Ferraud , Mme . de Lanty , the Marquise d'Aiglemont , Mme . Firmiani , the Marquise de Listomere and the Marquise d'Espard , the Duchesse de Maufrigneuse and the Grandlieus . Luckily , therefore , for him , the novice happened upon the Marquis de Montriveau , the lover of the Duchesse de Langeais , a general as simple as a child ; from him Rastignac learned that the Comtesse lived in the Rue du Helder . Ah , what it is to be young , eager to see the world , greedily on the watch for any chance that brings you nearer the woman of your dreams , and behold two houses open their doors to you ! To set foot in the Vicomtesse de Beauseant 's house in the Faubourg Saint-Germain ; to fall on your knees before a Comtesse de Restaud in the Chaussee d'Antin ; to look at one glance across a vista of Paris drawing-rooms , conscious that , possessing sufficient good looks , you may hope to find aid and protection there in a feminine heart ! To feel ambitious enough to spurn the tight-rope on which you must walk with the steady head of an acrobat for whom a fall is impossible , and to find in a charming woman the best of all balancing poles . He sat there with his thoughts for a while , Law on the one hand , and Poverty on the other , beholding a radiant vision of a woman rise above the dull , smouldering fire . Who would not have paused and questioned the future as Eugene was doing ? who would not have pictured it full of success ? His wondering thoughts took wings ; he was transported out of the present into that blissful future ; he was sitting by Mme . de Restaud 's side , when a sort of sigh , like the grunt of an overburdened St. Joseph , broke the silence of the night . It vibrated through the student , who took the sound for a death groan . He opened his door noiselessly , went out upon the landing , and saw a thin streak of light under Father Goriot 's door . Eugene feared that his neighbor had been taken ill ; he went over and looked through the keyhole ; the old man was busily engaged in an occupation so singular and so suspicious that Rastignac thought he was only doing a piece of necessary service to society to watch the self-styled vermicelli maker 's nocturnal industries . The table was upturned , and Goriot had doubtless in some way secured a silver plate and cup to the bar before knotting a thick rope round them ; he was pulling at this rope with such enormous force that they were being crushed and twisted out of shape ; to all appearance he meant to convert the richly wrought metal into ingots . " _Peste ! _ what a man ! " said Rastignac , as he watched Goriot 's muscular arms ; there was not a sound in the room while the old man , with the aid of the rope , was kneading the silver like dough . " Was he then , indeed , a thief , or a receiver of stolen goods , who affected imbecility and decrepitude , and lived like a beggar that he might carry on his pursuits the more securely ? " Eugene stood for a moment revolving these questions , then he looked again through the keyhole . Father Goriot had unwound his coil of rope ; he had covered the table with a blanket , and was now employed in rolling the flattened mass of silver into a bar , an operation which he performed with marvelous dexterity . " Why , he must be as strong as Augustus , King of Poland ! " said Eugene to himself when the bar was nearly finished . Father Goriot looked sadly at his handiwork , tears fell from his eyes , he blew out the dip which had served him for a light while he manipulated the silver , and Eugene heard him sigh as he lay down again . " He is mad , " thought the student . " _Poor child ! _ " Father Goriot said aloud . Rastignac , hearing those words , concluded to keep silence ; he would not hastily condemn his neighbor . He was just in the doorway of his room when a strange sound from the staircase below reached his ears ; it might have been made by two men coming up in list slippers . Eugene listened ; two men there certainly were , he could hear their breathing . Yet there had been no sound of opening the street door , no footsteps in the passage . Suddenly , too , he saw a faint gleam of light on the second story ; it came from M. Vautrin 's room . " There are a good many mysteries here for a lodging-house ! " he said to himself . He went part of the way downstairs and listened again . The rattle of gold reached his ears . In another moment the light was put out , and again he distinctly heard the breathing of two men , but no sound of a door being opened or shut . The two men went downstairs , the faint sounds growing fainter as they went . " Who is there ? " cried Mme . Vauquer out of her bedroom window . " I , Mme . Vauquer , " answered Vautrin 's deep bass voice . " I am coming in . " " That is odd ! Christophe drew the bolts , " said Eugene , going back to his room . " You have to sit up at night , it seems , if you really mean to know all that is going on about you in Paris . " These incidents turned his thought from his ambitious dreams ; he betook himself to his work , but his thought wandered back to Father Goriot 's suspicious occupation ; Mme . de Restaud 's face swam again and again before his eyes like a vision of a brilliant future ; and at last he lay down and slept with clenched fists . When a young man makes up his mind that he will work all night , the chances are that seven times out of ten he will sleep till morning . Such vigils do not begin before we are turned twenty . The next morning Paris was wrapped in one of the dense fogs that throw the most punctual people out in their calculations as to the time ; even the most business-like folk fail to keep their appointments in such weather , and ordinary mortals wake up at noon and fancy it is eight o'clock . On this morning it was half-past nine , and Mme . Vauquer still lay abed . Christophe was late , Sylvie was late , but the two sat comfortably taking their coffee as usual . It was Sylvie 's custom to take the cream off the milk destined for the boarders ' breakfast for her own , and to boil the remainder for some time , so that madame should not discover this illegal exaction . " Sylvie , " said Christophe , as he dipped a piece of toast into the coffee , " M. Vautrin , who is not such a bad sort , all the same , had two people come to see him again last night . If madame says anything , mind you say nothing about it . " " Has he given you something ? " " He gave me a five-franc piece this month , which is as good as saying , 'Hold your tongue . ' " " Except him and Mme . Couture , who does n't look twice at every penny , there 's no one in the house that does n't try to get back with the left hand all that they give with the right at New Year , " said Sylvie . " And , after all , " said Christophe , " what do they give you ? A miserable five-franc piece . There is Father Goriot , who has cleaned his shoes himself these two years past . There is that old beggar Poiret , who goes without blacking altogether ; he would sooner drink it than put it on his boots . Then there is that whipper-snapper of a student , who gives me a couple of francs . Two francs will not pay for my brushes , and he sells his old clothes , and gets more for them than they are worth . Oh ! they 're a shabby lot ! " " Pooh ! " said Sylvie , sipping her coffee , " our places are the best in the Quarter , that I know . But about that great big chap Vautrin , Christophe ; has any one told you anything about him ? " " Yes . I met a gentleman in the street a few days ago ; he said to me , 'There 's a gentleman in your place , is n't there ? a tall man that dyes his whiskers ? ' I told him , 'No , sir ; they are n't dyed . A gay fellow like him has n't the time to do it . ' And when I told M. Vautrin about it afterwards , he said , 'Quite right , my boy . That is the way to answer them . There is nothing more unpleasant than to have your little weaknesses known ; it might spoil many a match . ' " " Well , and for my part , " said Sylvie , " a man tried to humbug me at the market wanting to know if I had seen him put on his shirt . Such bosh ! There , " she cried , interrupting herself , " that 's a quarter to ten striking at the Val-de-Grace , and not a soul stirring ! " " Pooh ! they are all gone out . Mme . Couture and the girl went out at eight o'clock to take the wafer at Saint-Etienne . Father Goriot started off somewhere with a parcel , and the student wo n't be back from his lecture till ten o'clock . I saw them go while I was sweeping the stairs ; Father Goriot knocked up against me , and his parcel was as hard as iron . What is the old fellow up to , I wonder ? He is as good as a plaything for the rest of them ; they can never let him alone ; but he is a good man , all the same , and worth more than all of them put together . He does n't give you much himself , but he sometimes sends you with a message to ladies who fork out famous tips ; they are dressed grandly , too . " " His daughters , as he calls them , eh ? There are a dozen of them . " " I have never been to more than two--the two who came here . " " There is madame moving overhead ; I shall have to go , or she will raise a fine racket . Just keep an eye on the milk , Christophe ; do n't let the cat get at it . " Sylvie went up to her mistress ' room . " Sylvie ! How is this ? It 's nearly ten o'clock , and you let me sleep like a dormouse ! Such a thing has never happened before . " " It 's the fog ; it is that thick , you could cut it with a knife . " " But how about breakfast ? " " Bah ! the boarders are possessed , I 'm sure . They all cleared out before there was a wink of daylight . " " Do speak properly , Sylvie , " Mme . Vauquer retorted ; " say a blink of daylight . " " Ah , well , madame , whichever you please . Anyhow , you can have breakfast at ten o'clock . La Michonnette and Poiret have neither of them stirred . There are only those two upstairs , and they are sleeping like the logs they are . " " But , Sylvie , you put their names together as if---- " " As if what ? " said Sylvie , bursting into a guffaw . " The two of them make a pair . " " It is a strange thing , is n't it , Sylvie , how M. Vautrin got in last night after Christophe had bolted the door ? " " Not at all , madame . Christophe heard M. Vautrin , and went down and undid the door . And here are you imagining that---- ? " " Give me my bodice , and be quick and get breakfast ready . Dish up the rest of the mutton with the potatoes , and you can put the stewed pears on the table , those at five a penny . " A few moments later Mme . Vauquer came down , just in time to see the cat knock down a plate that covered a bowl of milk , and begin to lap in all haste . " Mistigris ! " she cried . The cat fled , but promptly returned to rub against her ankles . " Oh ! yes , you can wheedle , you old hypocrite ! " she said . " Sylvie ! Sylvie ! " " Yes , madame ; what is it ? " " Just see what the cat has done ! " " It is all that stupid Christophe 's fault . I told him to stop and lay the table . What has become of him ? Do n't you worry , madame ; Father Goriot shall have it . I will fill it up with water , and he wo n't know the difference ; he never notices anything , not even what he eats . " " I wonder where the old heathen can have gone ? " said Mme . Vauquer , setting the plates round the table . " Who knows ? He is up to all sorts of tricks . " " I have overslept myself , " said Mme . Vauquer . " But madame looks as fresh as a rose , all the same . " The door bell rang at that moment , and Vautrin came through the sitting-room , singing loudly : " 'Tis the same old story everywhere , A roving heart and a roving glance. . " Oh ! Mamma Vauquer ! good-morning ! " he cried at the sight of his hostess , and he put his arm gaily round her waist . " There ! have done---- " " 'Impertinence ! ' Say it ! " he answered . " Come , say it ! Now , is n't that what you really mean ? Stop a bit , I will help you to set the table . Ah ! I am a nice man , am I not ? " For the locks of brown and the golden hair A sighing lover ... " Oh ! I have just seen something so funny---- ... . led by chance . " " What ? " asked the widow . " Father Goriot in the goldsmith 's shop in the Rue Dauphine at half-past eight this morning . They buy old spoons and forks and gold lace there , and Goriot sold a piece of silver plate for a good round sum . It had been twisted out of shape very neatly for a man that 's not used to the trade . " " Really ? You do n't say so ? " " Yes . One of my friends is expatriating himself ; I had been to see him off on board the Royal Mail steamer , and was coming back here . I waited after that to see what Father Goriot would do ; it is a comical affair . He came back to this quarter of the world , to the Rue des Gres , and went into a money-lender 's house ; everybody knows him , Gobseck , a stuck-up rascal , that would make dominoes out of his father 's bones , a Turk , a heathen , an old Jew , a Greek ; it would be a difficult matter to rob _him_ , for he puts all his coin into the Bank . " " Then what was Father Goriot doing there ? " " Doing ? " said Vautrin . " Nothing ; he was bent on his own undoing . He is a simpleton , stupid enough to ruin himself by running after---- " " There he is ! " cried Sylvie . " Christophe , " cried Father Goriot 's voice , " come upstairs with me . " Christophe went up , and shortly afterwards came down again . " Where are you going ? " Mme . Vauquer asked of her servant . " Out on an errand for M. Goriot . " " What may that be ? " said Vautrin , pouncing on a letter in Christophe 's hand . " _Mme . la Comtesse Anastasie de Restaud_ , " he read . " Where are you going with it ? " he added , as he gave the letter back to Christophe . " To the Rue du Helder . I have orders to give this into her hands myself . " " What is there inside it ? " said Vautrin , holding the letter up to the light . " A banknote ? No. " He peered into the envelope . " A receipted account ! " he cried . " My word ! 'tis a gallant old dotard . Off with you , old chap , " he said , bringing down a hand on Christophe 's head , and spinning the man round like a thimble ; " you will have a famous tip . " By this time the table was set . Sylvie was boiling the milk , Mme . Vauquer was lighting a fire in the stove with some assistance from Vautrin , who kept humming to himself : " The same old story everywhere , A roving heart and a roving glance . " When everything was ready , Mme . Couture and Mlle . Taillefer came in . " Where have you been this morning , fair lady ? " said Mme . Vauquer , turning to Mme . Couture . " We have just been to say our prayers at Saint-Etienne du Mont . To-day is the day when we must go to see M. Taillefer . Poor little thing ! She is trembling like a leaf , " Mme . Couture went on , as she seated herself before the fire and held the steaming soles of her boots to the blaze . " Warm yourself , Victorine , " said Mme . Vauquer . " It is quite right and proper , mademoiselle , to pray to Heaven to soften your father 's heart , " said Vautrin , as he drew a chair nearer to the orphan girl ; " but that is not enough . What you want is a friend who will give the monster a piece of his mind ; a barbarian that has three millions ( so they say ) , and will not give you a dowry ; and a pretty girl needs a dowry nowadays . " " Poor child ! " said Mme . Vauquer . " Never mind , my pet , your wretch of a father is going just the way to bring trouble upon himself . " Victorine 's eyes filled with tears at the words , and the widow checked herself at a sign from Mme . Couture . " If we could only see him ! " said the Commissary-General 's widow ; " if I could speak to him myself and give him his wife 's last letter ! I have never dared to run the risk of sending it by post ; he knew my handwriting---- " " 'Oh woman , persecuted and injured innocent ! ' " exclaimed Vautrin , breaking in upon her . " So that is how you are , is it ? In a few days ' time I will look into your affairs , and it will be all right , you shall see . " " Oh ! sir , " said Victorine , with a tearful but eager glance at Vautrin , who showed no sign of being touched by it , " if you know of any way of communicating with my father , please be sure and tell him that his affection and my mother 's honor are more to me than all the money in the world . If you can induce him to relent a little towards me , I will pray to God for you . You may be sure of my gratitude---- " " _The same old story everywhere_ , " sang Vautrin , with a satirical intonation . At this juncture , Goriot , Mlle . Michonneau , and Poiret came downstairs together ; possibly the scent of the gravy which Sylvie was making to serve with the mutton had announced breakfast . The seven people thus assembled bade each other good-morning , and took their places at the table ; the clock struck ten , and the student 's footstep was heard outside . " Ah ! here you are , M. Eugene , " said Sylvie ; " every one is breakfasting at home to-day . " The student exchanged greetings with the lodgers , and sat down beside Goriot . " I have just met with a queer adventure , " he said , as he helped himself abundantly to the mutton , and cut a slice of bread , which Mme . Vauquer 's eyes gauged as usual . " An adventure ? " queried Poiret . " Well , and what is there to astonish you in that , old boy ? " Vautrin asked of Poiret . " M. Eugene is cut out for that kind of thing . " Mlle . Taillefer stole a timid glance at the young student . " Tell us about your adventure ! " demanded M. Vautrin . " Yesterday evening I went to a ball given by a cousin of mine , the Vicomtesse de Beauseant . She has a magnificent house ; the rooms are hung with silk--in short , it was a splendid affair , and I was as happy as a king--- " " Fisher , " put in Vautrin , interrupting . " What do you mean , sir ? " said Eugene sharply . " I said 'fisher , ' because kingfishers see a good deal more fun than kings . " " Quite true ; I would much rather be the little careless bird than a king , " said Poiret the ditto-ist , " because---- " " In fact"--the law-student cut him short--"I danced with one of the handsomest women in the room , a charming countess , the most exquisite creature I have ever seen . There was peach blossom in her hair , and she had the loveliest bouquet of flowers--real flowers , that scented the air----but there ! it is no use trying to describe a woman glowing with the dance . You ought to have seen her ! Well , and this morning I met this divine countess about nine o'clock , on foot in the Rue de Gres . Oh ! how my heart beat ! I began to think---- " " That she was coming here , " said Vautrin , with a keen look at the student . " I expect that she was going to call on old Gobseck , a money-lender . If ever you explore a Parisian woman 's heart , you will find the money-lender first , and the lover afterwards . Your countess is called Anastasie de Restaud , and she lives in the Rue du Helder . " The student stared hard at Vautrin . Father Goriot raised his head at the words , and gave the two speakers a glance so full of intelligence and uneasiness that the lodgers beheld him with astonishment . " Then Christophe was too late , and she must have gone to him ! " cried Goriot , with anguish in his voice . " It is just as I guessed , " said Vautrin , leaning over to whisper in Mme . Vauquer 's ear . Goriot went on with his breakfast , but seemed unconscious of what he was doing . He had never looked more stupid nor more taken up with his own thoughts than he did at that moment . " Who the devil could have told you her name , M. Vautrin ? " asked Eugene . " Aha ! there you are ! " answered Vautrin . " Old Father Goriot there knew it quite well ! and why should I not know it too ? " " M. Goriot ? " the student cried . " What is it ? " asked the old man . " So she was very beautiful , was she , yesterday night ? " " Who ? " " Mme . de Restaud . " " Look at the old wretch , " said Mme . Vauquer , speaking to Vautrin ; " how his eyes light up ! " " Then does he really keep her ? " said Mlle . Michonneau , in a whisper to the student . " Oh ! yes , she was tremendously pretty , " Eugene answered . Father Goriot watched him with eager eyes . " If Mme . de Beauseant had not been there , my divine countess would have been the queen of the ball ; none of the younger men had eyes for any one else . I was the twelfth on her list , and she danced every quadrille . The other women were furious . She must have enjoyed herself , if ever creature did ! It is a true saying that there is no more beautiful sight than a frigate in full sail , a galloping horse , or a woman dancing . " " So the wheel turns , " said Vautrin ; " yesterday night at a duchess ' ball , this morning in a money-lender 's office , on the lowest rung of the ladder--just like a Parisienne ! If their husbands cannot afford to pay for their frantic extravagance , they will sell themselves . Or if they cannot do that , they will tear out their mothers ' hearts to find something to pay for their splendor . They will turn the world upside down . Just a Parisienne through and through ! " Father Goriot 's face , which had shone at the student 's words like the sun on a bright day , clouded over all at once at this cruel speech of Vautrin 's . " Well , " said Mme . Vauquer , " but where is your adventure ? Did you speak to her ? Did you ask her if she wanted to study law ? " " She did not see me , " said Eugene . " But only think of meeting one of the prettiest women in Paris in the Rue des Gres at nine o'clock ! She could not have reached home after the ball till two o'clock this morning . Was n't it queer ? There is no place like Paris for this sort of adventures . " " Pshaw ! much funnier things than _that_ happen here ! " exclaimed Vautrin . Mlle . Taillefer had scarcely heeded the talk , she was so absorbed by the thought of the new attempt that she was about to make . Mme . Couture made a sign that it was time to go upstairs and dress ; the two ladies went out , and Father Goriot followed their example . " Well , did you see ? " said Mme . Vauquer , addressing Vautrin and the rest of the circle . " He is ruining himself for those women , that is plain . " " Nothing will ever make me believe that that beautiful Comtesse de Restaud is anything to Father Goriot , " cried the student . " Well , and if you do n't , " broke in Vautrin , " we are not set on convincing you . You are too young to know Paris thoroughly yet ; later on you will find out that there are what we call men with a passion---- " Mlle . Michonneau gave Vautrin a quick glance at these words . They seemed to be like the sound of a trumpet to a trooper 's horse . " Aha ! " said Vautrin , stopping in his speech to give her a searching glance , " so we have had our little experiences , have we ? " The old maid lowered her eyes like a nun who sees a statue . " Well , " he went on , " when folk of that kind get a notion into their heads , they cannot drop it . They must drink the water from some particular spring--it is stagnant as often as not ; but they will sell their wives and families , they will sell their own souls to the devil to get it . For some this spring is play , or the stock-exchange , or music , or a collection of pictures or insects ; for others it is some woman who can give them the dainties they like . You might offer these last all the women on earth--they would turn up their noses ; they will have the only one who can gratify their passion . It often happens that the woman does not care for them at all , and treats them cruelly ; they buy their morsels of satisfaction very dear ; but no matter , the fools are never tired of it ; they will take their last blanket to the pawnbroker 's to give their last five-franc piece to her . Father Goriot here is one of that sort . He is discreet , so the Countess exploits him--just the way of the gay world . The poor old fellow thinks of her and of nothing else . In all other respects you see he is a stupid animal ; but get him on that subject , and his eyes sparkle like diamonds . That secret is not difficult to guess . He took some plate himself this morning to the melting-pot , and I saw him at Daddy Gobseck 's in the Rue des Gres . And now , mark what follows--he came back here , and gave a letter for the Comtesse de Restaud to that noodle of a Christophe , who showed us the address ; there was a receipted bill inside it . It is clear that it was an urgent matter if the Countess also went herself to the old money lender . Father Goriot has financed her handsomely . There is no need to tack a tale together ; the thing is self-evident . So that shows you , sir student , that all the time your Countess was smiling , dancing , flirting , swaying her peach-flower crowned head , with her gown gathered into her hand , her slippers were pinching her , as they say ; she was thinking of her protested bills , or her lover 's protested bills . " " You have made me wild to know the truth , " cried Eugene ; " I will go to call on Mme . de Restaud to-morrow . " " Yes , " echoed Poiret ; " you must go and call on Mme . de Restaud . " " And perhaps you will find Father Goriot there , who will take payment for the assistance he politely rendered . " Eugene looked disgusted . " Why , then , this Paris of yours is a slough . " " And an uncommonly queer slough , too , " replied Vautrin . " The mud splashes you as you drive through it in your carriage--you are a respectable person ; you go afoot and are splashed--you are a scoundrel . You are so unlucky as to walk off with something or other belonging to somebody else , and they exhibit you as a curiosity in the Place du Palais-de-Justice ; you steal a million , and you are pointed out in every salon as a model of virtue . And you pay thirty millions for the police and the courts of justice , for the maintenance of law and order ! A pretty slate of things it is ! " " What , " cried Mme . Vauquer , " has Father Goriot really melted down his silver posset-dish ? " " There were two turtle-doves on the lid , were there not ? " asked Eugene . " Yes , that there were . " " Then , was he fond of it ? " said Eugene . " He cried while he was breaking up the cup and plate . I happened to see him by accident . " " It was dear to him as his own life , " answered the widow . " There ! you see how infatuated the old fellow is ! " cried Vautrin . " The woman yonder can coax the soul out of him . " The student went up to his room . Vautrin went out , and a few moments later Mme . Couture and Victorine drove away in a cab which Sylvie had called for them . Poiret gave his arm to Mlle . Michonneau , and they went together to spend the two sunniest hours of the day in the Jardin des Plantes . " Well , those two are as good as married , " was the portly Sylvie 's comment . " They are going out together to-day for the first time . They are such a couple of dry sticks that if they happen to strike against each other they will draw sparks like flint and steel . " " Keep clear of Mlle . Michonneau 's shawl , then , " said Mme . Vauquer , laughing ; " it would flare up like tinder . " At four o'clock that evening , when Goriot came in , he saw , by the light of two smoky lamps , that Victorine 's eyes were red . Mme . Vauquer was listening to the history of the visit made that morning to M. Taillefer ; it had been made in vain . Taillefer was tired of the annual application made by his daughter and her elderly friend ; he gave them a personal interview in order to arrive at an understanding with them . " My dear lady , " said Mme . Couture , addressing Mme . Vauquer , " just imagine it ; he did not even ask Victorine to sit down , she was standing the whole time . He said to me quite coolly , without putting himself in a passion , that we might spare ourselves the trouble of going there ; that the young lady ( he would not call her his daughter ) was injuring her cause by importuning him ( _importuning ! _ once a year , the wretch ! ) ; that as Victorine 's mother had nothing when he married her , Victorine ought not to expect anything from him ; in fact , he said the most cruel things , that made the poor child burst out crying . The little thing threw herself at her father 's feet and spoke up bravely ; she said that she only persevered in her visits for her mother 's sake ; that she would obey him without a murmur , but that she begged him to read her poor dead mother 's farewell letter . She took it up and gave it to him , saying the most beautiful things in the world , most beautifully expressed ; I do not know where she learned them ; God must have put them into her head , for the poor child was inspired to speak so nicely that it made me cry like a fool to hear her talk . And what do you think the monster was doing all the time ? Cutting his nails ! He took the letter that poor Mme . Taillefer had soaked with tears , and flung it on to the chimney-piece . 'That is all right , ' he said . He held out his hands to raise his daughter , but she covered them with kisses , and he drew them away again . Scandalous , is n't it ? And his great booby of a son came in and took no notice of his sister . " " What inhuman wretches they must be ! " said Father Goriot . " And then they both went out of the room , " Mme . Couture went on , without heeding the worthy vermicelli maker 's exclamation ; " father and son bowed to me , and asked me to excuse them on account of urgent business ! That is the history of our call . Well , he has seen his daughter at any rate . How he can refuse to acknowledge her I cannot think , for they are as alike as two peas . " The boarders dropped in one after another , interchanging greetings and empty jokes that certain classes of Parisians regard as humorous and witty . Dulness is their prevailing ingredient , and the whole point consists in mispronouncing a word or a gesture . This kind of argot is always changing . The essence of the jest consists in some catchword suggested by a political event , an incident in the police courts , a street song , or a bit of burlesque at some theatre , and forgotten in a month . Anything and everything serves to keep up a game of battledore and shuttlecock with words and ideas . The diorama , a recent invention , which carried an optical illusion a degree further than panoramas , had given rise to a mania among art students for ending every word with _rama_ . The Maison Vauquer had caught the infection from a young artist among the boarders . " Well , Monsieur-r-r Poiret , " said the _employe_ from the Museum , " how is your health-orama ? " Then , without waiting for an answer , he turned to Mme . Couture and Victorine with a " Ladies , you seem melancholy . " " Is dinner ready ? " cried Horace Bianchon , a medical student , and a friend of Rastignac 's ; " my stomach is sinking _usque ad talones_ . " " There is an uncommon _frozerama_ outside , " said Vautrin . " Make room there , Father Goriot ! Confound it , your foot covers the whole front of the stove . " " Illustrious M. Vautrin , " put in Bianchon , " why do you say _frozerama_ ? It is incorrect ; it should be _frozenrama_ . " " No , it should n't , " said the official from the Museum ; " _frozerama_ is right by the same rule that you say 'My feet are _froze_ . ' " " Ah ! ah ! " " Here is his Excellency the Marquis de Rastignac , Doctor of the Law of Contraries , " cried Bianchon , seizing Eugene by the throat , and almost throttling him . " Hallo there ! hallo ! " Mlle . Michonneau came noiselessly in , bowed to the rest of the party , and took her place beside the three women without saying a word . " That old bat always makes me shudder , " said Bianchon in a low voice , indicating Mlle . Michonneau to Vautrin . " I have studied Gall 's system , and I am sure she has the bump of Judas . " " Then you have seen a case before ? " said Vautrin . " Who has not ? " answered Bianchon . " Upon my word , that ghastly old maid looks just like one of the long worms that will gnaw a beam through , give them time enough . " " That is the way , young man , " returned he of the forty years and the dyed whiskers : " The rose has lived the life of a rose-- A morning 's space . " " Aha ! here is a magnificent _soupe-au-rama_ , " cried Poiret as Christophe came in bearing the soup with cautious heed . " I beg your pardon , sir , " said Mme . Vauquer ; " it is _soupe aux choux_ . " All the young men roared with laughter . " Had you there , Poiret ! " " Poir-r-r-rette ! she had you there ! " " Score two points to Mamma Vauquer , " said Vautrin . " Did any of you notice the fog this morning ? " asked the official . " It was a frantic fog , " said Bianchon , " a fog unparalleled , doleful , melancholy , sea-green , asthmatical--a Goriot of a fog ! " " A Goriorama , " said the art student , " because you could n't see a thing in it . " " Hey ! Milord Gaoriotte , they air talking about yoo-o-ou ! " Father Goriot , seated at the lower end of the table , close to the door through which the servant entered , raised his face ; he had smelt at a scrap of bread that lay under his table napkin , an old trick acquired in his commercial capacity , that still showed itself at times . " Well , " Madame Vauquer cried in sharp tones , that rang above the rattle of spoons and plates and the sound of other voices , " and is there anything the matter with the bread ? " " Nothing whatever , madame , " he answered ; " on the contrary , it is made of the best quality of corn ; flour from Etampes . " " How could you tell ? " asked Eugene . " By the color , by the flavor . " " You knew the flavor by the smell , I suppose , " said Mme . Vauquer . " You have grown so economical , you will find out how to live on the smell of cooking at last . " " Take out a patent for it , then , " cried the Museum official ; " you would make a handsome fortune . " " Never mind him , " said the artist ; " he does that sort of thing to delude us into thinking that he was a vermicelli maker . " " Your nose is a corn-sampler , it appears ? " inquired the official . " Corn _what_ ? " asked Bianchon . " Corn-el . " " Corn-et . " " Corn-elian . " " Corn-ice . " " Corn-ucopia . " " Corn-crake . " " Corn-cockle . " " Corn-orama . " The eight responses came like a rolling fire from every part of the room , and the laughter that followed was the more uproarious because poor Father Goriot stared at the others with a puzzled look , like a foreigner trying to catch the meaning of words in a language which he does not understand . " Corn ? ... " he said , turning to Vautrin , his next neighbor . " Corn on your foot , old man ! " said Vautrin , and he drove Father Goriot 's cap down over his eyes by a blow on the crown . The poor old man thus suddenly attacked was for a moment too bewildered to do anything . Christophe carried off his plate , thinking that he had finished his soup , so that when Goriot had pushed back his cap from his eyes his spoon encountered the table . Every one burst out laughing . " You are a disagreeable joker , sir , " said the old man , " and if you take any further liberties with me---- " " Well , what then , old boy ? " Vautrin interrupted . " Well , then , you shall pay dearly for it some day---- " " Down below , eh ? " said the artist , " in the little dark corner where they put naughty boys . " " Well , mademoiselle , " Vautrin said , turning to Victorine , " you are eating nothing . So papa was refractory , was he ? " " A monster ! " said Mme . Couture . " Mademoiselle might make application for aliment pending her suit ; she is not eating anything . Eh ! eh ! just see how Father Goriot is staring at Mlle . Victorine . " The old man had forgotten his dinner , he was so absorbed in gazing at the poor girl ; the sorrow in her face was unmistakable , --the slighted love of a child whose father would not recognize her . " We are mistaken about Father Goriot , my dear boy , " said Eugene in a low voice . " He is not an idiot , nor wanting in energy . Try your Gall system on him , and let me know what you think . I saw him crush a silver dish last night as if it had been made of wax ; there seems to be something extraordinary going on in his mind just now , to judge by his face . His life is so mysterious that it must be worth studying . Oh ! you may laugh , Bianchon ; I am not joking . " " The man is a subject , is he ? " said Bianchon ; " all right ! I will dissect him , if he will give me the chance . " " No ; feel his bumps . " " Hm ! --his stupidity might perhaps be contagious . " </text>
<text id="FictBalzacH_Goriot_Ib_EN.txt">
﻿ The next day Rastignac dressed himself very elegantly , and about three o'clock in the afternoon went to call on Mme . de Restaud . On the way thither he indulged in the wild intoxicating dreams which fill a young head so full of delicious excitement . Young men at his age take no account of obstacles nor of dangers ; they see success in every direction ; imagination has free play , and turns their lives into a romance ; they are saddened or discouraged by the collapse of one of the visionary schemes that have no existence save in their heated fancy . If youth were not ignorant and timid , civilization would be impossible . Eugene took unheard-of pains to keep himself in a spotless condition , but on his way through the streets he began to think about Mme . de Restaud and what he should say to her . He equipped himself with wit , rehearsed repartees in the course of an imaginary conversation , and prepared certain neat speeches a la Talleyrand , conjuring up a series of small events which should prepare the way for the declaration on which he had based his future ; and during these musings the law student was bespattered with mud , and by the time he reached the Palais Royal he was obliged to have his boots blacked and his trousers brushed . " If I were rich , " he said , as he changed the five-franc piece he had brought with him in case anything might happen , " I would take a cab , then I could think at my ease . " At last he reached the Rue du Helder , and asked for the Comtesse de Restaud . He bore the contemptuous glances of the servants , who had seen him cross the court on foot , with the cold fury of a man who knows that he will succeed some day . He understood the meaning of their glances at once , for he had felt his inferiority as soon as he entered the court , where a smart cab was waiting . All the delights of life in Paris seemed to be implied by this visible and manifest sign of luxury and extravagance . A fine horse , in magnificent harness , was pawing the ground , and all at once the law student felt out of humor with himself . Every compartment in his brain which he had thought to find so full of wit was bolted fast ; he grew positively stupid . He sent up his name to the Countess , and waited in the ante-chamber , standing on one foot before a window that looked out upon the court ; mechanically he leaned his elbow against the sash , and stared before him . The time seemed long ; he would have left the house but for the southern tenacity of purpose which works miracles when it is single-minded . " Madame is in her boudoir , and cannot see any one at present , sir , " said the servant . " She gave me no answer ; but if you will go into the dining-room , there is some one already there . " Rastignac was impressed with a sense of the formidable power of the lackey who can accuse or condemn his masters by a word ; he coolly opened the door by which the man had just entered the ante-chamber , meaning , no doubt , to show these insolent flunkeys that he was familiar with the house ; but he found that he had thoughtlessly precipitated himself into a small room full of dressers , where lamps were standing , and hot-water pipes , on which towels were being dried ; a dark passage and a back staircase lay beyond it . Stifled laughter from the ante-chamber added to his confusion . " This way to the drawing-room , sir , " said the servant , with the exaggerated respect which seemed to be one more jest at his expense . Eugene turned so quickly that he stumbled against a bath . By good luck , he managed to keep his hat on his head , and saved it from immersion in the water ; but just as he turned , a door opened at the further end of the dark passage , dimly lighted by a small lamp . Rastignac heard voices and the sound of a kiss ; one of the speakers was Mme . de Restaud , the other was Father Goriot . Eugene followed the servant through the dining-room into the drawing-room ; he went to a window that looked out into the courtyard , and stood there for a while . He meant to know whether this Goriot was really the Goriot that he knew . His heart beat unwontedly fast ; he remembered Vautrin 's hideous insinuations . A well-dressed young man suddenly emerged from the room almost as Eugene entered it , saying impatiently to the servant who stood at the door : " I am going , Maurice . Tell Madame la Comtesse that I waited more than half an hour for her . " Whereupon this insolent being , who , doubtless , had a right to be insolent , sang an Italian trill , and went towards the window where Eugene was standing , moved thereto quite as much by a desire to see the student 's face as by a wish to look out into the courtyard . " But M. le Comte had better wait a moment longer ; madame is disengaged , " said Maurice , as he returned to the ante-chamber . Just at that moment Father Goriot appeared close to the gate ; he had emerged from a door at the foot of the back staircase . The worthy soul was preparing to open his umbrella regardless of the fact that the great gate had opened to admit a tilbury , in which a young man with a ribbon at his button-hole was seated . Father Goriot had scarcely time to start back and save himself . The horse took fright at the umbrella , swerved , and dashed forward towards the flight of steps . The young man looked round in annoyance , saw Father Goriot , and greeted him as he went out with constrained courtesy , such as people usually show to a money-lender so long as they require his services , or the sort of respect they feel it necessary to show for some one whose reputation has been blown upon , so that they blush to acknowledge his acquaintance . Father Goriot gave him a little friendly nod and a good-natured smile . All this happened with lightning speed . Eugene was so deeply interested that he forgot that he was not alone till he suddenly heard the Countess ' voice . " Oh ! Maxime , were you going away ? " she said reproachfully , with a shade of pique in her manner . The Countess had not seen the incident nor the entrance of the tilbury . Rastignac turned abruptly and saw her standing before him , coquettishly dressed in a loose white cashmere gown with knots of rose-colored ribbon here and there ; her hair was carelessly coiled about her head , as is the wont of Parisian women in the morning ; there was a soft fragrance about her--doubtless she was fresh from a bath ; --her graceful form seemed more flexible , her beauty more luxuriant . Her eyes glistened . A young man can see everything at a glance ; he feels the radiant influence of woman as a plant discerns and absorbs its nutriment from the air ; he did not need to touch her hands to feel their cool freshness . He saw faint rose tints through the cashmere of the dressing gown ; it had fallen slightly open , giving glimpses of a bare throat , on which the student 's eyes rested . The Countess had no need of the adventitious aid of corsets ; her girdle defined the outlines of her slender waist ; her throat was a challenge to love ; her feet , thrust into slippers , were daintily small . As Maxime took her hand and kissed it , Eugene became aware of Maxime 's existence , and the Countess saw Eugene . " Oh ! is that you M. de Rastignac ? I am very glad to see you , " she said , but there was something in her manner that a shrewd observer would have taken as a hint to depart . Maxime , as the Countess Anastasie had called the young man with the haughty insolence of bearing , looked from Eugene to the lady , and from the lady to Eugene ; it was sufficiently evident that he wished to be rid of the latter . An exact and faithful rendering of the glance might be given in the words : " Look here , my dear ; I hope you intend to send this little whipper-snapper about his business . " The Countess consulted the young man 's face with an intent submissiveness that betrays all the secrets of a woman 's heart , and Rastignac all at once began to hate him violently . To begin with , the sight of the fair carefully arranged curls on the other 's comely head had convinced him that his own crop was hideous ; Maxime 's boots , moreover , were elegant and spotless , while his own , in spite of all his care , bore some traces of his recent walk ; and , finally , Maxime 's overcoat fitted the outline of his figure gracefully , he looked like a pretty woman , while Eugene was wearing a black coat at half-past two . The quick-witted child of the Charente felt the disadvantage at which he was placed beside this tall , slender dandy , with the clear gaze and the pale face , one of those men who would ruin orphan children without scruple . Mme . de Restaud fled into the next room without waiting for Eugene to speak ; shaking out the skirts of her dressing-gown in her flight , so that she looked like a white butterfly , and Maxime hurried after her . Eugene , in a fury , followed Maxime and the Countess , and the three stood once more face to face by the hearth in the large drawing-room . The law student felt quite sure that the odious Maxime found him in the way , and even at the risk of displeasing Mme . de Restaud , he meant to annoy the dandy . It had struck him all at once that he had seen the young man before at Mme . de Beauseant 's ball ; he guessed the relation between Maxime and Mme . de Restaud ; and with the youthful audacity that commits prodigious blunders or achieves signal success , he said to himself , " This is my rival ; I mean to cut him out . " Rash resolve ! He did not know that M. le Comte Maxime de Trailles would wait till he was insulted , so as to fire first and kill his man . Eugene was a sportsman and a good shot , but he had not yet hit the bulls 's eye twenty times out of twenty-two . The young Count dropped into a low chair by the hearth , took up the tongs , and made up the fire so violently and so sulkily , that Anastasie 's fair face suddenly clouded over . She turned to Eugene , with a cool , questioning glance that asked plainly , " Why do you not go ? " a glance which well-bred people regard as a cue to make their exit . Eugene assumed an amiable expression . " Madame , " he began , " I hastened to call upon you---- " He stopped short . The door opened , and the owner of the tilbury suddenly appeared . He had left his hat outside , and did not greet the Countess ; he looked meditatively at Rastignac , and held out his hand to Maxime with a cordial " Good morning , " that astonished Eugene not a little . The young provincial did not understand the amenities of a triple alliance . " M. de Restaud , " said the Countess , introducing her husband to the law student . Eugene bowed profoundly . " This gentleman , " she continued , presenting Eugene to her husband , " is M. de Rastignac ; he is related to Mme . la Vicomtesse de Beauseant through the Marcillacs ; I had the pleasure of meeting him at her last ball . " _Related to Mme . la Vicomtesse de Beauseant through the Marcillacs ! _ These words , on which the countess threw ever so slight an emphasis , by reason of the pride that the mistress of a house takes in showing that she only receives people of distinction as visitors in her house , produced a magical effect . The Count 's stiff manner relaxed at once as he returned the student 's bow . " Delighted to have an opportunity of making your acquaintance , " he said . Maxime de Trailles himself gave Eugene an uneasy glance , and suddenly dropped his insolent manner . The mighty name had all the power of a fairy 's wand ; those closed compartments in the southern brain flew open again ; Rastignac 's carefully drilled faculties returned . It was as if a sudden light had pierced the obscurity of this upper world of Paris , and he began to see , though everything was indistinct as yet . Mme . Vauquer 's lodging-house and Father Goriot were very far remote from his thoughts . " I thought that the Marcillacs were extinct , " the Comte de Restaud said , addressing Eugene . " Yes , they are extinct , " answered the law student . " My great-uncle , the Chevalier de Rastignac , married the heiress of the Marcillac family . They had only one daughter , who married the Marechal de Clarimbault , Mme . de Beauseant 's grandfather on the mother 's side . We are the younger branch of the family , and the younger branch is all the poorer because my great-uncle , the Vice-Admiral , lost all that he had in the King 's service . The Government during the Revolution refused to admit our claims when the Compagnie des Indes was liquidated . " " Was not your great-uncle in command of the _Vengeur_ before 1789 ? " " Yes . " " Then he would be acquainted with my grandfather , who commanded the _Warwick_ . " Maxime looked at Mme . de Restaud and shrugged his shoulders , as who should say , " If he is going to discuss nautical matters with that fellow , it is all over with us . " Anastasie understood the glance that M. de Trailles gave her . With a woman 's admirable tact , she began to smile and said : " Come with me , Maxime ; I have something to say to you . We will leave you two gentlemen to sail in company on board the _Warwick_ and the _Vengeur_ . " She rose to her feet and signed to Maxime to follow her , mirth and mischief in her whole attitude , and the two went in the direction of the boudoir . The _morganatic_ couple ( to use a convenient German expression which has no exact equivalent ) had reached the door , when the Count interrupted himself in his talk with Eugene . " Anastasie ! " he cried pettishly , " just stay a moment , dear ; you know very well that---- " " I am coming back in a minute , " she interrupted ; " I have a commission for Maxime to execute , and I want to tell him about it . " She came back almost immediately . She had noticed the inflection in her husband 's voice , and knew that it would not be safe to retire to the boudoir ; like all women who are compelled to study their husbands ' characters in order to have their own way , and whose business it is to know exactly how far they can go without endangering a good understanding , she was very careful to avoid petty collisions in domestic life . It was Eugene who had brought about this untoward incident ; so the Countess looked at Maxime and indicated the law student with an air of exasperation . M. de Trailles addressed the Count , the Countess , and Eugene with the pointed remark , " You are busy , I do not want to interrupt you ; good-day , " and he went . " Just wait a moment , Maxime ! " the Count called after him . " Come and dine with us , " said the Countess , leaving Eugene and her husband together once more . She followed Maxime into the little drawing-room , where they sat together sufficiently long to feel sure that Rastignac had taken his leave . The law student heard their laughter , and their voices , and the pauses in their talk ; he grew malicious , exerted his conversational powers for M. de Restaud , flattered him , and drew him into discussions , to the end that he might see the Countess again and discover the nature of her relations with Father Goriot . This Countess with a husband and a lover , for Maxime clearly was her lover , was a mystery . What was the secret tie that bound her to the old tradesman ? This mystery he meant to penetrate , hoping by its means to gain a sovereign ascendency over this fair typical Parisian . " Anastasie ! " the Count called again to his wife . " Poor Maxime ! " she said , addressing the young man . " Come , we must resign ourselves . This evening---- " " I hope , Nasie , " he said in her ear , " that you will give orders not to admit that youngster , whose eyes light up like live coals when he looks at you . He will make you a declaration , and compromise you , and then you will compel me to kill him . " " Are you mad , Maxime ? " she said . " A young lad of a student is , on the contrary , a capital lightning-conductor ; is not that so ? Of course , I mean to make Restaud furiously jealous of him . " Maxime burst out laughing , and went out , followed by the Countess , who stood at the window to watch him into his carriage ; he shook his whip , and made his horse prance . She only returned when the great gate had been closed after him . " What do you think , dear ? " cried the Count , her husband , " this gentleman 's family estate is not far from Verteuil , on the Charente ; his great-uncle and my grandfather were acquainted . " " Delighted to find that we have acquaintances in common , " said the Countess , with a preoccupied manner . " More than you think , " said Eugene , in a low voice . " What do you mean ? " she asked quickly . " Why , only just now , " said the student , " I saw a gentleman go out at the gate , Father Goriot , my next door neighbor in the house where I am lodging . " At the sound of this name , and the prefix that embellished it , the Count , who was stirring the fire , let the tongs fall as though they had burned his fingers , and rose to his feet . " Sir , " he cried , " you might have called him 'Monsieur Goriot ' ! " The Countess turned pale at first at the sight of her husband 's vexation , then she reddened ; clearly she was embarrassed , her answer was made in a tone that she tried to make natural , and with an air of assumed carelessness : " You could not know any one who is dearer to us both ... " She broke off , glanced at the piano as if some fancy had crossed her mind , and asked , " Are you fond of music , M. de Rastignac ? " " Exceedingly , " answered Eugene , flushing , and disconcerted by a dim suspicion that he had somehow been guilty of a clumsy piece of folly . " Do you sing ? " she cried , going to the piano , and , sitting down before it , she swept her fingers over the keyboard from end to end . R-r-r-rah ! " No , madame . " The Comte de Restaud walked to and fro . " That is a pity ; you are without one great means of success . --_Ca-ro , ca-a-ro , ca-a-a-ro , non du-bi-ta-re_ , " sang the Countess . Eugene had a second time waved a magic wand when he uttered Goriot 's name , but the effect seemed to be entirely opposite to that produced by the formula " related to Mme . de Beauseant . " His position was not unlike that of some visitor permitted as a favor to inspect a private collection of curiosities , when by inadvertence he comes into collision with a glass case full of sculptured figures , and three or four heads , imperfectly secured , fall at the shock . He wished the earth would open and swallow him . Mme . de Restaud 's expression was reserved and chilly , her eyes had grown indifferent , and sedulously avoided meeting those of the unlucky student of law . " Madame , " he said , " you wish to talk with M. de Restaud ; permit me to wish you good-day---- " The Countess interrupted him by a gesture , saying hastily , " Whenever you come to see us , both M. de Restaud and I shall be delighted to see you . " Eugene made a profound bow and took his leave , followed by M. de Restaud , who insisted , in spite of his remonstrances , on accompanying him into the hall . " Neither your mistress nor I are at home to that gentleman when he calls , " the Count said to Maurice . As Eugene set foot on the steps , he saw that it was raining . " Come , " said he to himself , " somehow I have just made a mess of it , I do not know how . And now I am going to spoil my hat and coat into the bargain . I ought to stop in my corner , grind away at law , and never look to be anything but a boorish country magistrate . How can I go into society , when to manage properly you want a lot of cabs , varnished boots , gold watch chains , and all sorts of things ; you have to wear white doeskin gloves that cost six francs in the morning , and primrose kid gloves every evening ? A fig for that old humbug of a Goriot ! " When he reached the street door , the driver of a hackney coach , who had probably just deposited a wedding party at their door , and asked nothing better than a chance of making a little money for himself without his employer 's knowledge , saw that Eugene had no umbrella , remarked his black coat , white waistcoat , yellow gloves , and varnished boots , and stopped and looked at him inquiringly . Eugene , in the blind desperation that drives a young man to plunge deeper and deeper into an abyss , as if he might hope to find a fortunate issue in its lowest depths , nodded in reply to the driver 's signal , and stepped into the cab ; a few stray petals of orange blossom and scraps of wire bore witness to its recent occupation by a wedding party . " Where am I to drive , sir ? " demanded the man , who , by this time , had taken off his white gloves . " Confound it ! " Eugene said to himself , " I am in for it now , and at least I will not spend cab-hire for nothing ! --Drive to the Hotel Beauseant , " he said aloud . " Which ? " asked the man , a portentous word that reduced Eugene to confusion . This young man of fashion , species incerta , did not know that there were two Hotels Beauseant ; he was not aware how rich he was in relations who did not care about him . " The Vicomte de Beauseant , Rue---- " " De Grenelle , " interrupted the driver , with a jerk of his head . " You see , there are the hotels of the Marquis and Comte de Beauseant in the Rue Saint-Dominique , " he added , drawing up the step . " I know all about that , " said Eugene , severely . --"Everybody is laughing at me to-day , it seems ! " he said to himself , as he deposited his hat on the opposite seat . " This escapade will cost me a king 's ransom , but , at any rate , I shall call on my so-called cousin in a thoroughly aristocratic fashion . Goriot has cost me ten francs already , the old scoundrel . My word ! I will tell Mme . de Beauseant about my adventure ; perhaps it may amuse her . Doubtless she will know the secret of the criminal relation between that handsome woman and the old rat without a tail . It would be better to find favor in my cousin 's eyes than to come in contact with that shameless woman , who seems to me to have very expensive tastes . Surely the beautiful Vicomtesse 's personal interest would turn the scale for me , when the mere mention of her name produces such an effect . Let us look higher . If you set yourself to carry the heights of heaven , you must face God . " The innumerable thoughts that surged through his brain might be summed up in these phrases . He grew calmer , and recovered something of his assurance as he watched the falling rain . He told himself that though he was about to squander two of the precious five-franc pieces that remained to him , the money was well laid out in preserving his coat , boots , and hat ; and his cabman 's cry of " Gate , if you please , " almost put him in spirits . A Swiss , in scarlet and gold , appeared , the great door groaned on its hinges , and Rastignac , with sweet satisfaction , beheld his equipage pass under the archway and stop before the flight of steps beneath the awning . The driver , in a blue-and-red greatcoat , dismounted and let down the step . As Eugene stepped out of the cab , he heard smothered laughter from the peristyle . Three or four lackeys were making merry over the festal appearance of the vehicle . In another moment the law student was enlightened as to the cause of their hilarity ; he felt the full force of the contrast between his equipage and one of the smartest broughams in Paris ; a coachman , with powdered hair , seemed to find it difficult to hold a pair of spirited horses , who stood chafing the bit . In Mme . de Restaud 's courtyard , in the Chaussee d'Antin , he had seen the neat turnout of a young man of six-and-twenty ; in the Faubourg Saint-Germain he found the luxurious equipage of a man of rank ; thirty thousand francs would not have purchased it . " Who can be here ? " said Eugene to himself . He began to understand , though somewhat tardily , that he must not expect to find many women in Paris who were not already appropriated , and that the capture of one of these queens would be likely to cost something more than bloodshed . " Confound it all ! I expect my cousin also has her Maxime . " He went up the steps , feeling that he was a blighted being . The glass door was opened for him ; the servants were as solemn as jackasses under the curry comb . So far , Eugene had only been in the ballroom on the ground floor of the Hotel Beauseant ; the fete had followed so closely on the invitation , that he had not had time to call on his cousin , and had therefore never seen Mme . de Beauseant 's apartments ; he was about to behold for the first time a great lady among the wonderful and elegant surroundings that reveal her character and reflect her daily life . He was the more curious , because Mme . de Restaud 's drawing-room had provided him with a standard of comparison . At half-past four the Vicomtesse de Beauseant was visible . Five minutes earlier she would not have received her cousin , but Eugene knew nothing of the recognized routine of various houses in Paris . He was conducted up the wide , white-painted , crimson-carpeted staircase , between the gilded balusters and masses of flowering plants , to Mme . de Beauseant 's apartments . He did not know the rumor current about Mme . de Beauseant , one of the biographies told , with variations , in whispers , every evening in the salons of Paris . For three years past her name had been spoken of in connection with that of one of the most wealthy and distinguished Portuguese nobles , the Marquis d'Ajuda-Pinto . It was one of those innocent _liaisons_ which possess so much charm for the two thus attached to each other that they find the presence of a third person intolerable . The Vicomte de Beauseant , therefore , had himself set an example to the rest of the world by respecting , with as good a grace as might be , this morganatic union . Any one who came to call on the Vicomtesse in the early days of this friendship was sure to find the Marquis d'Ajuda-Pinto there . As , under the circumstances , Mme . de Beauseant could not very well shut her door against these visitors , she gave them such a cold reception , and showed so much interest in the study of the ceiling , that no one could fail to understand how much he bored her ; and when it became known in Paris that Mme . de Beauseant was bored by callers between two and four o'clock , she was left in perfect solitude during that interval . She went to the Bouffons or to the Opera with M. de Beauseant and M. d'Ajuda-Pinto ; and M. de Beauseant , like a well-bred man of the world , always left his wife and the Portuguese as soon as he had installed them . But M. d'Ajuda-Pinto must marry , and a Mlle . de Rochefide was the young lady . In the whole fashionable world there was but one person who as yet knew nothing of the arrangement , and that was Mme . de Beauseant . Some of her friends had hinted at the possibility , and she had laughed at them , believing that envy had prompted those ladies to try to make mischief . And now , though the bans were about to be published , and although the handsome Portuguese had come that day to break the news to the Vicomtesse , he had not found courage as yet to say one word about his treachery . How was it ? Nothing is doubtless more difficult than the notification of an ultimatum of this kind . There are men who feel more at their ease when they stand up before another man who threatens their lives with sword or pistol than in the presence of a woman who , after two hours of lamentations and reproaches , falls into a dead swoon and requires salts . At this moment , therefore , M. d'Ajuda-Pinto was on thorns , and anxious to take his leave . He told himself that in some way or other the news would reach Mme . de Beauseant ; he would write , it would be much better to do it by letter , and not to utter the words that should stab her to the heart . So when the servant announced M. Eugene de Rastignac , the Marquis d'Ajuda-Pinto trembled with joy . To be sure , a loving woman shows even more ingenuity in inventing doubts of her lover than in varying the monotony of his happiness ; and when she is about to be forsaken , she instinctively interprets every gesture as rapidly as Virgil 's courser detected the presence of his companion by snuffing the breeze . It was impossible , therefore , that Mme . de Beauseant should not detect that involuntary thrill of satisfaction ; slight though it was , it was appalling in its artlessness . Eugene had yet to learn that no one in Paris should present himself in any house without first making himself acquainted with the whole history of its owner , and of its owner 's wife and family , so that he may avoid making any of the terrible blunders which in Poland draw forth the picturesque exclamation , " Harness five bullocks to your cart ! " probably because you will need them all to pull you out of the quagmire into which a false step has plunged you . If , down to the present day , our language has no name for these conversational disasters , it is probably because they are believed to be impossible , the publicity given in Paris to every scandal is so prodigious . After the awkward incident at Mme . de Restaud 's , no one but Eugene could have reappeared in his character of bullock-driver in Mme . de Beauseant 's drawing-room . But if Mme . de Restaud and M. de Trailles had found him horribly in the way , M. d'Ajuda hailed his coming with relief . " Good-bye , " said the Portuguese , hurrying to the door , as Eugene made his entrance into a dainty little pink-and-gray drawing-room , where luxury seemed nothing more than good taste . " Until this evening , " said Mme . de Beauseant , turning her head to give the Marquis a glance . " We are going to the Bouffons , are we not ? " " I cannot go , " he said , with his fingers on the door handle . Mme . de Beauseant rose and beckoned to him to return . She did not pay the slightest attention to Eugene , who stood there dazzled by the sparkling marvels around him ; he began to think that this was some story out of the Arabian Nights made real , and did not know where to hide himself , when the woman before him seemed to be unconscious of his existence . The Vicomtesse had raised the forefinger of her right hand , and gracefully signed to the Marquis to seat himself beside her . The Marquis felt the imperious sway of passion in her gesture ; he came back towards her . Eugene watched him , not without a feeling of envy . " That is the owner of the brougham ! " he said to himself . " But is it necessary to have a pair of spirited horses , servants in livery , and torrents of gold to draw a glance from a woman here in Paris ? " The demon of luxury gnawed at his heart , greed burned in his veins , his throat was parched with the thirst of gold . He had a hundred and thirty francs every quarter . His father , mother , brothers , sisters , and aunt did not spend two hundred francs a month among them . This swift comparison between his present condition and the aims he had in view helped to benumb his faculties . " Why not ? " the Vicomtesse was saying , as she smiled at the Portuguese . " Why cannot you come to the Italiens ? " " Affairs ! I am to dine with the English Ambassador . " " Throw him over . " When a man once enters on a course of deception , he is compelled to add lie to lie . M. d'Ajuda therefore said , smiling , " Do you lay your commands on me ? " " Yes , certainly . " " That was what I wanted to have you say to me , " he answered , dissembling his feelings in a glance which would have reassured any other woman . He took the Vicomtesse 's hand , kissed it , and went . Eugene ran his fingers through his hair , and constrained himself to bow . He thought that now Mme . de Beauseant would give him her attention ; but suddenly she sprang forward , rushed to a window in the gallery , and watched M. d'Ajuda step into his carriage ; she listened to the order that he gave , and heard the Swiss repeat it to the coachman : " To M. de Rochefide 's house . " Those words , and the way in which M. d'Ajuda flung himself back in the carriage , were like a lightning flash and a thunderbolt for her ; she walked back again with a deadly fear gnawing at her heart . The most terrible catastrophes only happen among the heights . The Vicomtesse went to her own room , sat down at a table , and took up a sheet of dainty notepaper . " When , instead of dining with the English Ambassador , " she wrote , " you go to the Rochefides , you owe me an explanation , which I am waiting to hear . " She retraced several of the letters , for her hand was trembling so that they were indistinct ; then she signed the note with an initial C for " Claire de Bourgogne , " and rang the bell . " Jacques , " she said to the servant , who appeared immediately , " take this note to M. de Rochefide 's house at half-past seven and ask for the Marquis d'Ajuda . If M. d'Ajuda is there , leave the note without waiting for an answer ; if he is not there , bring the note back to me . " " Madame la Vicomtess , there is a visitor in the drawing-room . " " Ah ! yes , of course , " she said , opening the door . Eugene was beginning to feel very uncomfortable , but at last the Vicomtesse appeared ; she spoke to him , and the tremulous tones of her voice vibrated through his heart . " Pardon me , monsieur , " she said ; " I had a letter to write . Now I am quite at liberty . " She scarcely knew what she was saying , for even as she spoke she thought , " Ah ! he means to marry Mlle . de Rochefide ? But is he still free ? This evening the marriage shall be broken off , or else ... But before to-morrow I shall know . " " Cousin ... " the student replied . " Eh ? " said the Countess , with an insolent glance that sent a cold shudder through Eugene ; he understood what that " Eh ? " meant ; he had learned a great deal in three hours , and his wits were on the alert . He reddened : " Madame ... " he began ; he hesitated a moment , and then went on . " Pardon me ; I am in such need of protection that the nearest scrap of relationship could do me no harm . " Mme . de Beauseant smiled but there was sadness in her smile ; even now she felt forebodings of the coming pain , the air she breathed was heavy with the storm that was about to burst . " If you knew how my family are situated , " he went on , " you would love to play the part of a beneficent fairy godmother who graciously clears the obstacles from the path of her protege . " " Well , cousin , " she said , laughing , " and how can I be of service to you ? " " But do I know even that ? I am distantly related to you , and this obscure and remote relationship is even now a perfect godsend to me . You have confused my ideas ; I cannot remember the things that I meant to say to you . I know no one else here in Paris ... . Ah ! if I could only ask you to counsel me , ask you to look upon me as a poor child who would fain cling to the hem of your dress , who would lay down his life for you . " " Would you kill a man for me ? " " Two , " said Eugene . " You , child . Yes , you are a child , " she said , keeping back the tears that came to her eyes ; " you would love sincerely . " " Oh ! " he cried , flinging up his head . The audacity of the student 's answer interested the Vicomtesse in him . The southern brain was beginning to scheme for the first time . Between Mme . de Restaud 's blue boudoir and Mme . de Beauseant 's rose-colored drawing-room he had made a three years ' advance in a kind of law which is not a recognized study in Paris , although it is a sort of higher jurisprudence , and , when well understood , is a highroad to success of every kind . " Ah ! that is what I meant to say ! " said Eugene . " I met Mme . de Restaud at your ball , and this morning I went to see her . " You must have been very much in the way , " said Mme . de Beauseant , smiling as she spoke . " Yes , indeed . I am a novice , and my blunders will set every one against me , if you do not give me your counsel . I believe that in Paris it is very difficult to meet with a young , beautiful , and wealthy woman of fashion who would be willing to teach me , what you women can explain so well--life . I shall find a M. de Trailles everywhere . So I have come to you to ask you to give me a key to a puzzle , to entreat you to tell me what sort of blunder I made this morning . I mentioned an old man---- " " Madame la Duchess de Langeais , " Jacques cut the student short ; Eugene gave expression to his intense annoyance by a gesture . " If you mean to succeed , " said the Vicomtesse in a low voice , " in the first place you must not be so demonstrative . " " Ah ! good morning , dear , " she continued , and rising and crossing the room , she grasped the Duchess ' hands as affectionately as if they had been sisters ; the Duchess responded in the prettiest and most gracious way . " Two intimate friends ! " said Rastignac to himself . " Henceforward I shall have two protectresses ; those two women are great friends , no doubt , and this newcomer will doubtless interest herself in her friend 's cousin . " " To what happy inspiration do I owe this piece of good fortune , dear Antoinette ? " asked Mme . de Beauseant . " Well , I saw M. d'Ajuda-Pinto at M. de Rochefide 's door , so I thought that if I came I should find you alone . " Mme . de Beauseant 's mouth did not tighten , her color did not rise , her expression did not alter , or rather , her brow seemed to clear as the Duchess uttered those deadly words . " If I had known that you were engaged---- " the speaker added , glancing at Eugene . " This gentleman is M. Eugene de Rastignac , one of my cousins , " said the Vicomtesse . " Have you any news of General de Montriveau ? " she continued . " Serizy told me yesterday that he never goes anywhere now ; has he been to see you to-day ? " It was believed that the Duchess was desperately in love with M. de Montriveau , and that he was a faithless lover ; she felt the question in her very heart , and her face flushed as she answered : " He was at the Elysee yesterday . " " In attendance ? " " Claire , " returned the Duchess , and hatred overflowed in the glances she threw at Mme . de Beauseant ; " of course you know that M. d'Ajuda-Pinto is going to marry Mlle . de Rochefide ; the bans will be published to-morrow . " This thrust was too cruel ; the Vicomtesse 's face grew white , but she answered , laughing , " One of those rumors that fools amuse themselves with . What should induce M. d'Ajuda to take one of the noblest names in Portugal to the Rochefides ? The Rochefides were only ennobled yesterday . " " But Bertha will have two hundred thousand livres a year , they say . " " M. d'Ajuda is too wealthy to marry for money . " " But , my dear , Mlle . de Rochefide is a charming girl . " " Indeed ? " " And , as a matter of fact , he is dining with them to-day ; the thing is settled . It is very surprising to me that you should know so little about it . " Mme . de Beauseant turned to Rastignac . " What was the blunder that you made , monsieur ? " she asked . " The poor boy is only just launched into the world , Antoinette , so that he understands nothing of all this that we are speaking of . Be merciful to him , and let us finish our talk to-morrow . Everything will be announced to-morrow , you know , and your kind informal communication can be accompanied by official confirmation . " The Duchess gave Eugene one of those insolent glances that measure a man from head to foot , and leave him crushed and annihilated . " Madame , I have unwittingly plunged a dagger into Mme . de Restaud 's heart ; unwittingly--therein lies my offence , " said the student of law , whose keen brain had served him sufficiently well , for he had detected the biting epigrams that lurked beneath this friendly talk . " You continue to receive , possibly you fear , those who know the amount of pain that they deliberately inflict ; but a clumsy blunderer who has no idea how deeply he wounds is looked upon as a fool who does not know how to make use of his opportunities , and every one despises him . " Mme . de Beauseant gave the student a glance , one of those glances in which a great soul can mingle dignity and gratitude . It was like balm to the law student , who was still smarting under the Duchess ' insolent scrutiny ; she had looked at him as an auctioneer might look at some article to appraise its value . " Imagine , too , that I had just made some progress with the Comte de Restaud ; for I should tell you , madame , " he went on , turning to the Duchess with a mixture of humility and malice in his manner , " that as yet I am only a poor devil of a student , very much alone in the world , and very poor---- " " You should not tell us that , M. de Rastignac . We women never care about anything that no one else will take . " " Bah ! " said Eugene . " I am only two-and-twenty , and I must make up my mind to the drawbacks of my time of life . Besides , I am confessing my sins , and it would be impossible to kneel in a more charming confessional ; you commit your sins in one drawing-room , and receive absolution for them in another . " The Duchess ' expression grew colder , she did not like the flippant tone of these remarks , and showed that she considered them to be in bad taste by turning to the Vicomtesse with--"This gentleman has only just come---- " Mme . de Beauseant began to laugh outright at her cousin and at the Duchess both . " He has only just come to Paris , dear , and is in search of some one who will give him lessons in good taste . " " Mme . la Duchesse , " said Eugene , " is it not natural to wish to be initiated into the mysteries which charm us ? " ( " Come , now , " he said to himself , " my language is superfinely elegant , I 'm sure . " ) " But Mme . de Restaud is herself , I believe , M. de Trailles ' pupil , " said the Duchess . " Of that I had no idea , madame , " answered the law student , " so I rashly came between them . In fact , I got on very well with the lady 's husband , and his wife tolerated me for a time until I took it into my head to tell them that I knew some one of whom I had just caught a glimpse as he went out by a back staircase , a man who had given the Countess a kiss at the end of a passage . " " Who was it ? " both women asked together . " An old man who lives at the rate of two louis a month in the Faubourg Saint-Marceau , where I , a poor student , lodge likewise . He is a truly unfortunate creature , everybody laughs at him--we all call him 'Father Goriot . ' " " Why , child that you are , " cried the Vicomtesse , " Mme . de Restaud was a Mlle . Goriot ! " " The daughter of a vermicelli manufacturer , " the Duchess added ; " and when the little creature went to Court , the daughter of a pastry-cook was presented on the same day . Do you remember , Claire ? The King began to laugh , and made some joke in Latin about flour . People--what was it ? --people---- " " _Ejusdem farinoe_ , " said Eugene . " Yes , that was it , " said the Duchess . " Oh ! is that her father ? " the law student continued , aghast . " Yes , certainly ; the old man had two daughters ; he dotes on them , so to speak , though they will scarcely acknowledge him . " " Did n't the second daughter marry a banker with a German name ? " the Vicomtesse asked , turning to Mme . de Langeais , " a Baron de Nucingen ? And her name is Delphine , is it not ? Is n't she a fair-haired woman who has a side-box at the Opera ? She comes sometimes to the Bouffons , and laughs loudly to attract attention . " The Duchess smiled and said : " I wonder at you , dear . Why do you take so much interest in people of that kind ? One must have been as madly in love as Restaud was , to be infatuated with Mlle . Anastasie and her flour sacks . Oh ! he will not find her a good bargain ! She is in M. de Trailles ' hands , and he will ruin her . " " And they do not acknowledge their father ! " Eugene repeated . " Oh ! well , yes , their father , the father , a father , " replied the Vicomtesse , " a kind father who gave them each five or six hundred thousand francs , it is said , to secure their happiness by marrying them well ; while he only kept eight or ten thousand livres a year for himself , thinking that his daughters would always be his daughters , thinking that in them he would live his life twice over again , that in their houses he should find two homes , where he would be loved and looked up to , and made much of . And in two years ' time both his sons-in-law had turned him out of their houses as if he were one of the lowest outcasts . " Tears came into Eugene 's eyes . He was still under the spell of youthful beliefs , he had just left home , pure and sacred feelings had been stirred within him , and this was his first day on the battlefield of civilization in Paris . Genuine feeling is so infectious that for a moment the three looked at each other in silence . " _Eh , mon Dieu ! _ " said Mme . de Langeais ; " yes , it seems very horrible , and yet we see such things every day . Is there not a reason for it ? Tell me , dear , have you ever really thought what a son-in-law is ? A son-in-law is the man for whom we bring up , you and I , a dear little one , bound to us very closely in innumerable ways ; for seventeen years she will be the joy of her family , its 'white soul , ' as Lamartine says , and suddenly she will become its scourge . When HE comes and takes her from us , his love from the very beginning is like an axe laid to the root of all the old affection in our darling 's heart , and all the ties that bound her to her family are severed . But yesterday our little daughter thought of no one but her mother and father , as we had no thought that was not for her ; by to-morrow she will have become a hostile stranger . The tragedy is always going on under our eyes . On the one hand you see a father who has sacrificed himself to his son , and his daughter-in-law shows him the last degree of insolence . On the other hand , it is the son-in-law who turns his wife 's mother out of the house . I sometimes hear it said that there is nothing dramatic about society in these days ; but the Drama of the Son-in-law is appalling , to say nothing of our marriages , which have come to be very poor farces . I can explain how it all came about in the old vermicelli maker 's case . I think I recollect that Foriot---- " " Goriot , madame . " " Yes , that Moriot was once President of his Section during the Revolution . He was in the secret of the famous scarcity of grain , and laid the foundation of his fortune in those days by selling flour for ten times its cost . He had as much flour as he wanted . My grandmother 's steward sold him immense quantities . No doubt Noriot shared the plunder with the Committee of Public Salvation , as that sort of person always did . I recollect the steward telling my grandmother that she might live at Grandvilliers in complete security , because her corn was as good as a certificate of civism . Well , then , this Loriot , who sold corn to those butchers , has never had but one passion , they say--he idolizes his daughters . He settled one of them under Restaud 's roof , and grafted the other into the Nucingen family tree , the Baron de Nucingen being a rich banker who had turned Royalist . You can quite understand that so long as Bonaparte was Emperor , the two sons-in-law could manage to put up with the old Ninety-three ; but after the restoration of the Bourbons , M. de Restaud felt bored by the old man 's society , and the banker was still more tired of it . His daughters were still fond of him ; they wanted 'to keep the goat and the cabbage , ' so they used to see Joriot whenever there was no one there , under pretence of affection . 'Come to-day , papa , we shall have you all to ourselves , and that will be much nicer ! ' and all that sort of thing . As for me , dear , I believe that love has second-sight : poor Ninety-three ; his heart must have bled . He saw that his daughters were ashamed of him , that if they loved their husbands his visits must make mischief . So he immolated himself . He made the sacrifice because he was a father ; he went into voluntary exile . His daughters were satisfied , so he thought that he had done the best thing he could ; but it was a family crime , and father and daughters were accomplices . You see this sort of thing everywhere . What could this old Doriot have been but a splash of mud in his daughters ' drawing-rooms ? He would only have been in the way , and bored other people , besides being bored himself . And this that happened between father and daughters may happen to the prettiest woman in Paris and the man she loves the best ; if her love grows tiresome , he will go ; he will descend to the basest trickery to leave her . It is the same with all love and friendship . Our heart is a treasury ; if you pour out all its wealth at once , you are bankrupt . We show no more mercy to the affection that reveals its utmost extent than we do to another kind of prodigal who has not a penny left . Their father had given them all he had . For twenty years he had given his whole heart to them ; then , one day , he gave them all his fortune too . The lemon was squeezed ; the girls left the rest in the gutter . " " The world is very base , " said the Vicomtesse , plucking at the threads of her shawl . She did not raise her head as she spoke ; the words that Mme . de Langeais had meant for her in the course of her story had cut her to the quick . " Base ? Oh , no , " answered the Duchess ; " the world goes its own way , that is all . If I speak in this way , it is only to show that I am not duped by it . I think as you do , " she said , pressing the Vicomtesse 's hand . " The world is a slough ; let us try to live on the heights above it . " She rose to her feet and kissed Mme . de Beauseant on the forehead as she said : " You look very charming to-day , dear . I have never seen such a lovely color in your cheeks before . " Then she went out with a slight inclination of the head to the cousin . " Father Goriot is sublime ! " said Eugene to himself , as he remembered how he had watched his neighbor work the silver vessel into a shapeless mass that night . Mme . de Beauseant did not hear him ; she was absorbed in her own thoughts . For several minutes the silence remained unbroken till the law student became almost paralyzed with embarrassment , and was equally afraid to go or stay or speak a word . " The world is basely ungrateful and ill-natured , " said the Vicomtesse at last . " No sooner does a trouble befall you than a friend is ready to bring the tidings and to probe your heart with the point of a dagger while calling on you to admire the handle . Epigrams and sarcasms already ! Ah ! I will defend myself ! " She raised her head like the great lady that she was , and lightnings flashed from her proud eyes . " Ah ! " she said , as she saw Eugene , " are you there ? " " Still , " he said piteously . " Well , then , M. de Rastignac , deal with the world as it deserves . You are determined to succeed ? I will help you . You shall sound the depths of corruption in woman ; you shall measure the extent of man 's pitiful vanity . Deeply as I am versed in such learning , there were pages in the book of life that I had not read . Now I know all . The more cold-blooded your calculations , the further you will go . Strike ruthlessly ; you will be feared . Men and women for you must be nothing more than post-horses ; take a fresh relay , and leave the last to drop by the roadside ; in this way you will reach the goal of your ambition . You will be nothing here , you see , unless a woman interests herself in you ; and she must be young and wealthy , and a woman of the world . Yet , if you have a heart , lock it carefully away like a treasure ; do not let any one suspect it , or you will be lost ; you would cease to be the executioner , you would take the victim 's place . And if ever you should love , never let your secret escape you ! Trust no one until you are very sure of the heart to which you open your heart . Learn to mistrust every one ; take every precaution for the sake of the love which does not exist as yet . Listen , Miguel"--the name slipped from her so naturally that she did not notice her mistake--"there is something still more appalling than the ingratitude of daughters who have cast off their old father and wish that he were dead , and that is a rivalry between two sisters . Restaud comes of a good family , his wife has been received into their circle ; she has been presented at court ; and her sister , her wealthy sister , Mme . Delphine de Nucingen , the wife of a great capitalist , is consumed with envy , and ready to die of spleen . There is gulf set between the sisters--indeed , they are sisters no longer--the two women who refuse to acknowledge their father do not acknowledge each other . So Mme . de Nucingen would lap up all the mud that lies between the Rue Saint-Lazare and the Rue de Grenelle to gain admittance to my salon . She fancied that she should gain her end through de Marsay ; she has made herself de Marsay 's slave , and she bores him . De Marsay cares very little about her . If you will introduce her to me , you will be her darling , her Benjamin ; she will idolize you . If , after that , you can love her , do so ; if not , make her useful . I will ask her to come once or twice to one of my great crushes , but I will never receive her here in the morning . I will bow to her when I see her , and that will be quite sufficient . You have shut the Comtesse de Restaud 's door against you by mentioning Father Goriot 's name . Yes , my good friend , you may call at her house twenty times , and every time out of the twenty you will find that she is not at home . The servants have their orders , and will not admit you . Very well , then , now let Father Goriot gain the right of entry into her sister 's house for you . The beautiful Mme . de Nucingen will give the signal for a battle . As soon as she singles you out , other women will begin to lose their heads about you , and her enemies and rivals and intimate friends will all try to take you from her . There are women who will fall in love with a man because another woman has chosen him ; like the city madams , poor things , who copy our millinery , and hope thereby to acquire our manners . You will have a success , and in Paris success is everything ; it is the key of power . If the women credit you with wit and talent , the men will follow suit so long as you do not undeceive them yourself . There will be nothing you may not aspire to ; you will go everywhere , and you will find out what the world is--an assemblage of fools and knaves . But you must be neither the one nor the other . I am giving you my name like Ariadne 's clue of thread to take with you into the labyrinth ; make no unworthy use of it , " she said , with a queenly glance and curve of her throat ; " give it back to me unsullied . And now , go ; leave me . We women also have our battles to fight . " " And if you should ever need some one who would gladly set a match to a train for you---- " " Well ? " she asked . He tapped his heart , smiled in answer to his cousin 's smile , and went . It was five o'clock , and Eugene was hungry ; he was afraid lest he should not be in time for dinner , a misgiving which made him feel that it was pleasant to be borne so quickly across Paris . This sensation of physical comfort left his mind free to grapple with the thoughts that assailed him . A mortification usually sends a young man of his age into a furious rage ; he shakes his fist at society , and vows vengeance when his belief in himself is shaken . Just then Rastignac was overwhelmed by the words , " You have shut the Countess ' door against you . " " I shall call ! " he said to himself , " and if Mme . de Beauseant is right , if I never find her at home--I ... well , Mme . de Restaud shall meet me in every salon in Paris . I will learn to fence and have some pistol practice , and kill that Maxime of hers ! " " And money ? " cried an inward monitor . " How about money , where is that to come from ? " And all at once the wealth displayed in the Countess de Restaud 's drawing-room rose before his eyes . That was the luxury which Goriot 's daughter had loved too well , the gilding , the ostentatious splendor , the unintelligent luxury of the parvenu , the riotous extravagance of a courtesan . Then the attractive vision suddenly went under an eclipse as he remembered the stately grandeur of the Hotel de Beauseant . As his fancy wandered among these lofty regions in the great world of Paris , innumerable dark thoughts gathered in his heart ; his ideas widened , and his conscience grew more elastic . He saw the world as it is ; saw how the rich lived beyond the jurisdiction of law and public opinion , and found in success the _ultima ratio mundi_ . " Vautrin is right , success is virtue ! " he said to himself . Arrived in the Rue Neuve-Sainte-Genevieve , he rushed up to his room for ten francs wherewith to satisfy the demands of the cabman , and went in to dinner . He glanced round the squalid room , saw the eighteen poverty-stricken creatures about to feed like cattle in their stalls , and the sight filled him with loathing . The transition was too sudden , and the contrast was so violent that it could not but act as a powerful stimulant ; his ambition developed and grew beyond all social bounds . On the one hand , he beheld a vision of social life in its most charming and refined forms , of quick-pulsed youth , of fair , impassioned faces invested with all the charm of poetry , framed in a marvelous setting of luxury or art ; and , on the other hand , he saw a sombre picture , the miry verge beyond these faces , in which passion was extinct and nothing was left of the drama but the cords and pulleys and bare mechanism . Mme . de Beauseant 's counsels , the words uttered in anger by the forsaken lady , her petulant offer , came to his mind , and poverty was a ready expositor . Rastignac determined to open two parallel trenches so as to insure success ; he would be a learned doctor of law and a man of fashion . Clearly he was still a child ! Those two lines are asymptotes , and will never meet . " You are very dull , my lord Marquis , " said Vautrin , with one of the shrewd glances that seem to read the innermost secrets of another mind . " I am not in the humor to stand jokes from people who call me 'my lord Marquis , ' " answered Eugene . " A marquis here in Paris , if he is not the veriest sham , ought to have a hundred thousand livres a year at least ; and a lodger in the Maison Vauquer is not exactly Fortune 's favorite . " Vautrin 's glance at Rastignac was half-paternal , half-contemptuous . " Puppy ! " it seemed to say ; " I should make one mouthful of him ! " Then he answered : " You are in a bad humor ; perhaps your visit to the beautiful Comtesse de Restaud was not a success . " " She has shut her door against me because I told her that her father dined at our table , " cried Rastignac . Glances were exchanged all round the room ; Father Goriot looked down . " You have sent some snuff into my eye , " he said to his neighbor , turning a little aside to rub his hand over his face . " Any one who molests Father Goriot will have henceforward to reckon with me , " said Eugene , looking at the old man 's neighbor ; " he is worth all the rest of us put together . --I am not speaking of the ladies , " he added , turning in the direction of Mlle . Taillefer . Eugene 's remarks produced a sensation , and his tone silenced the dinner-table . Vautrin alone spoke . " If you are going to champion Father Goriot , and set up for his responsible editor into the bargain , you had need be a crack shot and know how to handle the foils , " he said , banteringly . " So I intend , " said Eugene . " Then you are taking the field to-day ? " " Perhaps , " Rastignac answered . " But I owe no account of myself to any one , especially as I do not try to find out what other people do of a night . " Vautrin looked askance at Rastignac . " If you do not mean to be deceived by the puppets , my boy , you must go behind and see the whole show , and not peep through holes in the curtain . That is enough , " he added , seeing that Eugene was about to fly into a passion . " We can have a little talk whenever you like . " There was a general feeling of gloom and constraint . Father Goriot was so deeply dejected by the student 's remark that he did not notice the change in the disposition of his fellow-lodgers , nor know that he had met with a champion capable of putting an end to the persecution . " Then , M. Goriot sitting there is the father of a countess , " said Mme . Vauquer in a low voice . " And of a baroness , " answered Rastignac . " That is about all he is capable of , " said Bianchon to Rastignac ; " I have taken a look at his head ; there is only one bump--the bump of Paternity ; he must be an _eternal father_ . " Eugene was too intent on his thoughts to laugh at Bianchon 's joke . He determined to profit by Mme . de Beauseant 's counsels , and was asking himself how he could obtain the necessary money . He grew grave . The wide savannas of the world stretched before his eyes ; all things lay before him , nothing was his . Dinner came to an end , the others went , and he was left in the dining-room . " So you have seen my daughter ? " Goriot spoke tremulously , and the sound of his voice broke in upon Eugene 's dreams . The young man took the elder 's hand , and looked at him with something like kindness in his eyes . " You are a good and noble man , " he said . " We will have some talk about your daughters by and by . " He rose without waiting for Goriot 's answer , and went to his room . There he wrote the following letter to his mother : -- " My Dear Mother , --Can you nourish your child from your breast again ? I am in a position to make a rapid fortune , but I want twelve hundred francs--I must have them at all costs . Say nothing about this to my father ; perhaps he might make objections , and unless I have the money , I may be led to put an end to myself , and so escape the clutches of despair . I will tell you everything when I see you . I will not begin to try to describe my present situation ; it would take volumes to put the whole story clearly and fully . I have not been gambling , my kind mother , I owe no one a penny ; but if you would preserve the life that you gave me , you must send me the sum I mention . As a matter of fact , I go to see the Vicomtesse de Beauseant ; she is using her influence for me ; I am obliged to go into society , and I have not a penny to lay out on clean gloves . I can manage to exist on bread and water , or go without food , if need be , but I cannot do without the tools with which they cultivate the vineyards in this country . I must resolutely make up my mind at once to make my way , or stick in the mire for the rest of my days. I know that all your hopes are set on me , and I want to realize them quickly . Sell some of your old jewelry , my kind mother ; I will give you other jewels very soon . I know enough of our affairs at home to know all that such a sacrifice means , and you must not think that I would lightly ask you to make it ; I should be a monster if I could . You must think of my entreaty as a cry forced from me by imperative necessity . Our whole future lies in the subsidy with which I must begin my first campaign , for life in Paris is one continual battle . If you cannot otherwise procure the whole of the money , and are forced to sell our aunt 's lace , tell her that I will send her some still handsomer , " and so forth . He wrote to ask each of his sisters for their savings--would they despoil themselves for him , and keep the sacrifice a secret from the family ? To his request he knew that they would not fail to respond gladly , and he added to it an appeal to their delicacy by touching the chord of honor that vibrates so loudly in young and high-strung natures . Yet when he had written the letters , he could not help feeling misgivings in spite of his youthful ambition ; his heart beat fast , and he trembled . He knew the spotless nobleness of the lives buried away in the lonely manor house ; he knew what trouble and what joy his request would cause his sisters , and how happy they would be as they talked at the bottom of the orchard of that dear brother of theirs in Paris . Visions rose before his eyes ; a sudden strong light revealed his sisters secretly counting over their little store , devising some girlish stratagem by which the money could be sent to him _incognito_ , essaying , for the first time in their lives , a piece of deceit that reached the sublime in its unselfishness . " A sister 's heart is a diamond for purity , a deep sea of tenderness ! " he said to himself . He felt ashamed of those letters . What power there must be in the petitions put up by such hearts ; how pure the fervor that bears their souls to Heaven in prayer ! What exquisite joy they would find in self-sacrifice ! What a pang for his mother 's heart if she could not send him all that he asked for ! And this noble affection , these sacrifices made at such terrible cost , were to serve as the ladder by which he meant to climb to Delphine de Nucingen . A few tears , like the last grains of incense flung upon the sacred alter fire of the hearth , fell from his eyes . He walked up and down , and despair mingled with his emotion . Father Goriot saw him through the half-open door . " What is the matter , sir ? " he asked from the threshold . " Ah ! my good neighbor , I am as much a son and brother as you are a father . You do well to fear for the Comtesse Anastasie ; there is one M. Maxime de Trailles , who will be her ruin . " Father Goriot withdrew , stammering some words , but Eugene failed to catch their meaning . The next morning Rastignac went out to post his letters . Up to the last moment he wavered and doubted , but he ended by flinging them into the box . " I shall succeed ! " he said to himself . So says the gambler ; so says the great captain ; but the three words that have been the salvation of some few , have been the ruin of many more . A few days after this Eugene called at Mme . de Restaud 's house ; she was not at home . Three times he tried the experiment , and three times he found her doors closed against him , though he was careful to choose an hour when M. de Trailles was not there . The Vicomtesse was right . The student studied no longer . He put in an appearance at lectures simply to answer to his name , and after thus attesting his presence , departed forthwith . He had been through a reasoning process familiar to most students . He had seen the advisability of deferring his studies to the last moment before going up for his examinations ; he made up his mind to cram his second and third years ' work into the third year , when he meant to begin to work in earnest , and to complete his studies in law with one great effort . In the meantime he had fifteen months in which to navigate the ocean of Paris , to spread the nets and set the lines that would bring him a protectress and a fortune . Twice during that week he saw Mme . de Beauseant ; he did not go to her house until he had seen the Marquis d'Ajuda drive away . Victory for yet a few more days was with the great lady , the most poetic figure in the Faubourg Saint-Germain ; and the marriage of the Marquis d'Ajuda-Pinto with Mlle . de Rochefide was postponed . The dread of losing her happiness filled those days with a fever of joy unknown before , but the end was only so much the nearer . The Marquis d'Ajuda and the Rochefides agreed that this quarrel and reconciliation was a very fortunate thing ; Mme . de Beauseant ( so they hoped ) would gradually become reconciled to the idea of the marriage , and in the end would be brought to sacrifice d'Ajuda 's morning visits to the exigencies of a man 's career , exigencies which she must have foreseen . In spite of the most solemn promises , daily renewed , M. d'Ajuda was playing a part , and the Vicomtesse was eager to be deceived . " Instead of taking a leap heroically from the window , she is falling headlong down the staircase , " said her most intimate friend , the Duchesse de Langeais . Yet this after-glow of happiness lasted long enough for the Vicomtesse to be of service to her young cousin . She had a half-superstitious affection for him . Eugene had shown her sympathy and devotion at a crisis when a woman sees no pity , no real comfort in any eyes ; when if a man is ready with soothing flatteries , it is because he has an interested motive . Rastignac made up his mind that he must learn the whole of Goriot 's previous history ; he would come to his bearings before attempting to board the Maison de Nucingen . The results of his inquiries may be given briefly as follows : -- In the days before the Revolution , Jean-Joachim Goriot was simply a workman in the employ of a vermicelli maker . He was a skilful , thrifty workman , sufficiently enterprising to buy his master 's business when the latter fell a chance victim to the disturbances of 1789. Goriot established himself in the Rue de la Jussienne , close to the Corn Exchange . His plain good sense led him to accept the position of President of the Section , so as to secure for his business the protection of those in power at that dangerous epoch . This prudent step had led to success ; the foundations of his fortune were laid in the time of the Scarcity ( real or artificial ) , when the price of grain of all kinds rose enormously in Paris . People used to fight for bread at the bakers ' doors ; while other persons went to the grocers ' shops and bought Italian paste foods without brawling over it . It was during this year that Goriot made the money , which , at a later time , was to give him all the advantage of the great capitalist over the small buyer ; he had , moreover , the usual luck of average ability ; his mediocrity was the salvation of him . He excited no one 's envy , it was not even suspected that he was rich till the peril of being rich was over , and all his intelligence was concentrated , not on political , but on commercial speculations . Goriot was an authority second to none on all questions relating to corn , flour , and " middlings " ; and the production , storage , and quality of grain . He could estimate the yield of the harvest , and foresee market prices ; he bought his cereals in Sicily , and imported Russian wheat . Any one who had heard him hold forth on the regulations that control the importation and exportation of grain , who had seen his grasp of the subject , his clear insight into the principles involved , his appreciation of weak points in the way that the system worked , would have thought that here was the stuff of which a minister is made . Patient , active , and persevering , energetic and prompt in action , he surveyed his business horizon with an eagle eye . Nothing there took him by surprise ; he foresaw all things , knew all that was happening , and kept his own counsel ; he was a diplomatist in his quick comprehension of a situation ; and in the routine of business he was as patient and plodding as a soldier on the march . But beyond this business horizon he could not see . He used to spend his hours of leisure on the threshold of his shop , leaning against the framework of the door . Take him from his dark little counting-house , and he became once more the rough , slow-witted workman , a man who cannot understand a piece of reasoning , who is indifferent to all intellectual pleasures , and falls asleep at the play , a Parisian Dolibom in short , against whose stupidity other minds are powerless . Natures of this kind are nearly all alike ; in almost all of them you will find some hidden depth of sublime affection . Two all-absorbing affections filled the vermicelli maker 's heart to the exclusion of every other feeling ; into them he seemed to put all the forces of his nature , as he put the whole power of his brain into the corn trade . He had regarded his wife , the only daughter of a rich farmer of La Brie , with a devout admiration ; his love for her had been boundless . Goriot had felt the charm of a lovely and sensitive nature , which , in its delicate strength , was the very opposite of his own . Is there any instinct more deeply implanted in the heart of man than the pride of protection , a protection which is constantly exerted for a fragile and defenceless creature ? Join love thereto , the warmth of gratitude that all generous souls feel for the source of their pleasures , and you have the explanation of many strange incongruities in human nature . After seven years of unclouded happiness , Goriot lost his wife . It was very unfortunate for him . She was beginning to gain an ascendency over him in other ways ; possibly she might have brought that barren soil under cultivation , she might have widened his ideas and given other directions to his thoughts . But when she was dead , the instinct of fatherhood developed in him till it almost became a mania . All the affection balked by death seemed to turn to his daughters , and he found full satisfaction for his heart in loving them . More or less brilliant proposals were made to him from time to time ; wealthy merchants or farmers with daughters vied with each other in offering inducements to him to marry again ; but he determined to remain a widower . His father-in-law , the only man for whom he felt a decided friendship , gave out that Goriot had made a vow to be faithful to his wife 's memory . The frequenters of the Corn Exchange , who could not comprehend this sublime piece of folly , joked about it among themselves , and found a ridiculous nickname for him . One of them ventured ( after a glass over a bargain ) to call him by it , and a blow from the vermicelli maker 's fist sent him headlong into a gutter in the Rue Oblin . He could think of nothing else when his children were concerned ; his love for them made him fidgety and anxious ; and this was so well known , that one day a competitor , who wished to get rid of him to secure the field to himself , told Goriot that Delphine had just been knocked down by a cab . The vermicelli maker turned ghastly pale , left the Exchange at once , and did not return for several days afterwards ; he was ill in consequence of the shock and the subsequent relief on discovering that it was a false alarm . This time , however , the offender did not escape with a bruised shoulder ; at a critical moment in the man 's affairs , Goriot drove him into bankruptcy , and forced him to disappear from the Corn Exchange . As might have been expected , the two girls were spoiled . With an income of sixty thousand francs , Goriot scarcely spent twelve hundred on himself , and found all his happiness in satisfying the whims of the two girls . The best masters were engaged , that Anastasie and Delphine might be endowed with all the accomplishments which distinguish a good education . They had a chaperon--luckily for them , she was a woman who had good sense and good taste ; --they learned to ride ; they had a carriage for their use ; they lived as the mistress of a rich old lord might live ; they had only to express a wish , their father would hasten to give them their most extravagant desires , and asked nothing of them in return but a kiss . Goriot had raised the two girls to the level of the angels ; and , quite naturally , he himself was left beneath them . Poor man ! he loved them even for the pain that they gave him . When the girls were old enough to be married , they were left free to choose for themselves . Each had half her father 's fortune as her dowry ; and when the Comte de Restaud came to woo Anastasie for her beauty , her social aspirations led her to leave her father 's house for a more exalted sphere . Delphine wished for money ; she married Nucingen , a banker of German extraction , who became a Baron of the Holy Roman Empire . Goriot remained a vermicelli maker as before . His daughters and his sons-in-law began to demur ; they did not like to see him still engaged in trade , though his whole life was bound up with his business . For five years he stood out against their entreaties , then he yielded , and consented to retire on the amount realized by the sale of his business and the savings of the last few years . It was this capital that Mme . Vauquer , in the early days of his residence with her , had calculated would bring in eight or ten thousand livres in a year . He had taken refuge in her lodging-house , driven there by despair when he knew that his daughters were compelled by their husbands not only to refuse to receive him as an inmate in their houses , but even to see him no more except in private . This was all the information which Rastignac gained from a M. Muret who had purchased Goriot 's business , information which confirmed the Duchesse de Langeais ' suppositions , and herewith the preliminary explanation of this obscure but terrible Parisian tragedy comes to an end . </text>
<text id="FictBronteC_JaneEyre_33_EN.txt">
﻿ CHAPTER XXXIII When Mr. St. John went , it was beginning to snow ; the whirling storm continued all night . The next day a keen wind brought fresh and blinding falls ; by twilight the valley was drifted up and almost impassable . I had closed my shutter , laid a mat to the door to prevent the snow from blowing in under it , trimmed my fire , and after sitting nearly an hour on the hearth listening to the muffled fury of the tempest , I lit a candle , took down " Marmion , " and beginning-- " Day set on Norham 's castled steep , And Tweed 's fair river broad and deep , And Cheviot 's mountains lone ; The massive towers , the donjon keep , The flanking walls that round them sweep , In yellow lustre shone"-- I soon forgot storm in music . I heard a noise : the wind , I thought , shook the door . No ; it was St. John Rivers , who , lifting the latch , came in out of the frozen hurricane--the howling darkness--and stood before me : the cloak that covered his tall figure all white as a glacier . I was almost in consternation , so little had I expected any guest from the blocked-up vale that night . " Any ill news ? " I demanded . " Has anything happened ? " " No. How very easily alarmed you are ! " he answered , removing his cloak and hanging it up against the door , towards which he again coolly pushed the mat which his entrance had deranged . He stamped the snow from his boots . " I shall sully the purity of your floor , " said he , " but you must excuse me for once . " Then he approached the fire . " I have had hard work to get here , I assure you , " he observed , as he warmed his hands over the flame . " One drift took me up to the waist ; happily the snow is quite soft yet . " " But why are you come ? " I could not forbear saying . " Rather an inhospitable question to put to a visitor ; but since you ask it , I answer simply to have a little talk with you ; I got tired of my mute books and empty rooms . Besides , since yesterday I have experienced the excitement of a person to whom a tale has been half-told , and who is impatient to hear the sequel . " He sat down . I recalled his singular conduct of yesterday , and really I began to fear his wits were touched . If he were insane , however , his was a very cool and collected insanity : I had never seen that handsome-featured face of his look more like chiselled marble than it did just now , as he put aside his snow-wet hair from his forehead and let the firelight shine free on his pale brow and cheek as pale , where it grieved me to discover the hollow trace of care or sorrow now so plainly graved . I waited , expecting he would say something I could at least comprehend ; but his hand was now at his chin , his finger on his lip : he was thinking . It struck me that his hand looked wasted like his face . A perhaps uncalled-for gush of pity came over my heart : I was moved to say-- " I wish Diana or Mary would come and live with you : it is too bad that you should be quite alone ; and you are recklessly rash about your own health . " " Not at all , " said he : " I care for myself when necessary . I am well now . What do you see amiss in me ? " This was said with a careless , abstracted indifference , which showed that my solicitude was , at least in his opinion , wholly superfluous . I was silenced . He still slowly moved his finger over his upper lip , and still his eye dwelt dreamily on the glowing grate ; thinking it urgent to say something , I asked him presently if he felt any cold draught from the door , which was behind him . " No , no ! " he responded shortly and somewhat testily . " Well , " I reflected , " if you wo n't talk , you may be still ; I 'll let you alone now , and return to my book . " So I snuffed the candle and resumed the perusal of " Marmion . " He soon stirred ; my eye was instantly drawn to his movements ; he only took out a morocco pocket-book , thence produced a letter , which he read in silence , folded it , put it back , relapsed into meditation . It was vain to try to read with such an inscrutable fixture before me ; nor could I , in impatience , consent to be dumb ; he might rebuff me if he liked , but talk I would . " Have you heard from Diana and Mary lately ? " " Not since the letter I showed you a week ago . " " There has not been any change made about your own arrangements ? You will not be summoned to leave England sooner than you expected ? " " I fear not , indeed : such chance is too good to befall me . " Baffled so far , I changed my ground . I bethought myself to talk about the school and my scholars . " Mary Garrett 's mother is better , and Mary came back to the school this morning , and I shall have four new girls next week from the Foundry Close--they would have come to-day but for the snow . " " Indeed ! " " Mr. Oliver pays for two . " " Does he ? " " He means to give the whole school a treat at Christmas . " " I know . " " Was it your suggestion ? " " No. " " Whose , then ? " " His daughter 's , I think . " " It is like her : she is so good-natured . " " Yes . " Again came the blank of a pause : the clock struck eight strokes . It aroused him ; he uncrossed his legs , sat erect , turned to me . " Leave your book a moment , and come a little nearer the fire , " he said . Wondering , and of my wonder finding no end , I complied . " Half-an-hour ago , " he pursued , " I spoke of my impatience to hear the sequel of a tale : on reflection , I find the matter will be better managed by my assuming the narrator 's part , and converting you into a listener . Before commencing , it is but fair to warn you that the story will sound somewhat hackneyed in your ears ; but stale details often regain a degree of freshness when they pass through new lips . For the rest , whether trite or novel , it is short . " Twenty years ago , a poor curate--never mind his name at this moment--fell in love with a rich man 's daughter ; she fell in love with him , and married him , against the advice of all her friends , who consequently disowned her immediately after the wedding . Before two years passed , the rash pair were both dead , and laid quietly side by side under one slab . ( I have seen their grave ; it formed part of the pavement of a huge churchyard surrounding the grim , soot-black old cathedral of an overgrown manufacturing town in ---shire . ) They left a daughter , which , at its very birth , Charity received in her lap--cold as that of the snow-drift I almost stuck fast in to-night . Charity carried the friendless thing to the house of its rich maternal relations ; it was reared by an aunt-in- law , called ( I come to names now ) Mrs. Reed of Gateshead . You start--did you hear a noise ? I daresay it is only a rat scrambling along the rafters of the adjoining schoolroom : it was a barn before I had it repaired and altered , and barns are generally haunted by rats . --To proceed . Mrs. Reed kept the orphan ten years : whether it was happy or not with her , I cannot say , never having been told ; but at the end of that time she transferred it to a place you know--being no other than Lowood School , where you so long resided yourself . It seems her career there was very honourable : from a pupil , she became a teacher , like yourself--really it strikes me there are parallel points in her history and yours--she left it to be a governess : there , again , your fates were analogous ; she undertook the education of the ward of a certain Mr. Rochester . " " Mr. Rivers ! " I interrupted . " I can guess your feelings , " he said , " but restrain them for a while : I have nearly finished ; hear me to the end . Of Mr. Rochester 's character I know nothing , but the one fact that he professed to offer honourable marriage to this young girl , and that at the very altar she discovered he had a wife yet alive , though a lunatic . What his subsequent conduct and proposals were is a matter of pure conjecture ; but when an event transpired which rendered inquiry after the governess necessary , it was discovered she was gone--no one could tell when , where , or how . She had left Thornfield Hall in the night ; every research after her course had been vain : the country had been scoured far and wide ; no vestige of information could be gathered respecting her . Yet that she should be found is become a matter of serious urgency : advertisements have been put in all the papers ; I myself have received a letter from one Mr. Briggs , a solicitor , communicating the details I have just imparted . Is it not an odd tale ? " " Just tell me this , " said I , " and since you know so much , you surely can tell it me--what of Mr. Rochester ? How and where is he ? What is he doing ? Is he well ? " " I am ignorant of all concerning Mr. Rochester : the letter never mentions him but to narrate the fraudulent and illegal attempt I have adverted to . You should rather ask the name of the governess--the nature of the event which requires her appearance . " " Did no one go to Thornfield Hall , then ? Did no one see Mr. Rochester ? " " I suppose not . " " But they wrote to him ? " " Of course . " " And what did he say ? Who has his letters ? " " Mr. Briggs intimates that the answer to his application was not from Mr. Rochester , but from a lady : it is signed 'Alice Fairfax . ' " I felt cold and dismayed : my worst fears then were probably true : he had in all probability left England and rushed in reckless desperation to some former haunt on the Continent . And what opiate for his severe sufferings--what object for his strong passions--had he sought there ? I dared not answer the question . Oh , my poor master--once almost my husband--whom I had often called " my dear Edward ! " " He must have been a bad man , " observed Mr. Rivers . " You do n't know him--do n't pronounce an opinion upon him , " I said , with warmth . " Very well , " he answered quietly : " and indeed my head is otherwise occupied than with him : I have my tale to finish . Since you wo n't ask the governess 's name , I must tell it of my own accord . Stay ! I have it here--it is always more satisfactory to see important points written down , fairly committed to black and white . " And the pocket-book was again deliberately produced , opened , sought through ; from one of its compartments was extracted a shabby slip of paper , hastily torn off : I recognised in its texture and its stains of ultra-marine , and lake , and vermillion , the ravished margin of the portrait-cover . He got up , held it close to my eyes : and I read , traced in Indian ink , in my own handwriting , the words " JANE EYRE"--the work doubtless of some moment of abstraction . " Briggs wrote to me of a Jane Eyre : " he said , " the advertisements demanded a Jane Eyre : I knew a Jane Elliott . --I confess I had my suspicions , but it was only yesterday afternoon they were at once resolved into certainty . You own the name and renounce the _alias_ ? " " Yes--yes ; but where is Mr. Briggs ? He perhaps knows more of Mr. Rochester than you do . " " Briggs is in London . I should doubt his knowing anything at all about Mr. Rochester ; it is not in Mr. Rochester he is interested . Meantime , you forget essential points in pursuing trifles : you do not inquire why Mr. Briggs sought after you--what he wanted with you . " " Well , what did he want ? " " Merely to tell you that your uncle , Mr. Eyre of Madeira , is dead ; that he has left you all his property , and that you are now rich--merely that--nothing more . " " I ! --rich ? " " Yes , you , rich--quite an heiress . " Silence succeeded . " You must prove your identity of course , " resumed St. John presently : " a step which will offer no difficulties ; you can then enter on immediate possession . Your fortune is vested in the English funds ; Briggs has the will and the necessary documents . " Here was a new card turned up ! It is a fine thing , reader , to be lifted in a moment from indigence to wealth--a very fine thing ; but not a matter one can comprehend , or consequently enjoy , all at once . And then there are other chances in life far more thrilling and rapture-giving : _this_ is solid , an affair of the actual world , nothing ideal about it : all its associations are solid and sober , and its manifestations are the same . One does not jump , and spring , and shout hurrah ! at hearing one has got a fortune ; one begins to consider responsibilities , and to ponder business ; on a base of steady satisfaction rise certain grave cares , and we contain ourselves , and brood over our bliss with a solemn brow . Besides , the words Legacy , Bequest , go side by side with the words , Death , Funeral . My uncle I had heard was dead--my only relative ; ever since being made aware of his existence , I had cherished the hope of one day seeing him : now , I never should . And then this money came only to me : not to me and a rejoicing family , but to my isolated self . It was a grand boon doubtless ; and independence would be glorious--yes , I felt that--that thought swelled my heart . " You unbend your forehead at last , " said Mr. Rivers . " I thought Medusa had looked at you , and that you were turning to stone . Perhaps now you will ask how much you are worth ? " " How much am I worth ? " " Oh , a trifle ! Nothing of course to speak of--twenty thousand pounds , I think they say--but what is that ? " " Twenty thousand pounds ? " Here was a new stunner--I had been calculating on four or five thousand . This news actually took my breath for a moment : Mr. St. John , whom I had never heard laugh before , laughed now . " Well , " said he , " if you had committed a murder , and I had told you your crime was discovered , you could scarcely look more aghast . " " It is a large sum--do n't you think there is a mistake ? " " No mistake at all . " " Perhaps you have read the figures wrong--it may be two thousand ! " " It is written in letters , not figures , --twenty thousand . " I again felt rather like an individual of but average gastronomical powers sitting down to feast alone at a table spread with provisions for a hundred . Mr. Rivers rose now and put his cloak on . " If it were not such a very wild night , " he said , " I would send Hannah down to keep you company : you look too desperately miserable to be left alone . But Hannah , poor woman ! could not stride the drifts so well as I : her legs are not quite so long : so I must e'en leave you to your sorrows . Good-night . " He was lifting the latch : a sudden thought occurred to me . " Stop one minute ! " I cried . " Well ? " " It puzzles me to know why Mr. Briggs wrote to you about me ; or how he knew you , or could fancy that you , living in such an out-of-the-way place , had the power to aid in my discovery . " " Oh ! I am a clergyman , " he said ; " and the clergy are often appealed to about odd matters . " Again the latch rattled . " No ; that does not satisfy me ! " I exclaimed : and indeed there was something in the hasty and unexplanatory reply which , instead of allaying , piqued my curiosity more than ever . " It is a very strange piece of business , " I added ; " I must know more about it . " " Another time . " " No ; to-night ! --to-night ! " and as he turned from the door , I placed myself between it and him . He looked rather embarrassed . " You certainly shall not go till you have told me all , " I said . " I would rather not just now . " " You shall ! --you must ! " " I would rather Diana or Mary informed you . " Of course these objections wrought my eagerness to a climax : gratified it must be , and that without delay ; and I told him so . " But I apprised you that I was a hard man , " said he , " difficult to persuade . " " And I am a hard woman , -- impossible to put off . " " And then , " he pursued , " I am cold : no fervour infects me . " " Whereas I am hot , and fire dissolves ice . The blaze there has thawed all the snow from your cloak ; by the same token , it has streamed on to my floor , and made it like a trampled street . As you hope ever to be forgiven , Mr. Rivers , the high crime and misdemeanour of spoiling a sanded kitchen , tell me what I wish to know . " " Well , then , " he said , " I yield ; if not to your earnestness , to your perseverance : as stone is worn by continual dropping . Besides , you must know some day , --as well now as later . Your name is Jane Eyre ? " " Of course : that was all settled before . " " You are not , perhaps , aware that I am your namesake ? --that I was christened St. John Eyre Rivers ? " " No , indeed ! I remember now seeing the letter E. comprised in your initials written in books you have at different times lent me ; but I never asked for what name it stood . But what then ? Surely-- " I stopped : I could not trust myself to entertain , much less to express , the thought that rushed upon me--that embodied itself , --that , in a second , stood out a strong , solid probability . Circumstances knit themselves , fitted themselves , shot into order : the chain that had been lying hitherto a formless lump of links was drawn out straight , --every ring was perfect , the connection complete . I knew , by instinct , how the matter stood , before St. John had said another word ; but I cannot expect the reader to have the same intuitive perception , so I must repeat his explanation . " My mother 's name was Eyre ; she had two brothers ; one a clergyman , who married Miss Jane Reed , of Gateshead ; the other , John Eyre , Esq . , merchant , late of Funchal , Madeira . Mr. Briggs , being Mr. Eyre 's solicitor , wrote to us last August to inform us of our uncle 's death , and to say that he had left his property to his brother the clergyman 's orphan daughter , overlooking us , in consequence of a quarrel , never forgiven , between him and my father . He wrote again a few weeks since , to intimate that the heiress was lost , and asking if we knew anything of her . A name casually written on a slip of paper has enabled me to find her out . You know the rest . " Again he was going , but I set my back against the door . " Do let me speak , " I said ; " let me have one moment to draw breath and reflect . " I paused--he stood before me , hat in hand , looking composed enough . I resumed-- " Your mother was my father 's sister ? " " Yes . " " My aunt , consequently ? " He bowed . " My uncle John was your uncle John ? You , Diana , and Mary are his sister 's children , as I am his brother 's child ? " " Undeniably . " " You three , then , are my cousins ; half our blood on each side flows from the same source ? " " We are cousins ; yes . " I surveyed him . It seemed I had found a brother : one I could be proud of , --one I could love ; and two sisters , whose qualities were such , that , when I knew them but as mere strangers , they had inspired me with genuine affection and admiration . The two girls , on whom , kneeling down on the wet ground , and looking through the low , latticed window of Moor House kitchen , I had gazed with so bitter a mixture of interest and despair , were my near kinswomen ; and the young and stately gentleman who had found me almost dying at his threshold was my blood relation . Glorious discovery to a lonely wretch ! This was wealth indeed ! --wealth to the heart ! --a mine of pure , genial affections . This was a blessing , bright , vivid , and exhilarating ; --not like the ponderous gift of gold : rich and welcome enough in its way , but sobering from its weight . I now clapped my hands in sudden joy--my pulse bounded , my veins thrilled . " Oh , I am glad ! --I am glad ! " I exclaimed . St. John smiled . " Did I not say you neglected essential points to pursue trifles ? " he asked . " You were serious when I told you you had got a fortune ; and now , for a matter of no moment , you are excited . " " What can you mean ? It may be of no moment to you ; you have sisters and do n't care for a cousin ; but I had nobody ; and now three relations , --or two , if you do n't choose to be counted , --are born into my world full-grown . I say again , I am glad ! " I walked fast through the room : I stopped , half suffocated with the thoughts that rose faster than I could receive , comprehend , settle them : --thoughts of what might , could , would , and should be , and that ere long . I looked at the blank wall : it seemed a sky thick with ascending stars , --every one lit me to a purpose or delight . Those who had saved my life , whom , till this hour , I had loved barrenly , I could now benefit . They were under a yoke , --I could free them : they were scattered , --I could reunite them : the independence , the affluence which was mine , might be theirs too . Were we not four ? Twenty thousand pounds shared equally would be five thousand each , justice--enough and to spare : justice would be done , --mutual happiness secured . Now the wealth did not weigh on me : now it was not a mere bequest of coin , --it was a legacy of life , hope , enjoyment . How I looked while these ideas were taking my spirit by storm , I cannot tell ; but I perceived soon that Mr. Rivers had placed a chair behind me , and was gently attempting to make me sit down on it . He also advised me to be composed ; I scorned the insinuation of helplessness and distraction , shook off his hand , and began to walk about again . " Write to Diana and Mary to-morrow , " I said , " and tell them to come home directly . Diana said they would both consider themselves rich with a thousand pounds , so with five thousand they will do very well . " " Tell me where I can get you a glass of water , " said St. John ; " you must really make an effort to tranquillise your feelings . " " Nonsense ! and what sort of an effect will the bequest have on you ? Will it keep you in England , induce you to marry Miss Oliver , and settle down like an ordinary mortal ? " " You wander : your head becomes confused . I have been too abrupt in communicating the news ; it has excited you beyond your strength . " " Mr. Rivers ! you quite put me out of patience : I am rational enough ; it is you who misunderstand , or rather who affect to misunderstand . " " Perhaps , if you explained yourself a little more fully , I should comprehend better . " " Explain ! What is there to explain ? You cannot fail to see that twenty thousand pounds , the sum in question , divided equally between the nephew and three nieces of our uncle , will give five thousand to each ? What I want is , that you should write to your sisters and tell them of the fortune that has accrued to them . " " To you , you mean . " " I have intimated my view of the case : I am incapable of taking any other . I am not brutally selfish , blindly unjust , or fiendishly ungrateful . Besides , I am resolved I will have a home and connections . I like Moor House , and I will live at Moor House ; I like Diana and Mary , and I will attach myself for life to Diana and Mary . It would please and benefit me to have five thousand pounds ; it would torment and oppress me to have twenty thousand ; which , moreover , could never be mine in justice , though it might in law . I abandon to you , then , what is absolutely superfluous to me . Let there be no opposition , and no discussion about it ; let us agree amongst each other , and decide the point at once . " " This is acting on first impulses ; you must take days to consider such a matter , ere your word can be regarded as valid . " " Oh ! if all you doubt is my sincerity , I am easy : you see the justice of the case ? " " I _do_ see a certain justice ; but it is contrary to all custom . Besides , the entire fortune is your right : my uncle gained it by his own efforts ; he was free to leave it to whom he would : he left it to you . After all , justice permits you to keep it : you may , with a clear conscience , consider it absolutely your own . " " With me , " said I , " it is fully as much a matter of feeling as of conscience : I must indulge my feelings ; I so seldom have had an opportunity of doing so . Were you to argue , object , and annoy me for a year , I could not forego the delicious pleasure of which I have caught a glimpse--that of repaying , in part , a mighty obligation , and winning to myself lifelong friends . " " You think so now , " rejoined St. John , " because you do not know what it is to possess , nor consequently to enjoy wealth : you cannot form a notion of the importance twenty thousand pounds would give you ; of the place it would enable you to take in society ; of the prospects it would open to you : you cannot-- " " And you , " I interrupted , " cannot at all imagine the craving I have for fraternal and sisterly love . I never had a home , I never had brothers or sisters ; I must and will have them now : you are not reluctant to admit me and own me , are you ? " " Jane , I will be your brother--my sisters will be your sisters--without stipulating for this sacrifice of your just rights . " " Brother ? Yes ; at the distance of a thousand leagues ! Sisters ? Yes ; slaving amongst strangers ! I , wealthy--gorged with gold I never earned and do not merit ! You , penniless ! Famous equality and fraternisation ! Close union ! Intimate attachment ! " " But , Jane , your aspirations after family ties and domestic happiness may be realised otherwise than by the means you contemplate : you may marry . " " Nonsense , again ! Marry ! I do n't want to marry , and never shall marry . " " That is saying too much : such hazardous affirmations are a proof of the excitement under which you labour . " " It is not saying too much : I know what I feel , and how averse are my inclinations to the bare thought of marriage . No one would take me for love ; and I will not be regarded in the light of a mere money speculation . And I do not want a stranger--unsympathising , alien , different from me ; I want my kindred : those with whom I have full fellow- feeling . Say again you will be my brother : when you uttered the words I was satisfied , happy ; repeat them , if you can , repeat them sincerely . " " I think I can . I know I have always loved my own sisters ; and I know on what my affection for them is grounded , --respect for their worth and admiration of their talents . You too have principle and mind : your tastes and habits resemble Diana 's and Mary 's ; your presence is always agreeable to me ; in your conversation I have already for some time found a salutary solace . I feel I can easily and naturally make room in my heart for you , as my third and youngest sister . " " Thank you : that contents me for to-night . Now you had better go ; for if you stay longer , you will perhaps irritate me afresh by some mistrustful scruple . " " And the school , Miss Eyre ? It must now be shut up , I suppose ? " " No. I will retain my post of mistress till you get a substitute . " He smiled approbation : we shook hands , and he took leave . I need not narrate in detail the further struggles I had , and arguments I used , to get matters regarding the legacy settled as I wished . My task was a very hard one ; but , as I was absolutely resolved--as my cousins saw at length that my mind was really and immutably fixed on making a just division of the property--as they must in their own hearts have felt the equity of the intention ; and must , besides , have been innately conscious that in my place they would have done precisely what I wished to do--they yielded at length so far as to consent to put the affair to arbitration . The judges chosen were Mr. Oliver and an able lawyer : both coincided in my opinion : I carried my point . The instruments of transfer were drawn out : St. John , Diana , Mary , and I , each became possessed of a competency . </text>
<text id="FictBronteC_JaneEyre_6_EN.txt">
﻿ CHAPTER VI The next day commenced as before , getting up and dressing by rushlight ; but this morning we were obliged to dispense with the ceremony of washing ; the water in the pitchers was frozen . A change had taken place in the weather the preceding evening , and a keen north-east wind , whistling through the crevices of our bedroom windows all night long , had made us shiver in our beds , and turned the contents of the ewers to ice . Before the long hour and a half of prayers and Bible-reading was over , I felt ready to perish with cold . Breakfast-time came at last , and this morning the porridge was not burnt ; the quality was eatable , the quantity small . How small my portion seemed ! I wished it had been doubled . In the course of the day I was enrolled a member of the fourth class , and regular tasks and occupations were assigned me : hitherto , I had only been a spectator of the proceedings at Lowood ; I was now to become an actor therein . At first , being little accustomed to learn by heart , the lessons appeared to me both long and difficult ; the frequent change from task to task , too , bewildered me ; and I was glad when , about three o'clock in the afternoon , Miss Smith put into my hands a border of muslin two yards long , together with needle , thimble , &c . , and sent me to sit in a quiet corner of the schoolroom , with directions to hem the same . At that hour most of the others were sewing likewise ; but one class still stood round Miss Scatcherd 's chair reading , and as all was quiet , the subject of their lessons could be heard , together with the manner in which each girl acquitted herself , and the animadversions or commendations of Miss Scatcherd on the performance . It was English history : among the readers I observed my acquaintance of the verandah : at the commencement of the lesson , her place had been at the top of the class , but for some error of pronunciation , or some inattention to stops , she was suddenly sent to the very bottom . Even in that obscure position , Miss Scatcherd continued to make her an object of constant notice : she was continually addressing to her such phrases as the following : -- " Burns " ( such it seems was her name : the girls here were all called by their surnames , as boys are elsewhere ) , " Burns , you are standing on the side of your shoe ; turn your toes out immediately . " " Burns , you poke your chin most unpleasantly ; draw it in . " " Burns , I insist on your holding your head up ; I will not have you before me in that attitude , " &c . &c . A chapter having been read through twice , the books were closed and the girls examined . The lesson had comprised part of the reign of Charles I. , and there were sundry questions about tonnage and poundage and ship- money , which most of them appeared unable to answer ; still , every little difficulty was solved instantly when it reached Burns : her memory seemed to have retained the substance of the whole lesson , and she was ready with answers on every point . I kept expecting that Miss Scatcherd would praise her attention ; but , instead of that , she suddenly cried out-- " You dirty , disagreeable girl ! you have never cleaned your nails this morning ! " Burns made no answer : I wondered at her silence . " Why , " thought I , " does she not explain that she could neither clean her nails nor wash her face , as the water was frozen ? " My attention was now called off by Miss Smith desiring me to hold a skein of thread : while she was winding it , she talked to me from time to time , asking whether I had ever been at school before , whether I could mark , stitch , knit , &c . ; till she dismissed me , I could not pursue my observations on Miss Scatcherd 's movements . When I returned to my seat , that lady was just delivering an order of which I did not catch the import ; but Burns immediately left the class , and going into the small inner room where the books were kept , returned in half a minute , carrying in her hand a bundle of twigs tied together at one end . This ominous tool she presented to Miss Scatcherd with a respectful curtesy ; then she quietly , and without being told , unloosed her pinafore , and the teacher instantly and sharply inflicted on her neck a dozen strokes with the bunch of twigs . Not a tear rose to Burns ' eye ; and , while I paused from my sewing , because my fingers quivered at this spectacle with a sentiment of unavailing and impotent anger , not a feature of her pensive face altered its ordinary expression . " Hardened girl ! " exclaimed Miss Scatcherd ; " nothing can correct you of your slatternly habits : carry the rod away . " Burns obeyed : I looked at her narrowly as she emerged from the book-closet ; she was just putting back her handkerchief into her pocket , and the trace of a tear glistened on her thin cheek . The play-hour in the evening I thought the pleasantest fraction of the day at Lowood : the bit of bread , the draught of coffee swallowed at five o'clock had revived vitality , if it had not satisfied hunger : the long restraint of the day was slackened ; the schoolroom felt warmer than in the morning--its fires being allowed to burn a little more brightly , to supply , in some measure , the place of candles , not yet introduced : the ruddy gloaming , the licensed uproar , the confusion of many voices gave one a welcome sense of liberty . On the evening of the day on which I had seen Miss Scatcherd flog her pupil , Burns , I wandered as usual among the forms and tables and laughing groups without a companion , yet not feeling lonely : when I passed the windows , I now and then lifted a blind , and looked out ; it snowed fast , a drift was already forming against the lower panes ; putting my ear close to the window , I could distinguish from the gleeful tumult within , the disconsolate moan of the wind outside . Probably , if I had lately left a good home and kind parents , this would have been the hour when I should most keenly have regretted the separation ; that wind would then have saddened my heart ; this obscure chaos would have disturbed my peace ! as it was , I derived from both a strange excitement , and reckless and feverish , I wished the wind to howl more wildly , the gloom to deepen to darkness , and the confusion to rise to clamour . Jumping over forms , and creeping under tables , I made my way to one of the fire-places ; there , kneeling by the high wire fender , I found Burns , absorbed , silent , abstracted from all round her by the companionship of a book , which she read by the dim glare of the embers . " Is it still 'Rasselas ' ? " I asked , coming behind her . " Yes , " she said , " and I have just finished it . " And in five minutes more she shut it up . I was glad of this . " Now , " thought I , " I can perhaps get her to talk . " I sat down by her on the floor . " What is your name besides Burns ? " " Helen . " " Do you come a long way from here ? " " I come from a place farther north , quite on the borders of Scotland . " " Will you ever go back ? " " I hope so ; but nobody can be sure of the future . " " You must wish to leave Lowood ? " " No ! why should I ? I was sent to Lowood to get an education ; and it would be of no use going away until I have attained that object . " " But that teacher , Miss Scatcherd , is so cruel to you ? " " Cruel ? Not at all ! She is severe : she dislikes my faults . " " And if I were in your place I should dislike her ; I should resist her . If she struck me with that rod , I should get it from her hand ; I should break it under her nose . " " Probably you would do nothing of the sort : but if you did , Mr. Brocklehurst would expel you from the school ; that would be a great grief to your relations . It is far better to endure patiently a smart which nobody feels but yourself , than to commit a hasty action whose evil consequences will extend to all connected with you ; and besides , the Bible bids us return good for evil . " " But then it seems disgraceful to be flogged , and to be sent to stand in the middle of a room full of people ; and you are such a great girl : I am far younger than you , and I could not bear it . " " Yet it would be your duty to bear it , if you could not avoid it : it is weak and silly to say you _cannot bear_ what it is your fate to be required to bear . " I heard her with wonder : I could not comprehend this doctrine of endurance ; and still less could I understand or sympathise with the forbearance she expressed for her chastiser . Still I felt that Helen Burns considered things by a light invisible to my eyes . I suspected she might be right and I wrong ; but I would not ponder the matter deeply ; like Felix , I put it off to a more convenient season . " You say you have faults , Helen : what are they ? To me you seem very good . " " Then learn from me , not to judge by appearances : I am , as Miss Scatcherd said , slatternly ; I seldom put , and never keep , things , in order ; I am careless ; I forget rules ; I read when I should learn my lessons ; I have no method ; and sometimes I say , like you , I cannot _bear_ to be subjected to systematic arrangements . This is all very provoking to Miss Scatcherd , who is naturally neat , punctual , and particular . " " And cross and cruel , " I added ; but Helen Burns would not admit my addition : she kept silence . " Is Miss Temple as severe to you as Miss Scatcherd ? " At the utterance of Miss Temple 's name , a soft smile flitted over her grave face . " Miss Temple is full of goodness ; it pains her to be severe to any one , even the worst in the school : she sees my errors , and tells me of them gently ; and , if I do anything worthy of praise , she gives me my meed liberally . One strong proof of my wretchedly defective nature is , that even her expostulations , so mild , so rational , have not influence to cure me of my faults ; and even her praise , though I value it most highly , cannot stimulate me to continued care and foresight . " " That is curious , " said I , " it is so easy to be careful . " " For _you_ I have no doubt it is . I observed you in your class this morning , and saw you were closely attentive : your thoughts never seemed to wander while Miss Miller explained the lesson and questioned you . Now , mine continually rove away ; when I should be listening to Miss Scatcherd , and collecting all she says with assiduity , often I lose the very sound of her voice ; I fall into a sort of dream . Sometimes I think I am in Northumberland , and that the noises I hear round me are the bubbling of a little brook which runs through Deepden , near our house ; --then , when it comes to my turn to reply , I have to be awakened ; and having heard nothing of what was read for listening to the visionary brook , I have no answer ready . " " Yet how well you replied this afternoon . " " It was mere chance ; the subject on which we had been reading had interested me . This afternoon , instead of dreaming of Deepden , I was wondering how a man who wished to do right could act so unjustly and unwisely as Charles the First sometimes did ; and I thought what a pity it was that , with his integrity and conscientiousness , he could see no farther than the prerogatives of the crown . If he had but been able to look to a distance , and see how what they call the spirit of the age was tending ! Still , I like Charles--I respect him--I pity him , poor murdered king ! Yes , his enemies were the worst : they shed blood they had no right to shed . How dared they kill him ! " Helen was talking to herself now : she had forgotten I could not very well understand her--that I was ignorant , or nearly so , of the subject she discussed . I recalled her to my level . " And when Miss Temple teaches you , do your thoughts wander then ? " " No , certainly , not often ; because Miss Temple has generally something to say which is newer than my own reflections ; her language is singularly agreeable to me , and the information she communicates is often just what I wished to gain . " " Well , then , with Miss Temple you are good ? " " Yes , in a passive way : I make no effort ; I follow as inclination guides me . There is no merit in such goodness . " " A great deal : you are good to those who are good to you . It is all I ever desire to be . If people were always kind and obedient to those who are cruel and unjust , the wicked people would have it all their own way : they would never feel afraid , and so they would never alter , but would grow worse and worse . When we are struck at without a reason , we should strike back again very hard ; I am sure we should--so hard as to teach the person who struck us never to do it again . " " You will change your mind , I hope , when you grow older : as yet you are but a little untaught girl . " " But I feel this , Helen ; I must dislike those who , whatever I do to please them , persist in disliking me ; I must resist those who punish me unjustly . It is as natural as that I should love those who show me affection , or submit to punishment when I feel it is deserved . " " Heathens and savage tribes hold that doctrine , but Christians and civilised nations disown it . " " How ? I do n't understand . " " It is not violence that best overcomes hate--nor vengeance that most certainly heals injury . " " What then ? " " Read the New Testament , and observe what Christ says , and how He acts ; make His word your rule , and His conduct your example . " " What does He say ? " " Love your enemies ; bless them that curse you ; do good to them that hate you and despitefully use you . " " Then I should love Mrs. Reed , which I cannot do ; I should bless her son John , which is impossible . " In her turn , Helen Burns asked me to explain , and I proceeded forthwith to pour out , in my own way , the tale of my sufferings and resentments . Bitter and truculent when excited , I spoke as I felt , without reserve or softening . Helen heard me patiently to the end : I expected she would then make a remark , but she said nothing . " Well , " I asked impatiently , " is not Mrs. Reed a hard-hearted , bad woman ? " " She has been unkind to you , no doubt ; because you see , she dislikes your cast of character , as Miss Scatcherd does mine ; but how minutely you remember all she has done and said to you ! What a singularly deep impression her injustice seems to have made on your heart ! No ill-usage so brands its record on my feelings . Would you not be happier if you tried to forget her severity , together with the passionate emotions it excited ? Life appears to me too short to be spent in nursing animosity or registering wrongs . We are , and must be , one and all , burdened with faults in this world : but the time will soon come when , I trust , we shall put them off in putting off our corruptible bodies ; when debasement and sin will fall from us with this cumbrous frame of flesh , and only the spark of the spirit will remain , --the impalpable principle of light and thought , pure as when it left the Creator to inspire the creature : whence it came it will return ; perhaps again to be communicated to some being higher than man--perhaps to pass through gradations of glory , from the pale human soul to brighten to the seraph ! Surely it will never , on the contrary , be suffered to degenerate from man to fiend ? No ; I cannot believe that : I hold another creed : which no one ever taught me , and which I seldom mention ; but in which I delight , and to which I cling : for it extends hope to all : it makes Eternity a rest--a mighty home , not a terror and an abyss . Besides , with this creed , I can so clearly distinguish between the criminal and his crime ; I can so sincerely forgive the first while I abhor the last : with this creed revenge never worries my heart , degradation never too deeply disgusts me , injustice never crushes me too low : I live in calm , looking to the end . " Helen 's head , always drooping , sank a little lower as she finished this sentence . I saw by her look she wished no longer to talk to me , but rather to converse with her own thoughts . She was not allowed much time for meditation : a monitor , a great rough girl , presently came up , exclaiming in a strong Cumberland accent-- " Helen Burns , if you do n't go and put your drawer in order , and fold up your work this minute , I 'll tell Miss Scatcherd to come and look at it ! " Helen sighed as her reverie fled , and getting up , obeyed the monitor without reply as without delay . </text>
<text id="FictCarrollL_Wonderland_2_EN.txt">
﻿ CHAPTER II . The Pool of Tears 'Curiouser and curiouser ! ' cried Alice ( she was so much surprised , that for the moment she quite forgot how to speak good English ) ; 'now I 'm opening out like the largest telescope that ever was ! Good-bye , feet ! ' ( for when she looked down at her feet , they seemed to be almost out of sight , they were getting so far off ) . 'Oh , my poor little feet , I wonder who will put on your shoes and stockings for you now , dears ? I 'm sure _I_ sha n't be able ! I shall be a great deal too far off to trouble myself about you : you must manage the best way you can ; --but I must be kind to them , ' thought Alice , 'or perhaps they wo n't walk the way I want to go ! Let me see : I 'll give them a new pair of boots every Christmas . ' And she went on planning to herself how she would manage it . 'They must go by the carrier , ' she thought ; 'and how funny it 'll seem , sending presents to one 's own feet ! And how odd the directions will look ! ALICE'S RIGHT FOOT , ESQ . HEARTHRUG , NEAR THE FENDER , ( WITH ALICE'S LOVE ) . Oh dear , what nonsense I 'm talking ! ' Just then her head struck against the roof of the hall : in fact she was now more than nine feet high , and she at once took up the little golden key and hurried off to the garden door . Poor Alice ! It was as much as she could do , lying down on one side , to look through into the garden with one eye ; but to get through was more hopeless than ever : she sat down and began to cry again . 'You ought to be ashamed of yourself , ' said Alice , 'a great girl like you , ' ( she might well say this ) , 'to go on crying in this way ! Stop this moment , I tell you ! ' But she went on all the same , shedding gallons of tears , until there was a large pool all round her , about four inches deep and reaching half down the hall . After a time she heard a little pattering of feet in the distance , and she hastily dried her eyes to see what was coming . It was the White Rabbit returning , splendidly dressed , with a pair of white kid gloves in one hand and a large fan in the other : he came trotting along in a great hurry , muttering to himself as he came , 'Oh ! the Duchess , the Duchess ! Oh ! wo n't she be savage if I 've kept her waiting ! ' Alice felt so desperate that she was ready to ask help of any one ; so , when the Rabbit came near her , she began , in a low , timid voice , 'If you please , sir-- ' The Rabbit started violently , dropped the white kid gloves and the fan , and skurried away into the darkness as hard as he could go . Alice took up the fan and gloves , and , as the hall was very hot , she kept fanning herself all the time she went on talking : 'Dear , dear ! How queer everything is to-day ! And yesterday things went on just as usual . I wonder if I 've been changed in the night ? Let me think : was I the same when I got up this morning ? I almost think I can remember feeling a little different . But if I 'm not the same , the next question is , Who in the world am I ? Ah , THAT'S the great puzzle ! ' And she began thinking over all the children she knew that were of the same age as herself , to see if she could have been changed for any of them . 'I 'm sure I 'm not Ada , ' she said , 'for her hair goes in such long ringlets , and mine does n't go in ringlets at all ; and I 'm sure I ca n't be Mabel , for I know all sorts of things , and she , oh ! she knows such a very little ! Besides , SHE'S she , and I 'm I , and--oh dear , how puzzling it all is ! I 'll try if I know all the things I used to know . Let me see : four times five is twelve , and four times six is thirteen , and four times seven is--oh dear ! I shall never get to twenty at that rate ! However , the Multiplication Table does n't signify : let 's try Geography . London is the capital of Paris , and Paris is the capital of Rome , and Rome--no , THAT'S all wrong , I 'm certain ! I must have been changed for Mabel ! I 'll try and say " How doth the little-- " ' and she crossed her hands on her lap as if she were saying lessons , and began to repeat it , but her voice sounded hoarse and strange , and the words did not come the same as they used to do : -- 'How doth the little crocodile Improve his shining tail , And pour the waters of the Nile On every golden scale ! 'How cheerfully he seems to grin , How neatly spread his claws , And welcome little fishes in With gently smiling jaws ! ' 'I 'm sure those are not the right words , ' said poor Alice , and her eyes filled with tears again as she went on , 'I must be Mabel after all , and I shall have to go and live in that poky little house , and have next to no toys to play with , and oh ! ever so many lessons to learn ! No , I 've made up my mind about it ; if I 'm Mabel , I 'll stay down here ! It 'll be no use their putting their heads down and saying " Come up again , dear ! " I shall only look up and say " Who am I then ? Tell me that first , and then , if I like being that person , I 'll come up : if not , I 'll stay down here till I 'm somebody else"--but , oh dear ! ' cried Alice , with a sudden burst of tears , 'I do wish they WOULD put their heads down ! I am so VERY tired of being all alone here ! ' As she said this she looked down at her hands , and was surprised to see that she had put on one of the Rabbit 's little white kid gloves while she was talking . 'How CAN I have done that ? ' she thought . 'I must be growing small again . ' She got up and went to the table to measure herself by it , and found that , as nearly as she could guess , she was now about two feet high , and was going on shrinking rapidly : she soon found out that the cause of this was the fan she was holding , and she dropped it hastily , just in time to avoid shrinking away altogether . 'That WAS a narrow escape ! ' said Alice , a good deal frightened at the sudden change , but very glad to find herself still in existence ; 'and now for the garden ! ' and she ran with all speed back to the little door : but , alas ! the little door was shut again , and the little golden key was lying on the glass table as before , 'and things are worse than ever , ' thought the poor child , 'for I never was so small as this before , never ! And I declare it 's too bad , that it is ! ' As she said these words her foot slipped , and in another moment , splash ! she was up to her chin in salt water . Her first idea was that she had somehow fallen into the sea , 'and in that case I can go back by railway , ' she said to herself . ( Alice had been to the seaside once in her life , and had come to the general conclusion , that wherever you go to on the English coast you find a number of bathing machines in the sea , some children digging in the sand with wooden spades , then a row of lodging houses , and behind them a railway station . ) However , she soon made out that she was in the pool of tears which she had wept when she was nine feet high . 'I wish I had n't cried so much ! ' said Alice , as she swam about , trying to find her way out . 'I shall be punished for it now , I suppose , by being drowned in my own tears ! That WILL be a queer thing , to be sure ! However , everything is queer to-day . ' Just then she heard something splashing about in the pool a little way off , and she swam nearer to make out what it was : at first she thought it must be a walrus or hippopotamus , but then she remembered how small she was now , and she soon made out that it was only a mouse that had slipped in like herself . 'Would it be of any use , now , ' thought Alice , 'to speak to this mouse ? Everything is so out-of-the-way down here , that I should think very likely it can talk : at any rate , there 's no harm in trying . ' So she began : 'O Mouse , do you know the way out of this pool ? I am very tired of swimming about here , O Mouse ! ' ( Alice thought this must be the right way of speaking to a mouse : she had never done such a thing before , but she remembered having seen in her brother 's Latin Grammar , 'A mouse--of a mouse--to a mouse--a mouse--O mouse ! ' ) The Mouse looked at her rather inquisitively , and seemed to her to wink with one of its little eyes , but it said nothing . 'Perhaps it does n't understand English , ' thought Alice ; 'I daresay it 's a French mouse , come over with William the Conqueror . ' ( For , with all her knowledge of history , Alice had no very clear notion how long ago anything had happened . ) So she began again : 'Ou est ma chatte ? ' which was the first sentence in her French lesson-book . The Mouse gave a sudden leap out of the water , and seemed to quiver all over with fright . 'Oh , I beg your pardon ! ' cried Alice hastily , afraid that she had hurt the poor animal 's feelings . 'I quite forgot you did n't like cats . ' 'Not like cats ! ' cried the Mouse , in a shrill , passionate voice . 'Would YOU like cats if you were me ? ' 'Well , perhaps not , ' said Alice in a soothing tone : 'do n't be angry about it . And yet I wish I could show you our cat Dinah : I think you 'd take a fancy to cats if you could only see her . She is such a dear quiet thing , ' Alice went on , half to herself , as she swam lazily about in the pool , 'and she sits purring so nicely by the fire , licking her paws and washing her face--and she is such a nice soft thing to nurse--and she 's such a capital one for catching mice--oh , I beg your pardon ! ' cried Alice again , for this time the Mouse was bristling all over , and she felt certain it must be really offended . 'We wo n't talk about her any more if you 'd rather not . ' 'We indeed ! ' cried the Mouse , who was trembling down to the end of his tail . 'As if I would talk on such a subject ! Our family always HATED cats : nasty , low , vulgar things ! Do n't let me hear the name again ! ' 'I wo n't indeed ! ' said Alice , in a great hurry to change the subject of conversation . 'Are you--are you fond--of--of dogs ? ' The Mouse did not answer , so Alice went on eagerly : 'There is such a nice little dog near our house I should like to show you ! A little bright-eyed terrier , you know , with oh , such long curly brown hair ! And it 'll fetch things when you throw them , and it 'll sit up and beg for its dinner , and all sorts of things--I ca n't remember half of them--and it belongs to a farmer , you know , and he says it 's so useful , it 's worth a hundred pounds ! He says it kills all the rats and--oh dear ! ' cried Alice in a sorrowful tone , 'I 'm afraid I 've offended it again ! ' For the Mouse was swimming away from her as hard as it could go , and making quite a commotion in the pool as it went . So she called softly after it , 'Mouse dear ! Do come back again , and we wo n't talk about cats or dogs either , if you do n't like them ! ' When the Mouse heard this , it turned round and swam slowly back to her : its face was quite pale ( with passion , Alice thought ) , and it said in a low trembling voice , 'Let us get to the shore , and then I 'll tell you my history , and you 'll understand why it is I hate cats and dogs . ' It was high time to go , for the pool was getting quite crowded with the birds and animals that had fallen into it : there were a Duck and a Dodo , a Lory and an Eaglet , and several other curious creatures . Alice led the way , and the whole party swam to the shore . </text>
<text id="FictCarrollL_Wonderland_5_EN.txt">
﻿ CHAPTER V. Advice from a Caterpillar The Caterpillar and Alice looked at each other for some time in silence : at last the Caterpillar took the hookah out of its mouth , and addressed her in a languid , sleepy voice . 'Who are YOU ? ' said the Caterpillar . This was not an encouraging opening for a conversation . Alice replied , rather shyly , 'I--I hardly know , sir , just at present--at least I know who I WAS when I got up this morning , but I think I must have been changed several times since then . ' 'What do you mean by that ? ' said the Caterpillar sternly . 'Explain yourself ! ' 'I ca n't explain MYSELF , I 'm afraid , sir ' said Alice , 'because I 'm not myself , you see . ' 'I do n't see , ' said the Caterpillar . 'I 'm afraid I ca n't put it more clearly , ' Alice replied very politely , 'for I ca n't understand it myself to begin with ; and being so many different sizes in a day is very confusing . ' 'It is n't , ' said the Caterpillar . 'Well , perhaps you have n't found it so yet , ' said Alice ; 'but when you have to turn into a chrysalis--you will some day , you know--and then after that into a butterfly , I should think you 'll feel it a little queer , wo n't you ? ' 'Not a bit , ' said the Caterpillar . 'Well , perhaps your feelings may be different , ' said Alice ; 'all I know is , it would feel very queer to ME . ' 'You ! ' said the Caterpillar contemptuously . 'Who are YOU ? ' Which brought them back again to the beginning of the conversation . Alice felt a little irritated at the Caterpillar 's making such VERY short remarks , and she drew herself up and said , very gravely , 'I think , you ought to tell me who YOU are , first . ' 'Why ? ' said the Caterpillar . Here was another puzzling question ; and as Alice could not think of any good reason , and as the Caterpillar seemed to be in a VERY unpleasant state of mind , she turned away . 'Come back ! ' the Caterpillar called after her . 'I 've something important to say ! ' This sounded promising , certainly : Alice turned and came back again . 'Keep your temper , ' said the Caterpillar . 'Is that all ? ' said Alice , swallowing down her anger as well as she could . 'No , ' said the Caterpillar . Alice thought she might as well wait , as she had nothing else to do , and perhaps after all it might tell her something worth hearing . For some minutes it puffed away without speaking , but at last it unfolded its arms , took the hookah out of its mouth again , and said , 'So you think you 're changed , do you ? ' 'I 'm afraid I am , sir , ' said Alice ; 'I ca n't remember things as I used--and I do n't keep the same size for ten minutes together ! ' 'Ca n't remember WHAT things ? ' said the Caterpillar . 'Well , I 've tried to say " HOW DOTH THE LITTLE BUSY BEE , " but it all came different ! ' Alice replied in a very melancholy voice . 'Repeat , " YOU ARE OLD , FATHER WILLIAM , " ' said the Caterpillar . Alice folded her hands , and began : -- 'You are old , Father William , ' the young man said , 'And your hair has become very white ; And yet you incessantly stand on your head-- Do you think , at your age , it is right ? ' 'In my youth , ' Father William replied to his son , 'I feared it might injure the brain ; But , now that I 'm perfectly sure I have none , Why , I do it again and again . ' 'You are old , ' said the youth , 'as I mentioned before , And have grown most uncommonly fat ; Yet you turned a back-somersault in at the door-- Pray , what is the reason of that ? ' 'In my youth , ' said the sage , as he shook his grey locks , 'I kept all my limbs very supple By the use of this ointment--one shilling the box-- Allow me to sell you a couple ? ' 'You are old , ' said the youth , 'and your jaws are too weak For anything tougher than suet ; Yet you finished the goose , with the bones and the beak-- Pray how did you manage to do it ? ' 'In my youth , ' said his father , 'I took to the law , And argued each case with my wife ; And the muscular strength , which it gave to my jaw , Has lasted the rest of my life . ' 'You are old , ' said the youth , 'one would hardly suppose That your eye was as steady as ever ; Yet you balanced an eel on the end of your nose-- What made you so awfully clever ? ' 'I have answered three questions , and that is enough , ' Said his father ; 'do n't give yourself airs ! Do you think I can listen all day to such stuff ? Be off , or I 'll kick you down stairs ! ' 'That is not said right , ' said the Caterpillar . 'Not QUITE right , I 'm afraid , ' said Alice , timidly ; 'some of the words have got altered . ' 'It is wrong from beginning to end , ' said the Caterpillar decidedly , and there was silence for some minutes . The Caterpillar was the first to speak . 'What size do you want to be ? ' it asked . 'Oh , I 'm not particular as to size , ' Alice hastily replied ; 'only one does n't like changing so often , you know . ' 'I DON'T know , ' said the Caterpillar . Alice said nothing : she had never been so much contradicted in her life before , and she felt that she was losing her temper . 'Are you content now ? ' said the Caterpillar . 'Well , I should like to be a LITTLE larger , sir , if you would n't mind , ' said Alice : 'three inches is such a wretched height to be . ' 'It is a very good height indeed ! ' said the Caterpillar angrily , rearing itself upright as it spoke ( it was exactly three inches high ) . 'But I 'm not used to it ! ' pleaded poor Alice in a piteous tone . And she thought of herself , 'I wish the creatures would n't be so easily offended ! ' 'You 'll get used to it in time , ' said the Caterpillar ; and it put the hookah into its mouth and began smoking again . This time Alice waited patiently until it chose to speak again . In a minute or two the Caterpillar took the hookah out of its mouth and yawned once or twice , and shook itself . Then it got down off the mushroom , and crawled away in the grass , merely remarking as it went , 'One side will make you grow taller , and the other side will make you grow shorter . ' 'One side of WHAT ? The other side of WHAT ? ' thought Alice to herself . 'Of the mushroom , ' said the Caterpillar , just as if she had asked it aloud ; and in another moment it was out of sight . Alice remained looking thoughtfully at the mushroom for a minute , trying to make out which were the two sides of it ; and as it was perfectly round , she found this a very difficult question . However , at last she stretched her arms round it as far as they would go , and broke off a bit of the edge with each hand . 'And now which is which ? ' she said to herself , and nibbled a little of the right-hand bit to try the effect : the next moment she felt a violent blow underneath her chin : it had struck her foot ! She was a good deal frightened by this very sudden change , but she felt that there was no time to be lost , as she was shrinking rapidly ; so she set to work at once to eat some of the other bit . Her chin was pressed so closely against her foot , that there was hardly room to open her mouth ; but she did it at last , and managed to swallow a morsel of the lefthand bit . * * * * * * * * * * * * * * * * * * * * 'Come , my head 's free at last ! ' said Alice in a tone of delight , which changed into alarm in another moment , when she found that her shoulders were nowhere to be found : all she could see , when she looked down , was an immense length of neck , which seemed to rise like a stalk out of a sea of green leaves that lay far below her . 'What CAN all that green stuff be ? ' said Alice . 'And where HAVE my shoulders got to ? And oh , my poor hands , how is it I ca n't see you ? ' She was moving them about as she spoke , but no result seemed to follow , except a little shaking among the distant green leaves . As there seemed to be no chance of getting her hands up to her head , she tried to get her head down to them , and was delighted to find that her neck would bend about easily in any direction , like a serpent . She had just succeeded in curving it down into a graceful zigzag , and was going to dive in among the leaves , which she found to be nothing but the tops of the trees under which she had been wandering , when a sharp hiss made her draw back in a hurry : a large pigeon had flown into her face , and was beating her violently with its wings . 'Serpent ! ' screamed the Pigeon . 'I 'm NOT a serpent ! ' said Alice indignantly . 'Let me alone ! ' 'Serpent , I say again ! ' repeated the Pigeon , but in a more subdued tone , and added with a kind of sob , 'I 've tried every way , and nothing seems to suit them ! ' 'I have n't the least idea what you 're talking about , ' said Alice . 'I 've tried the roots of trees , and I 've tried banks , and I 've tried hedges , ' the Pigeon went on , without attending to her ; 'but those serpents ! There 's no pleasing them ! ' Alice was more and more puzzled , but she thought there was no use in saying anything more till the Pigeon had finished . 'As if it was n't trouble enough hatching the eggs , ' said the Pigeon ; 'but I must be on the look-out for serpents night and day ! Why , I have n't had a wink of sleep these three weeks ! ' 'I 'm very sorry you 've been annoyed , ' said Alice , who was beginning to see its meaning . 'And just as I 'd taken the highest tree in the wood , ' continued the Pigeon , raising its voice to a shriek , 'and just as I was thinking I should be free of them at last , they must needs come wriggling down from the sky ! Ugh , Serpent ! ' 'But I 'm NOT a serpent , I tell you ! ' said Alice . 'I 'm a--I 'm a-- ' 'Well ! WHAT are you ? ' said the Pigeon . 'I can see you 're trying to invent something ! ' 'I--I 'm a little girl , ' said Alice , rather doubtfully , as she remembered the number of changes she had gone through that day . 'A likely story indeed ! ' said the Pigeon in a tone of the deepest contempt . 'I 've seen a good many little girls in my time , but never ONE with such a neck as that ! No , no ! You 're a serpent ; and there 's no use denying it . I suppose you 'll be telling me next that you never tasted an egg ! ' 'I HAVE tasted eggs , certainly , ' said Alice , who was a very truthful child ; 'but little girls eat eggs quite as much as serpents do , you know . ' 'I do n't believe it , ' said the Pigeon ; 'but if they do , why then they 're a kind of serpent , that 's all I can say . ' This was such a new idea to Alice , that she was quite silent for a minute or two , which gave the Pigeon the opportunity of adding , 'You 're looking for eggs , I know THAT well enough ; and what does it matter to me whether you 're a little girl or a serpent ? ' 'It matters a good deal to ME , ' said Alice hastily ; 'but I 'm not looking for eggs , as it happens ; and if I was , I should n't want YOURS : I do n't like them raw . ' 'Well , be off , then ! ' said the Pigeon in a sulky tone , as it settled down again into its nest . Alice crouched down among the trees as well as she could , for her neck kept getting entangled among the branches , and every now and then she had to stop and untwist it . After a while she remembered that she still held the pieces of mushroom in her hands , and she set to work very carefully , nibbling first at one and then at the other , and growing sometimes taller and sometimes shorter , until she had succeeded in bringing herself down to her usual height . It was so long since she had been anything near the right size , that it felt quite strange at first ; but she got used to it in a few minutes , and began talking to herself , as usual . 'Come , there 's half my plan done now ! How puzzling all these changes are ! I 'm never sure what I 'm going to be , from one minute to another ! However , I 've got back to my right size : the next thing is , to get into that beautiful garden--how IS that to be done , I wonder ? ' As she said this , she came suddenly upon an open place , with a little house in it about four feet high . 'Whoever lives there , ' thought Alice , 'it 'll never do to come upon them THIS size : why , I should frighten them out of their wits ! ' So she began nibbling at the righthand bit again , and did not venture to go near the house till she had brought herself down to nine inches high . </text>
<text id="FictDostoyevskyF_CrimePun_ep_EN.txt">
﻿ Epilogue I Siberia . On the banks of a broad solitary river stands a town , one of the administrative centres of Russia ; in the town there is a fortress , in the fortress there is a prison . In the prison the second-class convict Rodion Raskolnikov has been confined for nine months . Almost a year and a half has passed since his crime . There had been little difficulty about his trial . The criminal adhered exactly , firmly , and clearly to his statement . He did not confuse nor misrepresent the facts , nor soften them in his own interest , nor omit the smallest detail . He explained every incident of the murder , the secret of the pledge ( the piece of wood with a strip of metal ) which was found in the murdered woman 's hand . He described minutely how he had taken her keys , what they were like , as well as the chest and its contents ; he explained the mystery of Lizaveta 's murder ; described how Koch and , after him , the student knocked , and repeated all they had said to one another ; how he afterwards had run downstairs and heard Nikolay and Dmitri shouting ; how he had hidden in the empty flat and afterwards gone home . He ended by indicating the stone in the yard off the Voznesensky Prospect under which the purse and the trinkets were found . The whole thing , in fact , was perfectly clear . The lawyers and the judges were very much struck , among other things , by the fact that he had hidden the trinkets and the purse under a stone , without making use of them , and that , what was more , he did not now remember what the trinkets were like , or even how many there were . The fact that he had never opened the purse and did not even know how much was in it seemed incredible . There turned out to be in the purse three hundred and seventeen roubles and sixty copecks . From being so long under the stone , some of the most valuable notes lying uppermost had suffered from the damp . They were a long while trying to discover why the accused man should tell a lie about this , when about everything else he had made a truthful and straightforward confession . Finally some of the lawyers more versed in psychology admitted that it was possible he had really not looked into the purse , and so did n't know what was in it when he hid it under the stone . But they immediately drew the deduction that the crime could only have been committed through temporary mental derangement , through homicidal mania , without object or the pursuit of gain . This fell in with the most recent fashionable theory of temporary insanity , so often applied in our days in criminal cases . Moreover Raskolnikov 's hypochondriacal condition was proved by many witnesses , by Dr. Zossimov , his former fellow students , his landlady and her servant . All this pointed strongly to the conclusion that Raskolnikov was not quite like an ordinary murderer and robber , but that there was another element in the case . To the intense annoyance of those who maintained this opinion , the criminal scarcely attempted to defend himself . To the decisive question as to what motive impelled him to the murder and the robbery , he answered very clearly with the coarsest frankness that the cause was his miserable position , his poverty and helplessness , and his desire to provide for his first steps in life by the help of the three thousand roubles he had reckoned on finding . He had been led to the murder through his shallow and cowardly nature , exasperated moreover by privation and failure . To the question what led him to confess , he answered that it was his heartfelt repentance . All this was almost coarse . . . . The sentence however was more merciful than could have been expected , perhaps partly because the criminal had not tried to justify himself , but had rather shown a desire to exaggerate his guilt . All the strange and peculiar circumstances of the crime were taken into consideration . There could be no doubt of the abnormal and poverty-stricken condition of the criminal at the time . The fact that he had made no use of what he had stolen was put down partly to the effect of remorse , partly to his abnormal mental condition at the time of the crime . Incidentally the murder of Lizaveta served indeed to confirm the last hypothesis : a man commits two murders and forgets that the door is open ! Finally , the confession , at the very moment when the case was hopelessly muddled by the false evidence given by Nikolay through melancholy and fanaticism , and when , moreover , there were no proofs against the real criminal , no suspicions even ( Porfiry Petrovitch fully kept his word ) --all this did much to soften the sentence . Other circumstances , too , in the prisoner 's favour came out quite unexpectedly . Razumihin somehow discovered and proved that while Raskolnikov was at the university he had helped a poor consumptive fellow student and had spent his last penny on supporting him for six months , and when this student died , leaving a decrepit old father whom he had maintained almost from his thirteenth year , Raskolnikov had got the old man into a hospital and paid for his funeral when he died . Raskolnikov 's landlady bore witness , too , that when they had lived in another house at Five Corners , Raskolnikov had rescued two little children from a house on fire and was burnt in doing so . This was investigated and fairly well confirmed by many witnesses . These facts made an impression in his favour . And in the end the criminal was , in consideration of extenuating circumstances , condemned to penal servitude in the second class for a term of eight years only . At the very beginning of the trial Raskolnikov 's mother fell ill . Dounia and Razumihin found it possible to get her out of Petersburg during the trial . Razumihin chose a town on the railway not far from Petersburg , so as to be able to follow every step of the trial and at the same time to see Avdotya Romanovna as often as possible . Pulcheria Alexandrovna 's illness was a strange nervous one and was accompanied by a partial derangement of her intellect . When Dounia returned from her last interview with her brother , she had found her mother already ill , in feverish delirium . That evening Razumihin and she agreed what answers they must make to her mother 's questions about Raskolnikov and made up a complete story for her mother 's benefit of his having to go away to a distant part of Russia on a business commission , which would bring him in the end money and reputation . But they were struck by the fact that Pulcheria Alexandrovna never asked them anything on the subject , neither then nor thereafter . On the contrary , she had her own version of her son 's sudden departure ; she told them with tears how he had come to say good-bye to her , hinting that she alone knew many mysterious and important facts , and that Rodya had many very powerful enemies , so that it was necessary for him to be in hiding . As for his future career , she had no doubt that it would be brilliant when certain sinister influences could be removed . She assured Razumihin that her son would be one day a great statesman , that his article and brilliant literary talent proved it . This article she was continually reading , she even read it aloud , almost took it to bed with her , but scarcely asked where Rodya was , though the subject was obviously avoided by the others , which might have been enough to awaken her suspicions . They began to be frightened at last at Pulcheria Alexandrovna 's strange silence on certain subjects . She did not , for instance , complain of getting no letters from him , though in previous years she had only lived on the hope of letters from her beloved Rodya . This was the cause of great uneasiness to Dounia ; the idea occurred to her that her mother suspected that there was something terrible in her son 's fate and was afraid to ask , for fear of hearing something still more awful . In any case , Dounia saw clearly that her mother was not in full possession of her faculties . It happened once or twice , however , that Pulcheria Alexandrovna gave such a turn to the conversation that it was impossible to answer her without mentioning where Rodya was , and on receiving unsatisfactory and suspicious answers she became at once gloomy and silent , and this mood lasted for a long time . Dounia saw at last that it was hard to deceive her and came to the conclusion that it was better to be absolutely silent on certain points ; but it became more and more evident that the poor mother suspected something terrible . Dounia remembered her brother 's telling her that her mother had overheard her talking in her sleep on the night after her interview with Svidrigaïlov and before the fatal day of the confession : had not she made out something from that ? Sometimes days and even weeks of gloomy silence and tears would be succeeded by a period of hysterical animation , and the invalid would begin to talk almost incessantly of her son , of her hopes of his future . . . . Her fancies were sometimes very strange . They humoured her , pretended to agree with her ( she saw perhaps that they were pretending ) , but she still went on talking . Five months after Raskolnikov 's confession , he was sentenced . Razumihin and Sonia saw him in prison as often as it was possible . At last the moment of separation came . Dounia swore to her brother that the separation should not be for ever , Razumihin did the same . Razumihin , in his youthful ardour , had firmly resolved to lay the foundations at least of a secure livelihood during the next three or four years , and saving up a certain sum , to emigrate to Siberia , a country rich in every natural resource and in need of workers , active men and capital . There they would settle in the town where Rodya was and all together would begin a new life . They all wept at parting . Raskolnikov had been very dreamy for a few days before . He asked a great deal about his mother and was constantly anxious about her . He worried so much about her that it alarmed Dounia . When he heard about his mother 's illness he became very gloomy . With Sonia he was particularly reserved all the time . With the help of the money left to her by Svidrigaïlov , Sonia had long ago made her preparations to follow the party of convicts in which he was despatched to Siberia . Not a word passed between Raskolnikov and her on the subject , but both knew it would be so . At the final leave-taking he smiled strangely at his sister 's and Razumihin 's fervent anticipations of their happy future together when he should come out of prison . He predicted that their mother 's illness would soon have a fatal ending . Sonia and he at last set off . Two months later Dounia was married to Razumihin . It was a quiet and sorrowful wedding ; Porfiry Petrovitch and Zossimov were invited however . During all this period Razumihin wore an air of resolute determination . Dounia put implicit faith in his carrying out his plans and indeed she could not but believe in him . He displayed a rare strength of will . Among other things he began attending university lectures again in order to take his degree . They were continually making plans for the future ; both counted on settling in Siberia within five years at least . Till then they rested their hopes on Sonia . Pulcheria Alexandrovna was delighted to give her blessing to Dounia 's marriage with Razumihin ; but after the marriage she became even more melancholy and anxious . To give her pleasure Razumihin told her how Raskolnikov had looked after the poor student and his decrepit father and how a year ago he had been burnt and injured in rescuing two little children from a fire . These two pieces of news excited Pulcheria Alexandrovna 's disordered imagination almost to ecstasy . She was continually talking about them , even entering into conversation with strangers in the street , though Dounia always accompanied her . In public conveyances and shops , wherever she could capture a listener , she would begin the discourse about her son , his article , how he had helped the student , how he had been burnt at the fire , and so on ! Dounia did not know how to restrain her . Apart from the danger of her morbid excitement , there was the risk of someone 's recalling Raskolnikov 's name and speaking of the recent trial . Pulcheria Alexandrovna found out the address of the mother of the two children her son had saved and insisted on going to see her . At last her restlessness reached an extreme point . She would sometimes begin to cry suddenly and was often ill and feverishly delirious . One morning she declared that by her reckoning Rodya ought soon to be home , that she remembered when he said good-bye to her he said that they must expect him back in nine months . She began to prepare for his coming , began to do up her room for him , to clean the furniture , to wash and put up new hangings and so on . Dounia was anxious , but said nothing and helped her to arrange the room . After a fatiguing day spent in continual fancies , in joyful day-dreams and tears , Pulcheria Alexandrovna was taken ill in the night and by morning she was feverish and delirious . It was brain fever . She died within a fortnight . In her delirium she dropped words which showed that she knew a great deal more about her son 's terrible fate than they had supposed . For a long time Raskolnikov did not know of his mother 's death , though a regular correspondence had been maintained from the time he reached Siberia . It was carried on by means of Sonia , who wrote every month to the Razumihins and received an answer with unfailing regularity . At first they found Sonia 's letters dry and unsatisfactory , but later on they came to the conclusion that the letters could not be better , for from these letters they received a complete picture of their unfortunate brother 's life . Sonia 's letters were full of the most matter-of-fact detail , the simplest and clearest description of all Raskolnikov 's surroundings as a convict . There was no word of her own hopes , no conjecture as to the future , no description of her feelings . Instead of any attempt to interpret his state of mind and inner life , she gave the simple facts--that is , his own words , an exact account of his health , what he asked for at their interviews , what commission he gave her and so on . All these facts she gave with extraordinary minuteness . The picture of their unhappy brother stood out at last with great clearness and precision . There could be no mistake , because nothing was given but facts . But Dounia and her husband could get little comfort out of the news , especially at first . Sonia wrote that he was constantly sullen and not ready to talk , that he scarcely seemed interested in the news she gave him from their letters , that he sometimes asked after his mother and that when , seeing that he had guessed the truth , she told him at last of her death , she was surprised to find that he did not seem greatly affected by it , not externally at any rate . She told them that , although he seemed so wrapped up in himself and , as it were , shut himself off from everyone--he took a very direct and simple view of his new life ; that he understood his position , expected nothing better for the time , had no ill-founded hopes ( as is so common in his position ) and scarcely seemed surprised at anything in his surroundings , so unlike anything he had known before . She wrote that his health was satisfactory ; he did his work without shirking or seeking to do more ; he was almost indifferent about food , but except on Sundays and holidays the food was so bad that at last he had been glad to accept some money from her , Sonia , to have his own tea every day . He begged her not to trouble about anything else , declaring that all this fuss about him only annoyed him . Sonia wrote further that in prison he shared the same room with the rest , that she had not seen the inside of their barracks , but concluded that they were crowded , miserable and unhealthy ; that he slept on a plank bed with a rug under him and was unwilling to make any other arrangement . But that he lived so poorly and roughly , not from any plan or design , but simply from inattention and indifference . Sonia wrote simply that he had at first shown no interest in her visits , had almost been vexed with her indeed for coming , unwilling to talk and rude to her . But that in the end these visits had become a habit and almost a necessity for him , so that he was positively distressed when she was ill for some days and could not visit him . She used to see him on holidays at the prison gates or in the guard-room , to which he was brought for a few minutes to see her . On working days she would go to see him at work either at the workshops or at the brick kilns , or at the sheds on the banks of the Irtish . About herself , Sonia wrote that she had succeeded in making some acquaintances in the town , that she did sewing , and , as there was scarcely a dressmaker in the town , she was looked upon as an indispensable person in many houses . But she did not mention that the authorities were , through her , interested in Raskolnikov ; that his task was lightened and so on . At last the news came ( Dounia had indeed noticed signs of alarm and uneasiness in the preceding letters ) that he held aloof from everyone , that his fellow prisoners did not like him , that he kept silent for days at a time and was becoming very pale . In the last letter Sonia wrote that he had been taken very seriously ill and was in the convict ward of the hospital . II He was ill a long time . But it was not the horrors of prison life , not the hard labour , the bad food , the shaven head , or the patched clothes that crushed him . What did he care for all those trials and hardships ! he was even glad of the hard work . Physically exhausted , he could at least reckon on a few hours of quiet sleep . And what was the food to him--the thin cabbage soup with beetles floating in it ? In the past as a student he had often not had even that . His clothes were warm and suited to his manner of life . He did not even feel the fetters . Was he ashamed of his shaven head and parti-coloured coat ? Before whom ? Before Sonia ? Sonia was afraid of him , how could he be ashamed before her ? And yet he was ashamed even before Sonia , whom he tortured because of it with his contemptuous rough manner . But it was not his shaven head and his fetters he was ashamed of : his pride had been stung to the quick . It was wounded pride that made him ill . Oh , how happy he would have been if he could have blamed himself ! He could have borne anything then , even shame and disgrace . But he judged himself severely , and his exasperated conscience found no particularly terrible fault in his past , except a simple blunder which might happen to anyone . He was ashamed just because he , Raskolnikov , had so hopelessly , stupidly come to grief through some decree of blind fate , and must humble himself and submit to " the idiocy " of a sentence , if he were anyhow to be at peace . Vague and objectless anxiety in the present , and in the future a continual sacrifice leading to nothing--that was all that lay before him . And what comfort was it to him that at the end of eight years he would only be thirty-two and able to begin a new life ! What had he to live for ? What had he to look forward to ? Why should he strive ? To live in order to exist ? Why , he had been ready a thousand times before to give up existence for the sake of an idea , for a hope , even for a fancy . Mere existence had always been too little for him ; he had always wanted more . Perhaps it was just because of the strength of his desires that he had thought himself a man to whom more was permissible than to others . And if only fate would have sent him repentance--burning repentance that would have torn his heart and robbed him of sleep , that repentance , the awful agony of which brings visions of hanging or drowning ! Oh , he would have been glad of it ! Tears and agonies would at least have been life . But he did not repent of his crime . At least he might have found relief in raging at his stupidity , as he had raged at the grotesque blunders that had brought him to prison . But now in prison , in freedom , he thought over and criticised all his actions again and by no means found them so blundering and so grotesque as they had seemed at the fatal time . " In what way , " he asked himself , " was my theory stupider than others that have swarmed and clashed from the beginning of the world ? One has only to look at the thing quite independently , broadly , and uninfluenced by commonplace ideas , and my idea will by no means seem so . . . strange . Oh , sceptics and halfpenny philosophers , why do you halt half-way ! " " Why does my action strike them as so horrible ? " he said to himself . " Is it because it was a crime ? What is meant by crime ? My conscience is at rest . Of course , it was a legal crime , of course , the letter of the law was broken and blood was shed . Well , punish me for the letter of the law . . . and that 's enough . Of course , in that case many of the benefactors of mankind who snatched power for themselves instead of inheriting it ought to have been punished at their first steps . But those men succeeded and so they were right , and I did n't , and so I had no right to have taken that step . " It was only in that that he recognised his criminality , only in the fact that he had been unsuccessful and had confessed it . He suffered too from the question : why had he not killed himself ? Why had he stood looking at the river and preferred to confess ? Was the desire to live so strong and was it so hard to overcome it ? Had not Svidrigaïlov overcome it , although he was afraid of death ? In misery he asked himself this question , and could not understand that , at the very time he had been standing looking into the river , he had perhaps been dimly conscious of the fundamental falsity in himself and his convictions . He did n't understand that that consciousness might be the promise of a future crisis , of a new view of life and of his future resurrection . He preferred to attribute it to the dead weight of instinct which he could not step over , again through weakness and meanness . He looked at his fellow prisoners and was amazed to see how they all loved life and prized it . It seemed to him that they loved and valued life more in prison than in freedom . What terrible agonies and privations some of them , the tramps for instance , had endured ! Could they care so much for a ray of sunshine , for the primeval forest , the cold spring hidden away in some unseen spot , which the tramp had marked three years before , and longed to see again , as he might to see his sweetheart , dreaming of the green grass round it and the bird singing in the bush ? As he went on he saw still more inexplicable examples . In prison , of course , there was a great deal he did not see and did not want to see ; he lived as it were with downcast eyes . It was loathsome and unbearable for him to look . But in the end there was much that surprised him and he began , as it were involuntarily , to notice much that he had not suspected before . What surprised him most of all was the terrible impossible gulf that lay between him and all the rest . They seemed to be a different species , and he looked at them and they at him with distrust and hostility . He felt and knew the reasons of his isolation , but he would never have admitted till then that those reasons were so deep and strong . There were some Polish exiles , political prisoners , among them . They simply looked down upon all the rest as ignorant churls ; but Raskolnikov could not look upon them like that . He saw that these ignorant men were in many respects far wiser than the Poles . There were some Russians who were just as contemptuous , a former officer and two seminarists . Raskolnikov saw their mistake as clearly . He was disliked and avoided by everyone ; they even began to hate him at last--why , he could not tell . Men who had been far more guilty despised and laughed at his crime . " You 're a gentleman , " they used to say . " You should n't hack about with an axe ; that 's not a gentleman 's work . " The second week in Lent , his turn came to take the sacrament with his gang . He went to church and prayed with the others . A quarrel broke out one day , he did not know how . All fell on him at once in a fury . " You 're an infidel ! You do n't believe in God , " they shouted . " You ought to be killed . " He had never talked to them about God nor his belief , but they wanted to kill him as an infidel . He said nothing . One of the prisoners rushed at him in a perfect frenzy . Raskolnikov awaited him calmly and silently ; his eyebrows did not quiver , his face did not flinch . The guard succeeded in intervening between him and his assailant , or there would have been bloodshed . There was another question he could not decide : why were they all so fond of Sonia ? She did not try to win their favour ; she rarely met them , sometimes only she came to see him at work for a moment . And yet everybody knew her , they knew that she had come out to follow him , knew how and where she lived . She never gave them money , did them no particular services . Only once at Christmas she sent them all presents of pies and rolls . But by degrees closer relations sprang up between them and Sonia . She would write and post letters for them to their relations . Relations of the prisoners who visited the town , at their instructions , left with Sonia presents and money for them . Their wives and sweethearts knew her and used to visit her . And when she visited Raskolnikov at work , or met a party of the prisoners on the road , they all took off their hats to her . " Little mother Sofya Semyonovna , you are our dear , good little mother , " coarse branded criminals said to that frail little creature . She would smile and bow to them and everyone was delighted when she smiled . They even admired her gait and turned round to watch her walking ; they admired her too for being so little , and , in fact , did not know what to admire her most for . They even came to her for help in their illnesses . He was in the hospital from the middle of Lent till after Easter . When he was better , he remembered the dreams he had had while he was feverish and delirious . He dreamt that the whole world was condemned to a terrible new strange plague that had come to Europe from the depths of Asia . All were to be destroyed except a very few chosen . Some new sorts of microbes were attacking the bodies of men , but these microbes were endowed with intelligence and will . Men attacked by them became at once mad and furious . But never had men considered themselves so intellectual and so completely in possession of the truth as these sufferers , never had they considered their decisions , their scientific conclusions , their moral convictions so infallible . Whole villages , whole towns and peoples went mad from the infection . All were excited and did not understand one another . Each thought that he alone had the truth and was wretched looking at the others , beat himself on the breast , wept , and wrung his hands . They did not know how to judge and could not agree what to consider evil and what good ; they did not know whom to blame , whom to justify . Men killed each other in a sort of senseless spite . They gathered together in armies against one another , but even on the march the armies would begin attacking each other , the ranks would be broken and the soldiers would fall on each other , stabbing and cutting , biting and devouring each other . The alarm bell was ringing all day long in the towns ; men rushed together , but why they were summoned and who was summoning them no one knew . The most ordinary trades were abandoned , because everyone proposed his own ideas , his own improvements , and they could not agree . The land too was abandoned . Men met in groups , agreed on something , swore to keep together , but at once began on something quite different from what they had proposed . They accused one another , fought and killed each other . There were conflagrations and famine . All men and all things were involved in destruction . The plague spread and moved further and further . Only a few men could be saved in the whole world . They were a pure chosen people , destined to found a new race and a new life , to renew and purify the earth , but no one had seen these men , no one had heard their words and their voices . Raskolnikov was worried that this senseless dream haunted his memory so miserably , the impression of this feverish delirium persisted so long . The second week after Easter had come . There were warm bright spring days ; in the prison ward the grating windows under which the sentinel paced were opened . Sonia had only been able to visit him twice during his illness ; each time she had to obtain permission , and it was difficult . But she often used to come to the hospital yard , especially in the evening , sometimes only to stand a minute and look up at the windows of the ward . One evening , when he was almost well again , Raskolnikov fell asleep . On waking up he chanced to go to the window , and at once saw Sonia in the distance at the hospital gate . She seemed to be waiting for someone . Something stabbed him to the heart at that minute . He shuddered and moved away from the window . Next day Sonia did not come , nor the day after ; he noticed that he was expecting her uneasily . At last he was discharged . On reaching the prison he learnt from the convicts that Sofya Semyonovna was lying ill at home and was unable to go out . He was very uneasy and sent to inquire after her ; he soon learnt that her illness was not dangerous . Hearing that he was anxious about her , Sonia sent him a pencilled note , telling him that she was much better , that she had a slight cold and that she would soon , very soon come and see him at his work . His heart throbbed painfully as he read it . Again it was a warm bright day . Early in the morning , at six o'clock , he went off to work on the river bank , where they used to pound alabaster and where there was a kiln for baking it in a shed . There were only three of them sent . One of the convicts went with the guard to the fortress to fetch a tool ; the other began getting the wood ready and laying it in the kiln . Raskolnikov came out of the shed on to the river bank , sat down on a heap of logs by the shed and began gazing at the wide deserted river . From the high bank a broad landscape opened before him , the sound of singing floated faintly audible from the other bank . In the vast steppe , bathed in sunshine , he could just see , like black specks , the nomads ' tents . There there was freedom , there other men were living , utterly unlike those here ; there time itself seemed to stand still , as though the age of Abraham and his flocks had not passed . Raskolnikov sat gazing , his thoughts passed into day-dreams , into contemplation ; he thought of nothing , but a vague restlessness excited and troubled him . Suddenly he found Sonia beside him ; she had come up noiselessly and sat down at his side . It was still quite early ; the morning chill was still keen . She wore her poor old burnous and the green shawl ; her face still showed signs of illness , it was thinner and paler . She gave him a joyful smile of welcome , but held out her hand with her usual timidity . She was always timid of holding out her hand to him and sometimes did not offer it at all , as though afraid he would repel it . He always took her hand as though with repugnance , always seemed vexed to meet her and was sometimes obstinately silent throughout her visit . Sometimes she trembled before him and went away deeply grieved . But now their hands did not part . He stole a rapid glance at her and dropped his eyes on the ground without speaking . They were alone , no one had seen them . The guard had turned away for the time . How it happened he did not know . But all at once something seemed to seize him and fling him at her feet . He wept and threw his arms round her knees . For the first instant she was terribly frightened and she turned pale . She jumped up and looked at him trembling . But at the same moment she understood , and a light of infinite happiness came into her eyes . She knew and had no doubt that he loved her beyond everything and that at last the moment had come . . . . They wanted to speak , but could not ; tears stood in their eyes . They were both pale and thin ; but those sick pale faces were bright with the dawn of a new future , of a full resurrection into a new life . They were renewed by love ; the heart of each held infinite sources of life for the heart of the other . They resolved to wait and be patient . They had another seven years to wait , and what terrible suffering and what infinite happiness before them ! But he had risen again and he knew it and felt it in all his being , while she--she only lived in his life . On the evening of the same day , when the barracks were locked , Raskolnikov lay on his plank bed and thought of her . He had even fancied that day that all the convicts who had been his enemies looked at him differently ; he had even entered into talk with them and they answered him in a friendly way . He remembered that now , and thought it was bound to be so . Was n't everything now bound to be changed ? He thought of her . He remembered how continually he had tormented her and wounded her heart . He remembered her pale and thin little face . But these recollections scarcely troubled him now ; he knew with what infinite love he would now repay all her sufferings . And what were all , all the agonies of the past ! Everything , even his crime , his sentence and imprisonment , seemed to him now in the first rush of feeling an external , strange fact with which he had no concern . But he could not think for long together of anything that evening , and he could not have analysed anything consciously ; he was simply feeling . Life had stepped into the place of theory and something quite different would work itself out in his mind . Under his pillow lay the New Testament . He took it up mechanically . The book belonged to Sonia ; it was the one from which she had read the raising of Lazarus to him . At first he was afraid that she would worry him about religion , would talk about the gospel and pester him with books . But to his great surprise she had not once approached the subject and had not even offered him the Testament . He had asked her for it himself not long before his illness and she brought him the book without a word . Till now he had not opened it . He did not open it now , but one thought passed through his mind : " Can her convictions not be mine now ? Her feelings , her aspirations at least . . . . " She too had been greatly agitated that day , and at night she was taken ill again . But she was so happy--and so unexpectedly happy--that she was almost frightened of her happiness . Seven years , only seven years ! At the beginning of their happiness at some moments they were both ready to look on those seven years as though they were seven days. He did not know that the new life would not be given him for nothing , that he would have to pay dearly for it , that it would cost him great striving , great suffering . But that is the beginning of a new story--the story of the gradual renewal of a man , the story of his gradual regeneration , of his passing from one world into another , of his initiation into a new unknown life . That might be the subject of a new story , but our present story is ended . </text>
<text id="FictDostoyevskyF_CrimePun_II2_EN.txt">
﻿ Part II , Chapter II " And what if there has been a search already ? What if I find them in my room ? " But here was his room . Nothing and no one in it . No one had peeped in . Even Nastasya had not touched it . But heavens ! how could he have left all those things in the hole ? He rushed to the corner , slipped his hand under the paper , pulled the things out and lined his pockets with them . There were eight articles in all : two little boxes with ear-rings or something of the sort , he hardly looked to see ; then four small leather cases . There was a chain , too , merely wrapped in newspaper and something else in newspaper , that looked like a decoration . . . . He put them all in the different pockets of his overcoat , and the remaining pocket of his trousers , trying to conceal them as much as possible . He took the purse , too . Then he went out of his room , leaving the door open . He walked quickly and resolutely , and though he felt shattered , he had his senses about him . He was afraid of pursuit , he was afraid that in another half-hour , another quarter of an hour perhaps , instructions would be issued for his pursuit , and so at all costs , he must hide all traces before then . He must clear everything up while he still had some strength , some reasoning power left him . . . . Where was he to go ? That had long been settled : " Fling them into the canal , and all traces hidden in the water , the thing would be at an end . " So he had decided in the night of his delirium when several times he had had the impulse to get up and go away , to make haste , and get rid of it all . But to get rid of it , turned out to be a very difficult task . He wandered along the bank of the Ekaterininsky Canal for half an hour or more and looked several times at the steps running down to the water , but he could not think of carrying out his plan ; either rafts stood at the steps ' edge , and women were washing clothes on them , or boats were moored there , and people were swarming everywhere . Moreover he could be seen and noticed from the banks on all sides ; it would look suspicious for a man to go down on purpose , stop , and throw something into the water . And what if the boxes were to float instead of sinking ? And of course they would . Even as it was , everyone he met seemed to stare and look round , as if they had nothing to do but to watch him . " Why is it , or can it be my fancy ? " he thought . At last the thought struck him that it might be better to go to the Neva . There were not so many people there , he would be less observed , and it would be more convenient in every way , above all it was further off . He wondered how he could have been wandering for a good half- hour , worried and anxious in this dangerous past without thinking of it before . And that half-hour he had lost over an irrational plan , simply because he had thought of it in delirium ! He had become extremely absent and forgetful and he was aware of it . He certainly must make haste . He walked towards the Neva along V — — Prospect , but on the way another idea struck him . " Why to the Neva ? Would it not be better to go somewhere far off , to the Islands again , and there hide the things in some solitary place , in a wood or under a bush , and mark the spot perhaps ? " And though he felt incapable of clear judgment , the idea seemed to him a sound one . But he was not destined to go there . For coming out of V — — Prospect towards the square , he saw on the left a passage leading between two blank walls to a courtyard . On the right hand , the blank unwhitewashed wall of a four-storied house stretched far into the court ; on the left , a wooden hoarding ran parallel with it for twenty paces into the court , and then turned sharply to the left . Here was a deserted fenced-off place where rubbish of different sorts was lying . At the end of the court , the corner of a low , smutty , stone shed , apparently part of some workshop , peeped from behind the hoarding . It was probably a carriage builder 's or carpenter 's shed ; the whole place from the entrance was black with coal dust . Here would be the place to throw it , he thought . Not seeing anyone in the yard , he slipped in , and at once saw near the gate a sink , such as is often put in yards where there are many workmen or cab-drivers ; and on the hoarding above had been scribbled in chalk the time-honoured witticism , " Standing here strictly forbidden . " This was all the better , for there would be nothing suspicious about his going in . " Here I could throw it all in a heap and get away ! " Looking round once more , with his hand already in his pocket , he noticed against the outer wall , between the entrance and the sink , a big unhewn stone , weighing perhaps sixty pounds . The other side of the wall was a street . He could hear passers-by , always numerous in that part , but he could not be seen from the entrance , unless someone came in from the street , which might well happen indeed , so there was need of haste . He bent down over the stone , seized the top of it firmly in both hands , and using all his strength turned it over . Under the stone was a small hollow in the ground , and he immediately emptied his pocket into it . The purse lay at the top , and yet the hollow was not filled up . Then he seized the stone again and with one twist turned it back , so that it was in the same position again , though it stood a very little higher . But he scraped the earth about it and pressed it at the edges with his foot . Nothing could be noticed . Then he went out , and turned into the square . Again an intense , almost unbearable joy overwhelmed him for an instant , as it had in the police-office . " I have buried my tracks ! And who , who can think of looking under that stone ? It has been lying there most likely ever since the house was built , and will lie as many years more . And if it were found , who would think of me ? It is all over ! No clue ! " And he laughed . Yes , he remembered that he began laughing a thin , nervous noiseless laugh , and went on laughing all the time he was crossing the square . But when he reached the K — — Boulevard where two days before he had come upon that girl , his laughter suddenly ceased . Other ideas crept into his mind . He felt all at once that it would be loathsome to pass that seat on which after the girl was gone , he had sat and pondered , and that it would be hateful , too , to meet that whiskered policeman to whom he had given the twenty copecks : " Damn him ! " He walked , looking about him angrily and distractedly . All his ideas now seemed to be circling round some single point , and he felt that there really was such a point , and that now , now , he was left facing that point—and for the first time , indeed , during the last two months . " Damn it all ! " he thought suddenly , in a fit of ungovernable fury . " If it has begun , then it has begun . Hang the new life ! Good Lord , how stupid it is ! . . . And what lies I told to-day ! How despicably I fawned upon that wretched Ilya Petrovitch ! But that is all folly ! What do I care for them all , and my fawning upon them ! It is not that at all ! It is not that at all ! " Suddenly he stopped ; a new utterly unexpected and exceedingly simple question perplexed and bitterly confounded him . " If it all has really been done deliberately and not idiotically , if I really had a certain and definite object , how is it I did not even glance into the purse and do n't know what I had there , for which I have undergone these agonies , and have deliberately undertaken this base , filthy degrading business ? And here I wanted at once to throw into the water the purse together with all the things which I had not seen either . . . how 's that ? " Yes , that was so , that was all so . Yet he had known it all before , and it was not a new question for him , even when it was decided in the night without hesitation and consideration , as though so it must be , as though it could not possibly be otherwise . . . . Yes , he had known it all , and understood it all ; it surely had all been settled even yesterday at the moment when he was bending over the box and pulling the jewel-cases out of it . . . . Yes , so it was . " It is because I am very ill , " he decided grimly at last , " I have been worrying and fretting myself , and I do n't know what I am doing . . . . Yesterday and the day before yesterday and all this time I have been worrying myself . . . . I shall get well and I shall not worry . . . . But what if I do n't get well at all ? Good God , how sick I am of it all ! " He walked on without resting . He had a terrible longing for some distraction , but he did not know what to do , what to attempt . A new overwhelming sensation was gaining more and more mastery over him every moment ; this was an immeasurable , almost physical , repulsion for everything surrounding him , an obstinate , malignant feeling of hatred . All who met him were loathsome to him—he loathed their faces , their movements , their gestures . If anyone had addressed him , he felt that he might have spat at him or bitten him . . . . He stopped suddenly , on coming out on the bank of the Little Neva , near the bridge to Vassilyevsky Ostrov . " Why , he lives here , in that house , " he thought , " why , I have not come to Razumihin of my own accord ! Here it 's the same thing over again . . . . Very interesting to know , though ; have I come on purpose or have I simply walked here by chance ? Never mind , I said the day before yesterday that I would go and see him the day after ; well , and so I will ! Besides I really cannot go further now . " He went up to Razumihin 's room on the fifth floor . The latter was at home in his garret , busily writing at the moment , and he opened the door himself . It was four months since they had seen each other . Razumihin was sitting in a ragged dressing-gown , with slippers on his bare feet , unkempt , unshaven and unwashed . His face showed surprise . " Is it you ? " he cried . He looked his comrade up and down ; then after a brief pause , he whistled . " As hard up as all that ! Why , brother , you 've cut me out ! " he added , looking at Raskolnikov 's rags . " Come sit down , you are tired , I 'll be bound . " And when he had sunk down on the American leather sofa , which was in even worse condition than his own , Razumihin saw at once that his visitor was ill . " Why , you are seriously ill , do you know that ? " He began feeling his pulse . Raskolnikov pulled away his hand . " Never mind , " he said , " I have come for this : I have no lessons . . . . I wanted , . . . but I do n't really want lessons . . . . " " But I say ! You are delirious , you know ! " Razumihin observed , watching him carefully . " No , I am not . " Raskolnikov got up from the sofa . As he had mounted the stairs to Razumihin 's , he had not realised that he would be meeting his friend face to face . Now , in a flash , he knew , that what he was least of all disposed for at that moment was to be face to face with anyone in the wide world . His spleen rose within him . He almost choked with rage at himself as soon as he crossed Razumihin 's threshold . " Good-bye , " he said abruptly , and walked to the door . " Stop , stop ! You queer fish . " " I do n't want to , " said the other , again pulling away his hand . " Then why the devil have you come ? Are you mad , or what ? Why , this is . . . almost insulting ! I wo n't let you go like that . " " Well , then , I came to you because I know no one but you who could help . . . to begin . . . because you are kinder than anyone — cleverer , I mean , and can judge . . . and now I see that I want nothing . Do you hear ? Nothing at all . . . no one 's services . . . no one 's sympathy . I am by myself . . . alone . Come , that 's enough . Leave me alone . " " Stay a minute , you sweep ! You are a perfect madman . As you like for all I care . I have no lessons , do you see , and I do n't care about that , but there 's a bookseller , Heruvimov—and he takes the place of a lesson . I would not exchange him for five lessons . He 's doing publishing of a kind , and issuing natural science manuals and what a circulation they have ! The very titles are worth the money ! You always maintained that I was a fool , but by Jove , my boy , there are greater fools than I am ! Now he is setting up for being advanced , not that he has an inkling of anything , but , of course , I encourage him . Here are two signatures of the German text—in my opinion , the crudest charlatanism ; it discusses the question , 'Is woman a human being ? ' And , of course , triumphantly proves that she is . Heruvimov is going to bring out this work as a contribution to the woman question ; I am translating it ; he will expand these two and a half signatures into six , we shall make up a gorgeous title half a page long and bring it out at half a rouble . It will do ! He pays me six roubles the signature , it works out to about fifteen roubles for the job , and I 've had six already in advance . When we have finished this , we are going to begin a translation about whales , and then some of the dullest scandals out of the second part of Les Confessions we have marked for translation ; somebody has told Heruvimov , that Rousseau was a kind of Radishchev . You may be sure I do n't contradict him , hang him ! Well , would you like to do the second signature of 'Is woman a human being ? ' If you would , take the German and pens and paper—all those are provided , and take three roubles ; for as I have had six roubles in advance on the whole thing , three roubles come to you for your share . And when you have finished the signature there will be another three roubles for you . And please do n't think I am doing you a service ; quite the contrary , as soon as you came in , I saw how you could help me ; to begin with , I am weak in spelling , and secondly , I am sometimes utterly adrift in German , so that I make it up as I go along for the most part . The only comfort is , that it 's bound to be a change for the better . Though who can tell , maybe it 's sometimes for the worse . Will you take it ? " Raskolnikov took the German sheets in silence , took the three roubles and without a word went out . Razumihin gazed after him in astonishment . But when Raskolnikov was in the next street , he turned back , mounted the stairs to Razumihin 's again and laying on the table the German article and the three roubles , went out again , still without uttering a word . " Are you raving , or what ? " Razumihin shouted , roused to fury at last . " What farce is this ? You 'll drive me crazy too . . . what did you come to see me for , damn you ? " " I do n't want . . . translation , " muttered Raskolnikov from the stairs . " Then what the devil do you want ? " shouted Razumihin from above . Raskolnikov continued descending the staircase in silence . " Hey , there ! Where are you living ? " No answer . " Well , confound you then ! " But Raskolnikov was already stepping into the street . On the Nikolaevsky Bridge he was roused to full consciousness again by an unpleasant incident . A coachman , after shouting at him two or three times , gave him a violent lash on the back with his whip , for having almost fallen under his horses ' hoofs . The lash so infuriated him that he dashed away to the railing ( for some unknown reason he had been walking in the very middle of the bridge in the traffic ) . He angrily clenched and ground his teeth . He heard laughter , of course . " Serves him right ! " " A pickpocket I dare say . " " Pretending to be drunk , for sure , and getting under the wheels on purpose ; and you have to answer for him . " " It 's a regular profession , that 's what it is . " But while he stood at the railing , still looking angry and bewildered after the retreating carriage , and rubbing his back , he suddenly felt someone thrust money into his hand . He looked . It was an elderly woman in a kerchief and goatskin shoes , with a girl , probably her daughter wearing a hat , and carrying a green parasol . " Take it , my good man , in Christ 's name . " He took it and they passed on . It was a piece of twenty copecks . From his dress and appearance they might well have taken him for a beggar asking alms in the streets , and the gift of the twenty copecks he doubtless owed to the blow , which made them feel sorry for him . He closed his hand on the twenty copecks , walked on for ten paces , and turned facing the Neva , looking towards the palace . The sky was without a cloud and the water was almost bright blue , which is so rare in the Neva . The cupola of the cathedral , which is seen at its best from the bridge about twenty paces from the chapel , glittered in the sunlight , and in the pure air every ornament on it could be clearly distinguished . The pain from the lash went off , and Raskolnikov forgot about it ; one uneasy and not quite definite idea occupied him now completely . He stood still , and gazed long and intently into the distance ; this spot was especially familiar to him . When he was attending the university , he had hundreds of times—generally on his way home—stood still on this spot , gazed at this truly magnificent spectacle and almost always marvelled at a vague and mysterious emotion it roused in him . It left him strangely cold ; this gorgeous picture was for him blank and lifeless . He wondered every time at his sombre and enigmatic impression and , mistrusting himself , put off finding the explanation of it . He vividly recalled those old doubts and perplexities , and it seemed to him that it was no mere chance that he recalled them now . It struck him as strange and grotesque , that he should have stopped at the same spot as before , as though he actually imagined he could think the same thoughts , be interested in the same theories and pictures that had interested him . . . so short a time ago . He felt it almost amusing , and yet it wrung his heart . Deep down , hidden far away out of sight all that seemed to him now—all his old past , his old thoughts , his old problems and theories , his old impressions and that picture and himself and all , all . . . . He felt as though he were flying upwards , and everything were vanishing from his sight . Making an unconscious movement with his hand , he suddenly became aware of the piece of money in his fist . He opened his hand , stared at the coin , and with a sweep of his arm flung it into the water ; then he turned and went home . It seemed to him , he had cut himself off from everyone and from everything at that moment . Evening was coming on when he reached home , so that he must have been walking about six hours . How and where he came back he did not remember . Undressing , and quivering like an overdriven horse , he lay down on the sofa , drew his greatcoat over him , and at once sank into oblivion . . . . It was dusk when he was waked up by a fearful scream . Good God , what a scream ! Such unnatural sounds , such howling , wailing , grinding , tears , blows and curses he had never heard . He could never have imagined such brutality , such frenzy . In terror he sat up in bed , almost swooning with agony . But the fighting , wailing and cursing grew louder and louder . And then to his intense amazement he caught the voice of his landlady . She was howling , shrieking and wailing , rapidly , hurriedly , incoherently , so that he could not make out what she was talking about ; she was beseeching , no doubt , not to be beaten , for she was being mercilessly beaten on the stairs . The voice of her assailant was so horrible from spite and rage that it was almost a croak ; but he , too , was saying something , and just as quickly and indistinctly , hurrying and spluttering . All at once Raskolnikov trembled ; he recognised the voice—it was the voice of Ilya Petrovitch . Ilya Petrovitch here and beating the landlady ! He is kicking her , banging her head against the steps—that 's clear , that can be told from the sounds , from the cries and the thuds . How is it , is the world topsy-turvy ? He could hear people running in crowds from all the storeys and all the staircases ; he heard voices , exclamations , knocking , doors banging . " But why , why , and how could it be ? " he repeated , thinking seriously that he had gone mad . But no , he heard too distinctly ! And they would come to him then next , " for no doubt . . . it 's all about that . . . about yesterday . . . . Good God ! " He would have fastened his door with the latch , but he could not lift his hand . . . besides , it would be useless . Terror gripped his heart like ice , tortured him and numbed him . . . . But at last all this uproar , after continuing about ten minutes , began gradually to subside . The landlady was moaning and groaning ; Ilya Petrovitch was still uttering threats and curses . . . . But at last he , too , seemed to be silent , and now he could not be heard . " Can he have gone away ? Good Lord ! " Yes , and now the landlady is going too , still weeping and moaning . . . and then her door slammed . . . . Now the crowd was going from the stairs to their rooms , exclaiming , disputing , calling to one another , raising their voices to a shout , dropping them to a whisper . There must have been numbers of them—almost all the inmates of the block . " But , good God , how could it be ! And why , why had he come here ! " Raskolnikov sank worn out on the sofa , but could not close his eyes . He lay for half an hour in such anguish , such an intolerable sensation of infinite terror as he had never experienced before . Suddenly a bright light flashed into his room . Nastasya came in with a candle and a plate of soup . Looking at him carefully and ascertaining that he was not asleep , she set the candle on the table and began to lay out what she had brought—bread , salt , a plate , a spoon . " You 've eaten nothing since yesterday , I warrant . You 've been trudging about all day , and you 're shaking with fever . " " Nastasya . . . what were they beating the landlady for ? " She looked intently at him . " Who beat the landlady ? " " Just now . . . half an hour ago , Ilya Petrovitch , the assistant superintendent , on the stairs . . . . Why was he ill-treating her like that , and . . . why was he here ? " Nastasya scrutinised him , silent and frowning , and her scrutiny lasted a long time . He felt uneasy , even frightened at her searching eyes . " Nastasya , why do n't you speak ? " he said timidly at last in a weak voice . " It 's the blood , " she answered at last softly , as though speaking to herself . " Blood ? What blood ? " he muttered , growing white and turning towards the wall . Nastasya still looked at him without speaking . " Nobody has been beating the landlady , " she declared at last in a firm , resolute voice . He gazed at her , hardly able to breathe . " I heard it myself . . . . I was not asleep . . . I was sitting up , " he said still more timidly . " I listened a long while . The assistant superintendent came . . . . Everyone ran out on to the stairs from all the flats . " " No one has been here . That 's the blood crying in your ears . When there 's no outlet for it and it gets clotted , you begin fancying things . . . . Will you eat something ? " He made no answer . Nastasya still stood over him , watching him . " Give me something to drink . . . Nastasya . " She went downstairs and returned with a white earthenware jug of water . He remembered only swallowing one sip of the cold water and spilling some on his neck . Then followed forgetfulness . </text>
<text id="FictDumasAp_3Musk_11_EN.txt">
﻿ 11 IN WHICH THE PLOT THICKENS His visit to M. de Treville being paid , the pensive d'Artagnan took the longest way homeward . On what was d'Artagnan thinking , that he strayed thus from his path , gazing at the stars of heaven , and sometimes sighing , sometimes smiling ? He was thinking of Mme . Bonacieux . For an apprentice Musketeer the young woman was almost an ideal of love . Pretty , mysterious , initiated in almost all the secrets of the court , which reflected such a charming gravity over her pleasing features , it might be surmised that she was not wholly unmoved ; and this is an irresistible charm to novices in love . Moreover , d'Artagnan had delivered her from the hands of the demons who wished to search and ill treat her ; and this important service had established between them one of those sentiments of gratitude which so easily assume a more tender character . D'Artagnan already fancied himself , so rapid is the flight of our dreams upon the wings of imagination , accosted by a messenger from the young woman , who brought him some billet appointing a meeting , a gold chain , or a diamond . We have observed that young cavaliers received presents from their king without shame . Let us add that in these times of lax morality they had no more delicacy with respect to the mistresses ; and that the latter almost always left them valuable and durable remembrances , as if they essayed to conquer the fragility of their sentiments by the solidity of their gifts . Without a blush , men made their way in the world by the means of women blushing . Such as were only beautiful gave their beauty , whence , without doubt , comes the proverb , " The most beautiful girl in the world can only give what she has . " Such as were rich gave in addition a part of their money ; and a vast number of heroes of that gallant period may be cited who would neither have won their spurs in the first place , nor their battles afterward , without the purse , more or less furnished , which their mistress fastened to the saddle bow . D'Artagnan owned nothing . Provincial diffidence , that slight varnish , the ephemeral flower , that down of the peach , had evaporated to the winds through the little orthodox counsels which the three Musketeers gave their friend . D'Artagnan , following the strange custom of the times , considered himself at Paris as on a campaign , neither more nor less than if he had been in Flanders--Spain yonder , woman here . In each there was an enemy to contend with , and contributions to be levied . But , we must say , at the present moment d'Artagnan was ruled by a feeling much more noble and disinterested . The mercer had said that he was rich ; the young man might easily guess that with so weak a man as M. Bonacieux ; and interest was almost foreign to this commencement of love , which had been the consequence of it . We say ALMOST , for the idea that a young , handsome , kind , and witty woman is at the same time rich takes nothing from the beginning of love , but on the contrary strengthens it . There are in affluence a crowd of aristocratic cares and caprices which are highly becoming to beauty . A fine and white stocking , a silken robe , a lace kerchief , a pretty slipper on the foot , a tasty ribbon on the head do not make an ugly woman pretty , but they make a pretty woman beautiful , without reckoning the hands , which gain by all this ; the hands , among women particularly , to be beautiful must be idle . Then d'Artagnan , as the reader , from whom we have not concealed the state of his fortune , very well knows--d'Artagnan was not a millionaire ; he hoped to become one someday , but the time which in his own mind he fixed upon for this happy change was still far distant . In the meanwhile , how disheartening to see the woman one loves long for those thousands of nothings which constitute a woman 's happiness , and be unable to give her those thousands of nothings . At least , when the woman is rich and the lover is not , that which he cannot offer she offers to herself ; and although it is generally with her husband 's money that she procures herself this indulgence , the gratitude for it seldom reverts to him . Then d'Artagnan , disposed to become the most tender of lovers , was at the same time a very devoted friend , In the midst of his amorous projects for the mercer 's wife , he did not forget his friends . The pretty Mme . Bonacieux was just the woman to walk with in the Plain St. Denis or in the fair of St. Germain , in company with Athos , Porthos , and Aramis , to whom d'Artagnan had often remarked this . Then one could enjoy charming little dinners , where one touches on one side the hand of a friend , and on the other the foot of a mistress . Besides , on pressing occasions , in extreme difficulties , d'Artagnan would become the preserver of his friends . And M. Bonacieux ? whom d'Artagnan had pushed into the hands of the officers , denying him aloud although he had promised in a whisper to save him . We are compelled to admit to our readers that d'Artagnan thought nothing about him in any way ; or that if he did think of him , it was only to say to himself that he was very well where he was , wherever it might be . Love is the most selfish of all the passions . Let our readers reassure themselves . IF d'Artagnan forgets his host , or appears to forget him , under the pretense of not knowing where he has been carried , we will not forget him , and we know where he is . But for the moment , let us do as did the amorous Gascon ; we will see after the worthy mercer later . D'Artagnan , reflecting on his future amours , addressing himself to the beautiful night , and smiling at the stars , ascended the Rue Cherish-Midi , or Chase-Midi , as it was then called . As he found himself in the quarter in which Aramis lived , he took it into his head to pay his friend a visit in order to explain the motives which had led him to send Planchet with a request that he would come instantly to the mousetrap . Now , if Aramis had been at home when Planchet came to his abode , he had doubtless hastened to the Rue des Fossoyeurs , and finding nobody there but his other two companions perhaps , they would not be able to conceive what all this meant . This mystery required an explanation ; at least , so d'Artagnan declared to himself . He likewise thought this was an opportunity for talking about pretty little Mme . Bonacieux , of whom his head , if not his heart , was already full . We must never look for discretion in first love . First love is accompanied by such excessive joy that unless the joy be allowed to overflow , it will stifle you . Paris for two hours past had been dark , and seemed a desert . Eleven o'clock sounded from all the clocks of the Faubourg St. Germain . It was delightful weather . D'Artagnan was passing along a lane on the spot where the Rue d'Assas is now situated , breathing the balmy emanations which were borne upon the wind from the Rue de Vaugirard , and which arose from the gardens refreshed by the dews of evening and the breeze of night . From a distance resounded , deadened , however , by good shutters , the songs of the tipplers , enjoying themselves in the cabarets scattered along the plain . Arrived at the end of the lane , d'Artagnan turned to the left . The house in which Aramis dwelt was situated between the Rue Cassette and the Rue Servandoni . D'Artagnan had just passed the Rue Cassette , and already perceived the door of his friend 's house , shaded by a mass of sycamores and clematis which formed a vast arch opposite the front of it , when he perceived something like a shadow issuing from the Rue Servandoni . This something was enveloped in a cloak , and d'Artagnan at first believed it was a man ; but by the smallness of the form , the hesitation of the walk , and the indecision of the step , he soon discovered that it was a woman . Further , this woman , as if not certain of the house she was seeking , lifted up her eyes to look around her , stopped , went backward , and then returned again . D'Artagnan was perplexed . " Shall I go and offer her my services ? " thought he . " By her step she must be young ; perhaps she is pretty . Oh , yes ! But a woman who wanders in the streets at this hour only ventures out to meet her lover . If I should disturb a rendezvous , that would not be the best means of commencing an acquaintance . " Meantime the young woman continued to advance , counting the houses and windows . This was neither long nor difficult . There were but three hotels in this part of the street ; and only two windows looking toward the road , one of which was in a pavilion parallel to that which Aramis occupied , the other belonging to Aramis himself . " PARIDIEU ! " said d'Artagnan to himself , to whose mind the niece of the theologian reverted , " PARDIEU , it would be droll if this belated dove should be in search of our friend 's house . But on my soul , it looks so . Ah , my dear Aramis , this time I shall find you out . " And d'Artagnan , making himself as small as he could , concealed himself in the darkest side of the street near a stone bench placed at the back of a niche . The young woman continued to advance ; and in addition to the lightness of her step , which had betrayed her , she emitted a little cough which denoted a sweet voice . D'Artagnan believed this cough to be a signal . Nevertheless , whether the cough had been answered by a similar signal which had fixed the irresolution of the nocturnal seeker , or whether without this aid she saw that she had arrived at the end of her journey , she resolutely drew near to Aramis 's shutter , and tapped , at three equal intervals , with her bent finger . " This is all very fine , dear Aramis , " murmured d'Artagnan . " Ah , Monsieur Hypocrite , I understand how you study theology . " The three blows were scarcely struck , when the inside blind was opened and a light appeared through the panes of the outside shutter . " Ah , ah ! " said the listener , " not through doors , but through windows ! Ah , this visit was expected . We shall see the windows open , and the lady enter by escalade . Very pretty ! " But to the great astonishment of d'Artagnan , the shutter remained closed . Still more , the light which had shone for an instant disappeared , and all was again in obscurity . D'Artagnan thought this could not last long , and continued to look with all his eyes and listen with all his ears . He was right ; at the end of some seconds two sharp taps were heard inside . The young woman in the street replied by a single tap , and the shutter was opened a little way . It may be judged whether d'Artagnan looked or listened with avidity . Unfortunately the light had been removed into another chamber ; but the eyes of the young man were accustomed to the night . Besides , the eyes of the Gascons have , as it is asserted , like those of cats , the faculty of seeing in the dark . D'Artagnan then saw that the young woman took from her pocket a white object , which she unfolded quickly , and which took the form of a handkerchief . She made her interlocutor observe the corner of this unfolded object . This immediately recalled to d'Artagnan 's mind the handkerchief which he had found at the feet of Mme . Bonacieux , which had reminded him of that which he had dragged from under the feet of Aramis . " What the devil could that handkerchief signify ? " Placed where he was , d'Artagnan could not perceive the face of Aramis . We say Aramis , because the young man entertained no doubt that it was his friend who held this dialogue from the interior with the lady of the exterior . Curiosity prevailed over prudence ; and profiting by the preoccupation into which the sight of the handkerchief appeared to have plunged the two personages now on the scene , he stole from his hiding place , and quick as lightning , but stepping with utmost caution , he ran and placed himself close to the angle of the wall , from which his eye could pierce the interior of Aramis 's room . Upon gaining this advantage d'Artagnan was near uttering a cry of surprise ; it was not Aramis who was conversing with the nocturnal visitor , it was a woman ! D'Artagnan , however , could only see enough to recognize the form of her vestments , not enough to distinguish her features . At the same instant the woman inside drew a second handkerchief from her pocket , and exchanged it for that which had just been shown to her . Then some words were spoken by the two women . At length the shutter closed . The woman who was outside the window turned round , and passed within four steps of d'Artagnan , pulling down the hood of her mantle ; but the precaution was too late , d'Artagnan had already recognized Mme . Bonacieux . Mme . Bonacieux ! The suspicion that it was she had crossed the mind of d'Artagnan when she drew the handkerchief from her pocket ; but what probability was there that Mme . Bonacieux , who had sent for M. Laporte in order to be reconducted to the Louvre , should be running about the streets of Paris at half past eleven at night , at the risk of being abducted a second time ? This must be , then , an affair of importance ; and what is the most important affair to a woman of twenty-five ! Love . But was it on her own account , or on account of another , that she exposed herself to such hazards ? This was a question the young man asked himself , whom the demon of jealousy already gnawed , being in heart neither more nor less than an accepted lover . There was a very simple means of satisfying himself whither Mme . Bonacieux was going ; that was to follow her . This method was so simple that d'Artagnan employed it quite naturally and instinctively . But at the sight of the young man , who detached himself from the wall like a statue walking from its niche , and at the noise of the steps which she heard resound behind her , Mme . Bonacieux uttered a little cry and fled . D'Artagnan ran after her . It was not difficult for him to overtake a woman embarrassed with her cloak . He came up with her before she had traversed a third of the street . The unfortunate woman was exhausted , not by fatigue , but by terror , and when d'Artagnan placed his hand upon her shoulder , she sank upon one knee , crying in a choking voice , " Kill me , if you please , you shall know nothing ! " D'Artagnan raised her by passing his arm round her waist ; but as he felt by her weight she was on the point of fainting , he made haste to reassure her by protestations of devotedness . These protestations were nothing for Mme . Bonacieux , for such protestations may be made with the worst intentions in the world ; but the voice was all . Mme . Bonacieux thought she recognized the sound of that voice ; she reopened her eyes , cast a quick glance upon the man who had terrified her so , and at once perceiving it was d'Artagnan , she uttered a cry of joy , " Oh , it is you , it is you ! Thank God , thank God ! " " Yes , it is I , " said d'Artagnan , " it is I , whom God has sent to watch over you . " " Was it with that intention you followed me ? " asked the young woman , with a coquettish smile , whose somewhat bantering character resumed its influence , and with whom all fear had disappeared from the moment in which she recognized a friend in one she had taken for an enemy . " No , " said d'Artagnan ; " no , I confess it . It was chance that threw me in your way ; I saw a woman knocking at the window of one of my friends . " " One of your friends ? " interrupted Mme . Bonacieux . " Without doubt ; Aramis is one of my best friends . " " Aramis ! Who is he ? " " Come , come , you wo n't tell me you do n't know Aramis ? " " This is the first time I ever heard his name pronounced . " " It is the first time , then , that you ever went to that house ? " " Undoubtedly . " " And you did not know that it was inhabited by a young man ? " " No. " " By a Musketeer ? " " No , indeed ! " " It was not he , then , you came to seek ? " " Not the least in the world . Besides , you must have seen that the person to whom I spoke was a woman . " " That is true ; but this woman is a friend of Aramis-- " " I know nothing of that . " " --since she lodges with him . " " That does not concern me . " " But who is she ? " " Oh , that is not my secret . " " My dear Madame Bonacieux , you are charming ; but at the same time you are one of the most mysterious women . " " Do I lose by that ? " " No ; you are , on the contrary , adorable . " " Give me your arm , then . " " Most willingly . And now ? " " Now escort me . " " Where ? " " Where I am going . " " But where are you going ? " " You will see , because you will leave me at the door . " " Shall I wait for you ? " " That will be useless . " " You will return alone , then ? " " Perhaps yes , perhaps no . " " But will the person who shall accompany you afterward be a man or a woman ? " " I do n't know yet . " " But I will know it ! " " How so ? " " I will wait until you come out . " " In that case , adieu . " " Why so ? " " I do not want you . " " But you have claimed-- " " The aid of a gentleman , not the watchfulness of a spy . " " The word is rather hard . " " How are they called who follow others in spite of them ? " " They are indiscreet . " " The word is too mild . " " Well , madame , I perceive I must do as you wish . " " Why did you deprive yourself of the merit of doing so at once ? " " Is there no merit in repentance ? " " And do you really repent ? " " I know nothing about it myself . But what I know is that I promise to do all you wish if you allow me to accompany you where you are going . " " And you will leave me then ? " " Yes . " " Without waiting for my coming out again ? " " Yes . " " Word of honor ? " " By the faith of a gentleman . Take my arm , and let us go . " D'Artagnan offered his arm to Mme . Bonacieux , who willingly took it , half laughing , half trembling , and both gained the top of Rue de la Harpe . Arriving there , the young woman seemed to hesitate , as she had before done in the Rue Vaugirard . She seemed , however , by certain signs , to recognize a door , and approaching that door , " And now , monsieur , " said she , " it is here I have business ; a thousand thanks for your honorable company , which has saved me from all the dangers to which , alone I was exposed . But the moment is come to keep your word ; I have reached my destination . " " And you will have nothing to fear on your return ? " " I shall have nothing to fear but robbers . " " And that is nothing ? " " What could they take from me ? I have not a penny about me . " " You forget that beautiful handkerchief with the coat of arms . " " Which ? " " That which I found at your feet , and replaced in your pocket . " " Hold your tongue , imprudent man ! Do you wish to destroy me ? " " You see very plainly that there is still danger for you , since a single word makes you tremble ; and you confess that if that word were heard you would be ruined . Come , come , madame ! " cried d'Artagnan , seizing her hands , and surveying her with an ardent glance , " come , be more generous . Confide in me . Have you not read in my eyes that there is nothing but devotion and sympathy in my heart ? " " Yes , " replied Mme . Bonacieux ; " therefore , ask my own secrets , and I will reveal them to you ; but those of others--that is quite another thing . " " Very well , " said d'Artagnan , " I shall discover them ; as these secrets may have an influence over your life , these secrets must become mine . " " Beware of what you do ! " cried the young woman , in a manner so serious as to make d'Artagnan start in spite of himself . " Oh , meddle in nothing which concerns me . Do not seek to assist me in that which I am accomplishing . This I ask of you in the name of the interest with which I inspire you , in the name of the service you have rendered me and which I never shall forget while I have life . Rather , place faith in what I tell you . Have no more concern about me ; I exist no longer for you , any more than if you had never seen me . " " Must Aramis do as much as I , madame ? " said d'Artagnan , deeply piqued . " This is the second or third time , monsieur , that you have repeated that name , and yet I have told you that I do not know him . " " You do not know the man at whose shutter you have just knocked ? Indeed , madame , you believe me too credulous ! " " Confess that it is for the sake of making me talk that you invent this story and create this personage . " " I invent nothing , madame ; I create nothing . I only speak that exact truth . " " And you say that one of your friends lives in that house ? " " I say so , and I repeat it for the third time ; that house is one inhabited by my friend , and that friend is Aramis . " " All this will be cleared up at a later period , " murmured the young woman ; " no , monsieur , be silent . " " If you could see my heart , " said d'Artagnan , " you would there read so much curiosity that you would pity me and so much love that you would instantly satisfy my curiosity . We have nothing to fear from those who love us . " " You speak very suddenly of love , monsieur , " said the young woman , shaking her head . " That is because love has come suddenly upon me , and for the first time ; and because I am only twenty . " The young woman looked at him furtively . " Listen ; I am already upon the scent , " resumed d'Artagnan . " About three months ago I was near having a duel with Aramis concerning a handkerchief resembling the one you showed to the woman in his house--for a handkerchief marked in the same manner , I am sure . " " Monsieur , " said the young woman , " you weary me very much , I assure you , with your questions . " " But you , madame , prudent as you are , think , if you were to be arrested with that handkerchief , and that handkerchief were to be seized , would you not be compromised ? " " In what way ? The initials are only mine--C . B. , Constance Bonacieux . " " Or Camille de Bois-Tracy . " " Silence , monsieur ! Once again , silence ! Ah , since the dangers I incur on my own account cannot stop you , think of those you may yourself run ! " " Me ? " " Yes ; there is peril of imprisonment , risk of life in knowing me . " " Then I will not leave you . " " Monsieur ! " said the young woman , supplicating him and clasping her hands together , " monsieur , in the name of heaven , by the honor of a soldier , by the courtesy of a gentleman , depart ! There , there midnight sounds ! That is the hour when I am expected . " " Madame , " said the young man , bowing ; " I can refuse nothing asked of me thus . Be content ; I will depart . " " But you will not follow me ; you will not watch me ? " " I will return home instantly . " " Ah , I was quite sure you were a good and brave young man , " said Mme . Bonacieux , holding out her hand to him , and placing the other upon the knocker of a little door almost hidden in the wall . D'Artagnan seized the hand held out to him , and kissed it ardently . " Ah ! I wish I had never seen you ! " cried d'Artagnan , with that ingenuous roughness which women often prefer to the affectations of politeness , because it betrays the depths of the thought and proves that feeling prevails over reason . " Well ! " resumed Mme . Bonacieux , in a voice almost caressing , and pressing the hand of d'Artagnan , who had not relinquished hers , " well : I will not say as much as you do ; what is lost for today may not be lost forever . Who knows , when I shall be at liberty , that I may not satisfy your curiosity ? " " And will you make the same promise to my love ? " cried d'Artagnan , beside himself with joy . " Oh , as to that , I do not engage myself . That depends upon the sentiments with which you may inspire me . " " Then today , madame-- " " Oh , today , I am no further than gratitude . " " Ah ! You are too charming , " said d'Artagnan , sorrowfully ; " and you abuse my love . " " No , I use your generosity , that 's all . But be of good cheer ; with certain people , everything comes round . " " Oh , you render me the happiest of men ! Do not forget this evening--do not forget that promise . " " Be satisfied . In the proper time and place I will remember everything . Now then , go , go , in the name of heaven ! I was expected at sharp midnight , and I am late . " " By five minutes . " " Yes ; but in certain circumstances five minutes are five ages . " " When one loves . " " Well ! And who told you I had no affair with a lover ? " " It is a man , then , who expects you ? " cried d'Artagnan . " A man ! " " The discussion is going to begin again ! " said Mme . Bonacieux , with a half-smile which was not exempt from a tinge of impatience . " No , no ; I go , I depart ! I believe in you , and I would have all the merit of my devotion , even if that devotion were stupidity . Adieu , madame , adieu ! " And as if he only felt strength to detach himself by a violent effort from the hand he held , he sprang away , running , while Mme . Bonacieux knocked , as at the shutter , three light and regular taps . When he had gained the angle of the street , he turned . The door had been opened , and shut again ; the mercer 's pretty wife had disappeared . D'Artagnan pursued his way . He had given his word not to watch Mme . Bonacieux , and if his life had depended upon the spot to which she was going or upon the person who should accompany her , d'Artagnan would have returned home , since he had so promised . Five minutes later he was in the Rue des Fossoyeurs . " Poor Athos ! " said he ; " he will never guess what all this means . He will have fallen asleep waiting for me , or else he will have returned home , where he will have learned that a woman had been there . A woman with Athos ! After all , " continued d'Artagnan , " there was certainly one with Aramis . All this is very strange ; and I am curious to know how it will end . " " Badly , monsieur , badly ! " replied a voice which the young man recognized as that of Planchet ; for , soliloquizing aloud , as very preoccupied people do , he had entered the alley , at the end of which were the stairs which led to his chamber . " How badly ? What do you mean by that , you idiot ? " asked d'Artagnan . " What has happened ? " " All sorts of misfortunes . " " What ? " " In the first place , Monsieur Athos is arrested . " " Arrested ! Athos arrested ! What for ? " " He was found in your lodging ; they took him for you . " " And by whom was he arrested ? " " By Guards brought by the men in black whom you put to flight . " " Why did he not tell them his name ? Why did he not tell them he knew nothing about this affair ? " " He took care not to do so , monsieur ; on the contrary , he came up to me and said , 'It is your master that needs his liberty at this moment and not I , since he knows everything and I know nothing . They will believe he is arrested , and that will give him time ; in three days I will tell them who I am , and they cannot fail to let me go . ' " " Bravo , Athos ! Noble heart ! " murmured d'Artagnan . " I know him well there ! And what did the officers do ? " " Four conveyed him away , I do n't know where--to the Bastille or Fort l'Eveque . Two remained with the men in black , who rummaged every place and took all the papers . The last two mounted guard at the door during this examination ; then , when all was over , they went away , leaving the house empty and exposed . " " And Porthos and Aramis ? " " I could not find them ; they did not come . " " But they may come any moment , for you left word that I awaited them ? " " Yes , monsieur . " " Well , do n't budge , then ; if they come , tell them what has happened . Let them wait for me at the Pomme-de-Pin . Here it would be dangerous ; the house may be watched . I will run to Monsieur de Treville to tell them all this , and will meet them there . " " Very well , monsieur , " said Planchet . " But you will remain ; you are not afraid ? " said d'Artagnan , coming back to recommend courage to his lackey . " Be easy , monsieur , " said Planchet ; " you do not know me yet . I am brave when I set about it . It is all in beginning . Besides , I am a Picard . " " Then it is understood , " said d'Artagnan ; " you would rather be killed than desert your post ? " " Yes , monsieur ; and there is nothing I would not do to prove to Monsieur that I am attached to him . " " Good ! " said d'Artagnan to himself . " It appears that the method I have adopted with this boy is decidedly the best . I shall use it again upon occasion . " And with all the swiftness of his legs , already a little fatigued however , with the perambulations of the day , d'Artagnan directed his course toward M. de Treville 's . M. de Treville was not at his hotel . His company was on guard at the Louvre ; he was at the Louvre with his company . It was necessary to reach M. de Treville ; it was important that he should be informed of what was passing . D'Artagnan resolved to try and enter the Louvre . His costume of Guardsman in the company of M. Dessessart ought to be his passport . He therefore went down the Rue des Petits Augustins , and came up to the quay , in order to take the New Bridge . He had at first an idea of crossing by the ferry ; but on gaining the riverside , he had mechanically put his hand into his pocket , and perceived that he had not wherewithal to pay his passage . As he gained the top of the Rue Guenegaud , he saw two persons coming out of the Rue Dauphine whose appearance very much struck him . Of the two persons who composed this group , one was a man and the other a woman . The woman had the outline of Mme . Bonacieux ; the man resembled Aramis so much as to be mistaken for him . Besides , the woman wore that black mantle which d'Artagnan could still see outlined on the shutter of the Rue de Vaugirard and on the door of the Rue de la Harpe ; still further , the man wore the uniform of a Musketeer . The woman 's hood was pulled down , and the man held a handkerchief to his face . Both , as this double precaution indicated , had an interest in not being recognized . They took the bridge . That was d'Artagnan 's road , as he was going to the Louvre . D'Artagnan followed them . He had not gone twenty steps before he became convinced that the woman was really Mme . Bonacieux and that the man was Aramis . He felt at that instant all the suspicions of jealousy agitating his heart . He felt himself doubly betrayed , by his friend and by her whom he already loved like a mistress . Mme . Bonacieux had declared to him , by all the gods , that she did not know Aramis ; and a quarter of an hour after having made this assertion , he found her hanging on the arm of Aramis . D'Artagnan did not reflect that he had only known the mercer 's pretty wife for three hours ; that she owed him nothing but a little gratitude for having delivered her from the men in black , who wished to carry her off , and that she had promised him nothing . He considered himself an outraged , betrayed , and ridiculed lover . Blood and anger mounted to his face ; he was resolved to unravel the mystery . The young man and young woman perceived they were watched , and redoubled their speed . D'Artagnan determined upon his course . He passed them , then returned so as to meet them exactly before the Samaritaine . Which was illuminated by a lamp which threw its light over all that part of the bridge . D'Artagnan stopped before them , and they stopped before him . " What do you want , monsieur ? " demanded the Musketeer , recoiling a step , and with a foreign accent , which proved to d'Artagnan that he was deceived in one of his conjectures . " It is not Aramis ! " cried he . " No , monsieur , it is not Aramis ; and by your exclamation I perceive you have mistaken me for another , and pardon you . " " You pardon me ? " cried d'Artagnan . " Yes , " replied the stranger . " Allow me , then , to pass on , since it is not with me you have anything to do . " " You are right , monsieur , it is not with you that I have anything to do ; it is with Madame . " " With Madame ! You do not know her , " replied the stranger . " You are deceived , monsieur ; I know her very well . " " Ah , " said Mme . Bonacieux ; in a tone of reproach , " ah , monsieur , I had your promise as a soldier and your word as a gentleman . I hoped to be able to rely upon that . " " And I , madame ! " said d'Artagnan , embarrassed ; " you promised me-- " " Take my arm , madame , " said the stranger , " and let us continue our way . " D'Artagnan , however , stupefied , cast down , annihilated by all that happened , stood , with crossed arms , before the Musketeer and Mme . Bonacieux . The Musketeer advanced two steps , and pushed d'Artagnan aside with his hand . D'Artagnan made a spring backward and drew his sword . At the same time , and with the rapidity of lightning , the stranger drew his . " In the name of heaven , my Lord ! " cried Mme . Bonacieux , throwing herself between the combatants and seizing the swords with her hands . " My Lord ! " cried d'Artagnan , enlightened by a sudden idea , " my Lord ! Pardon me , monsieur , but you are not-- " " My Lord the Duke of Buckingham , " said Mme . Bonacieux , in an undertone ; " and now you may ruin us all . " " My Lord , Madame , I ask a hundred pardons ! But I love her , my Lord , and was jealous . You know what it is to love , my Lord . Pardon me , and then tell me how I can risk my life to serve your Grace ? " " You are a brave young man , " said Buckingham , holding out his hand to d'Artagnan , who pressed it respectfully . " You offer me your services ; with the same frankness I accept them . Follow us at a distance of twenty paces , as far as the Louvre , and if anyone watches us , slay him ! " D'Artagnan placed his naked sword under his arm , allowed the duke and Mme . Bonacieux to take twenty steps ahead , and then followed them , ready to execute the instructions of the noble and elegant minister of Charles I. Fortunately , he had no opportunity to give the duke this proof of his devotion , and the young woman and the handsome Musketeer entered the Louvre by the wicket of the Echelle without any interference . As for d'Artagnan , he immediately repaired to the cabaret of the Pomme-de-Pin , where he found Porthos and Aramis awaiting him . Without giving them any explanation of the alarm and inconvenience he had caused them , he told them that he had terminated the affair alone in which he had for a moment believed he should need their assistance . Meanwhile , carried away as we are by our narrative , we must leave our three friends to themselves , and follow the Duke of Buckingham and his guide through the labyrinths of the Louvre . </text>
<text id="FictDumasAp_3Musk_2_EN.txt">
﻿ 2 THE ANTECHAMBER OF M. DE TREVILLE M. de Troisville , as his family was still called in Gascony , or M. de Treville , as he has ended by styling himself in Paris , had really commenced life as d'Artagnan now did ; that is to say , without a sou in his pocket , but with a fund of audacity , shrewdness , and intelligence which makes the poorest Gascon gentleman often derive more in his hope from the paternal inheritance than the richest Perigordian or Berrichan gentleman derives in reality from his . His insolent bravery , his still more insolent success at a time when blows poured down like hail , had borne him to the top of that difficult ladder called Court Favor , which he had climbed four steps at a time . He was the friend of the king , who honored highly , as everyone knows , the memory of his father , Henry IV . The father of M. de Treville had served him so faithfully in his wars against the league that in default of money--a thing to which the Bearnais was accustomed all his life , and who constantly paid his debts with that of which he never stood in need of borrowing , that is to say , with ready wit--in default of money , we repeat , he authorized him , after the reduction of Paris , to assume for his arms a golden lion passant upon gules , with the motto FIDELIS ET FORTIS . This was a great matter in the way of honor , but very little in the way of wealth ; so that when the illustrious companion of the great Henry died , the only inheritance he was able to leave his son was his sword and his motto . Thanks to this double gift and the spotless name that accompanied it , M. de Treville was admitted into the household of the young prince where he made such good use of his sword , and was so faithful to his motto , that Louis XIII , one of the good blades of his kingdom , was accustomed to say that if he had a friend who was about to fight , he would advise him to choose as a second , himself first , and Treville next--or even , perhaps , before himself . Thus Louis XIII had a real liking for Treville--a royal liking , a self-interested liking , it is true , but still a liking . At that unhappy period it was an important consideration to be surrounded by such men as Treville . Many might take for their device the epithet STRONG , which formed the second part of his motto , but very few gentlemen could lay claim to the FAITHFUL , which constituted the first . Treville was one of these latter . His was one of those rare organizations , endowed with an obedient intelligence like that of the dog ; with a blind valor , a quick eye , and a prompt hand ; to whom sight appeared only to be given to see if the king were dissatisfied with anyone , and the hand to strike this displeasing personage , whether a Besme , a Maurevers , a Poltiot de Mere , or a Vitry . In short , up to this period nothing had been wanting to Treville but opportunity ; but he was ever on the watch for it , and he faithfully promised himself that he would not fail to seize it by its three hairs whenever it came within reach of his hand . At last Louis XIII made Treville the captain of his Musketeers , who were to Louis XIII in devotedness , or rather in fanaticism , what his Ordinaries had been to Henry III , and his Scotch Guard to Louis XI . On his part , the cardinal was not behind the king in this respect . When he saw the formidable and chosen body with which Louis XIII had surrounded himself , this second , or rather this first king of France , became desirous that he , too , should have his guard . He had his Musketeers therefore , as Louis XIII had his , and these two powerful rivals vied with each other in procuring , not only from all the provinces of France , but even from all foreign states , the most celebrated swordsmen . It was not uncommon for Richelieu and Louis XIII to dispute over their evening game of chess upon the merits of their servants . Each boasted the bearing and the courage of his own people . While exclaiming loudly against duels and brawls , they excited them secretly to quarrel , deriving an immoderate satisfaction or genuine regret from the success or defeat of their own combatants . We learn this from the memoirs of a man who was concerned in some few of these defeats and in many of these victories . Treville had grasped the weak side of his master ; and it was to this address that he owed the long and constant favor of a king who has not left the reputation behind him of being very faithful in his friendships . He paraded his Musketeers before the Cardinal Armand Duplessis with an insolent air which made the gray moustache of his Eminence curl with ire . Treville understood admirably the war method of that period , in which he who could not live at the expense of the enemy must live at the expense of his compatriots . His soldiers formed a legion of devil-may-care fellows , perfectly undisciplined toward all but himself . Loose , half-drunk , imposing , the king 's Musketeers , or rather M. de Treville 's , spread themselves about in the cabarets , in the public walks , and the public sports , shouting , twisting their mustaches , clanking their swords , and taking great pleasure in annoying the Guards of the cardinal whenever they could fall in with them ; then drawing in the open streets , as if it were the best of all possible sports ; sometimes killed , but sure in that case to be both wept and avenged ; often killing others , but then certain of not rotting in prison , M. de Treville being there to claim them . Thus M. de Treville was praised to the highest note by these men , who adored him , and who , ruffians as they were , trembled before him like scholars before their master , obedient to his least word , and ready to sacrifice themselves to wash out the smallest insult . M. de Treville employed this powerful weapon for the king , in the first place , and the friends of the king--and then for himself and his own friends . For the rest , in the memoirs of this period , which has left so many memoirs , one does not find this worthy gentleman blamed even by his enemies ; and he had many such among men of the pen as well as among men of the sword . In no instance , let us say , was this worthy gentleman accused of deriving personal advantage from the cooperation of his minions . Endowed with a rare genius for intrigue which rendered him the equal of the ablest intriguers , he remained an honest man . Still further , in spite of sword thrusts which weaken , and painful exercises which fatigue , he had become one of the most gallant frequenters of revels , one of the most insinuating lady 's men , one of the softest whisperers of interesting nothings of his day ; the BONNES FORTUNES of de Treville were talked of as those of M. de Bassompierre had been talked of twenty years before , and that was not saying a little . The captain of the Musketeers was therefore admired , feared , and loved ; and this constitutes the zenith of human fortune . Louis XIV absorbed all the smaller stars of his court in his own vast radiance ; but his father , a sun PLURIBUS IMPAR , left his personal splendor to each of his favorites , his individual value to each of his courtiers . In addition to the leeves of the king and the cardinal , there might be reckoned in Paris at that time more than two hundred smaller but still noteworthy leeves . Among these two hundred leeves , that of Treville was one of the most sought . The court of his hotel , situated in the Rue du Vieux-Colombier , resembled a camp from by six o'clock in the morning in summer and eight o'clock in winter . From fifty to sixty Musketeers , who appeared to replace one another in order always to present an imposing number , paraded constantly , armed to the teeth and ready for anything . On one of those immense staircases , upon whose space modern civilization would build a whole house , ascended and descended the office seekers of Paris , who ran after any sort of favor--gentlemen from the provinces anxious to be enrolled , and servants in all sorts of liveries , bringing and carrying messages between their masters and M. de Treville . In the antechamber , upon long circular benches , reposed the elect ; that is to say , those who were called . In this apartment a continued buzzing prevailed from morning till night , while M. de Treville , in his office contiguous to this antechamber , received visits , listened to complaints , gave his orders , and like the king in his balcony at the Louvre , had only to place himself at the window to review both his men and arms . The day on which d'Artagnan presented himself the assemblage was imposing , particularly for a provincial just arriving from his province . It is true that this provincial was a Gascon ; and that , particularly at this period , the compatriots of d'Artagnan had the reputation of not being easily intimidated . When he had once passed the massive door covered with long square-headed nails , he fell into the midst of a troop of swordsmen , who crossed one another in their passage , calling out , quarreling , and playing tricks one with another . In order to make one 's way amid these turbulent and conflicting waves , it was necessary to be an officer , a great noble , or a pretty woman . It was , then , into the midst of this tumult and disorder that our young man advanced with a beating heat , ranging his long rapier up his lanky leg , and keeping one hand on the edge of his cap , with that half-smile of the embarrassed a provincial who wishes to put on a good face . When he had passed one group he began to breathe more freely ; but he could not help observing that they turned round to look at him , and for the first time in his life d'Artagnan , who had till that day entertained a very good opinion of himself , felt ridiculous . Arrived at the staircase , it was still worse . There were four Musketeers on the bottom steps , amusing themselves with the following exercise , while ten or twelve of their comrades waited upon the landing place to take their turn in the sport . One of them , stationed upon the top stair , naked sword in hand , prevented , or at least endeavored to prevent , the three others from ascending . These three others fenced against him with their agile swords . D'Artagnan at first took these weapons for foils , and believed them to be buttoned ; but he soon perceived by certain scratches that every weapon was pointed and sharpened , and that at each of these scratches not only the spectators , but even the actors themselves , laughed like so many madmen . He who at the moment occupied the upper step kept his adversaries marvelously in check . A circle was formed around them . The conditions required that at every hit the man touched should quit the game , yielding his turn for the benefit of the adversary who had hit him . In five minutes three were slightly wounded , one on the hand , another on the ear , by the defender of the stair , who himself remained intact--a piece of skill which was worth to him , according to the rules agreed upon , three turns of favor . However difficult it might be , or rather as he pretended it was , to astonish our young traveler , this pastime really astonished him . He had seen in his province--that land in which heads become so easily heated--a few of the preliminaries of duels ; but the daring of these four fencers appeared to him the strongest he had ever heard of even in Gascony . He believed himself transported into that famous country of giants into which Gulliver afterward went and was so frightened ; and yet he had not gained the goal , for there were still the landing place and the antechamber . On the landing they were no longer fighting , but amused themselves with stories about women , and in the antechamber , with stories about the court . On the landing d'Artagnan blushed ; in the antechamber he trembled . His warm and fickle imagination , which in Gascony had rendered formidable to young chambermaids , and even sometimes their mistresses , had never dreamed , even in moments of delirium , of half the amorous wonders or a quarter of the feats of gallantry which were here set forth in connection with names the best known and with details the least concealed . But if his morals were shocked on the landing , his respect for the cardinal was scandalized in the antechamber . There , to his great astonishment , d'Artagnan heard the policy which made all Europe tremble criticized aloud and openly , as well as the private life of the cardinal , which so many great nobles had been punished for trying to pry into . That great man who was so revered by d'Artagnan the elder served as an object of ridicule to the Musketeers of Treville , who cracked their jokes upon his bandy legs and his crooked back . Some sang ballads about Mme . d'Aguillon , his mistress , and Mme . Cambalet , his niece ; while others formed parties and plans to annoy the pages and guards of the cardinal duke--all things which appeared to d'Artagnan monstrous impossibilities . Nevertheless , when the name of the king was now and then uttered unthinkingly amid all these cardinal jests , a sort of gag seemed to close for a moment on all these jeering mouths . They looked hesitatingly around them , and appeared to doubt the thickness of the partition between them and the office of M. de Treville ; but a fresh allusion soon brought back the conversation to his Eminence , and then the laughter recovered its loudness and the light was not withheld from any of his actions . " Certes , these fellows will all either be imprisoned or hanged , " thought the terrified d'Artagnan , " and I , no doubt , with them ; for from the moment I have either listened to or heard them , I shall be held as an accomplice . What would my good father say , who so strongly pointed out to me the respect due to the cardinal , if he knew I was in the society of such pagans ? " We have no need , therefore , to say that d'Artagnan dared not join in the conversation , only he looked with all his eyes and listened with all his ears , stretching his five senses so as to lose nothing ; and despite his confidence on the paternal admonitions , he felt himself carried by his tastes and led by his instincts to praise rather than to blame the unheard-of things which were taking place . Although he was a perfect stranger in the court of M. de Treville 's courtiers , and this his first appearance in that place , he was at length noticed , and somebody came and asked him what he wanted . At this demand d'Artagnan gave his name very modestly , emphasized the title of compatriot , and begged the servant who had put the question to him to request a moment 's audience of M. de Treville--a request which the other , with an air of protection , promised to transmit in due season . D'Artagnan , a little recovered from his first surprise , had now leisure to study costumes and physiognomy . The center of the most animated group was a Musketeer of great height and haughty countenance , dressed in a costume so peculiar as to attract general attention . He did not wear the uniform cloak--which was not obligatory at that epoch of less liberty but more independence--but a cerulean-blue doublet , a little faded and worn , and over this a magnificent baldric , worked in gold , which shone like water ripples in the sun . A long cloak of crimson velvet fell in graceful folds from his shoulders , disclosing in front the splendid baldric , from which was suspended a gigantic rapier . This Musketeer had just come off guard , complained of having a cold , and coughed from time to time affectedly . It was for this reason , as he said to those around him , that he had put on his cloak ; and while he spoke with a lofty air and twisted his mustache disdainfully , all admired his embroidered baldric , and d'Artagnan more than anyone . " What would you have ? " said the Musketeer . " This fashion is coming in . It is a folly , I admit , but still it is the fashion . Besides , one must lay out one 's inheritance somehow . " " Ah , Porthos ! " cried one of his companions , " do n't try to make us believe you obtained that baldric by paternal generosity . It was given to you by that veiled lady I met you with the other Sunday , near the gate St. Honor . " " No , upon honor and by the faith of a gentleman , I bought it with the contents of my own purse , " answered he whom they designated by the name Porthos . " Yes ; about in the same manner , " said another Musketeer , " that I bought this new purse with what my mistress put into the old one . " " It 's true , though , " said Porthos ; " and the proof is that I paid twelve pistoles for it . " The wonder was increased , though the doubt continued to exist . " Is it not true , Aramis ? " said Porthos , turning toward another Musketeer . This other Musketeer formed a perfect contrast to his interrogator , who had just designated him by the name of Aramis . He was a stout man , of about two- or three-and-twenty , with an open , ingenuous countenance , a black , mild eye , and cheeks rosy and downy as an autumn peach . His delicate mustache marked a perfectly straight line upon his upper lip ; he appeared to dread to lower his hands lest their veins should swell , and he pinched the tips of his ears from time to time to preserve their delicate pink transparency . Habitually he spoke little and slowly , bowed frequently , laughed without noise , showing his teeth , which were fine and of which , as the rest of his person , he appeared to take great care . He answered the appeal of his friend by an affirmative nod of the head . This affirmation appeared to dispel all doubts with regard to the baldric . They continued to admire it , but said no more about it ; and with a rapid change of thought , the conversation passed suddenly to another subject . " What do you think of the story Chalais 's esquire relates ? " asked another Musketeer , without addressing anyone in particular , but on the contrary speaking to everybody . " And what does he say ? " asked Porthos , in a self-sufficient tone . " He relates that he met at Brussels Rochefort , the AME DAMNEE of the cardinal disguised as a Capuchin , and that this cursed Rochefort , thanks to his disguise , had tricked Monsieur de Laigues , like a ninny as he is . " " A ninny , indeed ! " said Porthos ; " but is the matter certain ? " " I had it from Aramis , " replied the Musketeer . " Indeed ? " " Why , you knew it , Porthos , " said Aramis . " I told you of it yesterday . Let us say no more about it . " " Say no more about it ? That 's YOUR opinion ! " replied Porthos . " Say no more about it ! PESTE ! You come to your conclusions quickly . What ! The cardinal sets a spy upon a gentleman , has his letters stolen from him by means of a traitor , a brigand , a rascal-has , with the help of this spy and thanks to this correspondence , Chalais 's throat cut , under the stupid pretext that he wanted to kill the king and marry Monsieur to the queen ! Nobody knew a word of this enigma . You unraveled it yesterday to the great satisfaction of all ; and while we are still gaping with wonder at the news , you come and tell us today , 'Let us say no more about it . ' " " Well , then , let us talk about it , since you desire it , " replied Aramis , patiently . " This Rochefort , " cried Porthos , " if I were the esquire of poor Chalais , should pass a minute or two very uncomfortably with me . " " And you--you would pass rather a sad quarter-hour with the Red Duke , " replied Aramis . " Oh , the Red Duke ! Bravo ! Bravo ! The Red Duke ! " cried Porthos , clapping his hands and nodding his head . " The Red Duke is capital . I 'll circulate that saying , be assured , my dear fellow . Who says this Aramis is not a wit ? What a misfortune it is you did not follow your first vocation ; what a delicious abbe you would have made ! " " Oh , it 's only a temporary postponement , " replied Aramis ; " I shall be one someday . You very well know , Porthos , that I continue to study theology for that purpose . " " He will be one , as he says , " cried Porthos ; " he will be one , sooner or later . " " Sooner . " said Aramis . " He only waits for one thing to determine him to resume his cassock , which hangs behind his uniform , " said another Musketeer . " What is he waiting for ? " asked another . " Only till the queen has given an heir to the crown of France . " " No jesting upon that subject , gentlemen , " said Porthos ; " thank God the queen is still of an age to give one ! " " They say that Monsieur de Buckingham is in France , " replied Aramis , with a significant smile which gave to this sentence , apparently so simple , a tolerably scandalous meaning . " Aramis , my good friend , this time you are wrong , " interrupted Porthos . " Your wit is always leading you beyond bounds ; if Monsieur de Treville heard you , you would repent of speaking thus . " " Are you going to give me a lesson , Porthos ? " cried Aramis , from whose usually mild eye a flash passed like lightning . " My dear fellow , be a Musketeer or an abbe . Be one or the other , but not both , " replied Porthos . " You know what Athos told you the other day ; you eat at everybody 's mess . Ah , do n't be angry , I beg of you , that would be useless ; you know what is agreed upon between you , Athos and me . You go to Madame d'Aguillon 's , and you pay your court to her ; you go to Madame de Bois-Tracy 's , the cousin of Madame de Chevreuse , and you pass for being far advanced in the good graces of that lady . Oh , good Lord ! Do n't trouble yourself to reveal your good luck ; no one asks for your secret-all the world knows your discretion . But since you possess that virtue , why the devil do n't you make use of it with respect to her Majesty ? Let whoever likes talk of the king and the cardinal , and how he likes ; but the queen is sacred , and if anyone speaks of her , let it be respectfully . " " Porthos , you are as vain as Narcissus ; I plainly tell you so , " replied Aramis . " You know I hate moralizing , except when it is done by Athos . As to you , good sir , you wear too magnificent a baldric to be strong on that head . I will be an abbe if it suits me . In the meanwhile I am a Musketeer ; in that quality I say what I please , and at this moment it pleases me to say that you weary me . " " Aramis ! " " Porthos ! " " Gentlemen ! Gentlemen ! " cried the surrounding group . " Monsieur de Treville awaits Monsieur d'Artagnan , " cried a servant , throwing open the door of the cabinet . At this announcement , during which the door remained open , everyone became mute , and amid the general silence the young man crossed part of the length of the antechamber , and entered the apartment of the captain of the Musketeers , congratulating himself with all his heart at having so narrowly escaped the end of this strange quarrel . </text>
<text id="FictFlaubertG_Bovary_I5_EN.txt">
﻿ I Chapter Five The brick front was just in a line with the street , or rather the road . Behind the door hung a cloak with a small collar , a bridle , and a black leather cap , and on the floor , in a corner , were a pair of leggings , still covered with dry mud . On the right was the one apartment , that was both dining and sitting room . A canary yellow paper , relieved at the top by a garland of pale flowers , was puckered everywhere over the badly stretched canvas ; white calico curtains with a red border hung crossways at the length of the window ; and on the narrow mantelpiece a clock with a head of Hippocrates shone resplendent between two plate candlesticks under oval shades . On the other side of the passage was Charles 's consulting room , a little room about six paces wide , with a table , three chairs , and an office chair . Volumes of the " Dictionary of Medical Science , " uncut , but the binding rather the worse for the successive sales through which they had gone , occupied almost along the six shelves of a deal bookcase . The smell of melted butter penetrated through the walls when he saw patients , just as in the kitchen one could hear the people coughing in the consulting room and recounting their histories . Then , opening on the yard , where the stable was , came a large dilapidated room with a stove , now used as a wood-house , cellar , and pantry , full of old rubbish , of empty casks , agricultural implements past service , and a mass of dusty things whose use it was impossible to guess . The garden , longer than wide , ran between two mud walls with espaliered apricots , to a hawthorn hedge that separated it from the field . In the middle was a slate sundial on a brick pedestal ; four flower beds with eglantines surrounded symmetrically the more useful kitchen garden bed . Right at the bottom , under the spruce bushes , was a cure in plaster reading his breviary . Emma went upstairs . The first room was not furnished , but in the second , which was their bedroom , was a mahogany bedstead in an alcove with red drapery . A shell box adorned the chest of drawers , and on the secretary near the window a bouquet of orange blossoms tied with white satin ribbons stood in a bottle . It was a bride 's bouquet ; it was the other one 's . She looked at it . Charles noticed it ; he took it and carried it up to the attic , while Emma seated in an arm-chair ( they were putting her things down around her ) thought of her bridal flowers packed up in a bandbox , and wondered , dreaming , what would be done with them if she were to die . During the first days she occupied herself in thinking about changes in the house . She took the shades off the candlesticks , had new wallpaper put up , the staircase repainted , and seats made in the garden round the sundial ; she even inquired how she could get a basin with a jet fountain and fishes . Finally her husband , knowing that she liked to drive out , picked up a second-hand dogcart , which , with new lamps and splashboard in striped leather , looked almost like a tilbury . He was happy then , and without a care in the world . A meal together , a walk in the evening on the highroad , a gesture of her hands over her hair , the sight of her straw hat hanging from the window-fastener , and many another thing in which Charles had never dreamed of pleasure , now made up the endless round of his happiness . In bed , in the morning , by her side , on the pillow , he watched the sunlight sinking into the down on her fair cheek , half hidden by the lappets of her night-cap . Seen thus closely , her eyes looked to him enlarged , especially when , on waking up , she opened and shut them rapidly many times . Black in the shade , dark blue in broad daylight , they had , as it were , depths of different colours , that , darker in the centre , grew paler towards the surface of the eye . His own eyes lost themselves in these depths ; he saw himself in miniature down to the shoulders , with his handkerchief round his head and the top of his shirt open . He rose . She came to the window to see him off , and stayed leaning on the sill between two pots of geranium , clad in her dressing gown hanging loosely about her . Charles , in the street buckled his spurs , his foot on the mounting stone , while she talked to him from above , picking with her mouth some scrap of flower or leaf that she blew out at him . Then this , eddying , floating , described semicircles in the air like a bird , and was caught before it reached the ground in the ill-groomed mane of the old white mare standing motionless at the door . Charles from horseback threw her a kiss ; she answered with a nod ; she shut the window , and he set off . And then along the highroad , spreading out its long ribbon of dust , along the deep lanes that the trees bent over as in arbours , along paths where the corn reached to the knees , with the sun on his back and the morning air in his nostrils , his heart full of the joys of the past night , his mind at rest , his flesh at ease , he went on , re-chewing his happiness , like those who after dinner taste again the truffles which they are digesting . Until now what good had he had of his life ? His time at school , when he remained shut up within the high walls , alone , in the midst of companions richer than he or cleverer at their work , who laughed at his accent , who jeered at his clothes , and whose mothers came to the school with cakes in their muffs ? Later on , when he studied medicine , and never had his purse full enough to treat some little work-girl who would have become his mistress ? Afterwards , he had lived fourteen months with the widow , whose feet in bed were cold as icicles . But now he had for life this beautiful woman whom he adored . For him the universe did not extend beyond the circumference of her petticoat , and he reproached himself with not loving her . He wanted to see her again ; he turned back quickly , ran up the stairs with a beating heart . Emma , in her room , was dressing ; he came up on tiptoe , kissed her back ; she gave a cry . He could not keep from constantly touching her comb , her ring , her fichu ; sometimes he gave her great sounding kisses with all his mouth on her cheeks , or else little kisses in a row all along her bare arm from the tip of her fingers up to her shoulder , and she put him away half-smiling , half-vexed , as you do a child who hangs about you . Before marriage she thought herself in love ; but the happiness that should have followed this love not having come , she must , she thought , have been mistaken . And Emma tried to find out what one meant exactly in life by the words felicity , passion , rapture , that had seemed to her so beautiful in books . </text>
<text id="FictFlaubertG_Bovary_III3_EN.txt">
﻿ III Chapter Three They were three full , exquisite days--a true honeymoon . They were at the Hotel-de-Boulogne , on the harbour ; and they lived there , with drawn blinds and closed doors , with flowers on the floor , and iced syrups were brought them early in the morning . Towards evening they took a covered boat and went to dine on one of the islands . It was the time when one hears by the side of the dockyard the caulking-mallets sounding against the hull of vessels . The smoke of the tar rose up between the trees ; there were large fatty drops on the water , undulating in the purple colour of the sun , like floating plaques of Florentine bronze . They rowed down in the midst of moored boats , whose long oblique cables grazed lightly against the bottom of the boat . The din of the town gradually grew distant ; the rolling of carriages , the tumult of voices , the yelping of dogs on the decks of vessels . She took off her bonnet , and they landed on their island . They sat down in the low-ceilinged room of a tavern , at whose door hung black nets . They ate fried smelts , cream and cherries . They lay down upon the grass ; they kissed behind the poplars ; and they would fain , like two Robinsons , have lived for ever in this little place , which seemed to them in their beatitude the most magnificent on earth . It was not the first time that they had seen trees , a blue sky , meadows ; that they had heard the water flowing and the wind blowing in the leaves ; but , no doubt , they had never admired all this , as if Nature had not existed before , or had only begun to be beautiful since the gratification of their desires . At night they returned . The boat glided along the shores of the islands . They sat at the bottom , both hidden by the shade , in silence . The square oars rang in the iron thwarts , and , in the stillness , seemed to mark time , like the beating of a metronome , while at the stern the rudder that trailed behind never ceased its gentle splash against the water . Once the moon rose ; they did not fail to make fine phrases , finding the orb melancholy and full of poetry . She even began to sing-- " One night , do you remember , we were sailing , " etc. Her musical but weak voice died away along the waves , and the winds carried off the trills that Leon heard pass like the flapping of wings about him . She was opposite him , leaning against the partition of the shallop , through one of whose raised blinds the moon streamed in . Her black dress , whose drapery spread out like a fan , made her seem more slender , taller . Her head was raised , her hands clasped , her eyes turned towards heaven . At times the shadow of the willows hid her completely ; then she reappeared suddenly , like a vision in the moonlight . Leon , on the floor by her side , found under his hand a ribbon of scarlet silk . The boatman looked at it , and at last said-- " Perhaps it belongs to the party I took out the other day . A lot of jolly folk , gentlemen and ladies , with cakes , champagne , cornets--everything in style ! There was one especially , a tall handsome man with small moustaches , who was that funny ! And they all kept saying , 'Now tell us something , Adolphe--Dolpe , ' I think . " She shivered . " You are in pain ? " asked Leon , coming closer to her . " Oh , it 's nothing ! No doubt , it is only the night air . " " And who does n't want for women , either , " softly added the sailor , thinking he was paying the stranger a compliment . Then , spitting on his hands , he took the oars again . Yet they had to part . The adieux were sad . He was to send his letters to Mere Rollet , and she gave him such precise instructions about a double envelope that he admired greatly her amorous astuteness . " So you can assure me it is all right ? " she said with her last kiss . " Yes , certainly . " " But why , " he thought afterwards as he came back through the streets alone , " is she so very anxious to get this power of attorney ? " </text>
<text id="FictFlaubertG_Salammbo_11_EN.txt">
﻿ CHAPTER XI IN THE TENT The man who guided Salammbo made her ascend again beyond the pharos in the direction of the Catacombs , and then go down the long suburb of Molouya , which was full of steep lanes . The sky was beginning to grow grey . Sometimes palm-wood beams jutting out from the walls obliged them to bend their heads . The two horses which were at the walk would often slip ; and thus they reached the Teveste gate . Its heavy leaves were half open ; they passed through , and it closed behind them . At first they followed the foot of the ramparts for a time , and at the height of the cisterns they took their way along the Taenia , a narrow strip of yellow earth separating the gulf from the lake and extending as far as Rhades . No one was to be seen around Carthage , whether on the sea or in the country . The slate-coloured waves chopped softly , and the light wind blowing their foam hither and thither spotted them with white rents . In spite of all her veils , Salammbo shivered in the freshness of the morning ; the motion and the open air dazed her . Then the sun rose ; it preyed on the back of her head , and she involuntarily dozed a little . The two animals rambled along side by side , their feet sinking into the silent sand . When they had passed the mountain of the Hot Springs , they went on at a more rapid rate , the ground being firmer . But although it was the season for sowing and ploughing , the fields were as empty as the desert as far as the eye could reach . Here and there were scattered heaps of corn ; at other places the barley was shedding its reddened ears . The villages showed black upon the clear horizon , with shapes incoherently carved . From time to time a half-calcined piece of wall would be found standing on the edge of the road . The roofs of the cottages were falling in , and in the interiors might be distinguished fragments of pottery , rags of clothing , and all kinds of unrecognisable utensils and broken things . Often a creature clothed in tatters , with earthy face and flaming eyes would emerge from these ruins . But he would very quickly begin to run or would disappear into a hole . Salammbo and her guide did not stop . Deserted plains succeeded one another . Charcoal dust which was raised by their feet behind them , stretched in unequal trails over large spaces of perfectly white soil . Sometimes they came upon little peaceful spots , where a brook flowed amid the long grass ; and as they ascended the other bank Salammbo would pluck damp leaves to cool her hands . At the corner of a wood of rose-bays her horse shied violently at the corpse of a man which lay extended on the ground . The slave immediately settled her again on the cushions . He was one of the servants of the Temple , a man whom Schahabarim used to employ on perilous missions . With extreme precaution he now went on foot beside her and between the horses ; he would whip the animals with the end of a leathern lace wound round his arm , or would perhaps take balls made of wheat , dates , and yolks of eggs wrapped in lotus leaves from a scrip hanging against his breast , and offer them to Salammbo without speaking , and running all the time . In the middle of the day three Barbarians clad in animals ' skins crossed their path . By degrees others appeared wandering in troops of ten , twelve , or twenty-five men ; many were driving goats or a limping cow . Their heavy sticks bristled with brass points ; cutlasses gleamed in their clothes , which were savagely dirty , and they opened their eyes with a look of menace and amazement . As they passed some sent them a vulgar benediction ; others obscene jests , and Schahabarim 's man replied to each in his own idiom . He told them that this was a sick youth going to be cured at a distant temple . However , the day was closing in . Barkings were heard , and they approached them . Then in the twilight they perceived an enclosure of dry stones shutting in a rambling edifice . A dog was running along the top of the wall . The slave threw some pebbles at him and they entered a lofty vaulted hall . A woman was crouching in the centre warming herself at a fire of brushwood , the smoke of which escaped through the holes in the ceiling . She was half hidden by her white hair which fell to her knees ; and unwilling to answer , she muttered with idiotic look words of vengeance against the Barbarians and the Carthaginians . The runner ferreted right and left . Then he returned to her and demanded something to eat . The old woman shook her head , and murmured with her eyes fixed upon the charcoal : " I was the hand . The ten fingers are cut off . The mouth eats no more . " The slave showed her a handful of gold pieces . She rushed upon them , but soon resumed her immobility . At last he placed a dagger which he had in his girdle beneath her throat . Then , trembling , she went and raised a large stone , and brought back an amphora of wine with fish from Hippo-Zarytus preserved in honey . Salammbo turned away from this unclean food , and fell asleep on the horses ' caparisons which were spread in a corner of the hall . He awoke her before daylight . The dog was howling . The slave went up to it quietly , and struck off its head with a single blow of his dagger . Then he rubbed the horses ' nostrils with blood to revive them . The old woman cast a malediction at him from behind . Salammbo perceived this , and pressed the amulet which she wore above her heart . They resumed their journey . From time to time she asked whether they would not arrive soon . The road undulated over little hills . Nothing was to be heard but the grating of the grasshoppers . The sun heated the yellowed grass ; the ground was all chinked with crevices which in dividing formed , as it were , monstrous paving-stones . Sometimes a viper passed , or eagles flew by ; the slave still continued running . Salammbo mused beneath her veils , and in spite of the heat did not lay them aside through fear of soiling her beautiful garments . At regular distances stood towers built by the Carthaginians for the purpose of keeping watch upon the tribes . They entered these for the sake of the shade , and then set out again . For prudence sake they had made a wide detour the day before . But they met with no one just now ; the region being a sterile one , the Barbarians had not passed that way . Gradually the devastation began again . Sometimes a piece of mosaic would be displayed in the centre of a field , the sole remnant of a vanished mansion ; and the leafless olive trees looked at a distance like large bushes of thorns . They passed through a town in which houses were burnt to the ground . Human skeletons might be seen along the walls . There were some , too , of dromedaries and mules . Half-gnawed carrion blocked the streets . Night fell . The sky was lowering and cloudy . They ascended again for two hours in a westerly direction , when suddenly they perceived a quantity of little flames before them . These were shining at the bottom of an ampitheatre . Gold plates , as they displaced one another , glanced here and there . These were the cuirasses of the Clinabarians in the Punic camp ; then in the neighbourhood they distinguished other and more numerous lights , for the armies of the Mercenaries , now blended together , extended over a great space . Salammbo made a movement as though to advance . But Schahabarim 's man took her further away , and they passed along by the terrace which enclosed the camp of the Barbarians . A breach became visible in it , and the slave disappeared . A sentry was walking upon the top of the entrenchment with a bow in his hand and a pike on his shoulder . Salammbo drew still nearer ; the Barbarian knelt and a long arrow pierced the hem of her cloak . Then as she stood motionless and shrieking , he asked her what she wanted . " To speak to Matho , " she replied . " I am a fugitive from Carthage . " He gave a whistle , which was repeated at intervals further away . Salammbo waited ; her frightened horse moved round and round , sniffing . When Matho arrived the moon was rising behind her . But she had a yellow veil with black flowers over her face , and so many draperies about her person , that it was impossible to make any guess about her . From the top of the terrace he gazed upon this vague form standing up like a phantom in the penumbrae of the evening . At last she said to him : " Lead me to your tent ! I wish it ! " A recollection which he could not define passed through his memory . He felt his heart beating . The air of command intimidated him . " Follow me ! " he said . The barrier was lowered , and immediately she was in the camp of the Barbarians . It was filled with a great tumult and a great throng . Bright fires were burning beneath hanging pots ; and their purpled reflections illuminating some places left others completely in the dark . There was shouting and calling ; shackled horses formed long straight lines amid the tents ; the latter were round and square , of leather or of canvas ; there were huts of reeds , and holes in the sand such as are made by dogs . Soldiers were carting faggots , resting on their elbows on the ground , or wrapping themselves up in mats and preparing to sleep ; and Salammbo 's horse sometimes stretched out a leg and jumped in order to pass over them . She remembered that she had seen them before ; but their beards were longer now , their faces still blacker , and their voices hoarser . Matho , who walked before her , waved them off with a gesture of his arm which raised his red mantle . Some kissed his hands ; others bending their spines approached him to ask for orders , for he was now veritable and sole chief of the Barbarians ; Spendius , Autaritus , and Narr ' Havas had become disheartened , and he had displayed so much audacity and obstinacy that all obeyed him . Salammbo followed him through the entire camp . His tent was at the end , three hundred feet from Hamilcar 's entrenchments . She noticed a wide pit on the right , and it seemed to her that faces were resting against the edge of it on a level with the ground , as decapitated heads might have done . However , their eyes moved , and from these half-opened mouths groanings escaped in the Punic tongue . Two Negroes holding resin lights stood on both sides of the door . Matho drew the canvas abruptly aside . She followed him . It was a deep tent with a pole standing up in the centre . It was lighted by a large lamp-holder shaped like a lotus and full of a yellow oil wherein floated handfuls of burning tow , and military things might be distinguished gleaming in the shade . A naked sword leaned against a stool by the side of a shield ; whips of hippopotamus leather , cymbals , bells , and necklaces were displayed pell-mell on baskets of esparto-grass ; a felt rug lay soiled with crumbs of black bread ; some copper money was carelessly heaped upon a round stone in a corner , and through the rents in the canvas the wind brought the dust from without , together with the smell of the elephants , which might be heard eating and shaking their chains . " Who are you ? " said Matho . She looked slowly around her without replying ; then her eyes were arrested in the background , where something bluish and sparkling fell upon a bed of palm-branches . She advanced quickly . A cry escaped her . Matho stamped his foot behind her . " Who brings you here ? why do you come ? " " To take it ! " she replied , pointing to the zaimph , and with the other hand she tore the veils from her head . He drew back with his elbows behind him , gaping , almost terrified . She felt as if she were leaning on the might of the gods ; and looking at him face to face she asked him for the zaimph ; she demanded it in words abundant and superb . Matho did not hear ; he was gazing at her , and in his eyes her garments were blended with her body . The clouding of the stuffs , like the splendour of her skin , was something special and belonging to her alone . Her eyes and her diamonds sparkled ; the polish of her nails continued the delicacy of the stones which loaded her fingers ; the two clasps of her tunic raised her breasts somewhat and brought them closer together , and he in thought lost himself in the narrow interval between them whence there fell a thread holding a plate of emeralds which could be seen lower down beneath the violet gauze . She had as earrings two little sapphire scales , each supporting a hollow pearl filled with liquid scent . A little drop would fall every moment through the holes in the pearl and moisten her naked shoulder . Matho watched it fall . He was carried away by ungovernable curiosity ; and , like a child laying his hand upon a strange fruit , he tremblingly and lightly touched the top of her chest with the tip of his finger : the flesh , which was somewhat cold , yielded with an elastic resistance . This contact , though scarcely a sensible one , shook Matho to the very depths of his nature . An uprising of his whole being urged him towards her . He would fain have enveloped her , absorbed her , drunk her . His bosom was panting , his teeth were chattering . Taking her by the wrists he drew her gently to him , and then sat down upon a cuirass beside the palm-tree bed which was covered with a lion 's skin . She was standing . He looked up at her , holding her thus between his knees , and repeating : " How beautiful you are ! how beautiful you are ! " His eyes , which were continually fixed upon hers , pained her ; and the uncomfortableness , the repugnance increased in so acute a fashion that Salammbo put a constraint upon herself not to cry out . The thought of Schahabarim came back to her , and she resigned herself . Matho still kept her little hands in his own ; and from time to time , in spite of the priest 's command , she turned away her face and tried to thrust him off by jerking her arms . He opened his nostrils the better to breathe in the perfume which exhaled from her person . It was a fresh , indefinable emanation , which nevertheless made him dizzy , like the smoke from a perfuming-pan . She smelt of honey , pepper , incense , roses , with another odour still . But how was she thus with him in his tent , and at his disposal ? Some one no doubt had urged her . She had not come for the zaimph . His arms fell , and he bent his head whelmed in sudden reverie . To soften him Salammbo said to him in a plaintive voice : " What have I done to you that you should desire my death ? " " Your death ! " She resumed : " I saw you one evening by the light of my burning gardens amid fuming cups and my slaughtered slaves , and your anger was so strong that you bounded towards me and I was obliged to fly ! Then terror entered into Carthage . There were cries of the devastation of the towns , the burning of the country-seats , the massacre of the soldiery ; it was you who had ruined them , it was you who had murdered them ! I hate you ! Your very name gnaws me like remorse ! You are execrated more than the plague , and the Roman war ! The provinces shudder at your fury , the furrows are full of corpses ! I have followed the traces of your fires as though I were travelling behind Moloch ! " Matho leaped up ; his heart was swelling with colossal pride ; he was raised to the stature of a god . With quivering nostrils and clenched teeth she went on : " As if your sacrilege were not enough , you came to me in my sleep covered with the zaimph ! Your words I did not understand ; but I could see that you wished to drag me to some terrible thing at the bottom of an abyss . " Matho , writhing his arms , exclaimed : " No ! no ! it was to give it to you ! to restore it to you ! It seemed to me that the goddess had left her garment for you , and that it belonged to you ! In her temple or in your house , what does it matter ? are you not all-powerful , immaculate , radiant and beautiful even as Tanith ? " And with a look of boundless adoration he added : " Unless perhaps you are Tanith ? " " I , Tanith ! " said Salammbo to herself . They left off speaking . The thunder rolled in the distance . Some sheep bleated , frightened by the storm . " Oh ! come near ! " he went on , " come near ! fear nothing ! " Formerly I was only a soldier mingled with the common herd of the Mercenaries , ay , and so meek that I used to carry wood on my back for the others . Do I trouble myself about Carthage ! The crowd of its people move as though lost in the dust of your sandals , and all its treasures , with the provinces , fleets , and islands , do not raise my envy like the freshness of your lips and the turn of your shoulders . But I wanted to throw down its walls that I might reach you to possess you ! Moreover , I was revenging myself in the meantime ! At present I crush men like shells , and I throw myself upon phalanxes ; I put aside the sarissae with my hands , I check the stallions by the nostrils ; a catapult would not kill me ! Oh ! if you knew how I think of you in the midst of war ! Sometimes the memory of a gesture or of a fold of your garment suddenly seizes me and entwines me like a net ! I perceive your eyes in the flames of the phalaricas and on the gilding of the shields ! I hear your voice in the sounding of the cymbals . I turn aside , but you are not there ! and I plunge again into the battle ! " He raised his arms whereon his veins crossed one another like ivy on the branches of a tree . Sweat flowed down his breast between his square muscles ; and his breathing shook his sides with his bronze girdle all garnished with thongs hanging down to his knees , which were firmer than marble . Salammbo , who was accustomed to eunuchs , yielded to amazement at the strength of this man . It was the chastisement of the goddess or the influence of Moloch in motion around her in the five armies . She was overwhelmed with lassitude ; and she listened in a state of stupor to the intermittent shouts of the sentinels as they answered one another . The flames of the lamp kindled in the squalls of hot air . There came at times broad lightning flashes ; then the darkness increased ; and she could only see Matho 's eyeballs like two coals in the night . However , she felt that a fatality was surrounding her , that she had reached a supreme and irrevocable moment , and making an effort she went up again towards the zaimph and raised her hands to seize it . " What are you doing ? " exclaimed Matho . " I am going back to Carthage , " she placidly replied . He advanced folding his arms and with so terrible a look that her heels were immediately nailed , as it were , to the spot . " Going back to Carthage ! " He stammered , and , grinding his teeth , repeated : " Going back to Carthage ! Ah ! you came to take the zaimph , to conquer me , and then disappear ! No , no ! you belong to me ! and no one now shall tear you from here ! Oh ! I have not forgotten the insolence of your large tranquil eyes , and how you crushed me with the haughtiness of your beauty ! 'Tis my turn now ! You are my captive , my slave , my servant ! Call , if you like , on your father and his army , the Ancients , the rich , and your whole accursed people ! I am the master of three hundred thousand soldiers ! I will go and seek them in Lusitania , in the Gauls , and in the depths of the desert , and I will overthrow your town and burn all its temples ; the triremes shall float on the waves of blood ! I will not have a house , a stone , or a palm tree remaining ! And if men fail me I will draw the bears from the mountains and urge on the lions ! Seek not to fly or I kill you ! " Pale and with clenched fists he quivered like a harp whose strings are about to burst . Suddenly sobs stifled him , and he sank down upon his hams . " Ah ! forgive me ! I am a scoundrel , and viler than scorpions , than mire and dust ! Just now while you were speaking your breath passed across my face , and I rejoiced like a dying man who drinks lying flat on the edge of a stream . Crush me , if only I feel your feet ! curse me , if only I hear your voice ! Do not go ! have pity ! I love you ! I love you ! " He was on his knees on the ground before her ; and he encircled her form with both his arms , his head thrown back , and his hands wandering ; the gold discs hanging from his ears gleamed upon his bronzed neck ; big tears rolled in his eyes like silver globes ; he sighed caressingly , and murmured vague words lighter than a breeze and sweet as a kiss . Salammbo was invaded by a weakness in which she lost all consciousness of herself . Something at once inward and lofty , a command from the gods , obliged her to yield herself ; clouds uplifted her , and she fell back swooning upon the bed amid the lion 's hair . The zaimph fell , and enveloped her ; she could see Matho 's face bending down above her breast . " Moloch , thou burnest me ! " and the soldier 's kisses , more devouring than flames , covered her ; she was as though swept away in a hurricane , taken in the might of the sun . He kissed all her fingers , her arms , her feet , and the long tresses of her hair from one end to the other . " Carry it off , " he said , " what do I care ? take me away with it ! I abandon the army ! I renounce everything ! Beyond Gades , twenty days ' journey into the sea , you come to an island covered with gold dust , verdure , and birds . On the mountains large flowers filled with smoking perfumes rock like eternal censers ; in the citron trees , which are higher than cedars , milk-coloured serpents cause the fruit to fall upon the turf with the diamonds in their jaws ; the air is so mild that it keeps you from dying . Oh ! I shall find it , you will see . We shall live in crystal grottoes cut out at the foot of the hills . No one dwells in it yet , or I shall become the king of the country . " He brushed the dust off her cothurni ; he wanted her to put a quarter of a pomegranate between her lips ; he heaped up garments behind her head to make a cushion for her . He sought for means to serve her , and to humble himself , and he even spread the zaimph over her feet as if it were a mere rug . " Have you still , " he said , " those little gazelle 's horns on which your necklaces hang ? You will give them to me ! I love them ! " For he spoke as if the war were finished , and joyful laughs broke from him . The Mercenaries , Hamilcar , every obstacle had now disappeared . The moon was gliding between two clouds . They could see it through an opening in the tent . " Ah , what nights have I spent gazing at her ! she seemed to me like a veil that hid your face ; you would look at me through her ; the memory of you was mingled with her beams ; then I could no longer distinguish you ! " And with his head between her breasts he wept copiously . " And this , " she thought , " is the formidable man who makes Carthage tremble ! " He fell asleep . Then disengaging herself from his arm she put one foot to the ground , and she perceived that her chainlet was broken . The maidens of the great families were accustomed to respect these shackles as something that was almost religious , and Salammbo , blushing , rolled the two pieces of the golden chain around her ankles . Carthage , Megara , her house , her room , and the country that she had passed through , whirled in tumultuous yet distinct images through her memory . But an abyss had yawned and thrown them far back to an infinite distance from her . The storm was departing ; drops of water splashing rarely , one by one , made the tent-roof shake . Matho slept like a drunken man , stretched on his side , and with one arm over the edge of the couch . His band of pearls was raised somewhat , and uncovered his brow ; his teeth were parted in a smile ; they shone through his black beard , and there was a silent and almost outrageous gaiety in his half-closed eyelids . Salammbo looked at him motionless , her head bent and her hands crossed . A dagger was displayed on the table of cypress-wood at the head of the bed ; the sight of the gleaming blade fired her with a sanguinary desire . Mournful voices lingered at a distance in the shade , and like a chorus of geniuses urged her on . She approached it ; she seized the steel by the handle . At the rustling of her dress Matho half opened his eyes , putting forth his mouth upon her hands , and the dagger fell . Shouts arose ; a terrible light flashed behind the canvas . Matho raised the latter ; they perceived the camp of the Libyans enveloped in great flames . Their reed huts were burning , and the twisting stems burst in the smoke and flew off like arrows ; black shadows ran about distractedly on the red horizon . They could hear the shrieks of those who were in the huts ; the elephants , oxen , and horses plunged in the midst of the crowd crushing it together with the stores and baggage that were being rescued from the fire . Trumpets sounded . There were calls of " Matho ! Matho ! " Some people at the door tried to get in . " Come along ! Hamilcar is burning the camp of Autaritus ! " He made a spring . She found herself quite alone . Then she examined the zaimph ; and when she had viewed it well she was surprised that she had not the happiness which she had once imagined to herself . She stood with melancholy before her accomplished dream . But the lower part of the tent was raised , and a monstrous form appeared . Salammbo could at first distinguish only the two eyes and a long white beard which hung down to the ground ; for the rest of the body , which was cumbered with the rags of a tawny garment , trailed along the earth ; and with every forward movement the hands passed into the beard and then fell again . Crawling in this way it reached her feet , and Salammbo recognised the aged Gisco . In fact , the Mercenaries had broken the legs of the captive Ancients with a brass bar to prevent them from taking to flight ; and they were all rotting pell-mell in a pit in the midst of filth . But the sturdiest of them raised themselves and shouted when they heard the noise of platters , and it was in this way that Gisco had seen Salammbo . He had guessed that she was a Carthaginian woman by the little balls of sandastrum flapping against her cothurni ; and having a presentiment of an important mystery he had succeeded , with the assistance of his companions , in getting out of the pit ; then with elbows and hands he had dragged himself twenty paces further on as far as Matho 's tent . Two voices were speaking within it . He had listened outside and had heard everything . " It is you ! " she said at last , almost terrified . " Yes , it is I ! " he replied , raising himself on his wrists . " They think me dead , do they not ? " She bent her head . He resumed : " Ah ! why have the Baals not granted me this mercy ! " He approached so close he was touching her . " They would have spared me the pain of cursing you ! " Salammbo sprang quickly back , so much afraid was she of this unclean being , who was as hideous as a larva and nearly as terrible as a phantom . " I am nearly one hundred years old , " he said . " I have seen Agathocles ; I have seen Regulus and the eagles of the Romans passing over the harvests of the Punic fields ! I have seen all the terrors of battles and the sea encumbered with the wrecks of our fleets ! Barbarians whom I used to command have chained my four limbs like a slave that has committed murder . My companions are dying around me , one after the other ; the odour of their corpses awakes me in the night ; I drive away the birds that come to peck out their eyes ; and yet not for a single day have I despaired of Carthage ! Though I had seen all the armies of the earth against her , and the flames of the siege overtop the height of the temples , I should have still believed in her eternity ! But now all is over ! all is lost ! The gods execrate her ! A curse upon you who have quickened her ruin by your disgrace ! " She opened her lips . " Ah ! I was there ! " he cried . " I heard you gurgling with love like a prostitute ; then he told you of his desire , and you allowed him to kiss your hands ! But if the frenzy of your unchastity urged you to it , you should at least have done as do the fallow deer , which hide themselves in their copulations , and not have displayed your shame beneath your father 's very eyes ! " " What ? " she said . " Ah ! you did not know that the two entrenchments are sixty cubits from each other and that your Matho , in the excess of his pride , has posted himself just in front of Hamilcar . Your father is there behind you ; and could I climb the path which leads to the platform , I should cry to him : 'Come and see your daughter in the Barbarian 's arms ! She has put on the garment of the goddess to please him ; and in yielding her body to him she surrenders with the glory of your name the majesty of the gods , the vengeance of her country , even the safety of Carthage ! ' " The motion of his toothless mouth moved his beard throughout its length ; his eyes were riveted upon her and devoured her ; panting in the dust he repeated : " Ah ! sacrilegious one ! May you be accursed ! accursed ! accursed ! " Salammbo had drawn back the canvas ; she held it raised at arm 's length , and without answering him she looked in the direction of Hamilcar . " It is this way , is it not ? " she said . " What matters it to you ? Turn away ! Begone ! Rather crush your face against the earth ! It is a holy spot which would be polluted by your gaze ! " She threw the zaimph about her waist , and quickly picked up her veils , mantle , and scarf . " I hasten thither ! " she cried ; and making her escape Salammbo disappeared . At first she walked through the darkness without meeting any one , for all were betaking themselves to the fire ; the uproar was increasing and great flames purpled the sky behind ; a long terrace stopped her . She turned round to right and left at random , seeking for a ladder , a rope , a stone , something in short to assist her . She was afraid of Gisco , and it seemed to her that shouts and footsteps were pursuing her . Day was beginning to break . She perceived a path in the thickness of the entrenchment . She took the hem of her robe , which impeded her , in her teeth , and in three bounds she was on the platform . A sonorous shout burst forth beneath her in the shade , the same which she had heard at the foot of the galley staircase , and leaning over she recognised Schahabarim 's man with his coupled horses . He had wandered all night between the two entrenchments ; then disquieted by the fire , he had gone back again trying to see what was passing in Matho 's camp ; and , knowing that this spot was nearest to his tent , he had not stirred from it , in obedience to the priest 's command . He stood up on one of the horses . Salammbo let herself slide down to him ; and they fled at full gallop , circling the Punic camp in search of a gate . Matho had re-entered his tent . The smoky lamp gave but little light , and he also believed that Salammbo was asleep . Then he delicately touched the lion 's skin on the palm-tree bed . He called but she did not answer ; he quickly tore away a strip of the canvas to let in some light ; the zaimph was gone . The earth trembled beneath thronging feet . Shouts , neighings , and clashing of armour rose in the air , and clarion flourishes sounded the charge . It was as though a hurricane were whirling around him . Immoderate frenzy made him leap upon his arms , and he dashed outside . The long files of the Barbarians were descending the mountain at a run , and the Punic squares were advancing against them with a heavy and regular oscillation . The mist , rent by the rays of the sun , formed little rocking clouds which as they rose gradually discovered standards , helmets , and points of pikes . Beneath the rapid evolutions portions of the earth which were still in the shadow seemed to be displaced bodily ; in other places it looked as if huge torrents were crossing one another , while thorny masses stood motionless between them . Matho could distinguish the captains , soldiers , heralds , and even the serving-men , who were mounted on asses in the rear . But instead of maintaining his position in order to cover the foot-soldiers , Narr ' Havas turned abruptly to the right , as though he wished himself to be crushed by Hamilcar . His horsemen outstripped the elephants , which were slackening their speed ; and all the horses , stretching out their unbridled heads , galloped at so furious a rate that their bellies seemed to graze the earth . Then suddenly Narr ' Havas went resolutely up to a sentry . He threw away his sword , lance , and javelins , and disappeared among the Carthaginians . The king of the Numidians reached Hamilcar 's tent , and pointing to his men , who were standing still at a distance , he said : " Barca ! I bring them to you . They are yours . " Then he prostrated himself in token of bondage , and to prove his fidelity recalled all his conduct from the beginning of the war . First , he had prevented the siege of Carthage and the massacre of the captives ; then he had taken no advantage of the victory over Hanno after the defeat at Utica . As to the Tyrian towns , they were on the frontiers of his kingdom . Finally he had not taken part in the battle of the Macaras ; and he had even expressly absented himself in order to evade the obligation of fighting against the Suffet . Narr ' Havas had in fact wished to aggrandise himself by encroachments upon the Punic provinces , and had alternately assisted and forsaken the Mercenaries according to the chances of victory . But seeing that Hamilcar would ultimately prove the stronger , he had gone over to him ; and in his desertion there was perhaps something of a grudge against Matho , whether on account of the command or of his former love . The Suffet listened without interrupting him . The man who thus presented himself with an army where vengeance was his due was not an auxiliary to be despised ; Hamilcar at once divined the utility of such an alliance in his great projects . With the Numidians he would get rid of the Libyans . Then he would draw off the West to the conquest of Iberia ; and , without asking Narr ' Havas why he had not come sooner , or noticing any of his lies , he kissed him , striking his breast thrice against his own . It was to bring matters to an end and in despair that he had fired the camp of the Libyans . This army came to him like a relief from the gods ; dissembling his joy he replied : " May the Baals favour you ! I do not know what the Republic will do for you , but Hamilcar is not ungrateful . " The tumult increased ; some captains entered . He was arming himself as he spoke . " Come , return ! You will use your horsemen to beat down their infantry between your elephants and mine . Courage ! exterminate them ! " And Narr ' Havas was rushing away when Salammbo appeared . She leaped down quickly from her horse . She opened her ample cloak and spreading out her arms displayed the zaimph . The leathern tent , which was raised at the corners , left visible the entire circuit of the mountain with its thronging soldiers , and as it was in the centre Salammbo could be seen on all sides . An immense shouting burst forth , a long cry of triumph and hope . Those who were marching stopped ; the dying leaned on their elbows and turned round to bless her . All the Barbarians knew now that she had recovered the zaimph ; they saw her or believed that they saw her from a distance ; and other cries , but those of rage and vengeance , resounded in spite of the plaudits of the Carthaginians . Thus did the five armies in tiers upon the mountain stamp and shriek around Salammbo . Hamilcar , who was unable to speak , nodded her his thanks . His eyes were directed alternately upon the zaimph and upon her , and he noticed that her chainlet was broken . Then he shivered , being seized with a terrible suspicion . But soon recovering his impassibility he looked sideways at Narr ' Havas without turning his face . The king of the Numidians held himself apart in a discreet attitude ; on his forehead he bore a little of the dust which he had touched when prostrating himself . At last the Suffet advanced towards him with a look full of gravity . " As a reward for the services which you have rendered me , Narr ' Havas , I give you my daughter . Be my son , " he added , " and defend your father ! " Narr ' Havas gave a great gesture of surprise ; then he threw himself upon Hamilcar 's hands and covered them with kisses . Salammbo , calm as a statue , did not seem to understand . She blushed a little as she cast down her eyelids , and her long curved lashes made shadows upon her cheeks . Hamilcar wished to unite them immediately in indissoluble betrothal . A lance was placed in Salammbo 's hands and by her offered to Narr ' Havas ; their thumbs were tied together with a thong of ox-leather ; then corn was poured upon their heads , and the grains that fell around them rang like rebounding hail . </text>
<text id="FictFlaubertG_Salammbo_2_EN.txt">
﻿ CHAPTER II AT SICCA Two days afterwards the Mercenaries left Carthage . They had each received a piece of gold on the condition that they should go into camp at Sicca , and they had been told with all sorts of caresses : " You are the saviours of Carthage ! But you would starve it if you remained there ; it would become insolvent . Withdraw ! The Republic will be grateful to you later for all this condescension . We are going to levy taxes immediately ; your pay shall be in full , and galleys shall be equipped to take you back to your native lands . " They did not know how to reply to all this talk . These men , accustomed as they were to war , were wearied by residence in a town ; there was difficulty in convincing them , and the people mounted the walls to see them go away . They defiled through the street of Khamon , and the Cirta gate , pell-mell , archers with hoplites , captains with soldiers , Lusitanians with Greeks . They marched with a bold step , rattling their heavy cothurni on the paving stones . Their armour was dented by the catapult , and their faces blackened by the sunburn of battles . Hoarse cries issued from their thick bears , their tattered coats of mail flapped upon the pommels of their swords , and through the holes in the brass might be seen their naked limbs , as frightful as engines of war . Sarissae , axes , spears , felt caps and bronze helmets , all swung together with a single motion . They filled the street thickly enough to have made the walls crack , and the long mass of armed soldiers overflowed between the lofty bitumen-smeared houses six storys high . Behind their gratings of iron or reed the women , with veiled heads , silently watched the Barbarians pass . The terraces , fortifications , and walls were hidden beneath the crowd of Carthaginians , who were dressed in garments of black . The sailors ' tunics showed like drops of blood among the dark multitude , and nearly naked children , whose skin shone beneath their copper bracelets , gesticulated in the foliage of the columns , or amid the branches of a palm tree . Some of the Ancients were posted on the platform of the towers , and people did not know why a personage with a long beard stood thus in a dreamy attitude here and there . He appeared in the distance against the background of the sky , vague as a phantom and motionless as stone . All , however , were oppressed with the same anxiety ; it was feared that the Barbarians , seeing themselves so strong , might take a fancy to stay . But they were leaving with so much good faith that the Carthaginians grew bold and mingled with the soldiers . They overwhelmed them with protestations and embraces . Some with exaggerated politeness and audacious hypocrisy even sought to induce them not to leave the city . They threw perfumes , flowers , and pieces of silver to them . They gave them amulets to avert sickness ; but they had spit upon them three times to attract death , or had enclosed jackal 's hair within them to put cowardice into their hearts . Aloud , they invoked Melkarth 's favour , and in a whisper , his curse . Then came the mob of baggage , beasts of burden , and stragglers . The sick groaned on the backs of dromedaries , while others limped along leaning on broken pikes . The drunkards carried leathern bottles , and the greedy quarters of meat , cakes , fruits , butter wrapped in fig leaves , and snow in linen bags . Some were to be seen with parasols in their hands , and parrots on their shoulders . They had mastiffs , gazelles , and panthers following behind them . Women of Libyan race , mounted on asses , inveighed against the Negresses who had forsaken the lupanaria of Malqua for the soldiers ; many of them were suckling children suspended on their bosoms by leathern thongs . The mules were goaded out at the point of the sword , their backs bending beneath the load of tents , while there were numbers of serving-men and water-carriers , emaciated , jaundiced with fever , and filthy with vermin , the scum of the Carthaginian populace , who had attached themselves to the Barbarians . When they had passed , the gates were shut behind them , but the people did not descend from the walls . The army soon spread over the breadth of the isthmus . It parted into unequal masses . Then the lances appeared like tall blades of grass , and finally all was lost in a train of dust ; those of the soldiers who looked back towards Carthage could now only see its long walls with their vacant battlements cut out against the edge of the sky . Then the Barbarians heard a great shout . They thought that some from among them ( for they did not know their own number ) had remained in the town , and were amusing themselves by pillaging a temple . They laughed a great deal at the idea of this , and then continued their journey . They were rejoiced to find themselves , as in former days , marching all together in the open country , and some of the Greeks sang the old song of the Mamertines : " With my lance and sword I plough and reap ; I am master of the house ! The disarmed man falls at my feet and calls me Lord and Great King . " They shouted , they leaped , the merriest began to tell stories ; the time of their miseries was past . As they arrived at Tunis , some of them remarked that a troop of Balearic slingers was missing . They were doubtless not far off ; and no further heed was paid to them . Some went to lodge in the houses , others camped at the foot of the walls , and the townspeople came out to chat with the soldiers . During the whole night fires were seen burning on the horizon in the direction of Carthage ; the light stretched like giant torches across the motionless lake . No one in the army could tell what festival was being celebrated . On the following day the Barbarian 's passed through a region that was covered with cultivation . The domains of the patricians succeeded one another along the border of the route ; channels of water flowed through woods of palm ; there were long , green lines of olive-trees ; rose-coloured vapours floated in the gorges of the hills , while blue mountains reared themselves behind . A warm wind was blowing . Chameleons were crawling on the broad leaves of the cactus . The Barbarians slackened their speed . They marched on in isolated detachments , or lagged behind one another at long intervals . They ate grapes along the margin of the vines . They lay on the grass and gazed with stupefaction upon the large , artificially twisted horns of the oxen , the sheep clothed with skins to protect their wool , the furrows crossing one another so as to form lozenges , and the ploughshares like ships ' anchors , with the pomegranate trees that were watered with silphium . Such wealth of the soil and such inventions of wisdom dazzled them . In the evening they stretched themselves on the tents without unfolding them ; and thought with regret of Hamilcar 's feast , as they fell asleep with their faces towards the stars . In the middle of the following day they halted on the bank of a river , amid clumps of rose-bays . Then they quickly threw aside lances , bucklers and belts . They bathed with shouts , and drew water in their helmets , while others drank lying flat on their stomachs , and all in the midst of the beasts of burden whose baggage was slipping from them . Spendius , who was seated on a dromedary stolen in Hamilcar 's parks , perceived Matho at a distance , with his arm hanging against his breast , his head bare , and his face bent down , giving his mule drink , and watching the water flow . Spendius immediately ran through the crowd calling him , " Master ! master ! " Matho gave him but scant thanks for his blessings , but Spendius paid no heed to this , and began to march behind him , from time to time turning restless glances in the direction of Carthage . He was the son of a Greek rhetor and a Campanian prostitute . He had at first grown rich by dealing in women ; then , ruined by a shipwreck , he had made war against the Romans with the herdsmen of Samnium . He had been taken and had escaped ; he had been retaken , and had worked in the quarries , panted in the vapour-baths , shrieked under torture , passed through the hands of many masters , and experienced every frenzy . At last , one day , in despair , he had flung himself into the sea from the top of a trireme where he was working at the oar . Some of Hamilcar 's sailors had picked him up when at the point of death , and had brought him to the ergastulum of Megara , at Carthage . But , as fugitives were to be given back to the Romans , he had taken advantage of the confusion to fly with the soldiers . During the whole of the march he remained near Matho ; he brought him food , assisted him to dismount , and spread a carpet in the evening beneath his head . Matho at last was touched by these attentions , and by degrees unlocked his lips . He had been born in the gulf of Syrtis . His father had taken him on a pilgrimage to the temple of Ammon . Then he had hunted elephants in the forests of the Garamantes . Afterwards he had entered the service of Carthage . He had been appointed tetrarch at the capture of Drepanum . The Republic owed him four horses , twenty-three medimni of wheat , and a winter 's pay . He feared the gods , and wished to die in his native land . Spendius spoke to him of his travels , and of the peoples and temples that he had visited . He knew many things : he could make sandals , boar-spears and nets ; he could tame wild beasts and could cook fish . Sometimes he would interrupt himself , and utter a hoarse cry from the depths of his throat ; Matho 's mule would quicken his pace , and others would hasten after them , and then Spendius would begin again though still torn with agony . This subsided at last on the evening of the fourth day . They were marching side by side to the right of the army on the side of a hill ; below them stretched the plain lost in the vapours of the night . The lines of soldiers also were defiling below , making undulations in the shade . From time to time these passed over eminences lit up by the moon ; then stars would tremble on the points of the pikes , the helmets would glimmer for an instant , all would disappear , and others would come on continually . Startled flocks bleated in the distance , and a something of infinite sweetness seemed to sink upon the earth . Spendius , with his head thrown back and his eyes half-closed , inhaled the freshness of the wind with great sighs ; he spread out his arms , moving his fingers that he might the better feel the cares that streamed over his body . Hopes of vengeance came back to him and transported him . He pressed his hand upon his mouth to check his sobs , and half-swooning with intoxication , let go the halter of his dromedary , which was proceeding with long , regular steps . Matho had relapsed into his former melancholy ; his legs hung down to the ground , and the grass made a continuous rustling as it beat against his cothurni . The journey , however , spread itself out without ever coming to an end . At the extremity of a plain they would always reach a round-shaped plateau ; then they would descend again into a valley , and the mountains which seemed to block up the horizon would , in proportion as they were approached , glide as it were from their positions . From time to time a river would appear amid the verdure of tamarisks to lose itself at the turning of the hills . Sometimes a huge rock would tower aloft like the prow of a vessel or the pedestal of some vanished colossus . At regular intervals they met with little quadrangular temples , which served as stations for the pilgrims who repaired to Sicca . They were closed like tombs . The Libyans struck great blows upon the doors to have them opened . But no one inside responded . Then the cultivation became more rare . They suddenly entered upon belts of sand bristling with thorny thickets . Flocks of sheep were browsing among the stones ; a woman with a blue fleece about her waist was watching them . She fled screaming when she saw the soldiers ' pikes among the rocks . They were marching through a kind of large passage bordered by two chains of reddish coloured hillocks , when their nostrils were greeted with a nauseous odour , and they thought that they could see something extraordinary on the top of a carob tree : a lion 's head reared itself above the leaves . They ran thither . It was a lion with his four limbs fastened to a cross like a criminal . His huge muzzle fell upon his breast , and his two fore-paws , half-hidden beneath the abundance of his mane , were spread out wide like the wings of a bird . His ribs stood severally out beneath his distended skin ; his hind legs , which were nailed against each other , were raised somewhat , and the black blood , flowing through his hair , had collected in stalactites at the end of his tail , which hung down perfectly straight along the cross . The soldiers made merry around ; they called him consul , and Roman citizen , and threw pebbles into his eyes to drive away the gnats . But a hundred paces further on they saw two more , and then there suddenly appeared a long file of crosses bearing lions . Some had been so long dead that nothing was left against the wood but the remains of their skeletons ; others which were half eaten away had their jaws twisted into horrible grimaces ; there were some enormous ones ; the shafts of the crosses bent beneath them , and they swayed in the wind , while bands of crows wheeled ceaselessly in the air above their heads . It was thus that the Carthaginian peasants avenged themselves when they captured a wild beast ; they hoped to terrify the others by such an example . The Barbarians ceased their laughter , and were long lost in amazement . " What people is this , " they thought , " that amuses itself by crucifying lions ! " They were , besides , especially the men of the North , vaguely uneasy , troubled , and already sick . They tore their hands with the darts of the aloes ; great mosquitoes buzzed in their ears , and dysentry was breaking out in the army . They were weary at not yet seeing Sicca . They were afraid of losing themselves and of reaching the desert , the country of sands and terrors . Many even were unwilling to advance further . Others started back to Carthage . At last on the seventh day , after following the base of a mountain for a long time , they turned abruptly to the right , and there then appeared a line of walls resting on white rocks and blending with them . Suddenly the entire city rose ; blue , yellow , and white veils moved on the walls in the redness of the evening . These were the priestesses of Tanith , who had hastened hither to receive the men . They stood ranged along the rampart , striking tabourines , playing lyres , and shaking crotala , while the rays of the sun , setting behind them in the mountains of Numidia , shot between the strings of their lyres over which their naked arms were stretched . At intervals their instruments would become suddenly still , and a cry would break forth strident , precipitate , frenzied , continuous , a sort of barking which they made by striking both corners of the mouth with the tongue . Others , more motionless than the Sphynx , rested on their elbows with their chins on their hands , and darted their great black eyes upon the army as it ascended . Although Sicca was a sacred town it could not hold such a multitude ; the temple alone , with its appurtenances , occupied half of it . Accordingly the Barbarians established themselves at their ease on the plain ; those who were disciplined in regular troops , and the rest according to nationality or their own fancy . The Greeks ranged their tents of skin in parallel lines ; the Iberians placed their canvas pavilions in a circle ; the Gauls made themselves huts of planks ; the Libyans cabins of dry stones , while the Negroes with their nails hollowed out trenches in the sand to sleep in . Many , not knowing where to go , wandered about among the baggage , and at nightfall lay down in their ragged mantles on the ground . The plain , which was wholly bounded by mountains , expanded around them . Here and there a palm tree leaned over a sand hill , and pines and oaks flecked the sides of the precipices : sometimes the rain of a storm would hang from the sky like a long scarf , while the country everywhere was still covered with azure and serenity ; then a warm wind would drive before it tornadoes of dust , and a stream would descend in cascades from the heights of Sicca , where , with its roofing of gold on its columns of brass , rose the temple of the Carthaginian Venus , the mistress of the land . She seemed to fill it with her soul . In such convulsions of the soil , such alternations of temperature , and such plays of light would she manifest the extravagance of her might with the beauty of her eternal smile . The mountains at their summits were crescent-shaped ; others were like women 's bosoms presenting their swelling breasts , and the Barbarians felt a heaviness that was full of delight weighing down their fatigues . Spendius had bought a slave with the money brought him by his dromedary . The whole day long he lay asleep stretched before Matho 's tent . Often he would awake , thinking in his dreams that he heard the whistling of the thongs ; with a smile he would pass his hands over the scars on his legs at the place where the fetters had long been worn , and then he would fall asleep again . Matho accepted his companionship , and when he went out Spendius would escort him like a lictor with a long sword on his thigh ; or perhaps Matho would rest his arm carelessly on the other 's shoulder , for Spendius was small . One evening when they were passing together through the streets in the camp they perceived some men covered with white cloaks ; among them was Narr ' Havas , the prince of the Numidians . Matho started . " Your sword ! " he cried ; " I will kill him ! " " Not yet ! " said Spendius , restraining him . Narr ' Havas was already advancing towards him . He kissed both thumbs in token of alliance , showing nothing of the anger which he had experienced at the drunkenness of the feast ; then he spoke at length against Carthage , but did not say what brought him among the Barbarians . " Was it to betray them , or else the Republic ? " Spendius asked himself ; and as he expected to profit by every disorder , he felt grateful to Narr ' Havas for the future perfidies of which he suspected him . The chief of the Numidians remained amongst the Mercenaries . He appeared desirous of attaching Matho to himself . He sent him fat goats , gold dust , and ostrich feathers . The Libyan , who was amazed at such caresses , was in doubt whether to respond to them or to become exasperated at them . But Spendius pacified him , and Matho allowed himself to be ruled by the slave , remaining ever irresolute and in an unconquerable torpor , like those who have once taken a draught of which they are to die . One morning when all three went out lion-hunting , Narr ' Havas concealed a dagger in his cloak . Spendius kept continually behind him , and when they returned the dagger had not been drawn . Another time Narr ' Havas took them a long way off , as far as the boundaries of his kingdom . They came to a narrow gorge , and Narr ' Havas smiled as he declared that he had forgotten the way . Spendius found it again . But most frequently Matho would go off at sunrise , as melancholy as an augur , to wander about the country . He would stretch himself on the sand , and remain there motionless until the evening . He consulted all the soothsayers in the army one after the other , --those who watch the trail of serpents , those who read the stars , and those who breathe upon the ashes of the dead . He swallowed galbanum , seseli , and viper 's venom which freezes the heart ; Negro women , singing barbarous words in the moonlight , pricked the skin of his forehead with golden stylets ; he loaded himself with necklaces and charms ; he invoked in turn Baal-Khamon , Moloch , the seven Kabiri , Tanith , and the Venus of the Greeks . He engraved a name upon a copper plate , and buried it in the sand at the threshold of his tent . Spendius used to hear him groaning and talking to himself . One night he went in . Matho , as naked as a corpse , was lying on a lion 's skin flat on his stomach , with his face in both his hands ; a hanging lamp lit up his armour , which was hooked on to the tent-pole above his head . " You are suffering ? " said the slave to him . " What is the matter with you ? Answer me ? " And he shook him by the shoulder calling him several times , " Master ! master ! " At last Matho lifted large troubled eyes towards him . " Listen ! " he said in a low voice , and with a finger on his lips . " It is the wrath of the Gods ! Hamilcar 's daughter pursues me ! I am afraid of her , Spendius ! " He pressed himself close against his breast like a child terrified by a phantom . " Speak to me ! I am sick ! I want to get well ! I have tried everything ! But you , you perhaps know some stronger gods , or some resistless invocation ? " " For what purpose ? " asked Spendius . Striking his head with both his fists , he replied : " To rid me of her ! " Then speaking to himself with long pauses he said : " I am no doubt the victim of some holocaust which she has promised to the gods ? --She holds me fast by a chain which people cannot see . If I walk , it is she that is advancing ; when I stop , she is resting ! Her eyes burn me , I hear her voice . She encompasses me , she penetrates me . It seems to me that she has become my soul ! " And yet between us there are , as it were , the invisible billows of a boundless ocean ! She is far away and quite inaccessible ! The splendour of her beauty forms a cloud of light around her , and at times I think that I have never seen her--that she does not exist--and that it is all a dream ! " Matho wept thus in the darkness ; the Barbarians were sleeping . Spendius , as he looked at him , recalled the young men who once used to entreat him with golden cases in their hands , when he led his herd of courtesans through the towns ; a feeling of pity moved him , and he said-- " Be strong , my master ! Summon your will , and beseech the gods no more , for they turn not aside at the cries of men ! Weeping like a coward ! And you are not humiliated that a woman can cause you so much suffering ? " " Am I a child ? " said Matho . " Do you think that I am moved by their faces and songs ? We kept them at Drepanum to sweep out our stables . I have embraced them amid assaults , beneath falling ceilings , and while the catapult was still vibrating ! --But she , Spendius , she ! -- " The slave interrupted him : " If she were not Hanno 's daughter-- " " No ! " cried Matho . " She has nothing in common with the daughters of other men ! Have you seen her great eyes beneath her great eyebrows , like suns beneath triumphal arches ? Think : when she appeared all the torches grew pale . Her naked breast shone here and there through the diamonds of her necklace ; behind her you perceived as it were the odour of a temple , and her whole being emitted something that was sweeter than wine and more terrible than death . She walked , however , and then she stopped . " He remained gaping with his head cast down and his eyeballs fixed . " But I want her ! I need her ! I am dying for her ! I am transported with frenzied joy at the thought of clasping her in my arms , and yet I hate her , Spendius ! I should like to beat her ! What is to be done ? I have a mind to sell myself and become her slave ! YOU have been that ! You were able to get sight of her ; speak to me of her ! Every night she ascends to the terrace of her palace , does she not ? Ah ! the stones must quiver beneath her sandals , and the stars bend down to see her ! " He fell back in a perfect frenzy , with a rattling in his throat like a wounded bull . Then Matho sang : " He pursued into the forest the female monster , whose tail undulated over the dead leaves like a silver brook . " And with lingering tones he imitated Salammbo 's voice , while his outspread hands were held like two light hands on the strings of a lyre . To all the consolations offered by Spendius , he repeated the same words ; their nights were spent in these wailings and exhortations . Matho sought to drown his thoughts in wine . After his fits of drunkenness he was more melancholy still . He tried to divert himself at huckle-bones , and lost the gold plates of his necklace one by one . He had himself taken to the servants of the Goddess ; but he came down the hill sobbing , like one returning from a funeral . Spendius , on the contrary , became more bold and gay . He was to be seen in the leafy taverns discoursing in the midst of the soldiers . He mended old cuirasses . He juggled with daggers . He went and gathered herbs in the fields for the sick . He was facetious , dexterous , full of invention and talk ; the Barbarians grew accustomed to his services , and he came to be loved by them . However , they were awaiting an ambassador from Carthage to bring them mules laden with baskets of gold ; and ever beginning the same calculation over again , they would trace figures with their fingers in the sand . Every one was arranging his life beforehand ; they would have concubines , slaves , lands ; others intended to bury their treasure , or risk it on a vessel . But their tempers were provoked by want of employment ; there were constant disputes between horse-soldiers and foot-soldiers , Barbarians and Greeks , while there was a never-ending din of shrill female voices . Every day men came flocking in nearly naked , and with grass on their heads to protect them from the sun ; they were the debtors of the rich Carthaginians and had been forced to till the lands of the latter , but had escaped . Libyans came pouring in with peasants ruined by the taxes , outlaws , and malefactors . Then the horde of traders , all the dealers in wine and oil , who were furious at not being paid , laid the blame upon the Republic . Spendius declaimed against it . Soon the provisions ran low ; and there was talk of advancing in a body upon Carthage , and calling in the Romans . One evening , at supper-time , dull cracked sounds were heard approaching , and something red appeared in the distance among the undulations of the soil . It was a large purple litter , adorned with ostrich feathers at the corners . Chains of crystal and garlands of pearls beat against the closed hangings . It was followed by camels sounding the great bells that hung at their breasts , and having around them horsemen clad from shoulder to heel in armour of golden scales . They halted three hundred paces from the camp to take their round bucklers , broad swords , and Boeotian helmets out of the cases which they carried behind their saddles . Some remained with the camels , while the others resumed their march . At last the ensigns of the Republic appeared , that is to say , staves of blue wood terminated in horses ' heads or fir cones . The Barbarians all rose with applause ; the women rushed towards the guards of the Legion and kissed their feet . The litter advanced on the shoulders of twelve Negroes who walked in step with short , rapid strides ; they went at random to right or left , being embarrassed by the tent-ropes , the animals that were straying about , or the tripods where food was being cooked . Sometimes a fat hand , laden with rings , would partially open the litter , and a hoarse voice would utter loud reproaches ; then the bearers would stop and take a different direction through the camp . But the purple curtains were raised , and a human head , impassible and bloated , was seen resting on a large pillow ; the eyebrows , which were like arches of ebony , met each other at the points ; golden dust sparkled in the frizzled hair , and the face was so wan that it looked as if it had been powdered with marble raspings . The rest of the body was concealed beneath the fleeces which filled the litter . In the man so reclining the soldiers recognised the Suffet Hanno , he whose slackness had assisted to lose the battle of the Aegatian islands ; and as to his victory at Hecatompylos over the Libyans , even if he did behave with clemency , thought the Barbarians , it was owing to cupidity , for he had sold all the captives on his own account , although he had reported their deaths to the Republic . After seeking for some time a convenient place from which to harangue the soldiers , he made a sign ; the litter stopped , and Hanno , supported by two slaves , put his tottering feet to the ground . He wore boots of black felt strewn with silver moons . His legs were swathed in bands like those wrapped about a mummy , and the flesh crept through the crossings of the linen ; his stomach came out beyond the scarlet jacket which covered his thighs ; the folds of his neck fell down to his breast like the dewlaps of an ox ; his tunic , which was painted with flowers , was bursting at the arm-pits ; he wore a scarf , a girdle , and an ample black cloak with laced double-sleeves . But the abundance of his garments , his great necklace of blue stones , his golden clasps , and heavy earrings only rendered his deformity still more hideous . He might have been taken for some big idol rough-hewn in a block of stone ; for a pale leprosy , which was spread over his whole body , gave him the appearance of an inert thing . His nose , however , which was hooked like a vulture 's beak , was violently dilated to breathe in the air , and his little eyes , with their gummed lashes , shone with a hard and metallic lustre . He held a spatula of aloe-wood in his hand wherewith to scratch his skin . At last two heralds sounded their silver horns ; the tumult subsided , and Hanno commenced to speak . He began with an eulogy of the gods and the Republic ; the Barbarians ought to congratulate themselves on having served it . But they must show themselves more reasonable ; times were hard , " and if a master has only three olives , is it not right that he should keep two for himself ? " The old Suffet mingled his speech in this way with proverbs and apologues , nodding his head the while to solicit some approval . He spoke in Punic , and those surrounding him ( the most alert , who had hastened thither without their arms ) , were Campanians , Gauls , and Greeks , so that no one in the crowd understood him . Hanno , perceiving this , stopped and reflected , swaying himself heavily from one leg to the other . It occurred to him to call the captains together ; then his heralds shouted the order in Greek , the language which , from the time of Xanthippus , had been used for commands in the Carthaginian armies . The guards dispersed the mob of soldiers with strokes of the whip ; and the captains of the Spartan phalanxes and the chiefs of the Barbarian cohorts soon arrived with the insignia of their rank , and in the armour of their nation . Night had fallen , a great tumult was spreading throughout the plain ; fires were burning here and there ; and the soldiers kept going from one to another asking what the matter was , and why the Suffet did not distribute the money ? He was setting the infinite burdens of the Republic before the captains . Her treasury was empty . The tribute to Rome was crushing her . " We are quite at a loss what to do ! She is much to be pitied ! " From time to time he would rub his limbs with his aloe-wood spatula , or perhaps he would break off to drink a ptisan made of the ashes of a weasel and asparagus boiled in vinegar from a silver cup handed to him by a slave ; then he would wipe his lips with a scarlet napkin and resume : " What used to be worth a shekel of silver is now worth three shekels of gold , while the cultivated lands which were abandoned during the war bring in nothing ! Our purpura fisheries are nearly gone , and even pearls are becoming exhorbitant ; we have scarcely unguents enough for the service of the gods ! As for the things of the table , I shall say nothing about them ; it is a calamity ! For want of galleys we are without spices , and it is a matter of great difficulty to procure silphium on account of the rebellions on the Cyrenian frontier . Sicily , where so many slaves used to be had , is now closed to us ! Only yesterday I gave more money for a bather and four scullions than I used at one time to give for a pair of elephants ! " He unrolled a long piece of papyrus ; and , without omitting a single figure , read all the expenses that the government had incurred ; so much for repairing the temples , for paving the streets , for the construction of vessels , for the coral-fisheries , for the enlargement of the Syssitia , and for engines in the mines in the country of the Cantabrians . But the captains understood Punic as little as the soldiers , although the Mercenaries saluted one another in that language . It was usual to place a few Carthaginian officers in the Barbarian armies to act as interpreters ; after the war they had concealed themselves through fear of vengeance , and Hanno had not thought of taking them with him ; his hollow voice , too , was lost in the wind . The Greeks , girthed in their iron waist-belts , strained their ears as they strove to guess at his words , while the mountaineers , covered with furs like bears , looked at him with distrust , or yawned as they leaned on their brass-nailed clubs . The heedless Gauls sneered as they shook their lofty heads of hair , and the men of the desert listened motionless , cowled in their garments of grey wool ; others kept coming up behind ; the guards , crushed by the mob , staggered on their horses ; the Negroes held out burning fir branches at arm 's length ; and the big Carthaginian , mounted on a grassy hillock , continued his harangue . The Barbarians , however , were growing impatient ; murmuring arose , and every one apostrophized him . Hanno gesticulated with his spatula ; and those who wished the others to be quiet shouted still more loudly , thereby adding to the din . Suddenly a man of mean appearance bounded to Hanno 's feet , snatched up a herald 's trumpet , blew it , and Spendius ( for it was he ) announced that he was going to say something of importance . At this declaration , which was rapidly uttered in five different languages , Greek , Latin , Gallic , Libyan and Balearic , the captains , half laughing and half surprised , replied : " Speak ! Speak ! " Spendius hesitated ; he trembled ; at last , addressing the Libyans who were the most numerous , he said to them : " You have all heard this man 's horrible threats ! " Hanno made no exclamation , therefore he did not understand Libyan ; and , to carry on the experiment , Spendius repeated the same phrase in the other Barbarian dialects . They looked at one another in astonishment ; then , as by a tacit agreement , and believing perhaps that they had understood , they bent their heads in token of assent . Then Spendius began in vehement tones : " He said first that all the Gods of the other nations were but dreams besides the Gods of Carthage ! He called you cowards , thieves , liars , dogs , and the sons of dogs ! But for you ( he said that ! ) the Republic would not be forced to pay excessive tribute to the Romans ; and through your excesses you have drained it of perfumes , aromatics , slaves , and silphium , for you are in league with the nomads on the Cyrenian frontier ! But the guilty shall be punished ! He read the enumeration of their torments ; they shall be made to work at the paving of the streets , at the equipment of the vessels , at the adornment of the Syssitia , while the rest shall be sent to scrape the earth in the mines in the country of the Cantabrians . " Spendius repeated the same statements to the Gauls , Greeks , Campanians and Balearians . The Mercenaries , recognising several of the proper names which had met their ears , were convinced that he was accurately reporting the Suffet 's speech . A few cried out to him , " You lie ! " but their voices were drowned in the tumult of the rest ; Spendius added : " Have you not seen that he has left a reserve of his horse-soldiers outside the camp ? At a given signal they will hasten hither to slay you all . " The Barbarians turned in that direction , and as the crowd was then scattering , there appeared in the midst of them , and advancing with the slowness of a phantom , a human being , bent , lean , entirely naked , and covered down to his flanks with long hair bristling with dried leaves , dust and thorns . About his loins and his knees he had wisps of straw and linen rags ; his soft and earthy skin hung on his emaciated limbs like tatters on dried boughs ; his hands trembled with a continuous quivering , and as he walked he leaned on a staff of olive-wood . He reached the Negroes who were bearing the torches . His pale gums were displayed in a sort of idiotic titter ; his large , scared eyes gazed upon the crowd of Barbarians around him . But uttering a cry of terror he threw himself behind them , shielding himself with their bodies . " There they are ! There they are ! " he stammered out , pointing to the Suffet 's guards , who were motionless in their glittering armour . Their horses , dazzled by the light of the torches which crackled in the darkness , were pawing the ground ; the human spectre struggled and howled : " They have killed them ! " At these words , which were screamed in Balearic , some Balearians came up and recognised him ; without answering them he repeated : " Yes , all killed , all ! crushed like grapes ! The fine young men ! the slingers ! my companions and yours ! " They gave him wine to drink , and he wept ; then he launched forth into speech . Spendius could scarcely repress his joy , as he explained the horrors related by Zarxas to the Greeks and Libyans ; he could not believe them , so appropriately did they come in . The Balearians grew pale as they learned how their companions had perished . It was a troop of three hundred slingers who had disembarked the evening before , and had on that day slept too late . When they reached the square of Khamon the Barbarians were gone , and they found themselves defenceless , their clay bullets having been put on the camels with the rest of the baggage . They were allowed to advance into the street of Satheb as far as the brass sheathed oaken gate ; then the people with a single impulse had sprung upon them . Indeed , the soldiers remembered a great shout ; Spendius , who was flying at the head of the columns , had not heard it . Then the corpses were placed in the arms of the Pataec gods that fringed the temple of Khamon . They were upbraided with all the crimes of the Mercenaries ; their gluttony , their thefts , their impiety , their disdain , and the murder of the fishes in Salammbo 's garden . Their bodies were subjected to infamous mutilations ; the priests burned their hair in order to torture their souls ; they were hung up in pieces in the meat-shops ; some even buried their teeth in them , and in the evening funeral-piles were kindled at the cross-ways to finish them . These were the flames that had gleamed from a distance across the lake . But some houses having taken fire , any dead or dying that remained were speedily thrown over the walls ; Zarxas had remained among the reeds on the edge of the lake until the following day ; then he had wandered about through the country , seeking for the army by the footprints in the dust . In the morning he hid himself in caves ; in the evening he resumed his march with his bleeding wounds , famished , sick , living on roots and carrion ; at last one day he perceived lances on the horizon , and he had followed them , for his reason was disturbed through his terrors and miseries . The indignation of the soldiers , restrained so long as he was speaking , broke forth like a tempest ; they were going to massacre the guards together with the Suffet . A few interposed , saying that they ought to hear him and know at least whether they should be paid . Then they all cried : " Our money ! " Hanno replied that he had brought it . They ran to the outposts , and the Suffet 's baggage arrived in the midst of the tents , pressed forward by the Barbarians . Without waiting for the slaves , they very quickly unfastened the baskets ; in them they found hyacinth robes , sponges , scrapers , brushes , perfumes , and antimony pencils for painting the eyes--all belonging to the guards , who were rich men and accustomed to such refinements . Next they uncovered a large bronze tub on a camel : it belonged to the Suffet who had it for bathing in during his journey ; for he had taken all manner of precautions , even going so far as to bring caged weasels from Hecatompylos , which were burnt alive to make his ptisan . But , as his malady gave him a great appetite , there were also many comestibles and many wines , pickle , meats and fishes preserved in honey , with little pots of Commagene , or melted goose-fat covered with snow and chopped straw . There was a considerable supply of it ; the more they opened the baskets the more they found , and laughter arose like conflicting waves . As to the pay of the Mercenaries it nearly filled two esparto-grass baskets ; there were even visible in one of them some of the leathern discs which the Republic used to economise its specie ; and as the Barbarians appeared greatly surprised , Hanno told them that , their accounts being very difficult , the Ancients had not had leisure to examine them . Meanwhile they had sent them this . Then everything was in disorder and confusion : mules , serving men , litter , provisions , and baggage . The soldiers took the coin in the bags to stone Hanno . With great difficulty he was able to mount an ass ; and he fled , clinging to its hair , howling , weeping , shaken , bruised , and calling down the curse of all the gods upon the army . His broad necklace of precious stones rebounded up to his ears . His cloak which was too long , and which trailed behind him , he kept on with his teeth , and from afar the Barbarians shouted at him , " Begone coward ! pig ! sink of Moloch ! sweat your gold and your plague ! quicker ! quicker ! " The routed escort galloped beside him . But the fury of the Barbarians did not abate . They remembered that several of them who had set out for Carthage had not returned ; no doubt they had been killed . So much injustice exasperated them , and they began to pull up the stakes of their tents , to roll up their cloaks , and to bridle their horses ; every one took his helmet and sword , and instantly all was ready . Those who had no arms rushed into the woods to cut staves . Day dawned ; the people of Sicca were roused , and stirring in the streets . " They are going to Carthage , " said they , and the rumour of this soon spread through the country . From every path and every ravine men arose . Shepherds were seen running down from the mountains . Then , when the Barbarians had set out , Spendius circled the plain , riding on a Punic stallion , and attended by his slave , who led a third horse . A single tent remained . Spendius entered it . " Up , master ! rise ! we are departing ! " " And where are you going ? " asked Matho . " To Carthage ! " cried Spendius . Matho bounded upon the horse which the slave held at the door . </text>
<text id="FictGrimmJ_Bremusicians_EN.txt">
﻿ The Bremen town musicians There was once an ass whose master had made him carry sacks to the mill for many a long year , but whose strength began at last to fail , so that each day as it came found him less capable of work . Then his master began to think of turning him out , but the ass , guessing that something was in the wind that boded him no good , ran away , taking the road to Bremen ; for there he thought he might get an engagement as town musician . When he had gone a little way he found a hound lying by the side of the road panting , as if he had run a long way . “ Now , Holdfast , what are you so out of breath about ? ” said the ass . “ Oh dear ! ” said the dog , “ now I am old , I get weaker every day , and can do no good in the hunt , so , as my master was going to have me killed , I have made my escape ; but now , how am I to gain a living ? ” - “ I will tell you what , ” said the ass , “ I am going to Bremen to become town musician . You may as well go with me , and take up music too . I can play the lute , and you can beat the drum . ” And the dog consented , and they walked on together . It was not long before they came to a cat sitting in the road , looking as dismal as three wet days. “ Now then , what is the matter with you , old shaver ? ” said the ass . “ I should like to know who would be cheerful when his neck is in danger , ” answered the cat . “ Now that I am old my teeth are getting blunt , and I would rather sit by the oven and purr than run about after mice , and my mistress wanted to drown me ; so I took myself off ; but good advice is scarce , and I do not know what is to become of me . ” - “ Go with us to Bremen , ” said the ass , “ and become town musician . You understand serenading . ” The cat thought well of the idea , and went with them accordingly . After that the three travellers passed by a yard , and a cock was perched on the gate crowing with all his might . “ Your cries are enough to pierce bone and marrow , ” said the ass ; “ what is the matter ? ” - “ I have foretold good weather for Lady-day , so that all the shirts may be washed and dried ; and now on Sunday morning company is coming , and the mistress has told the cook that I must be made into soup , and this evening my neck is to be wrung , so that I am crowing with all my might while I can . ” - “ You had much better go with us , Chanticleer , ” said the ass . “ We are going to Bremen . At any rate that will be better than dying . You have a powerful voice , and when we are all performing together it will have a very good effect . ” So the cock consented , and they went on all four together . But Bremen was too far off to be reached in one day , and towards evening they came to a wood , where they determined to pass the night . The ass and the dog lay down under a large tree ; the cat got up among the branches , and the cock flew up to the top , as that was the safest place for him . Before he went to sleep he looked all round him to the four points of the compass , and perceived in the distance a little light shining , and he called out to his companions that there must be a house not far off , as he could see a light , so the ass said , “ We had better get up and go there , for these are uncomfortable quarters . ” The dog began to fancy a few bones , not quite bare , would do him good . And they all set off in the direction of the light , and it grew larger and brighter , until at last it led them to a robber’s house , all lighted up . The ass . being the biggest , went up to the window , and looked in . “ Well , what do you see ? ” asked the dog . “ What do I see ? ” answered the ass ; “ here is a table set out with splendid eatables and drinkables , and robbers sitting at it and making themselves very comfortable . ” - “ That would just suit us , ” said the cock . “ Yes , indeed , I wish we were there , ” said the ass . Then they consulted together how it should be managed so as to get the robbers out of the house , and at last they hit on a plan . The ass was to place his forefeet on the window-sill , the dog was to get on the ass’s back , the cat on the top of the dog , and lastly the cock was to fly up and perch on the cat’s head . When that was done , at a given signal they all began to perform their music . The ass brayed , the dog barked , the cat mewed , and the cock crowed ; then they burst through into the room , breaking all the panes of glass . The robbers fled at the dreadful sound ; they thought it was some goblin , and fled to the wood in the utmost terror . Then the four companions sat down to table , made free with the remains of the meal , and feasted as if they had been hungry for a month . And when they had finished they put out the lights , and each sought out a sleeping-place to suit his nature and habits . The ass laid himself down outside on the dunghill , the dog behind the door , the cat on the hearth by the warm ashes , and the cock settled himself in the cockloft , and as they were all tired with their long journey they soon fell fast asleep . When midnight drew near , and the robbers from afar saw that no light was burning , and that everything appeared quiet , their captain said to them that he thought that they had run away without reason , telling one of them to go and reconnoitre . So one of them went , and found everything quite quiet ; he went into the kitchen to strike a light , and taking the glowing fiery eyes of the cat for burning coals , he held a match to them in order to kindle it . But the cat , not seeing the joke , flew into his face , spitting and scratching . Then he cried out in terror , and ran to get out at the back door , but the dog , who was lying there , ran at him and bit his leg ; and as he was rushing through the yard by the dunghill the ass struck out and gave him a great kick with his hind foot ; and the cock , who had been wakened with the noise , and felt quite brisk , cried out , “ Cock-a-doodle-doo ! ” Then the robber got back as well as he could to his captain , and said , “ Oh dear ! in that house there is a gruesome witch , and I felt her breath and her long nails in my face ; and by the door there stands a man who stabbed me in the leg with a knife ; and in the yard there lies a black spectre , who beat me with his wooden club ; and above , upon the roof , there sits the justice , who cried , ‘ Bring that rogue here ! ’ And so I ran away from the place as fast as I could . ” From that time forward the robbers never ventured to that house , and the four Bremen town musicians found themselves so well off where they were , that there they stayed . And the person who last related this tale is still living , as you see . </text>
<text id="FictGrimmJ_HanselGretel_EN.txt">
﻿ Hansel and Grethel Near a great forest there lived a poor woodcutter and his wife , and his two children ; the boy 's name was Hansel and the girl 's Grethel . They had very little to bite or to sup , and once , when there was great dearth in the land , the man could not even gain the daily bread . As he lay in bed one night thinking of this , and turning and tossing , he sighed heavily , and said to his wife , “ What will become of us ? we cannot even feed our children ; there is nothing left for ourselves . ” “ I will tell you what , husband , ” answered the wife ; “ we will take the children early in the morning into the forest , where it is thickest ; we will make them a fire , and we will give each of them a piece of bread , then we will go to our work and leave them alone ; they will never find the way home again , and we shall be quit of them . ” “ No , wife , ” said the man , “ I cannot do that ; I cannot find in my heart to take my children into the forest and to leave them there alone ; the wild animals would soon come and devour them . ” “ O you fool , ” said she , “ then we will all four starve ; you had better get the coffins ready , ” and she left him no peace until he consented . “ But I really pity the poor children , ” said the man . The two children had not been able to sleep for hunger , and had heard what their step-mother had said to their father . Grethel wept bitterly , and said to Hansel , “ It is all over with us . ” “ Do be quiet , Grethel , ” said Hansel , “ and do not fret ; 1 will manage something . ” And when the parents had gone to sleep he got up , put on his little coat , opened the back door , and slipped out . The moon was shining brightly , and the white flints that lay in front of the house glistened like pieces of silver . Hansel stooped and filled the little pocket of his coat as full as it would hold . Then he went back again , and said to Grethel , “ Be easy , dear little sister , and go to sleep quietly ; God will not forsake us , ” and laid himself down again in his bed . When the day was breaking , and before the sun had risen , the wife came and awakened the two children , saying , “ Get up , you lazy bones ; we are going into the forest to cut wood . ” Then she gave each of them a piece of bread , and said , “ That is for dinner , and you must not eat it before then , for you will get no more . ” Grethel carried the bread under her apron , for Hansel had his pockets full of the flints . Then they set off all together on their way to the forest . When they had gone a little way Hansel stood still and looked back towards the house , and this he did again and again , till his father said to him , “ Hansel , what are you looking at ? take care not to forget your legs . ” “ O father , ” said Hansel , “ lam looking at my little white kitten , who is sitting up on the roof to bid me good-bye . ” “ You young fool , ” said the woman , “ that is not your kitten , but the sunshine on the chimney-pot . ” Of course Hansel had not been looking at his kitten , but had been taking every now and then a flint from his pocket and dropping it on the road . When they reached the middle of the forest the father told the children to collect wood to make a fire to keep them , warm ; and Hansel and Grethel gathered brushwood enough for a little mountain j and it was set on fire , and when the flame was burning quite high the wife said , “ Now lie down by the fire and rest yourselves , you children , and we will go and cut wood ; and when we are ready we will come and fetch you . ” So Hansel and Grethel sat by the fire , and at noon they each ate their pieces of bread . They thought their father was in the wood all the time , as they seemed to hear the strokes of the axe : but really it was only a dry branch hanging to a withered tree that the wind moved to and fro . So when they had stayed there a long time their eyelids closed with weariness , and they fell fast asleep . When at last they woke it was night , and Grethel began to cry , and said , “ How shall we ever get out of this wood ? “ But Hansel comforted her , saying , “ Wait a little while longer , until the moon rises , and then we can easily find the way home . ” And when the full moon got up Hansel took his little sister by the hand , and followed the way where the flint stones shone like silver , and showed them the road . They walked on the whole night through , and at the break of day they came to their father 's house . They knocked at the door , and when the wife opened it and saw that it was Hansel and Grethel she said , “ You naughty children , why did you sleep so long in the wood ? we thought you were never coming home again ! ” But the father was glad , for it had gone to his heart to leave them both in the woods alone . Not very long after that there was again great scarcity in those parts , and the children heard their mother say at night in bed to their father , “ Everything is finished up ; we have only half a loaf , and after that the tale comes to an end . The children must be off ; we will take them farther into the wood this time , so that they shall not be able to find the way back again ; there is no other way to manage . ” The man felt sad at heart , and he thought , “ It would better to share one 's last morsel with one 's children . ” But the wife would listen to nothing that he said , but scolded and reproached him . He who says A must say B too , and when a man has given in once he has to do it a second time . But the children were not asleep , and had heard all the talk . When the parents had gone to sleep Hansel got up to go out and get more flint stones , as he did before , but the wife had locked the door , and Hansel could not get out ; but he comforted his little sister , and said , “ Do n't cry , Grethel , and go to sleep quietly , and God will help us . ” Early the next morning the wife came and pulled the children out of bed . She gave them each a little piece of “ bread -less than before ; and on the way to the wood Hansel crumbled the bread in his pocket , and often stopped to throw a crumb on the ground . “ Hansel , what are you stopping behind and staring for ? ” said the father . “ I am looking at my little pigeon sitting on the roof , to say good-bye to me , ” answered Hansel . “ You fool , ” said the wife , “ that is no pigeon , but the morning sun shining on the chimney pots . ” Hansel went on as before , and strewed bread crumbs all along the road . The woman led the children far into the wood , where they had never been before in all their lives . And again there was a large fire made , and the mother said , “ Sit still there , you children , and when you are tired you can go to sleep ; we are going into the forest to cut wood , and in the evening , when we are ready to go home we will come and fetch you . ” So when noon came Grethel shared her bread with Hansel , who had strewed his along the road . Then they went to sleep , and the evening passed , and no one came for the poor children . When they awoke it was dark night , and Hansel comforted his little sister , and said , “ Wait a little , Grethel , until the moon gets up , then we shall be able to see the way home by the crumbs of bread that I have scattered along it . ” So when the moon rose they got up , but they could find no crumbs of bread , for the birds of the woods and of the fields had come and picked them up . Hansel thought they might find the way all the same , but they could not . They went on all that night , and the next day from the morning until the evening , but they could not find the way out of the wood , and they were very hungry , for they had nothing to eat but the few berries they could pick up . And when they were so tired that they could no longer drag themselves along , they lay down under a tree and fell asleep . It was now the third morning since they had left their father 's house . They were always trying to get back to it , but instead of that they only found themselves farther in the wood , and if help had not soon come they would have been starved . About noon they saw a pretty snow-white bird sitting on a bough , and singing so sweetly that they stopped to listen . And when he had finished the bird spread his wings and flew before them , and they followed after him until they came to a little house , and the bird perched on the roof , and when they came nearer they saw that the house was built of bread , and roofed with cakes ; and the window was of transparent sugar . “ We will have some of this , ” said Hansel , “ and make a fine meal . I will eat a piece of the roof , Grethel , and you can have some of the window-that will taste sweet . ” So Hansel reached up and broke off a bit of the roof , just to see how it tasted , and Grethel stood by the window and gnawed at it . Then they heard a thin voice call out from inside , “ Nibble , nibble , like a mouse , Who is nibbling at my house ? ” And the children answered , “ Never mind , It is the wind . ” And they went on eating , never disturbing themselves . Hansel , who found that the roof tasted very nice , took down a great piece of it , and Grethel pulled out a large round window-pane , and sat her down and began upon it . Then the door opened , and an aged woman came out , leaning upon a crutch . Hansel and Grethel felt very frightened , and let fall what they had in their hands . The old woman , however , nodded her head , and said , “ Ah , my dear children , how come you here ? you must come indoors and stay with me , you will be no trouble . ” So she took them each by the hand , and led them into her little house . And there they found a good meal laid out , of milk and pancakes , with sugar , apples , and nuts . After that she showed them two little white beds , and Hansel and Grethel laid themselves down on them , and thought they were in heaven . The old woman , although her behaviour was so kind , was a wicked witch , who lay in wait for children , and had built the little house on purpose to entice them . When they were once inside she used to kill them , cook them , and eat them , and then it was a feast day with her . The witch 's eyes were red , and she could not see very far , but she had a keen scent , like the beasts , and knew very well when human creatures were near . When she knew that Hansel and Grethel were coming , she gave a spiteful laugh , and said triumphantly , “ I have them , and they shall not escape me ! ” Early in the morning , before the children were awake , she got up to look at them , and as they lay sleeping so peacefully with round rosy cheeks , she said to herself , “ What a fine feast I shall have ! ” Then she grasped Hansel with her withered hand , and led him into a little stable , and shut him up behind a grating ; and call and scream as he might , it was no good . Then she went back to Grethel and shook her , crying , “ Get up , lazy bones ; fetch water , and cook something nice for your brother ; he is outside in the stable , and must be fattened up . And when he is fat enough I will eat him . ” Grethel began to weep bitterly , but it was of no use , she had to do what the wicked witch bade her . And so the best kind of victuals was cooked for poor Hansel , while Grethel got nothing but crab-shells . Each morning the old woman visited the little stable , and cried , “ Hansel , stretch out your finger , that I may tell if you will soon be fat enough . ” Hansel , however , used to hold out a little bone , and the old woman , who had weak eyes , could not see what it was , and supposing it to be Hansel 's finger , wondered very much that it was not getting fatter . When four weeks had passed and Hansel seemed to remain so thin , she lost patience and could wait no longer . “ Now then , Grethel , ” cried she to the little girl ; “ be quick and draw water ; be Hansel fat or be he lean , tomorrow I must kill and cook him . ” Oh what a grief for the poor little sister to have to fetch water , and how the tears flowed down over her cheeks ! “ Dear God , pray help us ! ” cried she ; “ if we had been devoured by wild beasts in the wood at least we should have died together . ” “ Spare me your lamentations , ” said the old woman ; “ they are of no avail . ” Early next morning Grethel had to get up , make the fire , and fill the kettle . “ First we will do the baking , ” said the old woman ; “ I nave heated the oven already , and kneaded the dough . ” She pushed poor Grethel towards the oven , out of which the flames were already shining . “ Creep in , ” said the witch , “ and see if it is properly hot , so that the bread may be baked . ” And Grethel once in , she meant to shut the door upon her and let her be baked , and then she would have eaten her . But Grethel perceived her intention , and said , “ I do n't know how to do it : how shall I get in ? ” “ Stupid goose , ” said the old woman , “ the opening is big enough , do you see ? I could get in myself ! ” and she stooped down and put her head in the oven 's mouth . Then Grethel gave her a push , so that she went in farther , and she shut the iron door upon her , and put up the bar . Oh how frightfully she howled ! but Grethel ran away , and left the wicked witch to burn miserably . Grethel went straight to Hansel , opened the stable-door , and cried , “ Hansel , we are free ! the old witch is dead ! ” Then out flew Hansel like a bird from its cage as soon as the door is opened . How rejoiced they both were ! how they fell each on the other 's neck ! and danced about , and kissed each other ! And as they had nothing more to fear they went over all the old witch 's house , and in every corner there stood chests of pearls and precious stones . “ This is something better than flint stones , ” said Hansel , as he filled his pockets , and Grethel , thinking she also would like to carry something home with her , filled her apron full . i ! Now , away we go , ” said Hansel , ” if we only can get out of the witch 's wood . ” When they had journeyed a few hours they came to a great piece of water . “ We can never get across this , ” said Hansel , “ I see no stepping-stones and no bridge . ” “ And there is no boat either , ” said Grethel ; “ but here comes a white duck ; if I ask her she will help us over . ” So she cried , “ Duck , duck , here we stand , Hansel and Grethel , on the land , Stepping-stones and bridge we lack , Carry us over on your nice white back . ” And the duck came accordingly , and Hansel got upon her and told his sister to come too . “ No , ” answered Grethel , “ that would be too hard upon the duck ; we can go separately , one after the other . ” And that was how it was managed , and after that they went on happily , until they came to the wood , and the way grew more and more familiar , till at last they saw in the distance their father 's house . Then they ran till they came up to it , rushed in at the door , and fell on their father 's neck . The man had not had a quiet hour since he left his children in the wood ; but the wife was dead . And when Grethel opened her apron the pearls and precious stones were scattered all over the room , and Hansel took one handful after another out of his pocket . Then was all care at an end , and they lived in great joy together . My tale is done , there runs a mouse , whosoever catches it , may make himself a big fur cap out of it . </text>
<text id="FictHugoV_Hunchback_II5_EN.txt">
﻿ CHAPTER V. RESULT OF THE DANGERS . Gringoire , thoroughly stunned by his fall , remained on the pavement in front of the Holy Virgin at the street corner . Little by little , he regained his senses ; at first , for several minutes , he was floating in a sort of half-somnolent revery , which was not without its charm , in which aeriel figures of the gypsy and her goat were coupled with Quasimodo 's heavy fist . This state lasted but a short time . A decidedly vivid sensation of cold in the part of his body which was in contact with the pavement , suddenly aroused him and caused his spirit to return to the surface . " Whence comes this chill ? " he said abruptly , to himself . He then perceived that he was lying half in the middle of the gutter . " That devil of a hunchbacked cyclops ! " he muttered between his teeth ; and he tried to rise . But he was too much dazed and bruised ; he was forced to remain where he was . Moreover , his hand was tolerably free ; he stopped up his nose and resigned himself . " The mud of Paris , " he said to himself--for decidedly he thought that he was sure that the gutter would prove his refuge for the night ; and what can one do in a refuge , except dream ? --"the mud of Paris is particularly stinking ; it must contain a great deal of volatile and nitric salts . That , moreover , is the opinion of Master Nicholas Flamel , and of the alchemists-- " The word " alchemists " suddenly suggested to his mind the idea of Archdeacon Claude Frollo . He recalled the violent scene which he had just witnessed in part ; that the gypsy was struggling with two men , that Quasimodo had a companion ; and the morose and haughty face of the archdeacon passed confusedly through his memory . " That would be strange ! " he said to himself . And on that fact and that basis he began to construct a fantastic edifice of hypothesis , that card-castle of philosophers ; then , suddenly returning once more to reality , " Come ! I 'm freezing ! " he ejaculated . The place was , in fact , becoming less and less tenable . Each molecule of the gutter bore away a molecule of heat radiating from Gringoire 's loins , and the equilibrium between the temperature of his body and the temperature of the brook , began to be established in rough fashion . Quite a different annoyance suddenly assailed him . A group of children , those little bare-footed savages who have always roamed the pavements of Paris under the eternal name of _gamins_ , and who , when we were also children ourselves , threw stones at all of us in the afternoon , when we came out of school , because our trousers were not torn--a swarm of these young scamps rushed towards the square where Gringoire lay , with shouts and laughter which seemed to pay but little heed to the sleep of the neighbors . They were dragging after them some sort of hideous sack ; and the noise of their wooden shoes alone would have roused the dead . Gringoire who was not quite dead yet , half raised himself . " Ohé , Hennequin Dandéche ! Ohè , Jehan Pincebourde ! " they shouted in deafening tones , " old Eustache Moubon , the merchant at the corner , has just died . We 've got his straw pallet , we 're going to have a bonfire out of it . It 's the turn of the Flemish to-day ! " And behold , they flung the pallet directly upon Gringoire , beside whom they had arrived , without espying him . At the same time , one of them took a handful of straw and set off to light it at the wick of the good Virgin . " S'death ! " growled Gringoire , " am I going to be too warm now ? " It was a critical moment . He was caught between fire and water ; he made a superhuman effort , the effort of a counterfeiter of money who is on the point of being boiled , and who seeks to escape . He rose to his feet , flung aside the straw pallet upon the street urchins , and fled . " Holy Virgin ! " shrieked the children ; " 'tis the merchant 's ghost ! " And they fled in their turn . The straw mattress remained master of the field . Belleforet , Father Le Juge , and Corrozet affirm that it was picked up on the morrow , with great pomp , by the clergy of the quarter , and borne to the treasury of the church of Saint Opportune , where the sacristan , even as late as 1789 , earned a tolerably handsome revenue out of the great miracle of the Statue of the Virgin at the corner of the Rue Mauconseil , which had , by its mere presence , on the memorable night between the sixth and seventh of January , 1482 , exorcised the defunct Eustache Moubon , who , in order to play a trick on the devil , had at his death maliciously concealed his soul in his straw pallet . </text>
<text id="FictHugoV_Hunchback_IV3_EN.txt">
﻿ CHAPTER III . _IMMANIS PECORIS CUSTOS , IMMANIOR IPSE_ . Now , in 1482 , Quasimodo had grown up . He had become a few years previously the bellringer of Notre-Dame , thanks to his father by adoption , Claude Frollo , --who had become archdeacon of Josas , thanks to his suzerain , Messire Louis de Beaumont , --who had become Bishop of Paris , at the death of Guillaume Chartier in 1472 , thanks to his patron , Olivier Le Daim , barber to Louis XI . , king by the grace of God . So Quasimodo was the ringer of the chimes of Notre-Dame . In the course of time there had been formed a certain peculiarly intimate bond which united the ringer to the church . Separated forever from the world , by the double fatality of his unknown birth and his natural deformity , imprisoned from his infancy in that impassable double circle , the poor wretch had grown used to seeing nothing in this world beyond the religious walls which had received him under their shadow . Notre-Dame had been to him successively , as he grew up and developed , the egg , the nest , the house , the country , the universe . There was certainly a sort of mysterious and pre-existing harmony between this creature and this church . When , still a little fellow , he had dragged himself tortuously and by jerks beneath the shadows of its vaults , he seemed , with his human face and his bestial limbs , the natural reptile of that humid and sombre pavement , upon which the shadow of the Romanesque capitals cast so many strange forms . Later on , the first time that he caught hold , mechanically , of the ropes to the towers , and hung suspended from them , and set the bell to clanging , it produced upon his adopted father , Claude , the effect of a child whose tongue is unloosed and who begins to speak . It is thus that , little by little , developing always in sympathy with the cathedral , living there , sleeping there , hardly ever leaving it , subject every hour to the mysterious impress , he came to resemble it , he incrusted himself in it , so to speak , and became an integral part of it . His salient angles fitted into the retreating angles of the cathedral ( if we may be allowed this figure of speech ) , and he seemed not only its inhabitant but more than that , its natural tenant . One might almost say that he had assumed its form , as the snail takes on the form of its shell . It was his dwelling , his hole , his envelope . There existed between him and the old church so profound an instinctive sympathy , so many magnetic affinities , so many material affinities , that he adhered to it somewhat as a tortoise adheres to its shell . The rough and wrinkled cathedral was his shell . It is useless to warn the reader not to take literally all the similes which we are obliged to employ here to express the singular , symmetrical , direct , almost consubstantial union of a man and an edifice . It is equally unnecessary to state to what a degree that whole cathedral was familiar to him , after so long and so intimate a cohabitation . That dwelling was peculiar to him . It had no depths to which Quasimodo had not penetrated , no height which he had not scaled . He often climbed many stones up the front , aided solely by the uneven points of the carving . The towers , on whose exterior surface he was frequently seen clambering , like a lizard gliding along a perpendicular wall , those two gigantic twins , so lofty , so menacing , so formidable , possessed for him neither vertigo , nor terror , nor shocks of amazement . To see them so gentle under his hand , so easy to scale , one would have said that he had tamed them . By dint of leaping , climbing , gambolling amid the abysses of the gigantic cathedral he had become , in some sort , a monkey and a goat , like the Calabrian child who swims before he walks , and plays with the sea while still a babe . Moreover , it was not his body alone which seemed fashioned after the Cathedral , but his mind also . In what condition was that mind ? What bent had it contracted , what form had it assumed beneath that knotted envelope , in that savage life ? This it would be hard to determine . Quasimodo had been born one-eyed , hunchbacked , lame . It was with great difficulty , and by dint of great patience that Claude Frollo had succeeded in teaching him to talk . But a fatality was attached to the poor foundling . Bellringer of Notre-Dame at the age of fourteen , a new infirmity had come to complete his misfortunes : the bells had broken the drums of his ears ; he had become deaf . The only gate which nature had left wide open for him had been abruptly closed , and forever . In closing , it had cut off the only ray of joy and of light which still made its way into the soul of Quasimodo . His soul fell into profound night . The wretched being 's misery became as incurable and as complete as his deformity . Let us add that his deafness rendered him to some extent dumb . For , in order not to make others laugh , the very moment that he found himself to be deaf , he resolved upon a silence which he only broke when he was alone . He voluntarily tied that tongue which Claude Frollo had taken so much pains to unloose . Hence , it came about , that when necessity constrained him to speak , his tongue was torpid , awkward , and like a door whose hinges have grown rusty . If now we were to try to penetrate to the soul of Quasimodo through that thick , hard rind ; if we could sound the depths of that badly constructed organism ; if it were granted to us to look with a torch behind those non-transparent organs to explore the shadowy interior of that opaque creature , to elucidate his obscure corners , his absurd no-thoroughfares , and suddenly to cast a vivid light upon the soul enchained at the extremity of that cave , we should , no doubt , find the unhappy Psyche in some poor , cramped , and ricketty attitude , like those prisoners beneath the Leads of Venice , who grew old bent double in a stone box which was both too low and too short for them . It is certain that the mind becomes atrophied in a defective body . Quasimodo was barely conscious of a soul cast in his own image , moving blindly within him . The impressions of objects underwent a considerable refraction before reaching his mind . His brain was a peculiar medium ; the ideas which passed through it issued forth completely distorted . The reflection which resulted from this refraction was , necessarily , divergent and perverted . Hence a thousand optical illusions , a thousand aberrations of judgment , a thousand deviations , in which his thought strayed , now mad , now idiotic . The first effect of this fatal organization was to trouble the glance which he cast upon things . He received hardly any immediate perception of them . The external world seemed much farther away to him than it does to us . The second effect of his misfortune was to render him malicious . He was malicious , in fact , because he was savage ; he was savage because he was ugly . There was logic in his nature , as there is in ours . His strength , so extraordinarily developed , was a cause of still greater malevolence : " _Malus puer robustus_ , " says Hobbes . This justice must , however be rendered to him . Malevolence was not , perhaps , innate in him . From his very first steps among men , he had felt himself , later on he had seen himself , spewed out , blasted , rejected . Human words were , for him , always a raillery or a malediction . As he grew up , he had found nothing but hatred around him . He had caught the general malevolence . He had picked up the weapon with which he had been wounded . After all , he turned his face towards men only with reluctance ; his cathedral was sufficient for him . It was peopled with marble figures , --kings , saints , bishops , --who at least did not burst out laughing in his face , and who gazed upon him only with tranquillity and kindliness . The other statues , those of the monsters and demons , cherished no hatred for him , Quasimodo . He resembled them too much for that . They seemed rather , to be scoffing at other men . The saints were his friends , and blessed him ; the monsters were his friends and guarded him . So he held long communion with them . He sometimes passed whole hours crouching before one of these statues , in solitary conversation with it . If any one came , he fled like a lover surprised in his serenade . And the cathedral was not only society for him , but the universe , and all nature beside . He dreamed of no other hedgerows than the painted windows , always in flower ; no other shade than that of the foliage of stone which spread out , loaded with birds , in the tufts of the Saxon capitals ; of no other mountains than the colossal towers of the church ; of no other ocean than Paris , roaring at their bases . What he loved above all else in the maternal edifice , that which aroused his soul , and made it open its poor wings , which it kept so miserably folded in its cavern , that which sometimes rendered him even happy , was the bells . He loved them , fondled them , talked to them , understood them . From the chime in the spire , over the intersection of the aisles and nave , to the great bell of the front , he cherished a tenderness for them all . The central spire and the two towers were to him as three great cages , whose birds , reared by himself , sang for him alone . Yet it was these very bells which had made him deaf ; but mothers often love best that child which has caused them the most suffering . It is true that their voice was the only one which he could still hear . On this score , the big bell was his beloved . It was she whom he preferred out of all that family of noisy girls which bustled above him , on festival days. This bell was named Marie . She was alone in the southern tower , with her sister Jacqueline , a bell of lesser size , shut up in a smaller cage beside hers . This Jacqueline was so called from the name of the wife of Jean Montagu , who had given it to the church , which had not prevented his going and figuring without his head at Montfauçon . In the second tower there were six other bells , and , finally , six smaller ones inhabited the belfry over the crossing , with the wooden bell , which rang only between after dinner on Good Friday and the morning of the day before Easter . So Quasimodo had fifteen bells in his seraglio ; but big Marie was his favorite . No idea can be formed of his delight on days when the grand peal was sounded . At the moment when the archdeacon dismissed him , and said , " Go ! " he mounted the spiral staircase of the clock tower faster than any one else could have descended it . He entered perfectly breathless into the aerial chamber of the great bell ; he gazed at her a moment , devoutly and lovingly ; then he gently addressed her and patted her with his hand , like a good horse , which is about to set out on a long journey . He pitied her for the trouble that she was about to suffer . After these first caresses , he shouted to his assistants , placed in the lower story of the tower , to begin . They grasped the ropes , the wheel creaked , the enormous capsule of metal started slowly into motion . Quasimodo followed it with his glance and trembled . The first shock of the clapper and the brazen wall made the framework upon which it was mounted quiver . Quasimodo vibrated with the bell . " Vah ! " he cried , with a senseless burst of laughter . However , the movement of the bass was accelerated , and , in proportion as it described a wider angle , Quasimodo 's eye opened also more and more widely , phosphoric and flaming . At length the grand peal began ; the whole tower trembled ; woodwork , leads , cut stones , all groaned at once , from the piles of the foundation to the trefoils of its summit . Then Quasimodo boiled and frothed ; he went and came ; he trembled from head to foot with the tower . The bell , furious , running riot , presented to the two walls of the tower alternately its brazen throat , whence escaped that tempestuous breath , which is audible leagues away . Quasimodo stationed himself in front of this open throat ; he crouched and rose with the oscillations of the bell , breathed in this overwhelming breath , gazed by turns at the deep place , which swarmed with people , two hundred feet below him , and at that enormous , brazen tongue which came , second after second , to howl in his ear . It was the only speech which he understood , the only sound which broke for him the universal silence . He swelled out in it as a bird does in the sun . All of a sudden , the frenzy of the bell seized upon him ; his look became extraordinary ; he lay in wait for the great bell as it passed , as a spider lies in wait for a fly , and flung himself abruptly upon it , with might and main . Then , suspended above the abyss , borne to and fro by the formidable swinging of the bell , he seized the brazen monster by the ear-laps , pressed it between both knees , spurred it on with his heels , and redoubled the fury of the peal with the whole shock and weight of his body . Meanwhile , the tower trembled ; he shrieked and gnashed his teeth , his red hair rose erect , his breast heaving like a bellows , his eye flashed flames , the monstrous bell neighed , panting , beneath him ; and then it was no longer the great bell of Notre-Dame nor Quasimodo : it was a dream , a whirlwind , a tempest , dizziness mounted astride of noise ; a spirit clinging to a flying crupper , a strange centaur , half man , half bell ; a sort of horrible Astolphus , borne away upon a prodigious hippogriff of living bronze . The presence of this extraordinary being caused , as it were , a breath of life to circulate throughout the entire cathedral . It seemed as though there escaped from him , at least according to the growing superstitions of the crowd , a mysterious emanation which animated all the stones of Notre-Dame , and made the deep bowels of the ancient church to palpitate . It sufficed for people to know that he was there , to make them believe that they beheld the thousand statues of the galleries and the fronts in motion . And the cathedral did indeed seem a docile and obedient creature beneath his hand ; it waited on his will to raise its great voice ; it was possessed and filled with Quasimodo , as with a familiar spirit . One would have said that he made the immense edifice breathe . He was everywhere about it ; in fact , he multiplied himself on all points of the structure . Now one perceived with affright at the very top of one of the towers , a fantastic dwarf climbing , writhing , crawling on all fours , descending outside above the abyss , leaping from projection to projection , and going to ransack the belly of some sculptured gorgon ; it was Quasimodo dislodging the crows . Again , in some obscure corner of the church one came in contact with a sort of living chimera , crouching and scowling ; it was Quasimodo engaged in thought . Sometimes one caught sight , upon a bell tower , of an enormous head and a bundle of disordered limbs swinging furiously at the end of a rope ; it was Quasimodo ringing vespers or the Angelus . Often at night a hideous form was seen wandering along the frail balustrade of carved lacework , which crowns the towers and borders the circumference of the apse ; again it was the hunchback of Notre-Dame . Then , said the women of the neighborhood , the whole church took on something fantastic , supernatural , horrible ; eyes and mouths were opened , here and there ; one heard the dogs , the monsters , and the gargoyles of stone , which keep watch night and day , with outstretched neck and open jaws , around the monstrous cathedral , barking . And , if it was a Christmas Eve , while the great bell , which seemed to emit the death rattle , summoned the faithful to the midnight mass , such an air was spread over the sombre façade that one would have declared that the grand portal was devouring the throng , and that the rose window was watching it . And all this came from Quasimodo . Egypt would have taken him for the god of this temple ; the Middle Ages believed him to be its demon : he was in fact its soul . To such an extent was this disease that for those who know that Quasimodo has existed , Notre-Dame is to-day deserted , inanimate , dead . One feels that something has disappeared from it . That immense body is empty ; it is a skeleton ; the spirit has quitted it , one sees its place and that is all . It is like a skull which still has holes for the eyes , but no longer sight . </text>
<text id="FictPoeE_Purloined_EN.txt">
﻿ THE PURLOINED LETTER . -------------------------------------------------------------------------------- Nil sapientiae odiosius acumine nimio . Seneca . At Paris , just after dark one gusty evening in the autumn of 18 — , I was enjoying the twofold luxury of meditation and a meerschaum , in company with my friend C. Auguste Dupin , in his little back library , or book-closet , au troisiême , No. 33 , Rue Dunôt , Faubourg St. Germain . For one hour at least we had maintained a profound silence ; while each , to any casual observer , might have seemed intently and exclusively occupied with the curling eddies of smoke that oppressed the atmosphere of the chamber . For myself , however , I was mentally discussing certain topics which had formed matter for conversation between us at an earlier period of the evening ; I mean the affair of the Rue Morgue , and the mystery attending the murder of Marie Rogêt . I looked upon it , therefore , as something of a coincidence , when the door of our apartment was thrown open and admitted our old acquaintance , Monsieur G — — , the Prefect of the Parisian police . We gave him a hearty welcome ; for there was nearly half as much of the entertaining as of the contemptible about the man , and we had not seen him for several years . We had been sitting in the dark , and Dupin now arose for the purpose of lighting a lamp , but sat down again , without doing so , upon G. 's saying that he had called to consult us , or rather to ask the opinion of my friend , about some official business which had occasioned a great deal of trouble . " If it is any point requiring reflection , " observed Dupin , as he forebore to enkindle the wick , " we shall examine it to better purpose in the dark . " " That is another of your odd notions , " said the Prefect , who had a fashion of calling every thing " odd " that was beyond his comprehension , and thus lived amid an absolute legion of " oddities . " " Very true , " said Dupin , as he supplied his visiter with a pipe , and rolled towards him a comfortable chair . " And what is the difficulty now ? " I asked . " Nothing more in the assassination way , I hope ? " " Oh no ; nothing of that nature . The fact is , the business is very simple indeed , and I make no doubt that we can manage it sufficiently well ourselves ; but then I thought Dupin would like to hear the details of it , because it is so excessively odd . " " Simple and odd , " said Dupin . " Why , yes ; and not exactly that , either . The fact is , we have all been a good deal puzzled because the affair is so simple , and yet baffles us altogether . " " Perhaps it is the very simplicity of the thing which puts you at fault , " said my friend . " What nonsense you do talk ! " replied the Prefect , laughing heartily . " Perhaps the mystery is a little too plain , " said Dupin . " Oh , good heavens ! who ever heard of such an idea ? " " A little too self evident . " " Ha ! ha ! ha ! — ha ! ha ! ha ! — ho ! ho ! ho ! " roared our visiter , profoundly amused , " oh , Dupin , you will be the death of me yet ! " " And what , after all , is the matter on hand ? " I asked . " Why , I will tell you , " replied the Prefect , as he gave a long , steady and contemplative puff , and settled himself in his chair . " I will tell you in a few words ; but , before I begin , let me caution you that this is an affair demanding the greatest secrecy , and that I should most probably lose the position I now hold , were it known that I confided it to any one . " " Proceed , " said I. " Or not , " said Dupin . " Well , then ; I have received personal information , from a very high quarter , that a certain document of the last importance , has been purloined from the royal apartments . The individual who purloined it is known ; this beyond a doubt ; he was seen to take it . It is known , also , that it still remains in his possession . " " How is this known ? " asked Dupin . " It is clearly inferred , " replied the Prefect , " from the nature of the document , and from the non-appearance of certain results which would at once arise from its passing out of the robber 's possession ; — that is to say , from his employing it as he must design in the end to employ it . " " Be a little more explicit , " I said . " Well , I may venture so far as to say that the paper gives its holder a certain power in a certain quarter where such power is immensely valuable . " The Prefect was fond of the cant of diplomacy . " Still I do not quite understand , " said Dupin . " No ? Well ; the disclosure of the document to a third person , who shall be nameless , would bring in question the honor of a personage of most exalted station ; and this fact gives the holder of the document an ascendancy over the illustrious personage whose honor and peace are so jeopardized . " " But this ascendancy , " I interposed , " would depend upon the robber 's knowledge of the loser 's knowledge of the robber . Who would dare — " " The thief , " said G. , " is the Minister D — — , who dares all things , those unbecoming as well as those becoming a man . The method of the theft was not less ingenious than bold . The document in question—a letter , to be frank—had been received by the personage robbed while alone in the royal boudoir . During its perusal she was suddenly interrupted by the entrance of the other exalted personage from whom especially it was her wish to conceal it . After a hurried and vain endeavor to thrust it in a drawer , she was forced to place it , open as it was , upon a table . The address , however , was uppermost , and , the contents thus unexposed , the letter escaped notice . At this juncture enters the Minister D — — . His lynx eye immediately perceives the paper , recognises the handwriting of the address , observes the confusion of the personage addressed , and fathoms her secret . After some business transactions , hurried through in his ordinary manner , he produces a letter somewhat similar to the one in question , opens it , pretends to read it , and then places it in close juxtaposition to the other . Again he converses , for some fifteen minutes , upon the public affairs . At length , in taking leave , he takes also from the table the letter to which he had no claim . Its rightful owner saw , but , of course , dared not call attention to the act , in the presence of the third personage who stood at her elbow . The minister decamped ; leaving his own letter—one of no importance—upon the table . " " Here , then , " said Dupin to me , " you have precisely what you demand to make the ascendancy complete—the robber 's knowledge of the loser 's knowledge of the robber . " " Yes , " replied the Prefect ; " and the power thus attained has , for some months past , been wielded , for political purposes , to a very dangerous extent . The personage robbed is more thoroughly convinced , every day , of the necessity of reclaiming her letter . But this , of course , cannot be done openly . In fine , driven to despair , she has committed the matter to me . " " Than whom , " said Dupin , amid a perfect whirlwind of smoke , " no more sagacious agent could , I suppose , be desired , or even imagined . " " You flatter me , " replied the Prefect ; " but it is possible that some such opinion may have been entertained . " " It is clear , " said I , " as you observe , that the letter is still in possession of the minister ; since it is this possession , and not any employment of the letter , which bestows the power . With the employment the power departs . " " True , " said G. ; " and upon this conviction I proceeded . My first care was to make thorough search of the minister 's hotel ; and here my chief embarrassment lay in the necessity of searching without his knowledge . Beyond all things , I have been warned of the danger which would result from giving him reason to suspect our design . " " But , " said I , " you are quite au fait in these investigations . The Parisian police have done this thing often before . " " O yes ; and for this reason I did not despair . The habits of the minister gave me , too , a great advantage . He is frequently absent from home all night . His servants are by no means numerous . They sleep at a distance from their master 's apartment , and , being chiefly Neapolitans , are readily made drunk . I have keys , as you know , with which I can open any chamber or cabinet in Paris . For three months a night has not passed , during the greater part of which I have not been engaged , personally , in ransacking the D — — Hotel . My honor is interested , and , to mention a great secret , the reward is enormous . So I did not abandon the search until I had become fully satisfied that the thief is a more astute man than myself . I fancy that I have investigated every nook and corner of the premises in which it is possible that the paper can be concealed . " " But is it not possible , " I suggested , " that although the letter may be in possession of the minister , as it unquestionably is , he may have concealed it elsewhere than upon his own premises ? " " This is barely possible , " said Dupin . " The present peculiar condition of affairs at court , and especially of those intrigues in which D — — is known to be involved , would render the instant availability of the document—its susceptibility of being produced at a moment 's notice—a point of nearly equal importance with its possession . " " Its susceptibility of being produced ? " said I. " That is to say , of being destroyed , " said Dupin . " True , " I observed ; " the paper is clearly then upon the premises . As for its being upon the person of the minister , we may consider that as out of the question . " " Entirely , " said the Prefect . " He has been twice waylaid , as if by footpads , and his person rigorously searched under my own inspection . " " You might have spared yourself this trouble , " said Dupin . " D — — , I presume , is not altogether a fool , and , if not , must have anticipated these waylayings , as a matter of course . " " Not altogether a fool , " said G. , " but then he 's a poet , which I take to be only one remove from a fool . " " True , " said Dupin , after a long and thoughtful whiff from his meerschaum , " although I have been guilty of certain doggrel myself . " " Suppose you detail , " said I , " the particulars of your search . " " Why the fact is , we took our time , and we searched every where . I have had long experience in these affairs . I took the entire building , room by room ; devoting the nights of a whole week to each . We examined , first , the furniture of each apartment . We opened every possible drawer ; and I presume you know that , to a properly trained police agent , such a thing as a secret drawer is impossible . Any man is a dolt who permits a 'secret ' drawer to escape him in a search of this kind . The thing is so plain . There is a certain amount of bulk—of space—to be accounted for in every cabinet . Then we have accurate rules . The fiftieth part of a line could not escape us . After the cabinets we took the chairs . The cushions we probed with the fine long needles you have seen me employ . From the tables we removed the tops . " " Why so ? " " Sometimes the top of a table , or other similarly arranged piece of furniture , is removed by the person wishing to conceal an article ; then the leg is excavated , the article deposited within the cavity , and the top replaced . The bottoms and tops of bedposts are employed in the same way . " " But could not the cavity be detected by sounding ? " I asked . " By no means , if , when the article is deposited , a sufficient wadding of cotton be placed around it . Besides , in our case , we were obliged to proceed without noise . " " But you could not have removed—you could not have taken to pieces all articles of furniture in which it would have been possible to make a deposit in the manner you mention . A letter may be compressed into a thin spiral roll , not differing much in shape or bulk from a large knitting needle , and in this form it might be inserted into the rung of a chair , for example . You did not take to pieces all the chairs ? " " Certainly not ; but we did better—we examined the rungs of every chair in the hotel , and , indeed the jointings of every description of furniture , by the aid of a most powerful microscope . Had there been any traces of recent disturbance we should not have failed to detect it instantly . A single grain of gimlet dust , for example , would have been as obvious as an apple . Any disorder in the glueing—any unusual gaping in the joints—would have sufficed to insure detection . " " I presume you looked to the mirrors , between the boards and the plates , and you probed the beds and the bed clothes , as well as the curtains and carpets . " " That of course ; and when we had absolutely completed every particle of the furniture in this way , then we examined the house itself . We divided its entire surface into compartments , which we numbered , so that none might be missed ; then we scrutinized each individual square inch throughout the premises , including the two houses immediately adjoining , with the microscope , as before . " " The two houses adjoining ! " I exclaimed ; " you must have had a great deal of trouble . " " We had ; but the reward offered is prodigious ! " " You include the grounds about the houses ? " " All the grounds are paved with brick . They gave us comparatively little trouble . We examined the moss between the bricks , and found it undisturbed . " " You looked among D—— 's papers , of course , and into the books of the library ? " " Certainly ; we opened every package and parcel ; we not only opened every book , but we turned over every leaf in each volume , not contenting ourselves with a mere shake , according to the fashion of some of our police officers . We also measured the thickness of every book cover , with the most accurate admeasurement , and applied to each the most jealous scrutiny of the microscope . Had any of the bindings been recently meddled with , it would have been utterly impossible that the fact should have escaped observation . Some five or six volumes , just from the hands of the binder , we carefully probed , longitudinally , with the needles . " " You explored the floors beneath the carpets ? " " Beyond doubt . We removed every carpet , and examined the boards with the microscope . " " And the paper on the walls ? " " Yes . " " You looked into the cellars ? " " We did . " " Then , " I said , " you have been making a miscalculation , and the letter is not upon the premises , as you suppose . " " I fear you are right there , " said the Prefect . " And now , Dupin , what would you advise me to do ? " " To make a thorough re-search of the premises . " " That is absolutely needless , " replied G — — . " I am not more sure that I breathe than I am that the letter is not at the Hotel . " " I have no better advice to give you , " said Dupin . " You have , of course , an accurate description of the letter ? " " Oh yes ! " — And here the Prefect , producing a memorandum book proceeded to read aloud a minute account of the internal , and especially of the external appearance of the missing document . Soon after finishing the perusal of this description , he took his departure , more entirely depressed in spirits than I had ever known the good gentleman before . In about a month afterwards he paid us another visit , and found us occupied very nearly as before . He took a pipe and a chair and entered into some ordinary conversation . At length I said , — " Well , but G — — , what of the purloined letter ? I presume you have at last made up your mind that there is no such thing as overreaching the Minister ? " " Confound him , say I—yes ; I made the re-examination , however , as Dupin suggested-but it was all labor lost , as I knew it would be . " " How much was the reward offered , did you say ? " asked Dupin . " Why , a very great deal—a very liberal reward—I do n't like to say how much , precisely ; but one thing I will say , that I would n't mind giving my individual check for fifty thousand francs to any one who could obtain me that letter . The fact is , it is becoming of more and more importance every day ; and the reward has been lately doubled . If it were trebled , however , I could do no more than I have done . " " Why , yes , " said Dupin , drawlingly , between the whiffs of his meerschaum , " I really-think , G — , you have not exerted yourself—to the utmost in this matter . You might—do a little more , I think , eh ? " " How ? — in what way ? ' " Why—puff , puff—you might—puff , puff—employ counsel in the matter , eh ? — puff , puff , puff . Do you remember the story they tell of Abernethy ? " " No ; hang Abernethy ! " " To be sure ! hang him and welcome . But , once upon a time , a certain rich miser conceived the design of spunging upon this Abernethy for a medical opinion . Getting up , for this purpose , an ordinary conversation in a private company , he insinuated his case to the physician , as that of an imaginary individual . " 'We will suppose , ' said the miser , 'that his symptoms are such and such ; now , doctor , what would you have directed him to take ? ' " 'Take ! ' said Abernethy , 'why , take advice , to be sure . ' " " But , " said the Prefect , a little discomposed , " I am perfectly willing to take advice , and to pay for it . I would really give fifty thousand francs to any one who would aid me in the matter . " " In that case , " replied Dupin , opening a drawer , and producing a check book , " you may as well fill me up a check for the amount mentioned . When you have signed it , I will hand you the letter . " I was astounded . The Prefect appeared absolutely thunder stricken . For some minutes he remained speechless and motionless , looking incredulously at my friend with open mouth , and eyes that seemed starting from their sockets ; then , apparently recovering himself in some measure , he seized a pen , and after several pauses and vacant stares , finally filled up and signed a check for fifty thousand francs , and handed it across the table to Dupin . The latter examined it carefully and deposited it in his pocket book ; then , unlocking an escritoire , took thence a letter and gave it to the Prefect . This functionary grasped it in a perfect agony of joy , opened it with a trembling hand , cast a rapid glance at its contents , and then , scrambling and struggling to the door , rushed at length unceremoniously from the room and from the house , without having uttered a syllable since Dupin had requested him to fill up the check . When he had gone , my friend entered into some explanations . " The Parisian police , " he said , " are exceedingly able in their way . They are persevering , ingenious , cunning , and thoroughly versed in the knowledge which their duties seem chiefly to demand . Thus , when G — — detailed to us his mode of searching the premises at the Hotel D — — , I felt entire confidence in his having made a satisfactory investigation—so far as his labors extended . " " So far as his labors extended ? " said I. " Yes , " said Dupin . " The measures adopted were not only the best of their kind , but carried out to absolute perfection . Had the letter been deposited within the range of their search , these fellows would , beyond a question , have found it . " I merely laughed—but he seemed quite serious in all that he said . " The measures , then , " he continued , " were good in their kind , and well executed ; their defect lay in their being inapplicable to the case , and to the man . A certain set of highly ingenious resources are , with the Prefect , a sort of Procrustean bed , to which he forcibly adapts his designs . But he perpetually errs by being too deep or too shallow , for the matter in hand ; and many a schoolboy is a better reasoner than he . I knew one about eight years of age , whose success at guessing in the game of 'even and odd ' attracted universal admiration . This game is simple , and is played with marbles . One player holds in his hand a number of these toys , and demands of another whether that number is even or odd . If the guess is right , the guesser wins one ; if wrong , he loses one . The boy to whom I allude won all the marbles of the school . Of course he had some principle of guessing ; and this lay in mere observation and admeasurement of the astuteness of his opponents . For example , an arrant simpleton is his opponent , and , holding up his closed hand , asks , 'are they even or odd ? ' Our schoolboy replies , 'odd , ' and loses ; but upon the second trial he wins , for he then says to himself , 'the simpleton had them even upon the first trial , and his amount of cunning is just sufficient to make him have them odd upon the second ; I will therefore guess odd ; '—he guesses odd , and wins . Now , with a simpleton a degree above the first , he would have reasoned thus : 'This fellow finds that in the first instance I guessed odd , and , in the second , he will propose to himself , upon the first impulse , a simple variation from even to odd , as did the first simpleton ; but then a second thought will suggest that this is too simple a variation , and finally he will decide upon putting it even as before . I will therefore guess even ; '—he guesses even , and wins . Now this mode of reasoning in the schoolboy , whom his fellows termed 'lucky , '—what , in its last analysis , is it ? " " It is merely , " I said , " an identification of the reasoner 's intellect with that of his opponent . " " It is , " said Dupin ; " and , upon inquiring , of the boy by what means he effected the thorough identification in which his success consisted , I received answer as follows : 'When I wish to find out how wise , or how stupid , or how good , or how wicked is any one , or what are his thoughts at the moment , I fashion the expression of my face , as accurately as possible , in accordance with the expression of his , and then wait to see what thoughts or sentiments arise in my mind or heart , as if to match or correspond with the expression . ' This response of the schoolboy lies at the bottom of all the spurious profundity which has been attributed to Rochefoucault , to La Bougive , to Machiavelli , and to Campanella . " " And the identification , " I said , " of the reasoner 's intellect with that of his opponent , depends , if I understand you aright , upon the accuracy with which the opponent 's intellect is admeasured . " " For its practical value it depends upon this , " replied Dupin ; " and the Prefect and his cohort fail so frequently , first , by default of this identification , and , secondly , by ill-admeasurement , or rather through non-admeasurement , of the intellect with which they are engaged . They consider only their own ideas of ingenuity ; and , in searching for anything hidden , advert only to the modes in which they would have hidden it . They are right in this much—that their own ingenuity is a faithful representative of that of the mass ; but when the cunning of the individual felon is diverse in character from their own , the felon foils them , of course . This always happens when it is above their own , and very usually when it is below . They have no variation of principle in their investigations ; at best , when urged by some unusual emergency—by some extraordinary reward—they extend or exaggerate their old modes of practice , without touching their principles . What , for example , in this case of D — , has been done to vary the principle of action ? What is all this boring , and probing , and sounding , and scrutinizing with the microscope and dividing the surface of the building into registered square inches—what is it all but an exaggeration of the application of the one principle or set of principles of search , which are based upon the one set of notions regarding human ingenuity , to which the Prefect , in the long routine of his duty , has been accustomed ? Do you not see he has taken it for granted that all men proceed to conceal a letter , — not exactly in a gimlet hole bored in a chair leg—but , at least , in some out-of-the-way hole or corner suggested by the same tenor of thought which would urge a man to secrete a letter in a gimlet hole bored in a chair leg ? And do you not see also , that such recherchés nooks for concealment are adapted only for ordinary occasions , and would be adopted only by ordinary intellects ; for , in all cases of concealment , a disposal of the article concealed—a disposal of it in this recherché manner , — is , in the very first instance , presumable and presumed ; and thus its discovery depends , not at all upon the acumen , but altogether upon the mere care , patience , and determination of the seekers ; and where the case is of importance—or , what amounts to the same thing in the policial eyes , when the reward is of magnitude , — the qualities in question have never been known to fail . You will now understand what I meant in suggesting that , had the purloined letter been hidden any where within the limits of the Prefect 's examination—in other words , had the principle of its concealment been comprehended within the principles of the Prefect—its discovery would have been a matter altogether beyond question . This functionary , however , has been thoroughly mystified ; and the remote source of his defeat lies in the supposition that the Minister is a fool , because he has acquired renown as a poet . All fools are poets ; this the Prefect feels ; and he is merely guilty of a non distributio medii in thence inferring that all poets are fools . " " But is this really the poet ? " I asked . " There are two brothers , I know ; and both have attained reputation in letters . The Minister I believe has written learnedly on the Differential Calculus . He is a mathematician , and no poet . " " You are mistaken ; I know him well ; he is both . As poet and mathematician , he would reason well ; as mere mathematician , he could not have reasoned at all , and thus would have been at the mercy of the Prefect . " " You surprise me , " I said , " by these opinions , which have been contradicted by the voice of the world . You do not mean to set at naught the well-digested idea of centuries . The mathematical reason has long been regarded as the reason par excellence . " " 'Il y a à parièr , ' " replied Dupin , quoting from Chamfort , " 'que toute idée publique , toute convention reçue est une sottise , car elle a convenue au plus grand nombre . ' The mathematicians , I grant you , have done their best to promulgate the popular error to which you allude , and which is none the less an error for its promulgation as truth . With an art worthy a better cause , for example , they have insinuated the term 'analysis ' into application to algebra . The French are the originators of this particular deception ; but if a term is of any importance—if words derive any value from applicability—then 'analysis ' conveys 'algebra ' about as much as , in Latin , 'ambitus ' implies 'ambition , ' 'religio ' 'religion , ' or 'homines honesti , ' a set of honorable men . " " You have a quarrel on hand , I see , " said I , " with some of the algebraists of Paris ; but proceed . " " I dispute the availability , and thus the value , of that reason which is cultivated in any especial form other than the abstractly logical . I dispute , in particular , the reason educed by mathematical study . The mathematics are the science of form and quantity ; mathematical reasoning is merely logic applied to observation upon form and quantity . The great error lies in supposing that even the truths of what is called pure algebra , are abstract or general truths . And this error is so egregious that I am confounded at the universality with which it has been received . Mathematical axioms are not axioms of general truth . What is true of relation—of form and quantity—is often grossly false in regard to morals , for example . In this latter science it is very usually untrue that the aggregated parts are equal to the whole . In chemistry also the axiom fails . In the consideration of motive it fails ; for two motives , each of a given value , have not , necessarily , a value when united , equal to the sum of their values apart . There are numerous other mathematical truths which are only truths within the limits of relation . But the mathematician argues , from his finite truths , through habit , as if they were of an absolutely general applicability—as the world indeed imagines them to be . Bryant , in his very learned 'Mythology , ' mentions an analogous source of error , when he says that 'although the Pagan fables are not believed , yet we forget ourselves continually , and make inferences from them as existing realities . ' With the algebraists , however , who are Pagans themselves , the 'Pagan fables ' are believed , and the inferences are made , not so much through lapse of memory , as through an unaccountable addling of the brains . In short , I never yet encountered the mere mathematician who could be trusted out of equal roots , or one who did not clandestinely hold it as a point of his faith that x2+px was absolutely and unconditionally equal to q. Say to one of these gentlemen , by way of experiment , if you please , that you believe occasions may occur where x2+px is not altogether equal to q , and , having made him understand what you mean , get out of his reach as speedily as convenient , for , beyond doubt , he will endeavor to knock you down . " I mean to say , " continued Dupin , while I merely laughed at his last observations , " that if the Minister had been no more than a mathematician , the Prefect would have been under no necessity of giving me this check . I know him , however , as both mathematician and poet , and my measures were adapted to his capacity , with reference to the circumstances by which he was surrounded . I knew him as a courtier , too , and as a bold intriguant . Such a man , I considered , could not fail to be aware of the ordinary policial modes of action . He could not have failed to anticipate—and events have proved that he did not fail to anticipate—the waylayings to which he was subjected . He must have foreseen , I reflected , the secret investigations of his premises . His frequent absences from home at night , which were hailed by the Prefect as certain aids to his success , I regarded only as ruses , to afford opportunity for thorough search to the police , and thus the sooner to impress them with the conviction to which G — — , in fact , did finally arrive—the conviction that the letter was not upon the premises . I felt , also , that the whole train of thought , which I was at some pains in detailing to you just now , concerning the invariable principle of policial action in searches for articles concealed—I felt that this whole train of thought would necessarily pass through the mind of the Minister . It would imperatively lead him to despise all the ordinary nooks of concealment . He could not , I reflected , be so weak as not to see that the most intricate and remote recess of his hotel would be as open as his commonest closets to the eyes , to the probes , to the gimlets , and to the microscopes of the Prefect . I saw , in fine , that he would be driven , as a matter of course , to simplicity , if not deliberately induced to it as a matter of choice . You will remember , perhaps , how desperately the Prefect laughed when I suggested , upon our first interview , that it was just possible this mystery troubled him so much on account of its being so very self-evident . " " Yes , " said I , " I remember his merriment well . I really thought he would have fallen into convulsions . " " The material world , " continued Dupin , " abounds with very strict analogies to the immaterial ; and thus some color of truth has been given to the rhetorical dogma , that metaphor , or simile , may be made to strengthen an argument , as well as to embellish a description . The principle of the vis inertiæ , for example , seems to be identical in physics and metaphysics . It is not more true in the former , that a large body is with more difficulty set in motion than a smaller one , and that its subsequent momentum is commensurate with this difficulty , than it is , in the latter , that intellects of the vaster capacity , while more forcible , more constant , and more eventful in their movements than those of inferior grade , are yet the less readily moved , and more embarrassed and full of hesitation in the first few steps of their progress . Again : have you ever noticed which of the street signs , over the shop-doors , are the most attractive of attention ? " " I have never given the matter a thought , " I said . " There is a game of puzzles , " he resumed , " which is played upon a map . One party playing requires another to find a given word—the name of town , river , state or empire—any word , in short , upon the motley and perplexed surface of the chart . A novice in the game generally seeks to embarrass his opponents by giving them the most minutely lettered names ; but the adept selects such words as stretch , in large characters , from one end of the chart to the other . These , like the over largely lettered signs and placards of the street , escape observation by dint of being excessively obvious ; and here the physical oversight is precisely analogous with the moral inapprehension by which the intellect suffers to pass unnoticed those considerations which are too obtrusively and too palpably self evident . But this is a point , it appears , somewhat above or beneath the understanding of the Prefect . He never once thought it probable , or possible , that the Minister had deposited the letter immediately beneath the nose of the whole world , by way of best preventing any portion of that world from perceiving it . " But the more I reflected upon the daring , dashing , and discriminating ingenuity of D — — ; upon the fact that the document must always have been at hand , if he intended to use it to good purpose ; and upon the decisive evidence , obtained by the Prefect , that it was not hidden within the limits of that dignitary 's ordinary search—the more satisfied I became that , to conceal this letter , the Minister had resorted to the comprehensive and sagacious expedient of not attempting to conceal it at all . " Full of these ideas , I prepared myself with a pair of green spectacles , and called one fine morning , quite by accident , at the Ministerial hotel . I found D — — at home , yawning , lounging , and dawdling , as usual , and pretending to be in the last extremity of ennui . He is , perhaps , the most really energetic human being now alive—but that is only when nobody sees him . " To be even with him , I complained of my weak eyes , and lamented the necessity of the spectacles , under cover of which I cautiously and thoroughly surveyed the whole apartment , while seemingly intent only upon the conversation of my host . " I paid especial attention to a large writing-table near which he sat , and upon which lay confusedly , some miscellaneous letters and other papers , with one or two musical instruments and a few books . Here , however , after a long and very deliberate scrutiny , I saw nothing to excite particular suspicion . " At length my eyes , in going the circuit of the room , fell upon a trumpery fillagree card-rack of pasteboard , that hung dangling by a dirty blue ribbon , from a little brass knob just beneath the middle of the mantel-piece . In this rack , which had three or four compartments , were five or six visiting cards and a solitary letter . This last was much soiled and crumpled . It was torn nearly in two , across the middle—as if a design , in the first instance , to tear it entirely up as worthless , had been altered , or stayed , in the second . It had a large black seal , bearing the D — — cipher very conspicuously , and was addressed , in a diminutive female hand , to D — — , the minister , himself . It was thrust carelessly , and even , as it seemed , contemptuously , into one of the uppermost divisions of the rack . " No sooner had I glanced at this letter , than I concluded it to be that of which I was in search . To be sure , it was , to all appearance , radically different from the one of which the Prefect had read us so minute a description . Here the seal was large and black , with the D — — cipher ; there it was small and red , with the ducal arms of the S — — family . Here , the address , to the Minister , diminutive and feminine ; there the superscription , to a certain royal personage , was markedly bold and decided ; the size alone formed a point of correspondence . But , then , the radicalness of these differences , which was excessive ; the dirt ; the soiled and torn condition of the paper , so inconsistent with the true methodical habits of D — — , and so suggestive of a design to delude the beholder into an idea of the worthlessness of the document ; these things , together with the hyper-obtrusive situation of this document , full in the view of every visiter , and thus exactly in accordance with the conclusions to which I had previously arrived ; these things , I say , were strongly corroborative of suspicion , in one who came with the intention to suspect . " I protracted my visit as long as possible , and , while I maintained a most animated discussion with the Minister upon a topic which I knew well had never failed to interest and excite him , I kept my attention really riveted upon the letter . In this examination , I committed to memory its external appearance and arrangement in the rack ; and also fell , at length , upon a discovery which set at rest whatever trivial doubt I might have entertained . In scrutinizing the edges of the paper , I observed them to be more chafed than seemed necessary . They presented the broken appearance which is manifested when a stiff paper , having been once folded and pressed with a folder , is refolded in a reversed direction , in the same creases or edges which had formed the original fold . This discovery was sufficient . It was clear to me that the letter had been turned , as a glove , inside out , re-directed , and re-sealed . I bade the Minister good morning , and took my departure at once , leaving a gold snuff box upon the table . " The next morning I called for the snuff-box , when we resumed , quite eagerly , the conversation of the preceding day . While thus engaged , however , a loud report , as if of a pistol , was heard immediately beneath the windows of the hotel , and was succeeded by a series of fearful screams , and the shoutings of a terrified mob . D — — rushed to a casement , threw it open , and looked out . In the meantime , I stepped to the card-rack took the letter , put it in my pocket , and replaced it by a fac-simile , ( so far as regards externals , ) which I had carefully prepared at my lodgings—imitating the D — — cipher , very readily , by means of a seal formed of bread . " The disturbance in the street had been occasioned by the frantic behavior of a man with a musket . He had fired it among a crowd of women and children . It proved , however , to have been without ball , and the fellow was suffered to go his way as a lunatic or a drunkard . When he had gone , D — — came from the window , whither I had followed him immediately upon securing the object in view . Soon afterwards I bade him farewell . The pretended lunatic was a man in my own pay . " " But what purpose had you , " I asked , " in replacing the letter by a fac-simile ? Would it not have been better , at the first visit , to have seized it openly , and departed ? " " D — — , " replied Dupin , " is a desperate man , and a man of nerve . His hotel , too , is not without attendants devoted to his interests . Had I made the wild attempt you suggest , I might never have left the Ministerial presence alive . The good people of Paris might have heard of me no more . But I had an object apart from these considerations . You know my political prepossessions . In this matter , I act as a partisan of the lady concerned . For eighteen months the Minister has had her in his power . She has now him in hers—since , being unaware that the letter is not in his possession , he will proceed with his exactions as if it was . Thus will he inevitably commit himself , at once , to his political destruction . His downfall , too , will not be more precipitate than awkward . It is all very well to talk about the facilis descensus Averni ; but in all kinds of climbing , as Catalani said of singing , it is far more easy to get up than to come down . In the present instance I have no sympathy—at least no pity—for him who descends . He is that monstrum horrendum , an unprincipled man of genius . I confess , however , that I should like very well to know the precise character of his thoughts , when , being defied by her whom the Prefect terms 'a certain personage ' he is reduced to opening the letter which I left for him in the card-rack . " " How ? did you put any thing particular in it ? " " Why—it did not seem altogether right to leave the interior blank—that would have been insulting . D — — , at Vienna once , did me an evil turn , which I told him , quite good humoredly , that I should remember . So , as I knew he would feel some curiosity in regard to the identity of the person who had outwitted him , I thought it a pity not to give him a clue . He is well acquainted with my MS . , and I just copied into the middle of the blank sheet the words — " ' — — — — Un dessein si funeste , S'il n'est digne d'Atrée , est digne de Thyeste . They are to be found in Crébillon 's 'Atrée . ' " </text>
<text id="FictPoeE_Usher_EN.txt">
﻿ THE FALL OF THE HOUSE OF USHER -------------------------------------------------------------------------------- Son cœur est un luth suspendu ; Sitôt qu’on le touche il résonne . De Béranger . During the whole of a dull , dark , and soundless day in the autumn of the year , when the clouds hung oppressively low in the heavens , I had been passing alone , on horseback , through a singularly dreary tract of country ; and at length found myself , as the shades of the evening drew on , within view of the melancholy House of Usher . I know not how it was—but , with the first glimpse of the building , a sense of insufferable gloom pervaded my spirit . I say insufferable ; for the feeling was unrelieved by any of that half-pleasurable , because poetic , sentiment , with which the mind usually receives even the sternest natural images of the desolate or terrible . I looked upon the scene before me—upon the mere house , and the simple landscape features of the domain—upon the bleak walls—upon the vacant eye-like windows—upon a few rank sedges—and upon a few white trunks of decayed trees—with an utter depression of soul which I can compare to no earthly sensation more properly than to the after-dream of the reveler upon opium—the bitter lapse into every-day life—the hideous dropping off of the veil . There was an iciness , a sinking , a sickening of the heart—an unredeemed dreariness of thought which no goading of the imagination could torture into aught of the sublime . What was it—I paused to think—what was it that so unnerved me in the contemplation of the House of Usher ? It was a mystery all insoluble ; nor could I grapple with the shadowy fancies that crowded upon me as I pondered . I was forced to fall back upon the unsatisfactory conclusion that while , beyond doubt , there are combinations of very simple natural objects which have the power of thus affecting us , still the analysis of this power lies among considerations beyond our depth . It was possible , I reflected , that a mere different arrangement of the particulars of the scene , of the details of the picture , would be sufficient to modify , or perhaps to annihilate its capacity for sorrowful impression ; and , acting upon this idea , I reined my horse to the precipitous brink of a black and lurid tarn that lay in unruffled luster by the dwelling , and gazed down—but with a shudder even more thrilling than before—upon the remodeled and inverted images of the gray sedge , and the ghastly tree stems , and the vacant and eye-like windows . Nevertheless , in this mansion of gloom I now proposed to myself a sojourn of some weeks . Its proprietor , Roderick Usher , had been one of my boon companions in boyhood ; but many years had elapsed since our last meeting . A letter , however , had lately reached me in a distant part of the country—a letter from him—which , in its wildly importunate nature , had admitted of no other than a personal reply . The MS . gave evidence of nervous agitation . The writer spoke of acute bodily illness—of a mental disorder which oppressed him , and of an earnest desire to see me , as his best , and indeed his only personal friend , with a view of attempting , by the cheerfulness of my society , some alleviation of his malady . It was the manner in which all this , and much more , was said—it was the apparent heart that went with his request—which allowed me no room for hesitation ; and I accordingly obeyed forthwith what I still considered a very singular summons . Although , as boys , we had been even intimate associates , yet I really knew little of my friend . His reserve had been always excessive and habitual . I was aware , however , that his very ancient family had been noted , time out of mind , for a peculiar sensibility of temperament , displaying itself , through long ages , in many works of exalted art , and manifested , of late , in repeated deeds of munificent , yet unobtrusive charity , as well as in a passionate devotion to the intricacies , perhaps even more than to the orthodox and easily recognizable beauties , of musical science . I had learned , too , the very remarkable fact that the stem of the Usher race , all time-honored as it was , had put forth , at no period , any enduring branch ; in other words , that the entire family lay in the direct line of descent , and had always , with very trifling and very temporary variation , so lain . It was this deficiency , I considered , while running over in thought the perfect keeping of the character of the premises with the accredited character of the people , and while speculating upon the possible influence which the one , in the long lapse of centuries , might have exercised upon the other—it was this deficiency , perhaps , of collateral issue , and the consequent undeviating transmission , from sire to son , of the patrimony with the name , which had , at length , so identified the two as to merge the original title of the estate in the quaint and equivocal appellation of the " House of Usher"—an appellation which seemed to include , in the minds of the peasantry who used it , both the family and the family mansion . I have said that the sole effect of my somewhat childish experiment of looking down within the tarn had been to deepen the first singular impression . There can be no doubt that the consciousness of the rapid increase of my superstition—for why should I not so term it ? — served mainly to accelerate the increase itself . Such , I have long known , is the paradoxical law of all sentiments having terror as a basis . And it might have been for this reason only , that , when I again uplifted my eyes to the house itself , from its image in the pool , there grew in my mind a strange fancy—a fancy so ridiculous , indeed , that I but mention it to show the vivid force of the sensations which oppressed me . I had so worked upon my imagination as really to believe that about the whole mansion and domain there hung an atmosphere peculiar to themselves and their immediate vicinity—an atmosphere which had no affinity with the air of heaven , but which had reeked up from the decayed trees , and the gray wall , and the silent tarn—a pestilent and mystic vapor , dull , sluggish , faintly discernible , and leaden-hued . Shaking off from my spirit what must have been a dream , I scanned more narrowly the real aspect of the building . Its principal feature seemed to be that of an excessive antiquity . The discoloration of ages had been great . Minute fungi overspread the whole exterior , hanging in a fine , tangled web-work from the eaves . Yet all this was apart from any extraordinary dilapidation . No portion of the masonry had fallen ; and there appeared to be a wild inconsistency between its still perfect adaptation of parts , and the crumbling condition of the individual stones . In this there was much that reminded me of the specious totality of old woodwork which has rotted for years in some neglected vault , with no disturbance from the breath of the external air . Beyond this indication of extensive decay , however , the fabric gave little token of instability . Perhaps the eye of a scrutinizing observer might have discovered a barely perceptible fissure , which , extending from the roof of the building in front , made its way down the wall in a zigzag direction , until it became lost in the sullen waters of the tarn . Noticing these things , I rode over a short causeway to the house . A servant in waiting took my horse , and I entered the Gothic archway of the hall . A valet , of stealthy step , thence conducted me , in silence , through many dark and intricate passages in my progress to the studio of his master . Much that I encountered on the way contributed , I know not how , to heighten the vague sentiments of which I have already spoken . While the objects around me—while the carvings of the ceilings , the somber tapestries of the walls , the ebon blackness of the floors , and the phantasmagoric armorial trophies which rattled as I strode , were but matters to which , or to such as which , I had been accustomed from my infancy—while I hesitated not to acknowledge how familiar was all this—I still wondered to find how unfamiliar were the fancies which ordinary images were stirring up . On one of the staircases I met the physician of the family . His countenance , I thought , wore a mingled expression of low cunning and perplexity . He accosted me with trepidation and passed on . The valet now threw open a door and ushered me into the presence of his master . The room in which I found myself was very large and lofty . The windows were long , narrow , and pointed , and at so vast a distance from the black oaken floor as to be altogether inaccessible from within . Feeble gleams of encrimsoned light made their way through the trellised panes , and served to render sufficiently distinct the more prominent objects around ; the eye , however , struggled in vain to reach the remoter angles of the chamber , or the recesses of the vaulted and fretted ceiling . Dark draperies hung upon the walls . The general furniture was profuse , comfortless , antique , and tattered . Many books and musical instruments lay scattered about , but failed to give any vitality to the scene . I felt that I breathed an atmosphere of sorrow . An air of stern , deep , and irredeemable gloom hung over and pervaded all . Upon my entrance , Usher arose from a sofa on which he had been lying at full length , and greeted me with a vivacious warmth which had much in it , I at first thought , of an overdone cordiality—of the constrained effort of the ennuyé man of the world . A glance , however , at his countenance convinced me of his perfect sincerity . We sat down ; and for some moments , while he spoke not , I gazed upon him with a feeling half of pity , half of awe . Surely , man had never before so terribly altered , in so brief a period , as had Roderick Usher ! It was with difficulty that I could bring myself to admit the identity of the wan being before me with the companion of my early boyhood . Yet the character of his face had been at all times remarkable . A cadaverousness of complexion ; an eye large , liquid , and luminous beyond comparison ; lips somewhat thin and very pallid , but of a surpassingly beautiful curve ; a nose of a delicate Hebrew model , but with a breadth of nostril unusual in similar formations ; a finely molded chin , speaking , in its want of prominence , of a want of moral energy ; hair of a more than web-like softness and tenuity ; these features , with an inordinate expansion above the regions of the temple , made up altogether a countenance not easily to be forgotten . And now in the mere exaggeration of the prevailing character of these features , and of the expression they were wont to convey , lay so much of change that I doubted to whom I spoke . The now ghastly pallor of the skin , and the now miraculous luster of the eye , above all things startled and even awed me . The silken hair , too , had been suffered to grow all unheeded , and as , in its wild gossamer texture , it floated rather than fell about the face , I could not , even with effort , connect its arabesque expression with any idea of simple humanity . In the manner of my friend I was at once struck with an incoherence—an inconsistency ; and I soon found this to arise from a series of feeble and futile struggles to overcome an habitual trepidancy , an excessive nervous agitation . For something of this nature I had indeed been prepared , no less by his letter than by reminiscences of certain boyish traits , and by conclusions deduced from his peculiar physical conformation and temperament . His action was alternately vivacious and sullen . His voice varied rapidly from a tremulous indecision ( when the animal spirits seemed utterly in abeyance ) to that species of energetic concision—that abrupt , weighty , unhurried , and hollow-sounding enunciation—that leaden , self-balanced , and perfectly modulated guttural utterance , which may be observed in the lost drunkard , or the irreclaimable eater of opium , during the periods of his most intense excitement . It was thus that he spoke of the object of my visit , of his earnest desire to see me , and of the solace he expected me to afford him . He entered , at some length , into what he conceived to be the nature of his malady . It was , he said , a constitutional and a family evil , and one for which he despaired to find a remedy—a mere nervous affection , he immediately added , which would undoubtedly soon pass off . It displayed itself in a host of unnatural sensations . Some of these , as he detailed them , interested and bewildered me ; although , perhaps , the terms and the general manner of the narration had their weight . He suffered much from a morbid acuteness of the senses . The most insipid food was alone endurable ; he could wear only garments of certain texture ; the odors of all flowers were oppressive ; his eyes were tortured by even a faint light ; and there were but peculiar sounds , and these from stringed instruments , which did not inspire him with horror . To an anomalous species of terror I found him a bounden slave . " I shall perish , " said he , " I must perish in this deplorable folly . Thus , thus , and not otherwise , shall I be lost . I dread the events of the future , not in themselves , but in their results . I shudder at the thought of any , even the most trivial , incident , which may operate upon this intolerable agitation of soul . I have , indeed , no abhorrence of danger , except in its absolute effect—in terror . In this unnerved—in this pitiable condition—I feel that the period will sooner or later arrive when I must abandon life and reason together , in some struggle with the grim phantasm , Fear . " I learned , moreover , at intervals , and through broken and equivocal hints , another singular feature of his mental condition . He was enchained by certain superstitious impressions in regard to the dwelling which he tenanted , and whence , for many years , he had never ventured forth—in regard to an influence whose supposititious force was conveyed in terms too shadowy here to be restated—an influence which some peculiarities in the mere form and substance of his family mansion , had , by dint of long sufferance , he said , obtained over his spirit—an effect which the physique of the gray walls and turrets , and of the dim tarn into which they all looked down , had , at length , brought about upon the morale of his existence . He admitted , however , although with hesitation , that much of the peculiar gloom which thus afflicted him could be traced to a more natural and far more palpable origin—to the severe and long-continued illness—indeed to the evidently approaching dissolution—of a tenderly beloved sister , his sole companion for long years , his last and only relative on earth . " Her decease , " he said , with a bitterness which I can never forget , " would leave him ( him the hopeless and the frail ) the last of the ancient race of the Ushers . " While he spoke , the lady Madeline ( for so was she called ) passed slowly through a remote portion of the apartment , and , without having noticed my presence , disappeared . I regarded her with an utter astonishment not unmingled with dread ; and yet I found it impossible to account for such feelings . A sensation of stupor oppressed me , as my eyes followed her retreating steps . When a door , at length , closed upon her , my glance sought instinctively and eagerly the countenance of the brother ; but he had buried his face in his hands , and I could only perceive that a far more than ordinary wanness had overspread the emaciated fingers through which trickled many passionate tears . The disease of the lady Madeline had long baffled the skill of her physicians . A settled apathy , a gradual wasting away of the person , and frequent although transient affections of a partially cataleptical character , were the unusual diagnosis . Hitherto she had steadily borne up against the pressure of her malady , and had not betaken herself finally to bed ; but on the closing in of the evening of my arrival at the house , she succumbed ( as her brother told me at night with inexpressible agitation ) to the prostrating power of the destroyer ; and I learned that the glimpse I had obtained of her person would thus probably be the last I should obtain—that the lady , at least while living , would be seen by me no more . For several days ensuing her name was unmentioned by either Usher or myself ; and during this period I was busied in earnest endeavors to alleviate the melancholy of my friend . We painted and read together ; or I listened , as if in a dream , to the wild improvisations of his speaking guitar . And thus , as a closer and still closer intimacy admitted me more unreservedly into the recesses of his spirit , the more bitterly did I perceive the futility of all attempt at cheering a mind from which darkness , as if an inherent positive quality , poured forth upon all objects of the moral and physical universe , in one unceasing radiation of gloom . I shall ever bear about me a memory of the many solemn hours I thus spent alone with the master of the House of Usher . Yet I should fail in any attempt to convey an idea of the exact character of the studies , or of the occupations in which he involved me , or led me the way . An excited and highly distempered ideality threw a sulphurous luster over all . His long , improvised dirges will ring forever in my ears . Among other things , I hold painfully in mind a certain singular perversion and amplification of the wild air of the last waltz of Von Weber . From the paintings over which his elaborate fancy brooded , and which grew , touch by touch , into vaguenesses at which I shuddered the more thrillingly because I shuddered knowing not why , — from these paintings ( vivid as their images now are before me ) I would in vain endeavor to deduce more than a small portion which should lie within the compass of merely written words . By the utter simplicity , by the nakedness of his designs , he arrested and overawed attention . If ever mortal painted an idea , that mortal was Roderick Usher . For me , at least—in the circumstances then surrounding me—there arose out of the pure abstractions which the hypochondriac contrived to throw upon his canvas , an intensity of intolerable awe , no shadow of which felt I ever yet in the contemplation of the certainly glowing yet too concrete reveries of Fuseli . One of the phantasmagoric conceptions of my friend , partaking not so rigidly of the spirit of abstraction , may be shadowed forth , although feebly , in words . A small picture presented the interior of an immensely long and rectangular vault or tunnel , with low walls , smooth , white , and without interruption or device . Certain accessory points of the design served well to convey the idea that this excavation lay at an exceeding depth below the surface of the earth . No outlet was observed in any portion of its vast extent , and no torch or other artificial source of light was discernible ; yet a flood of intense rays rolled throughout , and bathed the whole in a ghastly and inappropriate splendor . I have just spoken of that morbid condition of the auditory nerve which rendered all music intolerable to the sufferer , with the exception of certain effects of stringed instruments . It was , perhaps , the narrow limits to which he thus confined himself upon the guitar , which gave birth , in great measure , to the fantastic character of his performances . But the fervid facility of his impromptus could not be so accounted for . They must have been , and were , in the notes , as well as in the words of his wild fantasias ( for he not unfrequently accompanied himself with rimed verbal improvisations ) , the result of that intense mental collectedness and concentration to which I have previously alluded as observable only in particular moments of the highest artificial excitement . The words of one of these rhapsodies I have easily remembered . I was , perhaps , the more forcibly impressed with it , as he gave it , because , in the under or mystic current of its meaning , I fancied that I perceived , and for the first time , a full consciousness on the part of Usher , of the tottering of his lofty reason upon her throne . The verses , which were entitled " The Haunted Palace , " ran very nearly , if not accurately , thus : I. In the greenest of our valleys , By good angels tenanted , Once a fair and stately palace — Radiant palace—reared its head . In the monarch Thought 's dominion — It stood there ! Never seraph spread a pinion Over fabric half so fair . II . Banners yellow , glorious , golden , On its roof did float and flow ; ( This—all this—was in the olden Time long ago ) And every gentle air that dallied , In that sweet day , Along the ramparts plumed and pallid , A wingèd odor went away . III . Wanderers in that happy valley Through two luminous windows saw Spirits moving musically To a lute 's well-tunèd law , Round about a throne , where sitting ( Porphyrogene ! ) In state his glory well befitting , The ruler of the realm was seen . IV . And all with pearl and ruby glowing Was the fair palace door , Through which came flowing , flowing , flowing And sparkling evermore , A troop of Echoes whose sweet duty Was but to sing , In voices of surpassing beauty , The wit and wisdom of their king . V. But evil things , in robes of sorrow , Assailed the monarch 's high estate ( Ah , let us mourn , for never morrow Shall dawn upon him , desolate ! ) ; And , round about his home , the glory That blushed and bloomed Is but a dim-remembered story Of the old time entombed . VI . And travelers now within that valley , Through the red-litten windows , see Vast forms that move fantastically To a discordant melody ; While , like a rapid ghastly river , Through the pale door , A hideous throng rush out forever , And laugh—but smile no more . I well remember that suggestions arising from this ballad led us into a train of thought wherein there became manifest an opinion of Usher 's which I mention not so much on account of its novelty ( for other men[1 ] have thought thus ) as on account of the pertinacity with which he maintained it . This opinion , in its general form , was that of the sentience of all vegetable things . But , in his disordered fancy , the idea had assumed a more daring character , and trespassed , under certain conditions , upon the kingdom of inorganization . I lack words to express the full extent or the earnest abandon of his persuasion . The belief , however , was connected ( as I have previously hinted ) with the gray stones of the home of his forefathers . The conditions of the sentience had been here , he imagined , fulfilled in the method of collocation of these stones—in the order of their arrangement , as well as in that of the many fungi which overspread them , and of the decayed trees which stood around—above all , in the long-undisturbed endurance of this arrangement , and in its reduplication in the still waters of the tarn . Its evidence—the evidence of the sentience—was to be seen , he said ( and I here started as he spoke ) , in the gradual yet certain condensation of an atmosphere of their own about the waters and the walls . The result was discoverable , he added , in that silent , yet importunate and terrible influence which for centuries had molded the destinies of his family , and which made him what I now saw him—what he was . Such opinions need no comment , and I will make none . Our books—the books which , for years , had formed no small portion of the mental existence of the invalid—were , as might be supposed , in strict keeping with this character of phantasm . We pored together over such works as the Ververt et Chartreuse of Gresset ; the Belphegor of Machiavelli ; the Heaven and Hell of Swedenborg ; the Subterranean Voyage of Nicholas Klimm by Holberg ; the Chiromancy of Robert Flud , of Jean D’Indaginé , and of De la Chambre ; the Journey into the Blue Distance of Tieck ; and the City of the Sun of Campanella . One favorite volume was a small octavo edition of the Directorium Inquisitorium , by the Dominican Eymeric de Cironne ; and there were passages in Pomponius Mela , about the old African Satyrs and Œgipans , over which Usher would sit dreaming for hours . His chief delight , however , was found in the perusal of an exceedingly rare and curious book in quarto Gothic—the manual of a forgotten church—the Vigiliae Mortuorum secundum Chorum Ecclesiae Maguntinae . I could not help thinking of the wild ritual of this work , and of its probable influence upon the hypochondriac , when , one evening , having informed me abruptly that the lady Madeline was no more , he stated his intention of preserving her corpse for a fortnight ( previously to its final interment ) in one of the numerous vaults within the main walls of the building . The worldly reason , however , assigned for this singular proceeding , was one which I did not feel at liberty to dispute . The brother had been led to his resolution , so he told me , by consideration of the unusual character of the malady of the deceased , of certain obtrusive and eager inquiries on the part of her medical men , and of the remote and exposed situation of the burial ground of the family . I will not deny that when I called to mind the sinister countenance of the person whom I met upon the staircase , on the day of my arrival at the house , I had no desire to oppose what I regarded as at best but a harmless , and by no means an unnatural precaution . At the request of Usher , I personally aided him in the arrangements for the temporary entombment . The body having been encoffined , we two alone bore it to its rest . The vault in which we placed it ( and which had been so long unopened that our torches , half smothered in its oppressive atmosphere , gave us little opportunity for investigation ) was small , damp , and entirely without means of admission for light ; lying , at great depth , immediately beneath that portion of the building in which was my own sleeping apartment . It had been used , apparently , in remote feudal times , for the worst purposes of a donjon-keep , and in later days , as a place of deposit for powder , or some other highly combustible substance , as a portion of its floor , and the whole interior of a long archway through which we reached it , were carefully sheathed with copper . The door , of massive iron , had been also similarly protected . Its immense weight caused an unusually sharp grating sound , as it moved upon its hinges . Having deposited our mournful burden upon tressels within this region of horror , we partially turned aside the yet unscrewed lid of the coffin , and looked upon the face of the tenant . A striking similitude between the brother and sister now first arrested my attention ; and Usher , divining , perhaps , my thoughts , murmured out some few words from which I learned that the deceased and himself had been twins , and that sympathies of a scarcely intelligible nature had always existed between them . Our glances , however , rested not long upon the dead—for we could not regard her unawed . The disease which had thus entombed the lady in the maturity of youth , had left , as usual in all maladies of a strictly cataleptical character , the mockery of a faint blush upon the bosom and the face , and that suspiciously lingering smile upon the lip which is so terrible in death . We replaced and screwed down the lid , and having secured the door of iron , made our way , with toil , into the scarcely less gloomy apartments of the upper portion of the house . And now , some days of bitter grief having elapsed , an observable change came over the features of the mental disorder of my friend . His ordinary manner had vanished . His ordinary occupations were neglected or forgotten . He roamed from chamber to chamber with hurried , unequal , and objectless step . The pallor of his countenance had assumed , if possible , a more ghastly hue—but the luminousness of his eye had utterly gone out . The once occasional huskiness of his tone was heard no more ; and a tremulous quaver , as if of extreme terror , habitually characterized his utterance . There were times , indeed , when I thought his unceasingly agitated mind was laboring with some oppressive secret , to divulge which he struggled for the necessary courage . At times , again , I was obliged to resolve all into the mere inexplicable vagaries of madness ; for I beheld him gazing upon vacancy for long hours , in an attitude of the profoundest attention , as if listening to some imaginary sound . It was no wonder that his condition terrified—that it infected me . I felt creeping upon me , by slow yet certain degrees , the wild influence of his own fantastic yet impressive superstitions . It was , especially , upon retiring to bed late in the night of the seventh or eighth day after the placing of the lady Madeline within the donjon , that I experienced the full power of such feelings . Sleep came not near my couch , while the hours waned and waned away . I struggled to reason off the nervousness which had dominion over me . I endeavored to believe that much , if not all of what I felt , was due to the bewildering influence of the gloomy furniture of the room—of the dark and tattered draperies , which , tortured into motion by the breath of a rising tempest , swayed fitfully to and fro upon the walls , and rustled uneasily about the decorations of the bed . But my efforts were fruitless . An irrepressible tremor gradually pervaded my frame ; and , at length , there sat upon my very heart an incubus of utterly causeless alarm . Shaking this off with a gasp and a struggle , I uplifted myself upon the pillows , and peering earnestly within the intense darkness of the chamber , hearkened—I know not why , except that an instinctive spirit prompted me—to certain low and indefinite sounds which came , through the pauses of the storm , at long intervals , I knew not whence . Overpowered by an intense sentiment of horror , unaccountable yet unendurable , I threw on my clothes with haste ( for I felt that I should sleep no more during the night ) , and endeavored to arouse myself from the pitiable condition into which I had fallen , by pacing rapidly to and fro through the apartment . I had taken but few turns in this manner , when a light step on an adjoining staircase arrested my attention . I presently recognized it as that of Usher . In an instant afterward he rapped , with a gentle touch , at my door , and entered , bearing a lamp . His countenance was , as usual , cadaverously wan—but , moreover , there was a species of mad hilarity in his eyes—and evidently restrained hysteria in his whole demeanor . His air appalled me—but anything was preferable to the solitude which I had so long endured , and I even welcomed his presence as a relief . " And you have not seen it ? " he said abruptly , after having stared about him for some moments in silence—"You have not then seen it ? — but stay ! you shall . " Thus speaking , and having carefully shaded his lamp , he hurried to one of the casements , and threw it freely open to the storm . The impetuous fury of the entering gust nearly lifted us from our feet . It was , indeed , a tempestuous yet sternly beautiful night , and one wildly singular in its terror and its beauty . A whirlwind had apparently collected its force in our vicinity ; for there were frequent and violent alterations in the direction of the wind ; and the exceeding density of the clouds ( which hung so low as to press upon the turrets of the house ) did not prevent our perceiving the lifelike velocity with which they flew careering from all points against each other , without passing away into the distance . I say that even their exceeding density did not prevent our perceiving this—yet we had no glimpse of the moon or stars—nor was there any flashing forth of the lightning . But the under surfaces of the huge masses of agitated vapor , as well as all terrestrial objects immediately around us , were glowing in the unnatural light of a faintly luminous and distinctly visible gaseous exhalation which hung about and enshrouded the mansion . " You must not—you shall not behold this ! " said I , shudderingly , to Usher , as I led him , with a gentle violence , from the window to a seat . " These appearances , which bewilder you , are merely electrical phenomena not uncommon—or it may be that they have their ghastly origin in the rank miasma of the tarn . Let us close this casement—the air is chilling and dangerous to your frame . Here is one of your favorite romances . I will read and you shall listen ; — and so we will pass away this terrible night together . " The antique volume which I had taken up was the " Mad Trist " of Sir Launcelot Canning ; but I had called it a favorite of Usher 's more in sad jest than in earnest ; for , in truth , there is little in its uncouth and unimaginative prolixity which could have had interest for the lofty and spiritual ideality of my friend . It was , however , the only book immediately at hand ; and I indulged a vague hope that the excitement which now agitated the hypochondriac , might find relief ( for the history of mental disorder is full of similar anomalies ) even in the extremeness of the folly which I should read . Could I have judged , indeed , by the wild , overstrained air of vivacity with which he hearkened , or apparently harkened , to the words of the tale , I might well have congratulated myself upon the success of my design . I had arrived at that well-known portion of the story where Ethelred , the hero of the Trist , having sought in vain for peaceable admission into the dwelling of the hermit , proceeds to make good an entrance by force . Here , it will be remembered , the words of the narrative run thus : " And Ethelred , who was by nature of a doughty heart , and who was now mighty withal , on account of the powerfulness of the wine which he had drunken , waited no longer to hold parley with the hermit , who , in sooth , was of an obstinate and maliceful turn ; but , feeling the rain upon his shoulders , and fearing the rising of the tempest , uplifted his mace outright , and , with blows , made quickly room in the plankings of the door for his gauntleted hand ; and now pulling therewith sturdily , he so cracked , and ripped , and tore all asunder , that the noise of the dry and hollow-sounding wood alarummed and reverberated throughout the forest . " At the termination of this sentence I started , and for a moment paused ; for it appeared to me ( although I at once concluded that my excited fancy had deceived me)—it appeared to me that , from some very remote portion of the mansion , there came , indistinctly , to my ears what might have been , in its exact similarity of character , the echo ( but a stifled and dull one certainly ) of the very cracking and ripping sound which Sir Launcelot had so particularly described . It was , beyond doubt , the coincidence alone which had arrested my attention ; for , amid the rattling of the sashes of the casements , and the ordinary commingled noises of the still increasing storm , the sound , in itself , had nothing , surely , which should have interested or disturbed me . I continued the story : " But the good champion Ethelred , now entering within the door , was sore enraged and amazed to perceive no signal of the maliceful hermit ; but , in the stead thereof , a dragon of a scaly and prodigious demeanor , and of a fiery tongue , which sate in guard before a palace of gold , with a floor of silver ; and upon the wall there hung a shield of shining brass with this legend enwritten — Who entereth herein , a conqueror hath bin ; Who slayeth the dragon , the shield he shall win ; And Ethelred uplifted his mace , and struck upon the head of the dragon , which fell before him , and gave up his pesty breath , with a shriek so horrid and harsh , and withal so piercing , that Ethelred had fain to close his ears with his hands against the dreadful noise of it , the like whereof was never before heard . " Here again I paused abruptly , and now with a feeling of wild amazement—for there could be no doubt whatever that , in this instance , I did actually hear ( although from what direction it proceeded I found it impossible to say ) a low and apparently distant , but harsh , protracted , and most unusual screaming or grating sound—the exact counterpart of what my fancy had already conjured up for the dragon 's unnatural shriek as described by the romancer . Oppressed , as I certainly was , upon the occurrence of this second and most extraordinary coincidence , by a thousand conflicting sensations , in which wonder and extreme terror were predominant , I still retained sufficient presence of mind to avoid exciting , by any observation , the sensitive nervousness of my companion . I was by no means certain that he had noticed the sounds in question ; although , assuredly , a strange alteration had , during the last few minutes , taken place in his demeanor . From a position fronting my own , he had gradually brought round his chair , so as to sit with his face to the door of the chamber ; and thus I could but partially perceive his features , although I saw that his lips trembled as if he were murmuring inaudibly . His head had dropped upon his breast—yet I knew that he was not asleep , from the wide and rigid opening of the eye as I caught a glance of it in profile . The motion of his body , too , was at variance with this idea—for he rocked from side to side with a gentle yet constant and uniform sway . Having rapidly taken notice of all this , I resumed the narrative of Sir Launcelot , which thus proceeded : " And now the champion , having escaped from the terrible fury of the dragon , bethinking himself of the brazen shield , and of the breaking up of the enchantment which was upon it , removed the carcass from out of the way before him , and approached valorously over the silver pavement of the castle to where the shield was upon the wall ; which in sooth tarried not for his full coming , but fell down at his feet upon the silver floor , with a mighty great and terrible ringing sound . " No sooner had these syllables passed my lips , than—as if a shield of brass had indeed , at the moment , fallen heavily upon a floor of silver—I became aware of a distinct , hollow , metallic and clangorous , yet apparently muffled reverberation . Completely unnerved , I leaped to my feet ; but the measured rocking movement of Usher was undisturbed . I rushed to the chair in which he sat . His eyes were bent fixedly before him , and throughout his whole countenance there reigned a stony rigidity . But , as I placed my hand upon his shoulder , there came a strong shudder over his whole person ; a sickly smile quivered about his lips ; and I saw that he spoke in a low , hurried , and gibbering murmur , as if unconscious of my presence . Bending closely over him , I at length drank in the hideous import of his words . " Not hear it ? — yes , I hear it , and have heard it . Long—long—long—many minutes , many hours , many days , have I heard it—yet I dared not—oh , pity me , miserable wretch that I am ! — I dared not—I dared not speak ! We have put her living in the tomb ! Said I not that my senses were acute ? I now tell you that I heard her first feeble movements in the hollow coffin . I heard them—many , many days ago—yet I dared not—I dared not speak ! And now—to-night—Ethelred—ha ! ha ! — the breaking of the hermit 's door , and the death-cry of the dragon , and the clangor of the shield ! — say , rather , the rending of her coffin , and the grating of the iron hinges of her prison , and her struggles within the coppered archway of the vault ! Oh , whither shall I fly ? Will she not be here anon ? Is she not hurrying to upbraid me for my haste ? Have I not heard her footstep on the stair ? Do I not distinguish that heavy and horrible beating of her heart ? Madman ! " — here he sprang furiously to his feet , and shrieked out his syllables , as if in the effort he were giving up his soul—"Madman ! I tell you that she now stands without the door ! " As if in the superhuman energy of his utterance there had been found the potency of a spell—the huge antique pannels to which the speaker pointed threw slowly back , upon the instant , their ponderous and ebony jaws . It was the work of the rushing gust—but then without those doors there did stand the lofty and enshrouded figure of the lady Madeline of Usher . There was blood upon her white robes , and the evidence of some bitter struggle upon every portion of her emaciated frame . For a moment she remained trembling and reeling to and fro upon the threshold—then , with a low , moaning cry , fell heavily inward upon the person of her brother , and in her violent and now final death-agonies , bore him to the floor a corpse , and a victim to the terrors he had anticipated . From that chamber , and from that mansion , I fled aghast . The storm was still abroad in all its wrath as I found myself crossing the old causeway . Suddenly there shot along the path a wild light , and I turned to see whence a gleam so unusual could have issued ; for the vast house and its shadows were alone behind me . The radiance was that of the full , setting , and blood-red moon , which now shone vividly through that once barely discernible fissure , of which I have before spoken as extending from the roof of the building , in a zigzag direction , to the base . While I gazed , this fissure rapidly widened—there came a fierce breath of the whirlwind—the entire orb of the satellite burst at once upon my sight—my brain reeled as I saw the mighty walls rushing asunder—there was a long tumultuous shouting sound like the voice of a thousand waters—and the deep and dank tarn at my feet closed sullenly and silently over the fragments of the " House of Usher . " </text>
<text id="FictTolstoyL_AnnaK_I10_EN.txt">
﻿ Part One , Chapter 10 When Levin went into the restaurant with Oblonsky , he could not help noticing a certain peculiarity of expression , as it were , a restrained radiance , about the face and whole figure of Stepan Arkadyevitch . Oblonsky took off his overcoat , and with his hat over one ear walked into the dining room , giving directions to the Tatar waiters , who were clustered about him in evening coats , bearing napkins . Bowing to right and left to the people he met , and here as everywhere joyously greeting acquaintances , he went up to the sideboard for a preliminary appetizer of fish and vodka , and said to the painted Frenchwoman decked in ribbons , lace , and ringlets , behind the counter , something so amusing that even that Frenchwoman was moved to genuine laughter . Levin for his part refrained from taking any vodka simply because he felt such a loathing of that Frenchwoman , all made up , it seemed , of false hair , poudre de riz , and vinaigre de toilette . He made haste to move away from her , as from a dirty place . His whole soul was filled with memories of Kitty , and there was a smile of triumph and happiness shining in his eyes . " This way , your excellency , please . Your excellency wo n't be disturbed here , " said a particularly pertinacious , white-headed old Tatar with immense hips and coat-tails gaping widely behind . " Walk in , your excellency , " he said to Levin ; by way of showing his respect to Stepan Arkadyevitch , being attentive to his guest as well . Instantly flinging a fresh cloth over the round table under the bronze chandelier , though it already had a table cloth on it , he pushed up velvet chairs , and came to a standstill before Stepan Arkadyevitch with a napkin and a bill of fare in his hands , awaiting his commands . " If you prefer it , your excellency , a private room will be free directly ; Prince Golistin with a lady . Fresh oysters have come in . " " Ah ! oysters . " Stepan Arkadyevitch became thoughtful . " How if we were to change our program , Levin ? " he said , keeping his finger on the bill of fare . And his face expressed serious hesitation . " Are the oysters good ? Mind now . " " They 're Flensburg , your excellency . We 've no Ostend . " " Flensburg will do , but are they fresh ? " " Only arrived yesterday . " " Well , then , how if we were to begin with oysters , and so change the whole program ? Eh ? " " It 's all the same to me . I should like cabbage soup and porridge better than anything ; but of course there 's nothing like that here . " " Porridge à la Russe , your honor would like ? " said the Tatar , bending down to Levin , like a nurse speaking to a child . " No , joking apart , whatever you choose is sure to be good . I 've been skating , and I 'm hungry . And do n't imagine , " he added , detecting a look of dissatisfaction on Oblonsky 's face , " that I sha n't appreciate your choice . I am fond of good things . " " I should hope so ! After all , it 's one of the pleasures of life , " said Stepan Arkadyevitch . " Well , then , my friend , you give us two—or better say three—dozen oysters , clear soup with vegetables ... " " Printaniere , " prompted the Tatar . But Stepan Arkadyevitch apparently did not care to allow him the satisfaction of giving the French names of the dishes . " With vegetables in it , you know . Then turbot with thick sauce , then ... roast beef ; and mind it 's good . Yes , and capons , perhaps , and then sweets . " The Tatar , recollecting that it was Stepan Arkadyevitch 's way not to call the dishes by the names in the French bill of fare , did not repeat them after him , but could not resist rehearsing the whole menu to himself according to the bill : — " Soupe printanière , turbot , sauce Beaumarchais , poulard à l'estragon , macédoine de fruits ... etc. , " and then instantly , as though worked by springs , laying down one bound bill of fare , he took up another , the list of wines , and submitted it to Stepan Arkadyevitch . " What shall we drink ? " " What you like , only not too much . Champagne , " said Levin . " What ! to start with ? You 're right though , I dare say . Do you like the white seal ? " " Cachet blanc , " prompted the Tatar . " Very well , then , give us that brand with the oysters , and then we 'll see . " " Yes , sir . And what table wine ? " " You can give us Nuits . Oh , no , better the classic Chablis . " " Yes , sir . And your cheese , your excellency ? " " Oh , yes , Parmesan . Or would you like another ? " " No , it 's all the same to me , " said Levin , unable to suppress a smile . And the Tatar ran off with flying coat-tails , and in five minutes darted in with a dish of opened oysters on mother-of-pearl shells , and a bottle between his fingers . Stepan Arkadyevitch crushed the starchy napkin , tucked it into his waistcoat , and settling his arms comfortably , started on the oysters . " Not bad , " he said , stripping the oysters from the pearly shell with a silver fork , and swallowing them one after another . " Not bad , " he repeated , turning his dewy , brilliant eyes from Levin to the Tatar . Levin ate the oysters indeed , though white bread and cheese would have pleased him better . But he was admiring Oblonsky . Even the Tatar , uncorking the bottle and pouring the sparkling wine into the delicate glasses , glanced at Stepan Arkadyevitch , and settled his white cravat with a perceptible smile of satisfaction . " You do n't care much for oysters , do you ? " said Stepan Arkadyevitch , emptying his wine glass , " or you 're worried about something . Eh ? " He wanted Levin to be in good spirits . But it was not that Levin was not in good spirits ; he was ill at ease . With what he had in his soul , he felt sore and uncomfortable in the restaurant , in the midst of private rooms where men were dining with ladies , in all this fuss and bustle ; the surroundings of bronzes , looking glasses , gas , and waiters—all of it was offensive to him . He was afraid of sullying what his soul was brimful of . " I ? Yes , I am ; but besides , all this bothers me , " he said . " You ca n't conceive how queer it all seems to a country person like me , as queer as that gentleman 's nails I saw at your place ... " " Yes , I saw how much interested you were in poor Grinevitch 's nails , " said Stepan Arkadyevitch , laughing . " It 's too much for me , " responded Levin . " Do try , now , and put yourself in my place , take the point of view of a country person . We in the country try to bring our hands into such a state as will be most convenient for working with . So we cut our nails ; sometimes we turn up our sleeves . And here people purposely let their nails grow as long as they will , and link on small saucers by way of studs , so that they can do nothing with their hands . " Stepan Arkadyevitch smiled gaily . " Oh , yes , that 's just a sign that he has no need to do coarse work . His work is with the mind ... " " Maybe . But still it 's queer to me , just as at this moment it seems queer to me that we country folks try to get our meals over as soon as we can , so as to be ready for our work , while here are we trying to drag out our meal as long as possible , and with that object eating oysters ... " " Why , of course , " objected Stepan Arkadyevitch . " But that 's just the aim of civilization—to make everything a source of enjoyment . " " Well , if that 's its aim , I 'd rather be a savage . " " And so you are a savage . All you Levins are savages . " Levin sighed . He remembered his brother Nikolay , and felt ashamed and sore , and he scowled ; but Oblonsky began speaking of a subject which at once drew his attention . " Oh , I say , are you going tonight to our people , the Shtcherbatskys ' , I mean ? " he said , his eyes sparkling significantly as he pushed away the empty rough shells , and drew the cheese towards him . " Yes , I shall certainly go , " replied Levin ; " though I fancied the princess was not very warm in her invitation . " " What nonsense ! That 's her manner ... . Come , boy , the soup ! ... . That 's her manner—grande dame , " said Stepan Arkadyevitch . " I 'm coming , too , but I have to go to the Countess Bonina 's rehearsal . Come , is n't it true that you 're a savage ? How do you explain the sudden way in which you vanished from Moscow ? The Shtcherbatskys were continually asking me about you , as though I ought to know . The only thing I know is that you always do what no one else does . " " Yes , " said Levin , slowly and with emotion , " you 're right . I am a savage . Only , my savageness is not in having gone away , but in coming now . Now I have come ... " " Oh , what a lucky fellow you are ! " broke in Stepan Arkadyevitch , looking into Levin 's eyes . " Why ? " " I know a gallant steed by tokens sure , And by his eyes I know a youth in love , " declaimed Stepan Arkadyevitch . " Everything is before you . " " Why , is it over for you already ? " " No ; not over exactly , but the future is yours , and the present is mine , and the present—well , it 's not all that it might be . " " How so ? " " Oh , things go wrong . But I do n't want to talk of myself , and besides I ca n't explain it all , " said Stepan Arkadyevitch . " Well , why have you come to Moscow , then ? ... . Hi ! take away ! " he called to the Tatar . " You guess ? " responded Levin , his eyes like deep wells of light fixed on Stepan Arkadyevitch . " I guess , but I ca n't be the first to talk about it . You can see by that whether I guess right or wrong , " said Stepan Arkadyevitch , gazing at Levin with a subtle smile . " Well , and what have you to say to me ? " said Levin in a quivering voice , feeling that all the muscles of his face were quivering too . " How do you look at the question ? " Stepan Arkadyevitch slowly emptied his glass of Chablis , never taking his eyes off Levin . " I ? " said Stepan Arkadyevitch , " there 's nothing I desire so much as that—nothing ! It would be the best thing that could be . " " But you 're not making a mistake ? You know what we 're speaking of ? " said Levin , piercing him with his eyes . " You think it 's possible ? " " I think it 's possible . Why not possible ? " " No ! do you really think it 's possible ? No , tell me all you think ! Oh , but if ... if refusal 's in store for me ! ... Indeed I feel sure ... " " Why should you think that ? " said Stepan Arkadyevitch , smiling at his excitement . " It seems so to me sometimes . That will be awful for me , and for her too . " " Oh , well , anyway there 's nothing awful in it for a girl . Every girl 's proud of an offer . " " Yes , every girl , but not she . " Stepan Arkadyevitch smiled . He so well knew that feeling of Levin 's , that for him all the girls in the world were divided into two classes : one class—all the girls in the world except her , and those girls with all sorts of human weaknesses , and very ordinary girls : the other class—she alone , having no weaknesses of any sort and higher than all humanity . " Stay , take some sauce , " he said , holding back Levin 's hand as it pushed away the sauce . Levin obediently helped himself to sauce , but would not let Stepan Arkadyevitch go on with his dinner . " No , stop a minute , stop a minute , " he said . " You must understand that it 's a question of life and death for me . I have never spoken to any one of this . And there 's no one I could speak of it to , except you . You know we 're utterly unlike each other , different tastes and views and everything ; but I know you 're fond of me and understand me , and that 's why I like you awfully . But for God 's sake , be quite straightforward with me . " " I tell you what I think , " said Stepan Arkadyevitch , smiling . " But I 'll say more : my wife is a wonderful woman ... " Stepan Arkadyevitch sighed , remembering his position with his wife , and , after a moment 's silence , resumed—"She has a gift of foreseeing things . She sees right through people ; but that 's not all ; she knows what will come to pass , especially in the way of marriages . She foretold , for instance , that Princess Shahovskaya would marry Brenteln . No one would believe it , but it came to pass . And she 's on your side . " " How do you mean ? " " It 's not only that she likes you—she says that Kitty is certain to be your wife . " At these words Levin 's face suddenly lighted up with a smile , a smile not far from tears of emotion . " She says that ! " cried Levin . " I always said she was exquisite , your wife . There , that 's enough , enough said about it , " he said , getting up from his seat . " All right , but do sit down . " But Levin could not sit down . He walked with his firm tread twice up and down the little cage of a room , blinked his eyelids that his tears might not fall , and only then sat down to the table . " You must understand , " said he , " it 's not love . I 've been in love , but it 's not that . It 's not my feeling , but a sort of force outside me has taken possession of me . I went away , you see , because I made up my mind that it could never be , you understand , as a happiness that does not come on earth ; but I 've struggled with myself , I see there 's no living without it . And it must be settled . " " What did you go away for ? " " Ah , stop a minute ! Ah , the thoughts that come crowding on one ! The questions one must ask oneself ! Listen . You ca n't imagine what you 've done for me by what you said . I 'm so happy that I 've become positively hateful ; I 've forgotten everything . I heard today that my brother Nikolay ... you know , he 's here ... I had even forgotten him . It seems to me that he 's happy too . It 's a sort of madness . But one thing 's awful ... . Here , you 've been married , you know the feeling ... it 's awful that we—old—with a past ... not of love , but of sins ... are brought all at once so near to a creature pure and innocent ; it 's loathsome , and that 's why one ca n't help feeling oneself unworthy . " " Oh , well , you 've not many sins on your conscience . " " Alas ! all the same , " said Levin , " when with loathing I go over my life , I shudder and curse and bitterly regret it ... . Yes . " " What would you have ? The world 's made so , " said Stepan Arkadyevitch . " The one comfort is like that prayer , which I always liked : 'Forgive me not according to my unworthiness , but according to Thy lovingkindness . ' That 's the only way she can forgive me . " </text>
<text id="FictTolstoyL_AnnaK_I11_EN.txt">
﻿ Part One , Chapter 11 Levin emptied his glass , and they were silent for a while . " There 's one other thing I ought to tell you . Do you know Vronsky ? " Stepan Arkadyevitch asked Levin . " No , I do n't . Why do you ask ? " " Give us another bottle , " Stepan Arkadyevitch directed the Tatar , who was filling up their glasses and fidgeting round them just when he was not wanted . " Why you ought to know Vronsky is that he 's one of your rivals . " " Who 's Vronsky ? " said Levin , and his face was suddenly transformed from the look of childlike ecstasy which Oblonsky had just been admiring to an angry and unpleasant expression . " Vronsky is one of the sons of Count Kirill Ivanovitch Vronsky , and one of the finest specimens of the gilded youth of Petersburg . I made his acquaintance in Tver when I was there on official business , and he came there for the levy of recruits . Fearfully rich , handsome , great connections , an aide-de-camp , and with all that a very nice , good-natured fellow . But he 's more than simply a good-natured fellow , as I 've found out here—he 's a cultivated man , too , and very intelligent ; he 's a man who 'll make his mark . " Levin scowled and was dumb . " Well , he turned up here soon after you 'd gone , and as I can see , he 's over head and ears in love with Kitty , and you know that her mother ... " " Excuse me , but I know nothing , " said Levin , frowning gloomily . And immediately he recollected his brother Nikolay and how hateful he was to have been able to forget him . " You wait a bit , wait a bit , " said Stepan Arkadyevitch , smiling and touching his hand . " I 've told you what I know , and I repeat that in this delicate and tender matter , as far as one can conjecture , I believe the chances are in your favor . " Levin dropped back in his chair ; his face was pale . " But I would advise you to settle the thing as soon as may be , " pursued Oblonsky , filling up his glass . " No , thanks , I ca n't drink any more , " said Levin , pushing away his glass . " I shall be drunk ... . Come , tell me how are you getting on ? " he went on , obviously anxious to change the conversation . " One word more : in any case I advise you to settle the question soon . Tonight I do n't advise you to speak , " said Stepan Arkadyevitch . " Go round tomorrow morning , make an offer in due form , and God bless you ... " " Oh , do you still think of coming to me for some shooting ? Come next spring , do , " said Levin . Now his whole soul was full of remorse that he had begun this conversation with Stepan Arkadyevitch . A feeling such as his was profaned by talk of the rivalry of some Petersburg officer , of the suppositions and the counsels of Stepan Arkadyevitch . Stepan Arkadyevitch smiled . He knew what was passing in Levin 's soul . " I 'll come some day , " he said . " But women , my boy , they 're the pivot everything turns upon . Things are in a bad way with me , very bad . And it 's all through women . Tell me frankly now , " he pursued , picking up a cigar and keeping one hand on his glass ; " give me your advice . " " Why , what is it ? " " I 'll tell you . Suppose you 're married , you love your wife , but you 're fascinated by another woman ... " " Excuse me , but I 'm absolutely unable to comprehend how ... just as I ca n't comprehend how I could now , after my dinner , go straight to a baker 's shop and steal a roll . " Stepan Arkadyevitch 's eyes sparkled more than usual . " Why not ? A roll will sometimes smell so good one ca n't resist it . " " Himmlisch ist 's , wenn ich bezwungen Meine irdische Begier ; Aber doch wenn 's nich gelungen Hatt ' ich auch recht huebsch Plaisir ! " As he said this , Stepan Arkadyevitch smiled subtly . Levin , too , could not help smiling . " Yes , but joking apart , " resumed Stepan Arkadyevitch , " you must understand that the woman is a sweet , gentle loving creature , poor and lonely , and has sacrificed everything . Now , when the thing 's done , do n't you see , can one possibly cast her off ? Even supposing one parts from her , so as not to break up one 's family life , still , can one help feeling for her , setting her on her feet , softening her lot ? " " Well , you must excuse me there . You know to me all women are divided into two classes ... at least no ... truer to say : there are women and there are ... I 've never seen exquisite fallen beings , and I never shall see them , but such creatures as that painted Frenchwoman at the counter with the ringlets are vermin to my mind , and all fallen women are the same . " " But the Magdalen ? " " Ah , drop that ! Christ would never have said those words if He had known how they would be abused . Of all the Gospel those words are the only ones remembered . However , I 'm not saying so much what I think , as what I feel . I have a loathing for fallen women . You 're afraid of spiders , and I of these vermin . Most likely you 've not made a study of spiders and do n't know their character ; and so it is with me . " " It 's very well for you to talk like that ; it 's very much like that gentleman in Dickens who used to fling all difficult questions over his right shoulder . But to deny the facts is no answer . What 's to be done—you tell me that , what 's to be done ? Your wife gets older , while you 're full of life . Before you 've time to look round , you feel that you ca n't love your wife with love , however much you may esteem her . And then all at once love turns up , and you 're done for , done for , " Stepan Arkadyevitch said with weary despair . Levin half smiled . " Yes , you 're done for , " resumed Oblonsky . " But what 's to be done ? " " Do n't steal rolls . " Stepan Arkadyevitch laughed outright . " Oh , moralist ! But you must understand , there are two women ; one insists only on her rights , and those rights are your love , which you ca n't give her ; and the other sacrifices everything for you and asks for nothing . What are you to do ? How are you to act ? There 's a fearful tragedy in it . " " If you care for my profession of faith as regards that , I 'll tell you that I do n't believe there was any tragedy about it . And this is why . To my mind , love ... both the sorts of love , which you remember Plato defines in his Banquet , served as the test of men . Some men only understand one sort , and some only the other . And those who only know the non-platonic love have no need to talk of tragedy . In such love there can be no sort of tragedy . 'I 'm much obliged for the gratification , my humble respects'—that 's all the tragedy . And in platonic love there can be no tragedy , because in that love all is clear and pure , because ... " At that instant Levin recollected his own sins and the inner conflict he had lived through . And he added unexpectedly : " But perhaps you are right . Very likely ... I do n't know , I do n't know . " " It 's this , do n't you see , " said Stepan Arkadyevitch , " you 're very much all of a piece . That 's your strong point and your failing . You have a character that 's all of a piece , and you want the whole of life to be of a piece too—but that 's not how it is . You despise public official work because you want the reality to be invariably corresponding all the while with the aim—and that 's not how it is . You want a man 's work , too , always to have a defined aim , and love and family life always to be undivided—and that 's not how it is . All the variety , all the charm , all the beauty of life is made up of light and shadow . " Levin sighed and made no reply . He was thinking of his own affairs , and did not hear Oblonsky . And suddenly both of them felt that though they were friends , though they had been dining and drinking together , which should have drawn them closer , yet each was thinking only of his own affairs , and they had nothing to do with one another . Oblonsky had more than once experienced this extreme sense of aloofness , instead of intimacy , coming on after dinner , and he knew what to do in such cases . " Bill ! " he called , and he went into the next room where he promptly came across an aide-de-camp of his acquaintance and dropped into conversation with him about an actress and her protector . And at once in the conversation with the aide-de-camp Oblonsky had a sense of relaxation and relief after the conversation with Levin , which always put him to too great a mental and spiritual strain . When the Tatar appeared with a bill for twenty-six roubles and odd kopecks , besides a tip for himself , Levin , who would another time have been horrified , like any one from the country , at his share of fourteen roubles , did not notice it , paid , and set off homewards to dress and go to the Shtcherbatskys ' there to decide his fate . </text>
<text id="FictTolstoyL_WarPeace_I16_EN.txt">
﻿ CHAPTER XIX At the men 's end of the table the talk grew more and more animated . The colonel told them that the declaration of war had already appeared in Petersburg and that a copy , which he had himself seen , had that day been forwarded by courier to the commander in chief . " And why the deuce are we going to fight Bonaparte ? " remarked Shinshin . " He has stopped Austria 's cackle and I fear it will be our turn next . " The colonel was a stout , tall , plethoric German , evidently devoted to the service and patriotically Russian . He resented Shinshin 's remark . " It is for the reasson , my goot sir , " said he , speaking with a German accent , " for the reasson zat ze Emperor knows zat . He declares in ze manifessto zat he cannot fiew wiz indifference ze danger vreatening Russia and zat ze safety and dignity of ze Empire as vell as ze sanctity of its alliances ... " he spoke this last word with particular emphasis as if in it lay the gist of the matter . Then with the unerring official memory that characterized him he repeated from the opening words of the manifesto : ... and the wish , which constitutes the Emperor 's sole and absolute aim--to establish peace in Europe on firm foundations--has now decided him to despatch part of the army abroad and to create a new condition for the attainment of that purpose . " Zat , my dear sir , is vy ... " he concluded , drinking a tumbler of wine with dignity and looking to the count for approval . " Connaissez-vous le Proverbe : * 'Jerome , Jerome , do not roam , but turn spindles at home ! ' ? " said Shinshin , puckering his brows and smiling . " Cela nous convient a merveille . *[2 ] Suvorov now--he knew what he was about ; yet they beat him a plate couture , *[3 ] and where are we to find Suvorovs now ? Je vous demande un peu , " *[4 ] said he , continually changing from French to Russian . * Do you know the proverb ? [ 2 ] That suits us down to the ground . [ 3 ] Hollow . [ 4 ] I just ask you that . " Ve must vight to the last tr-r-op of our plood ! " said the colonel , thumping the table ; " and ve must tie for our Emperor , and zen all vill pe vell . And ve must discuss it as little as po-o-ossible " ... he dwelt particularly on the word possible ... " as po-o-ossible , " he ended , again turning to the count . " Zat is how ve old hussars look at it , and zere 's an end of it ! And how do you , a young man and a young hussar , how do you judge of it ? " he added , addressing Nicholas , who when he heard that the war was being discussed had turned from his partner with eyes and ears intent on the colonel . " I am quite of your opinion , " replied Nicholas , flaming up , turning his plate round and moving his wineglasses about with as much decision and desperation as though he were at that moment facing some great danger . " I am convinced that we Russians must die or conquer , " he concluded , conscious--as were others--after the words were uttered that his remarks were too enthusiastic and emphatic for the occasion and were therefore awkward . " What you said just now was splendid ! " said his partner Julie . Sonya trembled all over and blushed to her ears and behind them and down to her neck and shoulders while Nicholas was speaking . Pierre listened to the colonel 's speech and nodded approvingly . " That 's fine , " said he . " The young man 's a real hussar ! " shouted the colonel , again thumping the table . " What are you making such a noise about over there ? " Marya Dmitrievna 's deep voice suddenly inquired from the other end of the table . " What are you thumping the table for ? " she demanded of the hussar , " and why are you exciting yourself ? Do you think the French are here ? " " I am speaking ze truce , " replied the hussar with a smile . " It 's all about the war , " the count shouted down the table . " You know my son 's going , Marya Dmitrievna ? My son is going . " " I have four sons in the army but still I do n't fret . It is all in God 's hands . You may die in your bed or God may spare you in a battle , " replied Marya Dmitrievna 's deep voice , which easily carried the whole length of the table . " That 's true ! " Once more the conversations concentrated , the ladies ' at the one end and the men 's at the other . " You wo n't ask , " Natasha 's little brother was saying ; " I know you wo n't ask ! " " I will , " replied Natasha . Her face suddenly flushed with reckless and joyous resolution . She half rose , by a glance inviting Pierre , who sat opposite , to listen to what was coming , and turning to her mother : " Mamma ! " rang out the clear contralto notes of her childish voice , audible the whole length of the table . " What is it ? " asked the countess , startled ; but seeing by her daughter 's face that it was only mischief , she shook a finger at her sternly with a threatening and forbidding movement of her head . The conversation was hushed . " Mamma ! What sweets are we going to have ? " and Natasha 's voice sounded still more firm and resolute . The countess tried to frown , but could not . Marya Dmitrievna shook her fat finger . " Cossack ! " she said threateningly . Most of the guests , uncertain how to regard this sally , looked at the elders . " You had better take care ! " said the countess . " Mamma ! What sweets are we going to have ? " Natasha again cried boldly , with saucy gaiety , confident that her prank would be taken in good part . Sonya and fat little Petya doubled up with laughter . " You see ! I have asked , " whispered Natasha to her little brother and to Pierre , glancing at him again . " Ice pudding , but you wo n't get any , " said Marya Dmitrievna . Natasha saw there was nothing to be afraid of and so she braved even Marya Dmitrievna . " Marya Dmitrievna ! What kind of ice pudding ? I do n't like ice cream . " " Carrot ices . " " No ! What kind , Marya Dmitrievna ? What kind ? " she almost screamed ; " I want to know ! " Marya Dmitrievna and the countess burst out laughing , and all the guests joined in . Everyone laughed , not at Marya Dmitrievna 's answer but at the incredible boldness and smartness of this little girl who had dared to treat Marya Dmitrievna in this fashion . Natasha only desisted when she had been told that there would be pineapple ice . Before the ices , champagne was served round . The band again struck up , the count and countess kissed , and the guests , leaving their seats , went up to " congratulate " the countess , and reached across the table to clink glasses with the count , with the children , and with one another . Again the footmen rushed about , chairs scraped , and in the same order in which they had entered but with redder faces , the guests returned to the drawing room and to the count 's study . </text>
<text id="FictTolstoyL_WarPeace_I2_EN.txt">
﻿ CHAPTER II Anna Pavlovna 's drawing room was gradually filling . The highest Petersburg society was assembled there : people differing widely in age and character but alike in the social circle to which they belonged . Prince Vasili 's daughter , the beautiful Helene , came to take her father to the ambassador 's entertainment ; she wore a ball dress and her badge as maid of honor . The youthful little Princess Bolkonskaya , known as la femme la plus seduisante de Petersbourg , * was also there . She had been married during the previous winter , and being pregnant did not go to any large gatherings , but only to small receptions . Prince Vasili 's son , Hippolyte , had come with Mortemart , whom he introduced . The Abbe Morio and many others had also come . * The most fascinating woman in Petersburg . To each new arrival Anna Pavlovna said , " You have not yet seen my aunt , " or " You do not know my aunt ? " and very gravely conducted him or her to a little old lady , wearing large bows of ribbon in her cap , who had come sailing in from another room as soon as the guests began to arrive ; and slowly turning her eyes from the visitor to her aunt , Anna Pavlovna mentioned each one 's name and then left them . Each visitor performed the ceremony of greeting this old aunt whom not one of them knew , not one of them wanted to know , and not one of them cared about ; Anna Pavlovna observed these greetings with mournful and solemn interest and silent approval . The aunt spoke to each of them in the same words , about their health and her own , and the health of Her Majesty , " who , thank God , was better today . " And each visitor , though politeness prevented his showing impatience , left the old woman with a sense of relief at having performed a vexatious duty and did not return to her the whole evening . The young Princess Bolkonskaya had brought some work in a gold-embroidered velvet bag . Her pretty little upper lip , on which a delicate dark down was just perceptible , was too short for her teeth , but it lifted all the more sweetly , and was especially charming when she occasionally drew it down to meet the lower lip . As is always the case with a thoroughly attractive woman , her defect--the shortness of her upper lip and her half-open mouth--seemed to be her own special and peculiar form of beauty . Everyone brightened at the sight of this pretty young woman , so soon to become a mother , so full of life and health , and carrying her burden so lightly . Old men and dull dispirited young ones who looked at her , after being in her company and talking to her a little while , felt as if they too were becoming , like her , full of life and health . All who talked to her , and at each word saw her bright smile and the constant gleam of her white teeth , thought that they were in a specially amiable mood that day . The little princess went round the table with quick , short , swaying steps , her workbag on her arm , and gaily spreading out her dress sat down on a sofa near the silver samovar , as if all she was doing was a pleasure to herself and to all around her . " I have brought my work , " said she in French , displaying her bag and addressing all present . " Mind , Annette , I hope you have not played a wicked trick on me , " she added , turning to her hostess . " You wrote that it was to be quite a small reception , and just see how badly I am dressed . " And she spread out her arms to show her short-waisted , lace-trimmed , dainty gray dress , girdled with a broad ribbon just below the breast . " Soyez tranquille , Lise , you will always be prettier than anyone else , " replied Anna Pavlovna . " You know , " said the princess in the same tone of voice and still in French , turning to a general , " my husband is deserting me ? He is going to get himself killed . Tell me what this wretched war is for ? " she added , addressing Prince Vasili , and without waiting for an answer she turned to speak to his daughter , the beautiful Helene . " What a delightful woman this little princess is ! " said Prince Vasili to Anna Pavlovna . One of the next arrivals was a stout , heavily built young man with close-cropped hair , spectacles , the light-colored breeches fashionable at that time , a very high ruffle , and a brown dress coat . This stout young man was an illegitimate son of Count Bezukhov , a well-known grandee of Catherine 's time who now lay dying in Moscow . The young man had not yet entered either the military or civil service , as he had only just returned from abroad where he had been educated , and this was his first appearance in society . Anna Pavlovna greeted him with the nod she accorded to the lowest hierarchy in her drawing room . But in spite of this lowest-grade greeting , a look of anxiety and fear , as at the sight of something too large and unsuited to the place , came over her face when she saw Pierre enter . Though he was certainly rather bigger than the other men in the room , her anxiety could only have reference to the clever though shy , but observant and natural , expression which distinguished him from everyone else in that drawing room . " It is very good of you , Monsieur Pierre , to come and visit a poor invalid , " said Anna Pavlovna , exchanging an alarmed glance with her aunt as she conducted him to her . Pierre murmured something unintelligible , and continued to look round as if in search of something . On his way to the aunt he bowed to the little princess with a pleased smile , as to an intimate acquaintance . Anna Pavlovna 's alarm was justified , for Pierre turned away from the aunt without waiting to hear her speech about Her Majesty 's health . Anna Pavlovna in dismay detained him with the words : " Do you know the Abbe Morio ? He is a most interesting man . " " Yes , I have heard of his scheme for perpetual peace , and it is very interesting but hardly feasible . " " You think so ? " rejoined Anna Pavlovna in order to say something and get away to attend to her duties as hostess . But Pierre now committed a reverse act of impoliteness . First he had left a lady before she had finished speaking to him , and now he continued to speak to another who wished to get away . With his head bent , and his big feet spread apart , he began explaining his reasons for thinking the abbe 's plan chimerical . " We will talk of it later , " said Anna Pavlovna with a smile . And having got rid of this young man who did not know how to behave , she resumed her duties as hostess and continued to listen and watch , ready to help at any point where the conversation might happen to flag . As the foreman of a spinning mill , when he has set the hands to work , goes round and notices here a spindle that has stopped or there one that creaks or makes more noise than it should , and hastens to check the machine or set it in proper motion , so Anna Pavlovna moved about her drawing room , approaching now a silent , now a too-noisy group , and by a word or slight rearrangement kept the conversational machine in steady , proper , and regular motion . But amid these cares her anxiety about Pierre was evident . She kept an anxious watch on him when he approached the group round Mortemart to listen to what was being said there , and again when he passed to another group whose center was the abbe . Pierre had been educated abroad , and this reception at Anna Pavlovna 's was the first he had attended in Russia . He knew that all the intellectual lights of Petersburg were gathered there and , like a child in a toyshop , did not know which way to look , afraid of missing any clever conversation that was to be heard . Seeing the self-confident and refined expression on the faces of those present he was always expecting to hear something very profound . At last he came up to Morio . Here the conversation seemed interesting and he stood waiting for an opportunity to express his own views , as young people are fond of doing . </text>
<text id="FictWildeO_Dorian_18_EN.txt">
﻿ Chapter 18 The next day he did not leave the house , and , indeed , spent most of the time in his own room , sick with a wild terror of dying , and yet indifferent to life itself . The consciousness of being hunted , snared , tracked down , had begun to dominate him . If the tapestry did but tremble in the wind , he shook . The dead leaves that were blown against the leaded panes seemed to him like his own wasted resolutions and wild regrets . When he closed his eyes , he saw again the sailor 's face peering through the mist-stained glass , and horror seemed once more to lay its hand upon his heart . But perhaps it had been only his fancy that had called vengeance out of the night and set the hideous shapes of punishment before him . Actual life was chaos , but there was something terribly logical in the imagination . It was the imagination that set remorse to dog the feet of sin . It was the imagination that made each crime bear its misshapen brood . In the common world of fact the wicked were not punished , nor the good rewarded . Success was given to the strong , failure thrust upon the weak . That was all . Besides , had any stranger been prowling round the house , he would have been seen by the servants or the keepers . Had any foot-marks been found on the flower-beds , the gardeners would have reported it . Yes , it had been merely fancy . Sibyl Vane 's brother had not come back to kill him . He had sailed away in his ship to founder in some winter sea . From him , at any rate , he was safe . Why , the man did not know who he was , could not know who he was . The mask of youth had saved him . And yet if it had been merely an illusion , how terrible it was to think that conscience could raise such fearful phantoms , and give them visible form , and make them move before one ! What sort of life would his be if , day and night , shadows of his crime were to peer at him from silent corners , to mock him from secret places , to whisper in his ear as he sat at the feast , to wake him with icy fingers as he lay asleep ! As the thought crept through his brain , he grew pale with terror , and the air seemed to him to have become suddenly colder . Oh ! in what a wild hour of madness he had killed his friend ! How ghastly the mere memory of the scene ! He saw it all again . Each hideous detail came back to him with added horror . Out of the black cave of time , terrible and swathed in scarlet , rose the image of his sin . When Lord Henry came in at six o'clock , he found him crying as one whose heart will break . It was not till the third day that he ventured to go out . There was something in the clear , pine-scented air of that winter morning that seemed to bring him back his joyousness and his ardour for life . But it was not merely the physical conditions of environment that had caused the change . His own nature had revolted against the excess of anguish that had sought to maim and mar the perfection of its calm . With subtle and finely wrought temperaments it is always so . Their strong passions must either bruise or bend . They either slay the man , or themselves die . Shallow sorrows and shallow loves live on . The loves and sorrows that are great are destroyed by their own plenitude . Besides , he had convinced himself that he had been the victim of a terror-stricken imagination , and looked back now on his fears with something of pity and not a little of contempt . After breakfast , he walked with the Duchess for an hour in the garden and then drove across the park to join the shooting-party . The crisp frost lay like salt upon the grass . The sky was an inverted cup of blue metal . A thin film of ice bordered the flat , reed-grown lake . At the corner of the pine-wood he caught sight of Sir Geoffrey Clouston , the Duchess 's brother , jerking two spent cartridges out of his gun . He jumped from the cart , and having told the groom to take the mare home , made his way towards his guest through the withered bracken and rough undergrowth . " Have you had good sport , Geoffrey ? " he asked . " Not very good , Dorian . I think most of the birds have gone to the open . I dare say it will be better after lunch , when we get to new ground . " Dorian strolled along by his side . The keen aromatic air , the brown and red lights that glimmered in the wood , the hoarse cries of the beaters ringing out from time to time , and the sharp snaps of the guns that followed , fascinated him and filled him with a sense of delightful freedom . He was dominated by the carelessness of happiness , by the high indifference of joy . Suddenly from a lumpy tussock of old grass some twenty yards in front of them , with black-tipped ears erect and long hinder limbs throwing it forward , started a hare . It bolted for a thicket of alders . Sir Geoffrey put his gun to his shoulder , but there was something in the animal 's grace of movement that strangely charmed Dorian Gray , and he cried out at once , " Do n't shoot it , Geoffrey . Let it live . " " What nonsense , Dorian ! " laughed his companion , and as the hare bounded into the thicket , he fired . There were two cries heard , the cry of a hare in pain , which is dreadful , the cry of a man in agony , which is worse . " Good heavens ! I have hit a beater ! " exclaimed Sir Geoffrey . " What an ass the man was to get in front of the guns ! Stop shooting there ! " he called out at the top of his voice . " A man is hurt . " The head-keeper came running up with a stick in his hand . " Where , sir ? Where is he ? " he shouted . At the same time , the firing ceased along the line . " Here , " answered Sir Geoffrey angrily , hurrying towards the thicket . " Why on earth do n't you keep your men back ? Spoiled my shooting for the day . " Dorian watched them as they plunged into the alder-clump , brushing the lithe swinging branches aside . In a few moments they emerged , dragging a body after them into the sunlight . He turned away in horror . It seemed to him that misfortune followed wherever he went . He heard Sir Geoffrey ask if the man was really dead , and the affirmative answer of the keeper . The wood seemed to him to have become suddenly alive with faces . There was the trampling of myriad feet and the low buzz of voices . A great copper-breasted pheasant came beating through the boughs overhead . After a few moments – that were to him , in his perturbed state , like endless hours of pain – he felt a hand laid on his shoulder . He started and looked round . " Dorian , " said Lord Henry , " I had better tell them that the shooting is stopped for to-day . It would not look well to go on . " " I wish it were stopped for ever , Harry , " he answered bitterly . " The whole thing is hideous and cruel . Is the man ... ? " He could not finish the sentence . " I am afraid so , " rejoined Lord Henry . " He got the whole charge of shot in his chest . He must have died almost instantaneously . Come ; let us go home . " They walked side by side in the direction of the avenue for nearly fifty yards without speaking . Then Dorian looked at Lord Henry and said , with a heavy sigh , " It is a bad omen , Harry , a very bad omen . " " What is ? " asked Lord Henry . " Oh ! this accident , I suppose . My dear fellow , it ca n't be helped . It was the man 's own fault . Why did he get in front of the guns ? Besides , it is nothing to us . It is rather awkward for Geoffrey , of course . It does not do to pepper beaters . It makes people think that one is a wild shot . And Geoffrey is not ; he shoots very straight . But there is no use talking about the matter . " Dorian shook his head . " It is a bad omen , Harry . I feel as if something horrible were going to happen to some of us . To myself , perhaps , " he added , passing his hand over his eyes , with a gesture of pain . The elder man laughed . " The only horrible thing in the world is ennui , Dorian . That is the one sin for which there is no forgiveness . But we are not likely to suffer from it unless these fellows keep chattering about this thing at dinner . I must tell them that the subject is to be tabooed . As for omens , there is no such thing as an omen . Destiny does not send us heralds . She is too wise or too cruel for that . Besides , what on earth could happen to you , Dorian ? You have everything in the world that a man can want . There is no one who would not be delighted to change places with you . " " There is no one with whom I would not change places , Harry . Do n't laugh like that . I am telling you the truth . The wretched peasant who has just died is better off than I am . I have no terror of death . It is the coming of death that terrifies me . Its monstrous wings seem to wheel in the leaden air around me . Good heavens ! do n't you see a man moving behind the trees there , watching me , waiting for me ? " Lord Henry looked in the direction in which the trembling gloved hand was pointing . " Yes , " he said , smiling , " I see the gardener waiting for you . I suppose he wants to ask you what flowers you wish to have on the table to-night . How absurdly nervous you are , my dear fellow ! You must come and see my doctor , when we get back to town . " Dorian heaved a sigh of relief as he saw the gardener approaching . The man touched his hat , glanced for a moment at Lord Henry in a hesitating manner , and then produced a letter , which he handed to his master . " Her Grace told me to wait for an answer , " he murmured . Dorian put the letter into his pocket . " Tell her Grace that I am coming in , " he said , coldly . The man turned round and went rapidly in the direction of the house . " How fond women are of doing dangerous things ! " laughed Lord Henry . " It is one of the qualities in them that I admire most . A woman will flirt with anybody in the world as long as other people are looking on . " " How fond you are of saying dangerous things , Harry ! In the present instance , you are quite astray . I like the Duchess very much , but I do n't love her . " " And the Duchess loves you very much , but she likes you less , so you are excellently matched . " " You are talking scandal , Harry , and there is never any basis for scandal . " " The basis of every scandal is an immoral certainty , " said Lord Henry , lighting a cigarette . " You would sacrifice anybody , Harry , for the sake of an epigram . " " The world goes to the altar of its own accord , " was the answer . " I wish I could love , " cried Dorian Gray with a deep note of pathos in his voice . " But I seem to have lost the passion and forgotten the desire . I am too much concentrated on myself . My own personality has become a burden to me . I want to escape , to go away , to forget . It was silly of me to come down here at all . I think I shall send a wire to Harvey to have the yacht got ready . On a yacht one is safe . " " Safe from what , Dorian ? You are in some trouble . Why not tell me what it is ? You know I would help you . " " I ca n't tell you , Harry , " he answered sadly . " And I dare say it is only a fancy of mine . This unfortunate accident has upset me . I have a horrible presentiment that something of the kind may happen to me . " " What nonsense ! " " I hope it is , but I ca n't help feeling it . Ah ! here is the Duchess , looking like Artemis in a tailor-made gown . You see we have come back , Duchess . " " I have heard all about it , Mr. Gray , " she answered . " Poor Geoffrey is terribly upset . And it seems that you asked him not to shoot the hare . How curious ! " " Yes , it was very curious . I do n't know what made me say it . Some whim , I suppose . It looked the loveliest of little live things . But I am sorry they told you about the man . It is a hideous subject . " " It is an annoying subject , " broke in Lord Henry . " It has no psychological value at all . Now if Geoffrey had done the thing on purpose , how interesting he would be ! I should like to know some one who had committed a real murder . " " How horrid of you , Harry ! " cried the Duchess . " Is n't it , Mr. Gray ? Harry , Mr. Gray is ill again . He is going to faint . " Dorian drew himself up with an effort and smiled . " It is nothing , Duchess , " he murmured ; " my nerves are dreadfully out of order . That is all . I am afraid I walked too far this morning . I did n't hear what Harry said . Was it very bad ? You must tell me some other time . I think I must go and lie down . You will excuse me , wo n't you ? " They had reached the great flight of steps that led from the conservatory on to the terrace . As the glass door closed behind Dorian , Lord Henry turned and looked at the Duchess with his slumberous eyes . " Are you very much in love with him ? " he asked . She did not answer for some time , but stood gazing at the landscape . " I wish I knew , " she said at last . He shook his head . " Knowledge would be fatal . It is the uncertainty that charms one . A mist makes things wonderful . " " One may lose one 's way . " " All ways end at the same point , my dear Gladys . " " What is that ? " " Disillusion . " " It was my début in life , " she sighed . " It came to you crowned . " " I am tired of strawberry leaves . " " They become you . " " Only in public . " " You would miss them , " said Lord Henry . " I will not part with a petal . " " Monmouth has ears . " " Old age is dull of hearing . " " Has he never been jealous ? " " I wish he had been . " He glanced about as if in search of something . " What are you looking for ? " she inquired . " The button from your foil , " he answered . " You have dropped it . " She laughed . " I have still the mask . " " It makes your eyes lovelier , " was his reply . She laughed again . Her teeth showed like white seeds in a scarlet fruit . Upstairs , in his own room , Dorian Gray was lying on a sofa , with terror in every tingling fibre of his body . Life had suddenly become too hideous a burden for him to bear . The dreadful death of the unlucky beater , shot in the thicket like a wild animal , had seemed to him to pre-figure death for himself also . He had nearly swooned at what Lord Henry had said in a chance mood of cynical jesting . At five o'clock he rang his bell for his servant and gave him orders to pack his things for the night-express to town , and to have the brougham at the door by eight-thirty . He was determined not to sleep another night at Selby Royal . It was an ill-omened place . Death walked there in the sunlight . The grass of the forest had been spotted with blood . Then he wrote a note to Lord Henry , telling him that he was going up to town to consult his doctor and asking him to entertain his guests in his absence . As he was putting it into the envelope , a knock came to the door , and his valet informed him that the head-keeper wished to see him . He frowned and bit his lip . " Send him in , " he muttered , after some moments ' hesitation . As soon as the man entered , Dorian pulled his chequebook out of a drawer and spread it out before him . " I suppose you have come about the unfortunate accident of this morning , Thornton ? " he said , taking up a pen . " Yes , sir , " answered the gamekeeper . " Was the poor fellow married ? Had he any people dependent on him ? " asked Dorian , looking bored . " If so , I should not like them to be left in want , and will send them any sum of money you may think necessary . " " We do n't know who he is , sir . That is what I took the liberty of coming to you about . " " Do n't know who he is ? " said Dorian , listlessly . " What do you mean ? Was n't he one of your men ? " " No , sir . Never saw him before . Seems like a sailor , sir . " The pen dropped from Dorian Gray 's hand , and he felt as if his heart had suddenly stopped beating . " A sailor ? " he cried out . " Did you say a sailor ? " " Yes , sir . He looks as if he had been a sort of sailor ; tattooed on both arms , and that kind of thing . " " Was there anything found on him ? " said Dorian , leaning forward and looking at the man with startled eyes . " Anything that would tell his name ? " " Some money , sir – not much , and a six-shooter . There was no name of any kind . A decent-looking man , sir , but rough-like . A sort of sailor we think . " Dorian started to his feet . A terrible hope fluttered past him . He clutched at it madly . " Where is the body ? " he exclaimed . " Quick ! I must see it at once . " " It is in an empty stable in the Home Farm , sir . The folk do n't like to have that sort of thing in their houses . They say a corpse brings bad luck . " " The Home Farm ! Go there at once and meet me . Tell one of the grooms to bring my horse round . No. Never mind . I 'll go to the stables myself . It will save time . " In less than a quarter of an hour , Dorian Gray was galloping down the long avenue as hard as he could go . The trees seemed to sweep past him in spectral procession , and wild shadows to fling themselves across his path . Once the mare swerved at a white gate-post and nearly threw him . He lashed her across the neck with his crop . She cleft the dusky air like an arrow . The stones flew from her hoofs . At last he reached the Home Farm . Two men were loitering in the yard . He leaped from the saddle and threw the reins to one of them . In the farthest stable a light was glimmering . Something seemed to tell him that the body was there , and he hurried to the door and put his hand upon the latch . There he paused for a moment , feeling that he was on the brink of a discovery that would either make or mar his life . Then he thrust the door open and entered . On a heap of sacking in the far corner was lying the dead body of a man dressed in a coarse shirt and a pair of blue trousers . A spotted handkerchief had been placed over the face . A coarse candle , stuck in a bottle , sputtered beside it . Dorian Gray shuddered . He felt that his could not be the hand to take the handkerchief away , and called out to one of the farm-servants to come to him . " Take that thing off the face . I wish to see it , " he said , clutching at the door-post for support . When the farm-servant had done so , he stepped forward . A cry of joy broke from his lips . The man who had been shot in the thicket was James Vane . He stood there for some minutes looking at the dead body . As he rode home , his eyes were full of tears , for he knew he was safe . </text>
<text id="FictWildeO_Dorian_8_EN.txt">
﻿ Chapter 8 It was long past noon when he awoke . His valet had crept several times on tiptoe into the room to see if he was stirring , and had wondered what made his young master sleep so late . Finally his bell sounded , and Victor came softly in with a cup of tea , and a pile of letters , on a small tray of old Sevres china , and drew back the olive-satin curtains , with their shimmering blue lining , that hung in front of the three tall windows . " Monsieur has slept well this morning , " he said , smiling . " What o'clock is it , Victor ? " asked Dorian Gray drowsily . " One hour and a quarter , Monsieur . " How late it was ! He sat up , and having sipped some tea , turned over his letters . One of them was from Lord Henry , and had been brought by hand that morning . He hesitated for a moment , and then put it aside . The others he opened listlessly . They contained the usual collection of cards , invitations to dinner , tickets for private views , programmes of charity concerts , and the like that are showered on fashionable young men every morning during the season . There was a rather heavy bill for a chased silver Louis-Quinze toilet-set that he had not yet had the courage to send on to his guardians , who were extremely old-fashioned people and did not realise that we live in an age when unnecessary things are our only necessities ; and there were several very courteously worded communications from Jermyn Street money-lenders offering to advance any sum of money at a moment 's notice and at the most reasonable rates of interest . After about ten minutes he got up , and throwing on an elaborate dressing-gown of silk-embroidered cashmere wool , passed into the onyx-paved bathroom . The cool water refreshed him after his long sleep . He seemed to have forgotten all that he had gone through . A dim sense of having taken part in some strange tragedy came to him once or twice , but there was the unreality of a dream about it . As soon as he was dressed , he went into the library and sat down to a light French breakfast that had been laid out for him on a small round table close to the open window . It was an exquisite day . The warm air seemed laden with spices . A bee flew in and buzzed round the blue-dragon bowl that , filled with sulphur-yellow roses , stood before him . He felt perfectly happy . Suddenly his eye fell on the screen that he had placed in front of the portrait , and he started . " Too cold for Monsieur ? " asked his valet , putting an omelette on the table . " I shut the window ? " Dorian shook his head . " I am not cold , " he murmured . Was it all true ? Had the portrait really changed ? Or had it been simply his own imagination that had made him see a look of evil where there had been a look of joy ? Surely a painted canvas could not alter ? The thing was absurd . It would serve as a tale to tell Basil some day . It would make him smile . And yet , how vivid was his recollection of the whole thing ! First in the dim twilight , and then in the bright dawn , he had seen the touch of cruelty round the warped lips . He almost dreaded his valet leaving the room . He knew that when he was alone he would have to examine the portrait . He was afraid of certainty . When the coffee and cigarettes had been brought and the man turned to go , he felt a wild desire to tell him to remain . As the door was closing behind him , he called him back . The man stood waiting for his orders . Dorian looked at him for a moment . " I am not at home to any one , Victor , " he said with a sigh . The man bowed and retired . Then he rose from the table , lit a cigarette , and flung himself down on a luxuriously cushioned couch that stood facing the screen . The screen was an old one , of gilt Spanish leather , stamped and wrought with a rather florid Louis-Quatorze pattern . He scanned it curiously , wondering if ever before it had concealed the secret of a man 's life . Should he move it aside , after all ? Why not let it stay there ? What was the use of knowing . ? If the thing was true , it was terrible . If it was not true , why trouble about it ? But what if , by some fate or deadlier chance , eyes other than his spied behind and saw the horrible change ? What should he do if Basil Hallward came and asked to look at his own picture ? Basil would be sure to do that . No ; the thing had to be examined , and at once . Anything would be better than this dreadful state of doubt . He got up and locked both doors . At least he would be alone when he looked upon the mask of his shame . Then he drew the screen aside and saw himself face to face . It was perfectly true . The portrait had altered . As he often remembered afterwards , and always with no small wonder , he found himself at first gazing at the portrait with a feeling of almost scientific interest . That such a change should have taken place was incredible to him . And yet it was a fact . Was there some subtle affinity between the chemical atoms that shaped themselves into form and colour on the canvas and the soul that was within him ? Could it be that what that soul thought , they realised ? – that what it dreamed , they made true ? Or was there some other , more terrible reason ? He shuddered , and felt afraid , and , going back to the couch , lay there , gazing at the picture in sickened horror . One thing , however , he felt that it had done for him . It had made him conscious how unjust , how cruel , he had been to Sibyl Vane . It was not too late to make reparation for that . She could still be his wife . His unreal and selfish love would yield to some higher influence , would be transformed into some nobler passion , and the portrait that Basil Hallward had painted of him would be a guide to him through life , would be to him what holiness is to some , and conscience to others , and the fear of God to us all . There were opiates for remorse , drugs that could lull the moral sense to sleep . But here was a visible symbol of the degradation of sin . Here was an ever-present sign of the ruin men brought upon their souls . Three o'clock struck , and four , and the half-hour rang its double chime , but Dorian Gray did not stir . He was trying to gather up the scarlet threads of life and to weave them into a pattern ; to find his way through the sanguine labyrinth of passion through which he was wandering . He did not know what to do , or what to think . Finally , he went over to the table and wrote a passionate letter to the girl he had loved , imploring her forgiveness and accusing himself of madness . He covered page after page with wild words of sorrow and wilder words of pain . There is a luxury in self-reproach . When we blame ourselves , we feel that no one else has a right to blame us . It is the confession , not the priest , that gives us absolution . When Dorian had finished the letter , he felt that he had been forgiven . Suddenly there came a knock to the door , and he heard Lord Henry 's voice outside . " My dear boy , I must see you . Let me in at once . I ca n't bear your shutting yourself up like this . " He made no answer at first , but remained quite still . The knocking still continued and grew louder . Yes , it was better to let Lord Henry in , and to explain to him the new life he was going to lead , to quarrel with him if it became necessary to quarrel , to part if parting was inevitable . He jumped up , drew the screen hastily across the picture , and unlocked the door . " I am so sorry for it all , Dorian , " said Lord Henry as he entered . " But you must not think too much about it . " " Do you mean about Sibyl Vane ? " asked the lad . " Yes , of course , " answered Lord Henry , sinking into a chair and slowly pulling off his yellow gloves . " It is dreadful , from one point of view , but it was not your fault . Tell me , did you go behind and see her , after the play was over ? " " Yes . " " I felt sure you had . Did you make a scene with her ? " " I was brutal , Harry – perfectly brutal . But it is all right now . I am not sorry for anything that has happened . It has taught me to know myself better . " " Ah , Dorian , I am so glad you take it in that way ! I was afraid I would find you plunged in remorse and tearing that nice curly hair of yours . " " I have got through all that , " said Dorian , shaking his head and smiling . " I am perfectly happy now . I know what conscience is , to begin with . It is not what you told me it was . It is the divinest thing in us . Do n't sneer at it , Harry , any more – at least not before me . I want to be good . I ca n't bear the idea of my soul being hideous . " " A very charming artistic basis for ethics , Dorian ! I congratulate you on it . But how are you going to begin ? " " By marrying Sibyl Vane . " " Marrying Sibyl Vane ! " cried Lord Henry , standing up and looking at him in perplexed amazement . " But , my dear Dorian – " " Yes , Harry , I know what you are going to say . Something dreadful about marriage . Do n't say it . Do n't ever say things of that kind to me again . Two days ago I asked Sibyl to marry me . I am not going to break my word to her . She is to be my wife . " " Your wife ! Dorian ! ... Did n't you get my letter ? I wrote to you this morning , and sent the note down by my own man . " " Your letter ? Oh , yes , I remember . I have not read it yet , Harry . I was afraid there might be something in it that I would n't like . You cut life to pieces with your epigrams . " " You know nothing then ? " " What do you mean ? " Lord Henry walked across the room , and sitting down by Dorian Gray , took both his hands in his own and held them tightly . " Dorian , " he said , " my letter – do n't be frightened – was to tell you that Sibyl Vane is dead . " A cry of pain broke from the lad 's lips , and he leaped to his feet , tearing his hands away from Lord Henry 's grasp . " Dead ! Sibyl dead ! It is not true ! It is a horrible lie ! How dare you say it ? " " It is quite true , Dorian , " said Lord Henry , gravely . " It is in all the morning papers . I wrote down to you to ask you not to see any one till I came . There will have to be an inquest , of course , and you must not be mixed up in it . Things like that make a man fashionable in Paris . But in London people are so prejudiced . Here , one should never make one 's début with a scandal . One should reserve that to give an interest to one 's old age . I suppose they do n't know your name at the theatre ? If they do n't , it is all right . Did any one see you going round to her room ? That is an important point . " Dorian did not answer for a few moments . He was dazed with horror . Finally he stammered , in a stifled voice , " Harry , did you say an inquest ? What did you mean by that ? Did Sibyl – ? Oh , Harry , I ca n't bear it ! But be quick . Tell me everything at once . " " I have no doubt it was not an accident , Dorian , though it must be put in that way to the public . It seems that as she was leaving the theatre with her mother , about half-past twelve or so , she said she had forgotten something upstairs . They waited some time for her , but she did not come down again . They ultimately found her lying dead on the floor of her dressing-room . She had swallowed something by mistake , some dreadful thing they use at theatres . I do n't know what it was , but it had either prussic acid or white lead in it . I should fancy it was prussic acid , as she seems to have died instantaneously . " " Harry , Harry , it is terrible ! " cried the lad . " Yes ; it is very tragic , of course , but you must not get yourself mixed up in it . I see by the Standard that she was seventeen . I should have thought she was almost younger than that . She looked such a child , and seemed to know so little about acting . Dorian , you must n't let this thing get on your nerves . You must come and dine with me , and afterwards we will look in at the opera . It is a Patti night , and everybody will be there . You can come to my sister 's box . She has got some smart women with her . " " So I have murdered Sibyl Vane , " said Dorian Gray , half to himself , " murdered her as surely as if I had cut her little throat with a knife . Yet the roses are not less lovely for all that . The birds sing just as happily in my garden . And to-night I am to dine with you , and then go on to the opera , and sup somewhere , I suppose , afterwards . How extraordinarily dramatic life is ! If I had read all this in a book , Harry , I think I would have wept over it . Somehow , now that it has happened actually , and to me , it seems far too wonderful for tears . Here is the first passionate love-letter I have ever written in my life . Strange , that my first passionate love-letter should have been addressed to a dead girl . Can they feel , I wonder , those white silent people we call the dead ? Sibyl ! Can she feel , or know , or listen ? Oh , Harry , how I loved her once ! It seems years ago to me now . She was everything to me . Then came that dreadful night – was it really only last night ? – when she played so badly , and my heart almost broke . She explained it all to me . It was terribly pathetic . But I was not moved a bit . I thought her shallow . Suddenly something happened that made me afraid . I ca n't tell you what it was , but it was terrible . I said I would go back to her . I felt I had done wrong . And now she is dead . My God ! My God ! Harry , what shall I do ? You do n't know the danger I am in , and there is nothing to keep me straight . She would have done that for me . She had no right to kill herself . It was selfish of her . " " My dear Dorian , " answered Lord Henry , taking a cigarette from his case and producing a gold-latten matchbox , " the only way a woman can ever reform a man is by boring him so completely that he loses all possible interest in life . If you had married this girl , you would have been wretched . Of course , you would have treated her kindly . One can always be kind to people about whom one cares nothing . But she would have soon found out that you were absolutely indifferent to her . And when a woman finds that out about her husband , she either becomes dreadfully dowdy , or wears very smart bonnets that some other woman 's husband has to pay for . I say nothing about the social mistake , which would have been abject – which , of course , I would not have allowed – but I assure you that in any case the whole thing would have been an absolute failure . " " I suppose it would , " muttered the lad , walking up and down the room and looking horribly pale . " But I thought it was my duty . It is not my fault that this terrible tragedy has prevented my doing what was right . I remember your saying once that there is a fatality about good resolutions – that they are always made too late . Mine certainly were . " " Good resolutions are useless attempts to interfere with scientific laws . Their origin is pure vanity . Their result is absolutely nil . They give us , now and then , some of those luxurious sterile emotions that have a certain charm for the weak . That is all that can be said for them . They are simply cheques that men draw on a bank where they have no account . " " Harry , " cried Dorian Gray , coming over and sitting down beside him , " why is it that I cannot feel this tragedy as much as I want to ? I do n't think I am heartless . Do you ? " " You have done too many foolish things during the last fortnight to be entitled to give yourself that name , Dorian , " answered Lord Henry with his sweet melancholy smile . The lad frowned . " I do n't like that explanation , Harry , " he rejoined , " but I am glad you do n't think I am heartless . I am nothing of the kind . I know I am not . And yet I must admit that this thing that has happened does not affect me as it should . It seems to me to be simply like a wonderful ending to a wonderful play . It has all the terrible beauty of a Greek tragedy , a tragedy in which I took a great part , but by which I have not been wounded . " " It is an interesting question , " said Lord Henry , who found an exquisite pleasure in playing on the lad 's unconscious egotism – " an extremely interesting question . I fancy that the true explanation is this : It often happens that the real tragedies of life occur in such an inartistic manner that they hurt us by their crude violence , their absolute incoherence , their absurd want of meaning , their entire lack of style . They affect us just as vulgarity affects us . They give us an impression of sheer brute force , and we revolt against that . Sometimes , however , a tragedy that possesses artistic elements of beauty crosses our lives . If these elements of beauty are real , the whole thing simply appeals to our sense of dramatic effect . Suddenly we find that we are no longer the actors , but the spectators of the play . Or rather we are both . We watch ourselves , and the mere wonder of the spectacle enthralls us . In the present case , what is it that has really happened ? Some one has killed herself for love of you . I wish that I had ever had such an experience . It would have made me in love with love for the rest of my life . The people who have adored me – there have not been very many , but there have been some – have always insisted on living on , long after I had ceased to care for them , or they to care for me . They have become stout and tedious , and when I meet them , they go in at once for reminiscences . That awful memory of woman ! What a fearful thing it is ! And what an utter intellectual stagnation it reveals ! One should absorb the colour of life , but one should never remember its details . Details are always vulgar . " " I must sow poppies in my garden , " sighed Dorian . " There is no necessity , " rejoined his companion . " Life has always poppies in her hands . Of course , now and then things linger . I once wore nothing but violets all through one season , as a form of artistic mourning for a romance that would not die . Ultimately , however , it did die . I forget what killed it . I think it was her proposing to sacrifice the whole world for me . That is always a dreadful moment . It fills one with the terror of eternity . Well – would you believe it ? – a week ago , at Lady Hampshire 's , I found myself seated at dinner next the lady in question , and she insisted on going over the whole thing again , and digging up the past , and raking up the future . I had buried my romance in a bed of asphodel . She dragged it out again and assured me that I had spoiled her life . I am bound to state that she ate an enormous dinner , so I did not feel any anxiety . But what a lack of taste she showed ! The one charm of the past is that it is the past . But women never know when the curtain has fallen . They always want a sixth act , and as soon as the interest of the play is entirely over , they propose to continue it . If they were allowed their own way , every comedy would have a tragic ending , and every tragedy would culminate in a farce . They are charmingly artificial , but they have no sense of art . You are more fortunate than I am . I assure you , Dorian , that not one of the women I have known would have done for me what Sibyl Vane did for you . Ordinary women always console themselves . Some of them do it by going in for sentimental colours . Never trust a woman who wears mauve , whatever her age may be , or a woman over thirty-five who is fond of pink ribbons . It always means that they have a history . Others find a great consolation in suddenly discovering the good qualities of their husbands . They flaunt their conjugal felicity in one 's face , as if it were the most fascinating of sins . Religion consoles some . Its mysteries have all the charm of a flirtation , a woman once told me , and I can quite understand it . Besides , nothing makes one so vain as being told that one is a sinner . Conscience makes egotists of us all . Yes ; there is really no end to the consolations that women find in modern life . Indeed , I have not mentioned the most important one . " " What is that , Harry ? " said the lad listlessly . " Oh , the obvious consolation . Taking some one else 's admirer when one loses one 's own . In good society that always whitewashes a woman . But really , Dorian , how different Sibyl Vane must have been from all the women one meets ! There is something to me quite beautiful about her death . I am glad I am living in a century when such wonders happen . They make one believe in the reality of the things we all play with , such as romance , passion , and love . " " I was terribly cruel to her . You forget that . " " I am afraid that women appreciate cruelty , downright cruelty , more than anything else . They have wonderfully primitive instincts . We have emancipated them , but they remain slaves looking for their masters , all the same . They love being dominated . I am sure you were splendid . I have never seen you really and absolutely angry , but I can fancy how delightful you looked . And , after all , you said something to me the day before yesterday that seemed to me at the time to be merely fanciful , but that I see now was absolutely true , and it holds the key to everything . " " What was that , Harry ? " " You said to me that Sibyl Vane represented to you all the heroines of romance – that she was Desdemona one night , and Ophelia the other ; that if she died as Juliet , she came to life as Imogen . " " She will never come to life again now , " muttered the lad , burying his face in his hands . " No , she will never come to life . She has played her last part . But you must think of that lonely death in the tawdry dressing-room simply as a strange lurid fragment from some Jacobean tragedy , as a wonderful scene from Webster , or Ford , or Cyril Tourneur . The girl never really lived , and so she has never really died . To you at least she was always a dream , a phantom that flitted through Shakespeare 's plays and left them lovelier for its presence , a reed through which Shakespeare 's music sounded richer and more full of joy . The moment she touched actual life , she marred it , and it marred her , and so she passed away . Mourn for Ophelia , if you like . Put ashes on your head because Cordelia was strangled . Cry out against Heaven because the daughter of Brabantio died . But do n't waste your tears over Sibyl Vane . She was less real than they are . " There was a silence . The evening darkened in the room . Noiselessly , and with silver feet , the shadows crept in from the garden . The colours faded wearily out of things . After some time Dorian Gray looked up . " You have explained me to myself , Harry , " he murmured with something of a sigh of relief . " I felt all that you have said , but somehow I was afraid of it , and I could not express it to myself . How well you know me ! But we will not talk again of what has happened . It has been a marvellous experience . That is all . I wonder if life has still in store for me anything as marvellous . " " Life has everything in store for you , Dorian . There is nothing that you , with your extraordinary good looks , will not be able to do . " " But suppose , Harry , I became haggard , and old , and wrinkled ? What then ? " " Ah , then , " said Lord Henry , rising to go – " then , my dear Dorian , you would have to fight for your victories . As it is , they are brought to you . No , you must keep your good looks . We live in an age that reads too much to be wise , and that thinks too much to be beautiful . We cannot spare you . And now you had better dress and drive down to the club . We are rather late , as it is . " " I think I shall join you at the opera , Harry . I feel too tired to eat anything . What is the number of your sister 's box ? " " Twenty-seven , I believe . It is on the grand tier . You will see her name on the door . But I am sorry you wo n't come and dine . " " I do n't feel up to it , " said Dorian listlessly . " But I am awfully obliged to you for all that you have said to me . You are certainly my best friend . No one has ever understood me as you have . " " We are only at the beginning of our friendship , Dorian , " answered Lord Henry , shaking him by the hand . " Good-bye . I shall see you before nine-thirty , I hope . Remember , Patti is singing . " As he closed the door behind him , Dorian Gray touched the bell , and in a few minutes Victor appeared with the lamps and drew the blinds down . He waited impatiently for him to go . The man seemed to take an interminable time over everything . As soon as he had left , he rushed to the screen and drew it back . No ; there was no further change in the picture . It had received the news of Sibyl Vane 's death before he had known of it himself . It was conscious of the events of life as they occurred . The vicious cruelty that marred the fine lines of the mouth had , no doubt , appeared at the very moment that the girl had drunk the poison , whatever it was . Or was it indifferent to results ? Did it merely take cognizance of what passed within the soul ? He wondered , and hoped that some day he would see the change taking place before his very eyes , shuddering as he hoped it . Poor Sibyl ! What a romance it had all been ! She had often mimicked death on the stage . Then Death himself had touched her and taken her with him . How had she played that dreadful last scene ? Had she cursed him , as she died ? No ; she had died for love of him , and love would always be a sacrament to him now . She had atoned for everything by the sacrifice she had made of her life . He would not think any more of what she had made him go through , on that horrible night at the theatre . When he thought of her , it would be as a wonderful tragic figure sent on to the world 's stage to show the supreme reality of love . A wonderful tragic figure ? Tears came to his eyes as he remembered her childlike look , and winsome fanciful ways , and shy tremulous grace . He brushed them away hastily and looked again at the picture . He felt that the time had really come for making his choice . Or had his choice already been made ? Yes , life had decided that for him – life , and his own infinite curiosity about life . Eternal youth , infinite passion , pleasures subtle and secret , wild joys and wilder sins – he was to have all these things . The portrait was to bear the burden of his shame : that was all . A feeling of pain crept over him as he thought of the desecration that was in store for the fair face on the canvas . Once , in boyish mockery of Narcissus , he had kissed , or feigned to kiss , those painted lips that now smiled so cruelly at him . Morning after morning he had sat before the portrait wondering at its beauty , almost enamoured of it , as it seemed to him at times . Was it to alter now with every mood to which he yielded ? Was it to become a monstrous and loathsome thing , to be hidden away in a locked room , to be shut out from the sunlight that had so often touched to brighter gold the waving wonder of its hair ? The pity of it ! the pity of it ! For a moment , he thought of praying that the horrible sympathy that existed between him and the picture might cease . It had changed in answer to a prayer ; perhaps in answer to a prayer it might remain unchanged . And yet , who , that knew anything about life , would surrender the chance of remaining always young , however fantastic that chance might be , or with what fateful consequences it might be fraught ? Besides , was it really under his control ? Had it indeed been prayer that had produced the substitution ? Might there not be some curious scientific reason for it all ? If thought could exercise its influence upon a living organism , might not thought exercise an influence upon dead and inorganic things ? Nay , without thought or conscious desire , might not things external to ourselves vibrate in unison with our moods and passions , atom calling to atom in secret love or strange affinity ? But the reason was of no importance . He would never again tempt by a prayer any terrible power . If the picture was to alter , it was to alter . That was all . Why inquire too closely into it ? For there would be a real pleasure in watching it . He would be able to follow his mind into its secret places . This portrait would be to him the most magical of mirrors . As it had revealed to him his own body , so it would reveal to him his own soul . And when winter came upon it , he would still be standing where spring trembles on the verge of summer . When the blood crept from its face , and left behind a pallid mask of chalk with leaden eyes , he would keep the glamour of boyhood . Not one blossom of his loveliness would ever fade . Not one pulse of his life would ever weaken . Like the gods of the Greeks , he would be strong , and fleet , and joyous . What did it matter what happened to the coloured image on the canvas ? He would be safe . That was everything . He drew the screen back into its former place in front of the picture , smiling as he did so , and passed into his bedroom , where his valet was already waiting for him . An hour later he was at the opera , and Lord Henry was leaning over his chair . </text>
<text id="FictZolaE_Germinal_II4_EN.txt">
﻿ Part 2 Chapter 4 WHEN Maheu came in after having left Étienne at Rasseneur 's , he found Catherine , Zacharie , and Jeanlin seated at the table finishing their soup . On returning from the pit they were always so hungry that they ate in their damp clothes , without even cleaning themselves ; and no one was waited for , the table was laid from morning to night ; there was always someone there swallowing his portion , according to the chances of work . As he entered the door Maheu saw the provisions . He said nothing , but his uneasy face lighted up . All the morning the emptiness of the cupboard , the thought of the house without coffee and without butter , had been troubling him ; the recollection came to him painfully while he was hammering at the seam , stifled at the bottom of the cutting . What would his wife do , and what would become of them if she were to return with empty hands ? And now , here was everything ! She would tell him about it later on . He laughed with satisfaction . Catherine and Jeanlin had risen , and were taking their coffee standing ; while Zacharie , not filled with the soup , cut himself a large slice of bread and covered it with butter . Although he saw the brawn on a plate he did not touch it , for meat was for the father , when there was only enough for one . All of them had washed down their soup with a big bumper of fresh water , the good , clear drink of the fortnight 's end . " I have no beer , " said Maheude , when the father had seated himself in his turn . " I wanted to keep a little money . But if you would like some the little one can go and fetch a pint . " He looked at her in astonishment . What ! she had money , too ! " No , no , " he said , " I 've had a glass , it 's all right . " And Maheu began to swallow by slow spoonfuls the mixture of bread , potatoes , leeks , and sorrel piled up in the bowl which served him as a plate . Maheude , without putting Estelle down , helped Alzire to give him all that he required , pushed near him the butter and the meat , and put his coffee on the fire to keep it quite hot . In the meanwhile , beside the fire , they began to wash themselves in the half of a barrel transformed into a tub . Catherine , whose turn came first , had filled it with warm water ; and she undressed herself tranquilly , took off her cap , her jacket , her breeches , and even her chemise , habituated to this since the age of eight , having grown up without seeing any harm in it . She only turned with her stomach to the fire , then rubbed herself vigorously with black soap . No one looked at her , even Lénore and Henri were no longer inquisitive to see how she was made . When she was clean she went up the stairs quite naked , leaving her damp chemise and other garments in a heap on the floor . But a quarrel broke out between the two brothers : Jeanlin had hastened to jump into the tub under the pretence that Zacharie was still eating ; and the latter hustled him , claiming his turn , and calling out that he was polite enough to allow Catherine to wash herself first , but he did not wish to have the rinsings of the young urchins , all the less since , when Jeanlin had been in , it would do to fill the school ink-pots . They ended by washing themselves together , also turning towards the fire , and they even helped each other , rubbing one another 's backs . Then , like their sister , they disappeared up the staircase naked . " What a slop they do make ! " murmured Maheude , taking up their garments from the floor to put them to dry . " Alzire , just sponge up a bit . " But a disturbance on the other side of the wall cut short her speech . One heard a man 's oaths , a woman 's crying , a whole stampede of battle , with hollow blows that sounded like thumps of an empty gourd . " Levaque 's wife is catching it , " Maheu peacefully stated as he scraped the bottom of his bowl with the spoon . " It 's queer ; Bouteloup made out that the soup was ready . " " Ah , yes ! ready , " said Maheude . " I saw the vegetables on the table , not even cleaned . " The cries redoubled , and there was a terrible push which shook the wall , followed by complete silence . Then the miner , swallowing the last spoonful , concluded , with an air of calm justice : " If the soup is not ready , one can understand . " And after having drunk a glassful of water , he attacked the brawn . He cut square pieces , stuck the point of his knife into them and ate them on his bread without a fork . There was no talking when the father was eating . He himself was hungry in silence ; he did not recognize the usual taste of Maigrat 's provisions ; this must come from somewhere else ; however , he put no question to his wife . He only asked if the old man was still sleeping upstairs . No , the grandfather had gone out for his usual walk . And there was silence again . But the odour of the meat made Lénore and Henri lift up their heads from the floor , where they were amusing themselves with making rivulets with the spilt water . Both of them came and planted themselves near their father , the little one in front . Their eyes followed each morsel , full of hope when it set out from the plate and with an air of consternation when it was engulfed in the mouth . At last the father noticed the gluttonous desire which made their faces pale and their lips moist . " Have the children had any of it ? " he asked . And as his wife hesitated : " You know I do n't like injustice . It takes away my appetite when I see them there , begging for bits . " " But they 've had some of it , " she exclaimed , angrily . " If you were to listen to them you might give them your share and the others ' , too ; they would fill themselves till they burst . Is n't it true , Alzire , that we have all had some ? " " Sure enough , mother , " replied the little humpback , who under such circumstances could tell lies with the self-possession of a grown-up person . Lénore and Henri stood motionless , shocked and rebellious at such lying , when they themselves were whipped if they did not tell the truth . Their little hearts began to swell , and they longed to protest , and to say that they , at all events , were not there when the others had some . " Get along with you , " said the mother , driving them to the other end of the room . " You ought to be ashamed of being always in your father 's plate ; and even if he was the only one to have any , does n't he work , while all you , a lot of good-for-nothings , ca n't do anything but spend ! Yes , and the more the bigger you are . " Maheu called them back . He seated Lénore on his left thigh , Henri on the right ; then he finished the brawn by playing at dinner with them . He cut small pieces , and each had his share . The children devoured with delight . When he had finished , he said to his wife : " No , do n't give me my coffee . I 'm going to wash first ; and just give me a hand to throw away this dirty water . " They took hold of the handles of the tub and emptied it into the gutter before the door , when Jeanlin came down in dry garments , breeches and a woollen blouse , too large for him , which were weary of fading on his brother 's back . Seeing him slinking out through the open door , his mother stopped him . " Where are you off to ? " " Over there . " " Over where ? Listen to me . You go and gather a dandelion salad for this evening . Eh , do you hear ? If you do n't bring a salad back you 'll have to deal with me . " " All right ! " Jeanlin set out with hands in his pockets , trailing his sabots and slouching along , with his slender loins of a ten-year-old urchin , like an old miner . In his turn , Zacharie came down , more carefully dressed , his body covered by a black woollen knitted jacket with blue stripes . His father called out to him not to return late ; and he left , nodding his head with his pipe between his teeth , without replying . Again the tub was filled with warm water . Maheu was already slowly taking off his jacket . At a look , Alzire led Lénore and Henri outside to play . The father did not like washing en famille , as was practised in many houses in the settlement . He blamed no one , however ; he simply said that it was good for the children to dabble together . " What are you doing up there ? " cried Maheude , up the staircase . " I 'm mending my dress that I tore yesterday , " replied Catherine . " All right . Do n't come down , your father is washing . " Then Maheu and Maheude were left alone . The latter decided to place Estelle on a chair , and by a miracle , finding herself near the fire the child did not scream , but turned towards her parents the vague eyes of a little creature without intelligence . He was crouching before the tub quite naked , having first plunged his head into it , well rubbed with that black soap the constant use of which discoloured and made yellow the hair of the race . Afterwards he got into the water , lathered his chest , belly , arms , and thighs , scraping them energetically with both fists . His wife , standing by , watched him . " Well , then , " she began , " I saw your eyes when you came in . You were bothered , eh ? and it eased you , those provisions . Fancy ! those Piolaine people did n't give me a sou ! Oh ! they are kind enough ; they have dressed the little ones and I was ashamed to ask them , for it crosses me to ask for things . " She interrupted herself a moment to wedge Estelle into the chair lest she should tip over . The father continued to work away at his skin , without hastening by a question this story which interested him , patiently waiting for light . " I must tell you that Maigrat had refused me , oh ! straight ! like one kicks a dog out of doors . Guess if I was on a spree ! They keep you warm , woollen garments , but they do n't put anything into your stomach , eh ! " He lifted his head , still silent . Nothing at Piolaine , nothing at Maigrat 's : then where ? But , as usual , she was pulling up her sleeves to wash his back and those parts which he could not himself easily reach . Besides , he liked her to soap him , to rub him everywhere till she almost broke her wrists . She took soap and worked away at his shoulders while he held himself stiff so as to resist the shock . " Then I returned to Maigrat 's , and said to him , ah , I said something to him ! And that it did n't do to have no heart , and that evil would happen to him if there were any justice . That bothered him ; he turned his eyes and would like to have got away . " From the back she had got down to the buttocks and was pushing into the folds , not leaving any part of the body without passing over it , making him shine like her three saucepans on Saturdays after a big clean . Only she began to sweat with this tremendous exertion of her arms , so exhausted and out of breath that her words were choked . " At last he called me an old nuisance . We shall have bread until Saturday , and the best is that he has lent me five francs . I have got butter , coffee , and chicory from him . I was even going to get the meat and potatoes there , only I saw that he was grumbling . Seven sous for the chitterlings , eighteen for the potatoes , and I 've got three francs seventy-five left for a ragout and a meat soup . Eh , I do n't think I 've wasted my morning ! " Now she began to wipe him , plugging with a towel the parts that would not dry . Feeling happy and without thinking of the future debt , he burst out laughing and took her in his arms . " Leave me alone , stupid ! You are damp , and wetting me . Only I 'm afraid Maigrat has ideas---- " She was about to speak of Catherine , but she stopped . What was the good of disturbing him ? It would only lead to endless discussion . " What ideas ? " he asked . " Why , ideas of robbing us . Catherine will have to examine the bill carefully . " He took her in his arms again , and this time did not let her go . The bath always finished in this way : she enlivened him by the hard rubbing , and then by the towels which tickled the hairs of his arms and chest . Besides , among all his mates of the settlement it was the hour for stupidities , when more children were planted than were wanted . At night all the family were about . He pushed her towards the table , jesting like a worthy man who was enjoying the only good moment of the day , calling that taking his dessert , and a dessert which cost him nothing . She , with her loose figure and breast , struggled a little for fun . " You are stupid ! My Lord ! you are stupid ! And there 's Estelle looking at us . Wait till I turn her head . " " Oh , bosh ! at three months ; as if she understood ! " When he got up Maheu simply put on a dry pair of breeches . He liked , when he was clean and had taken his pleasure with his wife , to remain naked for a while . On his white skin , the whiteness of an anaemic girl , the scratches and gashes of the coal left tattoo-marks , grafts as the miners called them ; and he was proud of them , and exhibited his big arms and broad chest shining like veined marble . In summer all the miners could be seen in this condition at their doors . He even went there for a moment now , in spite of the wet weather , and shouted out a rough joke to a comrade , whose breast was also naked , on the other side of the gardens . Others also appeared . And the children , trailing along the pathways , raised their heads and also laughed with delight at all this weary flesh of workers displayed in the open air . While drinking his coffee , without yet putting on a shirt , Maheu told his wife about the engineer 's anger over the planking . He was calm and unbent , and listened with a nod of approval to the sensible advice of Maheude , who showed much common sense in such affairs . She always repeated to him that nothing was gained by struggling against the Company . She afterwards told him about Madame Hennebeau 's visit . Without saying so , both of them were proud of this . " Can I come down yet ? " asked Catherine , from the top of the staircase . " Yes , yes ; your father is drying himself . " The young girl had put on her Sunday dress , an old frock of rough blue poplin , already faded and worn in the folds . She had on a very simple bonnet of black tulle . " Hallo ! you 're dressed . Where are you going to ? " " I 'm going to Montsou to buy a ribbon for my bonnet . I 've taken off the old one ; it was too dirty . " " Have you got money , then ? " " No ! but Mouquette promised to lend me half a franc . " The mother let her go . But at the door she called her back . " Here ! do n't go and buy that ribbon at Maigrat 's . He will rob you , and he will think that we are rolling in wealth . " The father , who was crouching down before the fire to dry his neck and shoulders more quickly , contented himself with adding : " Try not to dawdle about at night on the road . " In the afternoon , Maheu worked in his garden . Already he had sown there potatoes , beans , and peas ; and he now set about replanting cabbage and lettuce plants , which he had kept fresh from the night before . This bit of garden furnished them with vegetables , except potatoes of which they never had enough . He understood gardening very well , and could even grow artichokes , which was treated as sheer display by the neighbours . As he was preparing the bed , Levaque just then came out to smoke a pipe in his own square , looking at the cos lettuces which Bouteloup had planted in the morning ; for without the lodger 's energy in digging nothing would have grown there but nettles . And a conversation arose over the trellis . Levaque , refreshed and excited by thrashing his wife , vainly tried to take Maheu off to Rasseneur 's . Why , was he afraid of a glass ? They could have a game at skittles , lounge about for a while with the mates , and then come back to dinner . That was the way of life after leaving the pit . No doubt there was no harm in that , but Maheu was obstinate ; if he did not replant his lettuces they would be faded by to-morrow . In reality he refused out of good sense , not wishing to ask a farthing from his wife out of the change of the five-franc piece . Five o'clock was striking when Pierrone came to know if it was with Jeanlin that her Lydie had gone off . Levaque replied that it must be something of that sort , for Bébert had also disappeared , and those rascals always went prowling about together . When Maheu had quieted them by speaking of the dandelion salad , he and his comrade set about joking the young woman with the coarseness of good-natured devils . She was angry , but did not go away , in reality tickled by the strong words which made her scream with her hands to her sides . A lean woman came to her aid , stammering with anger like a clucking hen . Others in the distance on their doorsteps confided their alarms . Now the school was closed ; and all the children were running about , there was a swarm of little creatures shouting and tumbling and fighting ; while those fathers who were not at the public-house were resting in groups of three or four , crouching on their heels as they did in the mine , smoking their pipes with an occasional word in the shelter of a wall . Pierronne went off in a fury when Levaque wanted to feel if her thighs were firm ; and he himself decided to go alone to Rasseneur 's , since Maheu was still planting . Twilight suddenly came on ; Maheude lit the lamp , irritated because neither her daughter nor the boys had come back . She could have guessed as much ; they never succeeded in taking together the only meal of the day at which it was possible for them to be all round the table . Then she was waiting for the dandelion salad . What could he be gathering at this hour , in this blackness of an oven , that nuisance of a child ! A salad would go so well with the stew which was simmering on the fire--potatoes , leeks , sorrel , fricasseed with fried onion . The whole house smelt of that fried onion , that good odour which gets rank so soon , and which penetrates the bricks of the settlements with such infection that one perceives it far off in the country , the violent flavour of the poor man 's kitchen . Maheu , when he left the garden at nightfall , at once fell into a chair with his head against the wall . As soon as he sat down in the evening he went to sleep . The clock struck seven ; Henri and Lénore had just broken a plate in persisting in helping Alzire , who was laying the table , when Father Bonnemort came in first , in a hurry to dine and go back to the pit . Then Maheude woke up Maheu . " Come and eat ! So much the worse ! They are big enough to find the house . The nuisance is the salad ! " </text>
<text id="FictZolaE_Germinal_VII2_EN.txt">
﻿ Part 7 Chapter 2 ON Sunday Étienne escaped from the settlement at nightfall . A very clear sky , sprinkled with stars , lit up the earth with the blue haze of twilight . He went down towards the canal , and followed the bank slowly , in the direction of Marchiennes . It was his favourite walk , a grass-covered path two leagues long , passing straight beside this geometrical water-way , which unrolled itself like an endless ingot of molten silver . He never met any one there . But on this day he was vexed to see a man come up to him . Beneath the pale starlight , the two solitary walkers only recognized each other when they were face to face . " What ! is it you ? " said Étienne . Souvarine nodded his head without replying . For a moment they remained motionless , then side by side they set out towards Marchiennes . Each of them seemed to be continuing his own reflections , as though they were far away from each other . " Have you seen in the paper about Pluchart 's success at Paris ? " asked Étienne , at length . " After that meeting at Belleville , they waited for him on the pavement , and gave him an ovation . Oh ! he 's afloat now , in spite of his sore throat . He can do what he likes in the future . " The engine-man shrugged his shoulders . He felt contempt for fine talkers , fellows who go into politics as one goes to the bar , to get an income out of phrases . Étienne was now studying Darwin . He had read fragments , summarized and popularized in a five-sou volume ; and out of this ill-understood reading he had gained for himself a revolutionary idea of the struggle for existence , the lean eating the fat , the strong people devouring the pallid middle class . But Souvarine furiously attacked the stupidity of the Socialists who accept Darwin , that apostle of scientific inequality , whose famous selection was only good for aristocratic philosophers . His mate persisted , however , wishing to reason out the matter , and expressing his doubts by an hypothesis : supposing the old society were no longer to exist , swept away to the crumbs ; well , was it not to be feared that the new world would grow up again , slowly spoilt by the same injustices , some sick and others flourishing , some more skilful and intelligent , fattening on everything , and others imbecile and lazy . becoming slaves again ? But before this vision of eternal wretchedness , the engine-man shouted out fiercely that if justice was not possible with man , then man must disappear . For every rotten society there must be a massacre , until the last creature was exterminated . And there was silence again . For a long time , with sunken head , Souvarine walked over the short grass , so absorbed that he kept to the extreme edge , by the water , with the quiet certainty of a sleep-walker on a roof . Then he shuddered causelessly , as though he had stumbled against a shadow . His eyes lifted and his face was very pale ; he said softly to his companion : " Did I ever tell you how she died ? " " Whom do you mean ? " " My woman , over there , in Russia . " Étienne made a vague gesture , astonished at the tremor in his voice and at the sudden desire for confidence in this lad , who was usually so impassive in his stoical detachment from others and from himself . He only knew that the woman was his mistress , and that she had been hanged at Moscow . " The affair had n't gone off , " Souvarine said , with eyes still vacantly following the white stream of the canal between the bluish colonnades of tall trees . " We had been a fortnight at the bottom of a hole undermining the railway , and it was not the imperial train that was blown up , it was a passenger train . Then they arrested Annutchka . She brought us bread every evening , disguised as a peasant woman . She lit the fuse , too , because a man might have attracted attention . I followed the trial , hidden in the crowd , for six days. " His voice became thick , and he coughed as though he were choking . " Twice I wanted to cry out , and to rush over the people 's heads to join her . But what was the good ? One man less would be one soldier less ; and I could see that she was telling me not to come , when her large eyes met mine . " He coughed again . " On the last day in the square I was there . It was raining ; they stupidly lost their heads , put out by the falling rain . It took twenty minutes to hang the other four ; the cord broke , they could not finish the fourth . Annutchka was standing up waiting . She could not see me , she was looking for me in the crowd . I got on to a post and she saw me , and our eyes never turned from each other . When she was dead she was still looking at me . I waved my hat ; I came away . " There was silence again . The white road of the canal unrolled to the far distance , and they both walked with the same quiet step as though each had fallen back into his isolation . At the horizon , the pale water seemed to open the sky with a little hole of light . " It was our punishment , " Souvarine went on roughly . " We were guilty to love each other . Yes , it is well that she is dead ; heroes will be born from her blood , and I no longer have any cowardice at my heart . Ah ! nothing , neither parents , nor wife , nor friend ! Nothing to make my hand tremble on the day when I must take others ' lives or give up my own . " Étienne had stopped , shuddering in the cool night . He discussed no more , he simply said : " We have gone far ; shall we go back ? " They went back towards the Voreux slowly , and he added , after a few paces : " Have you seen the new placards ? " The Company had that morning put up some more large yellow posters . They were clearer and more conciliatory , and the Company undertook to take back the certificates of those miners who went down on the following day . Everything would be forgotten , and pardon was offered even to those who were most implicated . " Yes , I 've seen , " replied the engine-man . " Well , what do you think of it ? " " I think that it 's all up . The flock will go down again . You are all too cowardly . " Étienne feverishly excused his mates : a man may be brave , a mob which is dying of hunger has no strength . Step by step they were returning to the Voreux ; and before the black mass of the pit he continued swearing that he , at least , would never go down ; but he could forgive those who did . Then , as the rumour ran that the carpenters had not had time to repair the tubbing , he asked for information . Was it true ? Had the weight of the soil against the timber which formed the internal skirt of scaffolding to the shaft so pushed it in that the winding-cages rubbed as they went down for a length of over fifty metres ? Souvarine , who once more became uncommunicative , replied briefly . He had been working the day before , and the cage did , in fact , jar ; the engine-men had even had to double the speed to pass that spot . But all the bosses received any observations with the same irritating remark : it was coal they wanted ; that could be repaired later on . " You see that is smashing up ! " Étienne murmured . " It will be a fine time ! " With eyes vaguely fixed on the pit in the shadow , Souvarine quietly concluded : " If it does smash up , the mates will know it , since you advise them to go down again . " Nine o'clock struck at the Montsou steeple ; and his companion having said that he was going to bed , he added , without putting out his hand : " Well , good-bye . I 'm going away . " " What ! you 're going away ? " " Yes , I 've asked for my certificate back . I 'm going elsewhere . " Étienne , stupefied and affected , looked at him . After walking for two hours he said that to him ! And in so calm a voice , while the mere announcement of this sudden separation made his own heart ache . They had got to know each other , they had toiled together ; that always makes one sad , the idea of not seeing a person again . " You 're going away ! And where do you go ? " " Over there--I do n't know at all . " " But I shall see you again ? " " No , I think not . " They were silent and remained for a moment facing each other without finding anything to say . " Then good-bye . " " Good-bye . " While Étienne ascended toward the settlement , Souvarine turned and again went along the canal bank ; and there , now alone , he continued to walk , with sunken head , so lost in the darkness that he seemed merely a moving shadow of the night . Now and then he stopped , he counted the hours that struck afar . When he heard midnight strike he left the bank and turned towards the Voreux . At that time the pit was empty , and he only met a sleepy-eyed captain . It was not until two o'clock that they would begin to get up steam to resume work . First he went to take from a cupboard a jacket which he pretended to have forgotten . Various tools--a drill armed with its screw , a small but very strong saw , a hammer , and a chisel--were rolled up in this jacket . Then he left . But instead of going out through the shed he passed through the narrow corridor which led to the ladder passage . With his jacket under his arm he quietly went down without a lamp , measuring the depth by counting the ladders . He knew that the cage jarred at three hundred and seventy-four metres against the fifth row of the lower tubbing . When he had counted fifty-four ladders he put out his hand and was able to feel the swelling of the planking . It was there . Then , with the skill and coolness of a good workman who has been reflecting over his task for a long time , he set to work . He began by sawing a panel in the brattice so as to communicate with the winding-shaft . With the help of matches , quickly lighted and blown out , he was then able to ascertain the condition of the tubbing and of the recent repairs . Between Calais and Valenciennes the sinking of mine shafts was surrounded by immense difficulties on account of the masses of subterranean water in great sheets at the level of the lowest valleys . Only the construction of tubbings , frameworks jointed like the stays of a barrel , could keep Out the springs which flow in and isolate the shafts in the midst of the lakes , which with deep obscure waves beat against the walls . It had been necessary in sinking the Voreux to establish two tubbings : that of the upper level , in the shifting sands and white clays bordering the chalky stratum , and fissured in every part , swollen with water like a sponge ; then that of the lower level , immediately above the coal stratum , in a yellow sand as fine as flour , flowing with liquid fluidity ; it was here that the Torrent was to be found , that subterranean sea so dreaded in the coal pits of the Nord , a sea with its storms and its shipwrecks , an unknown and unfathomable sea , rolling its dark floods more than three hundred metres beneath the daylight . Usually the tubbings resisted the enormous pressure ; the only thing to be dreaded was the piling up of the neighbouring soil , shaken by the constant movement of the old galleries which were filling up . In this descent of the rocks lines of fracture were sometimes produced which slowly extended as far as the scaffolding , at last perforating it and pushing it into the shaft ; and there was the great danger of a landslip and a flood filling the pit with an avalanche of earth and a deluge of springs . Souvarine , sitting astride in the opening he had made , discovered a very serious defect in the fifth row of tubbing . The wood was bellied out from the framework ; several planks had even come out of their shoulder-pieces . Abundant filtrations , pichoux the miners call them , were jetting out of the joints through the tarred oakum with which they were caulked . The carpenters , pressed for time , had been content to place iron squares at the angles , so carelessly that not all the screws were put in . A considerable movement was evidently going on behind in the sand of the Torrent . Then with his wimble he unscrewed the squares so that another push would tear them all off . It was a foolhardy task , during which he frequently only just escaped from falling headlong down the hundred and eighty metres which separated him from the bottom . He had been obliged to seize the oak guides , the joists along which the cages slid ; and suspended over the void he traversed the length of the cross-beams with which they were joined from point to point , slipping along , sitting down , turning over , simply buttressing himself on an elbow or a knee , with tranquil contempt of death . A breath would have sent him over , and three times he caught himself up without a shudder . First he felt with his hand and then worked , only lighting a match when he lost himself in the midst of these slimy beams . After loosening the screws he attacked the wood itself , and the peril became still greater . He had sought for the key , the piece which held the others ; he attacked it furiously , making holes in it , sawing it , thinning it so that it lost its resistance ; while through the holes and the cracks the water which escaped in small jets blinded him and soaked him in icy rain . Two matches were extinguished . They all be-came damp and then there was night , the bottomless depth of darkness . From this moment he was seized by rage . The breath of the invisible intoxicated him , the black horror of this rain-beaten hole urged him to mad destruction . He wreaked his fury at random against the tubbing , striking where he could with his wimble , with his saw , seized by the desire to bring the whole thing at once down on his head . He brought as much ferocity to the task as though he had been digging a knife into the skin of some execrated living creature . He would kill the Voreux at last , that evil beast with ever-open jaws which had swallowed so much human flesh ! The bite of his tools could be heard , his spine lengthened , he crawled , climbed down , then up again , holding on by a miracle , in continual movement , the flight of a nocturnal bird amid the scaffolding of a belfry . But he grew calm , dissatisfied with himself . Why could not things be done coolly ? Without haste he took breath , and then went back into the ladder passage , stopping up the hole by replacing the panel which he had sawn . That was enough ; he did not wish to raise the alarm by excessive damage which would have been repaired immediately . The beast was wounded in the belly ; we should see if it was still alive at night . And he had left his mark ; the frightened world would know that the beast had not died a natural death . He took his time in methodically rolling up his tools in his jacket , and slowly climbed up the ladders . Then , when he had emerged from the pit without being seen , it did not even occur to him to go and change his clothes . Three o'clock struck . He remained standing on the road waiting . At the same hour Étienne , who was not asleep , was disturbed by a slight sound in the thick night of the room . He distinguished the low breath of the children , and the snoring of Bonnemort and Maheude ; while Jeanlin near him was breathing with a prolonged flute-like whistle . No doubt he had dreamed , and he was turning back when the noise began again . It was the creaking of a palliasse , the stifled effort of someone who is getting up . Then he imagined that Catherine must be ill . " I say , is it you ? What is the matter ? " he asked in a low voice . No one replied , and the snoring of the others continued . For five minutes nothing stirred . Then there was fresh creaking . Feeling certain this time that he was not mistaken , he crossed the room , putting his hands out into the darkness to feel the opposite bed . He was surprised to find the young girl sitting up , holding in her breath , awake and on the watch . " Well ! why do n't you reply ? What are you doing , then ? " At last she said : " I 'm getting up . " " Getting up at this hour ? " " Yes , I 'm going back to work at the pit . " Étienne felt deeply moved , and sat down on the edge of the palliasse , while Catherine explained her reasons to him . She suffered too much by living thus in idleness , feeling continual looks of reproach weighing on her ; she would rather run the risk of being knocked about down there by Chaval . And if her mother refused to take her money when she brought it , well ! she was big enough to act for herself and make her own soup . " Go away ; I want to dress . And do n't say anything , will you , if you want to be kind ? " But he remained near her ; he had put his arms round her waist in a caress of grief and pity . Pressed one against the other in their shirts , they could feel the warmth of each other 's naked flesh , at the edge of this bed , still moist with the night 's sleep . She had at first tried to free herself ; then she began to cry quietly , in her turn taking him by the neck to press him against her in a despairing clasp . And they remained , without any further desires , with the past of their unfortunate love , which they had not been able to satisfy . Was it , then , done with for ever ? Would they never dare to love each other some day , now that they were free ? It only needed a little happiness to dissipate their shame--that awkwardness which prevented them from coming together because of all sorts of ideas which they themselves could not read clearly . " Go to bed again , " she whispered . " I do n't want to light up , it would wake mother . It is time ; leave me . " He could not hear ; he was pressing her wildly , with a heart drowned in immense sadness . The need for peace , an irresistible need for happiness , was carrying him away ; and he saw himself married , in a neat little house , with no other ambition than to live and to die there , both of them together . He would be satisfied with bread ; and if there were only enough for one , she should have it . What was the good of anything else ? Was there anything in life worth more ? But she was unfolding her naked arms . " Please , leave me . " Then , in a sudden impulse , he said in her ear : " Wait , I 'm coming with you . " And he was himself surprised at what he had said . He had sworn never to go down again ; whence then came this sudden decision , arising from his lips without thought of his , without even a moment 's discussion ? There was now such calm within him , so complete a cure of his doubts , that he persisted like a man saved by chance , who has at last found the only harbour from his torment . So he refused to listen to her when she became alarmed , understanding that he was devoting himself for her and fearing the ill words which would greet him at the pit . He laughed at everything ; the placards promised pardon and that was enough . " I want to work ; that 's my idea . Let us dress and make no noise . " They dressed themselves in the darkness , with a thousand precautions . She had secretly prepared her miner 's clothes the evening before ; he took a jacket and breeches from the cupboard ; and they did not wash themselves for fear of knocking the bowl . All were asleep , but they had to cross the narrow passage where the mother slept . When they started , as ill luck would have it , they stumbled against a chair . She woke and asked drowsily : " Eh ! what is it ? " Catherine had stopped , trembling , and violently pressing Étienne 's hand . " It 's me ; do n't trouble yourself , " he said . " I feel stifled and am going outside to breathe a bit . " " Very well . " And Maheude fell asleep again . Catherine dared not stir . At last she went down into the parlour and divided a slice of bread-and-butter which she had reserved from a loaf given by a Montsou lady . Then they softly closed the door and went away . Souvarine had remained standing near the Avantage , at the corner of the road . For half an hour he had been looking at the colliers who were returning to work in the darkness , passing by with the dull tramp of a herd . He was counting them , as a butcher counts his beasts at the entrance to the slaughter-house , and he was surprised at their number ; even his pessimism had not foreseen that the number of cowards would have been so great . The stream continued to pass by , and he grew stiff , very cold , with clenched teeth and bright eyes . But he started . Among the men passing by , whose faces he could not distinguish , he had just recognized one by his walk . He came forward and stopped him . " Where are you going to ? " Étienne , in surprise , instead of replying , stammered : " What ! you 've not set out yet ! " Then he confessed he was going back to the pit . No doubt he had sworn ; only it could not be called life to wait with folded arms for things which would perhaps happen in a hundred years ; and , besides , reasons of his own had decided him . Souvarine had listened to him , shuddering . He seized him by the shoulder , and pushed him towards the settlement . " Go home again ; I want you to . Do you understand ? " But Catherine having approached , he recognized her also . Étienne protested , declaring that he allowed no one to judge his conduct . And the engine-man 's eyes went from the young girl to her companion , while he stepped back with a sudden , relinquishing movement . When there was a woman in a man 's heart , that man was done for ; he might die . Perhaps he saw again in a rapid vision his mistress hanging over there at Moscow that last link cut from his flesh , which had rendered him free of the lives of others and of his own life . He said simply : " Go . " Étienne , feeling awkward , was delaying , and trying to find some friendly word , so as not to separate in this manner . " Then you 're still going ? " " Yes . " " Well , give me your hand , old chap . A pleasant journey , and no ill feeling . " The other stretched out an icy hand . Neither friend nor wife . " Good-bye for good this time . " " Yes , good-bye . " And Souvarine , standing motionless in the darkness , watched Étienne and Catherine entering the Voreux . </text>
<text id="MarxMarxK_ComMan_01_EN.txt">
﻿ Manifesto of the Communist Party A spectre is haunting Europe – the spectre of communism . All the powers of old Europe have entered into a holy alliance to exorcise this spectre : Pope and Tsar , Metternich and Guizot , French Radicals and German police-spies . Where is the party in opposition that has not been decried as communistic by its opponents in power ? Where is the opposition that has not hurled back the branding reproach of communism , against the more advanced opposition parties , as well as against its reactionary adversaries ? Two things result from this fact : I. Communism is already acknowledged by all European powers to be itself a power . II . It is high time that Communists should openly , in the face of the whole world , publish their views , their aims , their tendencies , and meet this nursery tale of the Spectre of Communism with a manifesto of the party itself . To this end , Communists of various nationalities have assembled in London and sketched the following manifesto , to be published in the English , French , German , Italian , Flemish and Danish languages . I. Bourgeois and Proletarians* The history of all hitherto existing society † is the history of class struggles . Freeman and slave , patrician and plebeian , lord and serf , guild-master ‡ and journeyman , in a word , oppressor and oppressed , stood in constant opposition to one another , carried on an uninterrupted , now hidden , now open fight , a fight that each time ended , either in a revolutionary reconstitution of society at large , or in the common ruin of the contending classes . In the earlier epochs of history , we find almost everywhere a complicated arrangement of society into various orders , a manifold gradation of social rank . In ancient Rome we have patricians , knights , plebeians , slaves ; in the Middle Ages , feudal lords , vassals , guild-masters , journeymen , apprentices , serfs ; in almost all of these classes , again , subordinate gradations . The modern bourgeois society that has sprouted from the ruins of feudal society has not done away with class antagonisms . It has but established new classes , new conditions of oppression , new forms of struggle in place of the old ones . Our epoch , the epoch of the bourgeoisie , possesses , however , this distinct feature : it has simplified class antagonisms . Society as a whole is more and more splitting up into two great hostile camps , into two great classes directly facing each other – Bourgeoisie and Proletariat . From the serfs of the Middle Ages sprang the chartered burghers of the earliest towns . From these burgesses the first elements of the bourgeoisie were developed . The discovery of America , the rounding of the Cape , opened up fresh ground for the rising bourgeoisie . The East-Indian and Chinese markets , the colonisation of America , trade with the colonies , the increase in the means of exchange and in commodities generally , gave to commerce , to navigation , to industry , an impulse never before known , and thereby , to the revolutionary element in the tottering feudal society , a rapid development . The feudal system of industry , in which industrial production was monopolised by closed guilds , now no longer sufficed for the growing wants of the new markets . The manufacturing system took its place . The guild-masters were pushed on one side by the manufacturing middle class ; division of labour between the different corporate guilds vanished in the face of division of labour in each single workshop . Meantime the markets kept ever growing , the demand ever rising . Even manufacturer no longer sufficed . Thereupon , steam and machinery revolutionised industrial production . The place of manufacture was taken by the giant , Modern Industry ; the place of the industrial middle class by industrial millionaires , the leaders of the whole industrial armies , the modern bourgeois . Modern industry has established the world market , for which the discovery of America paved the way . This market has given an immense development to commerce , to navigation , to communication by land . This development has , in its turn , reacted on the extension of industry ; and in proportion as industry , commerce , navigation , railways extended , in the same proportion the bourgeoisie developed , increased its capital , and pushed into the background every class handed down from the Middle Ages . We see , therefore , how the modern bourgeoisie is itself the product of a long course of development , of a series of revolutions in the modes of production and of exchange . Each step in the development of the bourgeoisie was accompanied by a corresponding political advance of that class . An oppressed class under the sway of the feudal nobility , an armed and self-governing association in the medieval commune* : here independent urban republic ( as in Italy and Germany ) ; there taxable “ third estate ” of the monarchy ( as in France ) ; afterwards , in the period of manufacturing proper , serving either the semi-feudal or the absolute monarchy as a counterpoise against the nobility , and , in fact , cornerstone of the great monarchies in general , the bourgeoisie has at last , since the establishment of Modern Industry and of the world market , conquered for itself , in the modern representative State , exclusive political sway . The executive of the modern state is but a committee for managing the common affairs of the whole bourgeoisie . The bourgeoisie , historically , has played a most revolutionary part . The bourgeoisie , wherever it has got the upper hand , has put an end to all feudal , patriarchal , idyllic relations . It has pitilessly torn asunder the motley feudal ties that bound man to his “ natural superiors ” , and has left remaining no other nexus between man and man than naked self-interest , than callous “ cash payment ” . It has drowned the most heavenly ecstasies of religious fervour , of chivalrous enthusiasm , of philistine sentimentalism , in the icy water of egotistical calculation . It has resolved personal worth into exchange value , and in place of the numberless indefeasible chartered freedoms , has set up that single , unconscionable freedom – Free Trade . In one word , for exploitation , veiled by religious and political illusions , it has substituted naked , shameless , direct , brutal exploitation . The bourgeoisie has stripped of its halo every occupation hitherto honoured and looked up to with reverent awe . It has converted the physician , the lawyer , the priest , the poet , the man of science , into its paid wage labourers . The bourgeoisie has torn away from the family its sentimental veil , and has reduced the family relation to a mere money relation . The bourgeoisie has disclosed how it came to pass that the brutal display of vigour in the Middle Ages , which reactionaries so much admire , found its fitting complement in the most slothful indolence . It has been the first to show what man’s activity can bring about . It has accomplished wonders far surpassing Egyptian pyramids , Roman aqueducts , and Gothic cathedrals ; it has conducted expeditions that put in the shade all former Exoduses of nations and crusades . The bourgeoisie cannot exist without constantly revolutionising the instruments of production , and thereby the relations of production , and with them the whole relations of society . Conservation of the old modes of production in unaltered form , was , on the contrary , the first condition of existence for all earlier industrial classes . Constant revolutionising of production , uninterrupted disturbance of all social conditions , everlasting uncertainty and agitation distinguish the bourgeois epoch from all earlier ones . All fixed , fast-frozen relations , with their train of ancient and venerable prejudices and opinions , are swept away , all new-formed ones become antiquated before they can ossify . All that is solid melts into air , all that is holy is profaned , and man is at last compelled to face with sober senses his real conditions of life , and his relations with his kind . The need of a constantly expanding market for its products chases the bourgeoisie over the entire surface of the globe . It must nestle everywhere , settle everywhere , establish connexions everywhere . The bourgeoisie has through its exploitation of the world market given a cosmopolitan character to production and consumption in every country . To the great chagrin of Reactionists , it has drawn from under the feet of industry the national ground on which it stood . All old-established national industries have been destroyed or are daily being destroyed . They are dislodged by new industries , whose introduction becomes a life and death question for all civilised nations , by industries that no longer work up indigenous raw material , but raw material drawn from the remotest zones ; industries whose products are consumed , not only at home , but in every quarter of the globe . In place of the old wants , satisfied by the production of the country , we find new wants , requiring for their satisfaction the products of distant lands and climes . In place of the old local and national seclusion and self-sufficiency , we have intercourse in every direction , universal inter-dependence of nations . And as in material , so also in intellectual production . The intellectual creations of individual nations become common property . National one-sidedness and narrow-mindedness become more and more impossible , and from the numerous national and local literatures , there arises a world literature . The bourgeoisie , by the rapid improvement of all instruments of production , by the immensely facilitated means of communication , draws all , even the most barbarian , nations into civilisation . The cheap prices of commodities are the heavy artillery with which it batters down all Chinese walls , with which it forces the barbarians ’ intensely obstinate hatred of foreigners to capitulate . It compels all nations , on pain of extinction , to adopt the bourgeois mode of production ; it compels them to introduce what it calls civilisation into their midst , i. e. , to become bourgeois themselves . In one word , it creates a world after its own image . The bourgeoisie has subjected the country to the rule of the towns . It has created enormous cities , has greatly increased the urban population as compared with the rural , and has thus rescued a considerable part of the population from the idiocy of rural life . Just as it has made the country dependent on the towns , so it has made barbarian and semi-barbarian countries dependent on the civilised ones , nations of peasants on nations of bourgeois , the East on the West . The bourgeoisie keeps more and more doing away with the scattered state of the population , of the means of production , and of property . It has agglomerated population , centralised the means of production , and has concentrated property in a few hands . The necessary consequence of this was political centralisation . Independent , or but loosely connected provinces , with separate interests , laws , governments , and systems of taxation , became lumped together into one nation , with one government , one code of laws , one national class-interest , one frontier , and one customs-tariff . The bourgeoisie , during its rule of scarce one hundred years , has created more massive and more colossal productive forces than have all preceding generations together . Subjection of Nature’s forces to man , machinery , application of chemistry to industry and agriculture , steam-navigation , railways , electric telegraphs , clearing of whole continents for cultivation , canalisation of rivers , whole populations conjured out of the ground – what earlier century had even a presentiment that such productive forces slumbered in the lap of social labour ? We see then : the means of production and of exchange , on whose foundation the bourgeoisie built itself up , were generated in feudal society . At a certain stage in the development of these means of production and of exchange , the conditions under which feudal society produced and exchanged , the feudal organisation of agriculture and manufacturing industry , in one word , the feudal relations of property became no longer compatible with the already developed productive forces ; they became so many fetters . They had to be burst asunder ; they were burst asunder . Into their place stepped free competition , accompanied by a social and political constitution adapted in it , and the economic and political sway of the bourgeois class . A similar movement is going on before our own eyes . Modern bourgeois society , with its relations of production , of exchange and of property , a society that has conjured up such gigantic means of production and of exchange , is like the sorcerer who is no longer able to control the powers of the nether world whom he has called up by his spells . For many a decade past the history of industry and commerce is but the history of the revolt of modern productive forces against modern conditions of production , against the property relations that are the conditions for the existence of the bourgeois and of its rule . It is enough to mention the commercial crises that by their periodical return put the existence of the entire bourgeois society on its trial , each time more threateningly . In these crises , a great part not only of the existing products , but also of the previously created productive forces , are periodically destroyed . In these crises , there breaks out an epidemic that , in all earlier epochs , would have seemed an absurdity – the epidemic of over-production . Society suddenly finds itself put back into a state of momentary barbarism ; it appears as if a famine , a universal war of devastation , had cut off the supply of every means of subsistence ; industry and commerce seem to be destroyed ; and why ? Because there is too much civilisation , too much means of subsistence , too much industry , too much commerce . The productive forces at the disposal of society no longer tend to further the development of the conditions of bourgeois property ; on the contrary , they have become too powerful for these conditions , by which they are fettered , and so soon as they overcome these fetters , they bring disorder into the whole of bourgeois society , endanger the existence of bourgeois property . The conditions of bourgeois society are too narrow to comprise the wealth created by them . And how does the bourgeoisie get over these crises ? On the one hand by enforced destruction of a mass of productive forces ; on the other , by the conquest of new markets , and by the more thorough exploitation of the old ones . That is to say , by paving the way for more extensive and more destructive crises , and by diminishing the means whereby crises are prevented . The weapons with which the bourgeoisie felled feudalism to the ground are now turned against the bourgeoisie itself . But not only has the bourgeoisie forged the weapons that bring death to itself ; it has also called into existence the men who are to wield those weapons – the modern working class – the proletarians . In proportion as the bourgeoisie , i. e. , capital , is developed , in the same proportion is the proletariat , the modern working class , developed – a class of labourers , who live only so long as they find work , and who find work only so long as their labour increases capital . These labourers , who must sell themselves piecemeal , are a commodity , like every other article of commerce , and are consequently exposed to all the vicissitudes of competition , to all the fluctuations of the market . Owing to the extensive use of machinery , and to the division of labour , the work of the proletarians has lost all individual character , and , consequently , all charm for the workman . He becomes an appendage of the machine , and it is only the most simple , most monotonous , and most easily acquired knack , that is required of him . Hence , the cost of production of a workman is restricted , almost entirely , to the means of subsistence that he requires for maintenance , and for the propagation of his race . But the price of a commodity , and therefore also of labour , is equal to its cost of production . In proportion , therefore , as the repulsiveness of the work increases , the wage decreases . Nay more , in proportion as the use of machinery and division of labour increases , in the same proportion the burden of toil also increases , whether by prolongation of the working hours , by the increase of the work exacted in a given time or by increased speed of machinery , etc. Modern Industry has converted the little workshop of the patriarchal master into the great factory of the industrial capitalist . Masses of labourers , crowded into the factory , are organised like soldiers . As privates of the industrial army they are placed under the command of a perfect hierarchy of officers and sergeants . Not only are they slaves of the bourgeois class , and of the bourgeois State ; they are daily and hourly enslaved by the machine , by the overlooker , and , above all , by the individual bourgeois manufacturer himself . The more openly this despotism proclaims gain to be its end and aim , the more petty , the more hateful and the more embittering it is . The less the skill and exertion of strength implied in manual labour , in other words , the more modern industry becomes developed , the more is the labour of men superseded by that of women . Differences of age and sex have no longer any distinctive social validity for the working class . All are instruments of labour , more or less expensive to use , according to their age and sex . No sooner is the exploitation of the labourer by the manufacturer , so far , at an end , that he receives his wages in cash , than he is set upon by the other portions of the bourgeoisie , the landlord , the shopkeeper , the pawnbroker , etc. The lower strata of the middle class – the small tradespeople , shopkeepers , and retired tradesmen generally , the handicraftsmen and peasants – all these sink gradually into the proletariat , partly because their diminutive capital does not suffice for the scale on which Modern Industry is carried on , and is swamped in the competition with the large capitalists , partly because their specialised skill is rendered worthless by new methods of production . Thus the proletariat is recruited from all classes of the population . The proletariat goes through various stages of development . With its birth begins its struggle with the bourgeoisie . At first the contest is carried on by individual labourers , then by the workpeople of a factory , then by the operative of one trade , in one locality , against the individual bourgeois who directly exploits them . They direct their attacks not against the bourgeois conditions of production , but against the instruments of production themselves ; they destroy imported wares that compete with their labour , they smash to pieces machinery , they set factories ablaze , they seek to restore by force the vanished status of the workman of the Middle Ages . At this stage , the labourers still form an incoherent mass scattered over the whole country , and broken up by their mutual competition . If anywhere they unite to form more compact bodies , this is not yet the consequence of their own active union , but of the union of the bourgeoisie , which class , in order to attain its own political ends , is compelled to set the whole proletariat in motion , and is moreover yet , for a time , able to do so . At this stage , therefore , the proletarians do not fight their enemies , but the enemies of their enemies , the remnants of absolute monarchy , the landowners , the non-industrial bourgeois , the petty bourgeois . Thus , the whole historical movement is concentrated in the hands of the bourgeoisie ; every victory so obtained is a victory for the bourgeoisie . But with the development of industry , the proletariat not only increases in number ; it becomes concentrated in greater masses , its strength grows , and it feels that strength more . The various interests and conditions of life within the ranks of the proletariat are more and more equalised , in proportion as machinery obliterates all distinctions of labour , and nearly everywhere reduces wages to the same low level . The growing competition among the bourgeois , and the resulting commercial crises , make the wages of the workers ever more fluctuating . The increasing improvement of machinery , ever more rapidly developing , makes their livelihood more and more precarious ; the collisions between individual workmen and individual bourgeois take more and more the character of collisions between two classes . Thereupon , the workers begin to form combinations ( Trades ’ Unions ) against the bourgeois ; they club together in order to keep up the rate of wages ; they found permanent associations in order to make provision beforehand for these occasional revolts . Here and there , the contest breaks out into riots . Now and then the workers are victorious , but only for a time . The real fruit of their battles lies , not in the immediate result , but in the ever expanding union of the workers . This union is helped on by the improved means of communication that are created by modern industry , and that place the workers of different localities in contact with one another . It was just this contact that was needed to centralise the numerous local struggles , all of the same character , into one national struggle between classes . But every class struggle is a political struggle . And that union , to attain which the burghers of the Middle Ages , with their miserable highways , required centuries , the modern proletarian , thanks to railways , achieve in a few years . This organisation of the proletarians into a class , and , consequently into a political party , is continually being upset again by the competition between the workers themselves . But it ever rises up again , stronger , firmer , mightier . It compels legislative recognition of particular interests of the workers , by taking advantage of the divisions among the bourgeoisie itself . Thus , the ten-hours ’ bill in England was carried . Altogether collisions between the classes of the old society further , in many ways , the course of development of the proletariat . The bourgeoisie finds itself involved in a constant battle . At first with the aristocracy ; later on , with those portions of the bourgeoisie itself , whose interests have become antagonistic to the progress of industry ; at all time with the bourgeoisie of foreign countries . In all these battles , it sees itself compelled to appeal to the proletariat , to ask for help , and thus , to drag it into the political arena . The bourgeoisie itself , therefore , supplies the proletariat with its own elements of political and general education , in other words , it furnishes the proletariat with weapons for fighting the bourgeoisie . Further , as we have already seen , entire sections of the ruling class are , by the advance of industry , precipitated into the proletariat , or are at least threatened in their conditions of existence . These also supply the proletariat with fresh elements of enlightenment and progress . Finally , in times when the class struggle nears the decisive hour , the progress of dissolution going on within the ruling class , in fact within the whole range of old society , assumes such a violent , glaring character , that a small section of the ruling class cuts itself adrift , and joins the revolutionary class , the class that holds the future in its hands . Just as , therefore , at an earlier period , a section of the nobility went over to the bourgeoisie , so now a portion of the bourgeoisie goes over to the proletariat , and in particular , a portion of the bourgeois ideologists , who have raised themselves to the level of comprehending theoretically the historical movement as a whole . Of all the classes that stand face to face with the bourgeoisie today , the proletariat alone is a really revolutionary class . The other classes decay and finally disappear in the face of Modern Industry ; the proletariat is its special and essential product . The lower middle class , the small manufacturer , the shopkeeper , the artisan , the peasant , all these fight against the bourgeoisie , to save from extinction their existence as fractions of the middle class . They are therefore not revolutionary , but conservative . Nay more , they are reactionary , for they try to roll back the wheel of history . If by chance , they are revolutionary , they are only so in view of their impending transfer into the proletariat ; they thus defend not their present , but their future interests , they desert their own standpoint to place themselves at that of the proletariat . The “ dangerous class ” , [ lumpenproletariat ] the social scum , that passively rotting mass thrown off by the lowest layers of the old society , may , here and there , be swept into the movement by a proletarian revolution ; its conditions of life , however , prepare it far more for the part of a bribed tool of reactionary intrigue . In the condition of the proletariat , those of old society at large are already virtually swamped . The proletarian is without property ; his relation to his wife and children has no longer anything in common with the bourgeois family relations ; modern industry labour , modern subjection to capital , the same in England as in France , in America as in Germany , has stripped him of every trace of national character . Law , morality , religion , are to him so many bourgeois prejudices , behind which lurk in ambush just as many bourgeois interests . All the preceding classes that got the upper hand sought to fortify their already acquired status by subjecting society at large to their conditions of appropriation . The proletarians cannot become masters of the productive forces of society , except by abolishing their own previous mode of appropriation , and thereby also every other previous mode of appropriation . They have nothing of their own to secure and to fortify ; their mission is to destroy all previous securities for , and insurances of , individual property . All previous historical movements were movements of minorities , or in the interest of minorities . The proletarian movement is the self-conscious , independent movement of the immense majority , in the interest of the immense majority . The proletariat , the lowest stratum of our present society , cannot stir , cannot raise itself up , without the whole superincumbent strata of official society being sprung into the air . Though not in substance , yet in form , the struggle of the proletariat with the bourgeoisie is at first a national struggle . The proletariat of each country must , of course , first of all settle matters with its own bourgeoisie . In depicting the most general phases of the development of the proletariat , we traced the more or less veiled civil war , raging within existing society , up to the point where that war breaks out into open revolution , and where the violent overthrow of the bourgeoisie lays the foundation for the sway of the proletariat . Hitherto , every form of society has been based , as we have already seen , on the antagonism of oppressing and oppressed classes . But in order to oppress a class , certain conditions must be assured to it under which it can , at least , continue its slavish existence . The serf , in the period of serfdom , raised himself to membership in the commune , just as the petty bourgeois , under the yoke of the feudal absolutism , managed to develop into a bourgeois . The modern labourer , on the contrary , instead of rising with the process of industry , sinks deeper and deeper below the conditions of existence of his own class . He becomes a pauper , and pauperism develops more rapidly than population and wealth . And here it becomes evident , that the bourgeoisie is unfit any longer to be the ruling class in society , and to impose its conditions of existence upon society as an over-riding law . It is unfit to rule because it is incompetent to assure an existence to its slave within his slavery , because it cannot help letting him sink into such a state , that it has to feed him , instead of being fed by him . Society can no longer live under this bourgeoisie , in other words , its existence is no longer compatible with society . The essential conditions for the existence and for the sway of the bourgeois class is the formation and augmentation of capital ; the condition for capital is wage-labour . Wage-labour rests exclusively on competition between the labourers . The advance of industry , whose involuntary promoter is the bourgeoisie , replaces the isolation of the labourers , due to competition , by the revolutionary combination , due to association . The development of Modern Industry , therefore , cuts from under its feet the very foundation on which the bourgeoisie produces and appropriates products . What the bourgeoisie therefore produces , above all , are its own grave-diggers . Its fall and the victory of the proletariat are equally inevitable . </text>
<text id="MarxMarxK_ComMan_24_EN.txt">
﻿ II . Proletarians and Communists In what relation do the Communists stand to the proletarians as a whole ? The Communists do not form a separate party opposed to the other working-class parties . They have no interests separate and apart from those of the proletariat as a whole . They do not set up any sectarian principles of their own , by which to shape and mould the proletarian movement . The Communists are distinguished from the other working-class parties by this only : 1. In the national struggles of the proletarians of the different countries , they point out and bring to the front the common interests of the entire proletariat , independently of all nationality . 2. In the various stages of development which the struggle of the working class against the bourgeoisie has to pass through , they always and everywhere represent the interests of the movement as a whole . The Communists , therefore , are on the one hand , practically , the most advanced and resolute section of the working-class parties of every country , that section which pushes forward all others ; on the other hand , theoretically , they have over the great mass of the proletariat the advantage of clearly understanding the line of march , the conditions , and the ultimate general results of the proletarian movement . The immediate aim of the Communists is the same as that of all other proletarian parties : formation of the proletariat into a class , overthrow of the bourgeois supremacy , conquest of political power by the proletariat . The theoretical conclusions of the Communists are in no way based on ideas or principles that have been invented , or discovered , by this or that would-be universal reformer . They merely express , in general terms , actual relations springing from an existing class struggle , from a historical movement going on under our very eyes . The abolition of existing property relations is not at all a distinctive feature of communism . All property relations in the past have continually been subject to historical change consequent upon the change in historical conditions . The French Revolution , for example , abolished feudal property in favour of bourgeois property . The distinguishing feature of Communism is not the abolition of property generally , but the abolition of bourgeois property . But modern bourgeois private property is the final and most complete expression of the system of producing and appropriating products , that is based on class antagonisms , on the exploitation of the many by the few . In this sense , the theory of the Communists may be summed up in the single sentence : Abolition of private property . We Communists have been reproached with the desire of abolishing the right of personally acquiring property as the fruit of a man’s own labour , which property is alleged to be the groundwork of all personal freedom , activity and independence . Hard-won , self-acquired , self-earned property ! Do you mean the property of petty artisan and of the small peasant , a form of property that preceded the bourgeois form ? There is no need to abolish that ; the development of industry has to a great extent already destroyed it , and is still destroying it daily . Or do you mean the modern bourgeois private property ? But does wage-labour create any property for the labourer ? Not a bit . It creates capital , i. e. , that kind of property which exploits wage-labour , and which cannot increase except upon condition of begetting a new supply of wage-labour for fresh exploitation . Property , in its present form , is based on the antagonism of capital and wage labour . Let us examine both sides of this antagonism . To be a capitalist , is to have not only a purely personal , but a social status in production . Capital is a collective product , and only by the united action of many members , nay , in the last resort , only by the united action of all members of society , can it be set in motion . Capital is therefore not only personal ; it is a social power . When , therefore , capital is converted into common property , into the property of all members of society , personal property is not thereby transformed into social property . It is only the social character of the property that is changed . It loses its class character . Let us now take wage-labour . The average price of wage-labour is the minimum wage , i. e. , that quantum of the means of subsistence which is absolutely requisite to keep the labourer in bare existence as a labourer . What , therefore , the wage-labourer appropriates by means of his labour , merely suffices to prolong and reproduce a bare existence . We by no means intend to abolish this personal appropriation of the products of labour , an appropriation that is made for the maintenance and reproduction of human life , and that leaves no surplus wherewith to command the labour of others . All that we want to do away with is the miserable character of this appropriation , under which the labourer lives merely to increase capital , and is allowed to live only in so far as the interest of the ruling class requires it . In bourgeois society , living labour is but a means to increase accumulated labour . In Communist society , accumulated labour is but a means to widen , to enrich , to promote the existence of the labourer . In bourgeois society , therefore , the past dominates the present ; in Communist society , the present dominates the past . In bourgeois society capital is independent and has individuality , while the living person is dependent and has no individuality . And the abolition of this state of things is called by the bourgeois , abolition of individuality and freedom ! And rightly so . The abolition of bourgeois individuality , bourgeois independence , and bourgeois freedom is undoubtedly aimed at . By freedom is meant , under the present bourgeois conditions of production , free trade , free selling and buying . But if selling and buying disappears , free selling and buying disappears also . This talk about free selling and buying , and all the other “ brave words ” of our bourgeois about freedom in general , have a meaning , if any , only in contrast with restricted selling and buying , with the fettered traders of the Middle Ages , but have no meaning when opposed to the Communistic abolition of buying and selling , of the bourgeois conditions of production , and of the bourgeoisie itself . You are horrified at our intending to do away with private property . But in your existing society , private property is already done away with for nine-tenths of the population ; its existence for the few is solely due to its non-existence in the hands of those nine-tenths . You reproach us , therefore , with intending to do away with a form of property , the necessary condition for whose existence is the non-existence of any property for the immense majority of society . In one word , you reproach us with intending to do away with your property . Precisely so ; that is just what we intend . From the moment when labour can no longer be converted into capital , money , or rent , into a social power capable of being monopolised , i. e. , from the moment when individual property can no longer be transformed into bourgeois property , into capital , from that moment , you say , individuality vanishes . You must , therefore , confess that by “ individual ” you mean no other person than the bourgeois , than the middle-class owner of property . This person must , indeed , be swept out of the way , and made impossible . Communism deprives no man of the power to appropriate the products of society ; all that it does is to deprive him of the power to subjugate the labour of others by means of such appropriations . It has been objected that upon the abolition of private property , all work will cease , and universal laziness will overtake us . According to this , bourgeois society ought long ago to have gone to the dogs through sheer idleness ; for those of its members who work , acquire nothing , and those who acquire anything do not work . The whole of this objection is but another expression of the tautology : that there can no longer be any wage-labour when there is no longer any capital . All objections urged against the Communistic mode of producing and appropriating material products , have , in the same way , been urged against the Communistic mode of producing and appropriating intellectual products . Just as , to the bourgeois , the disappearance of class property is the disappearance of production itself , so the disappearance of class culture is to him identical with the disappearance of all culture . That culture , the loss of which he laments , is , for the enormous majority , a mere training to act as a machine . But don’t wrangle with us so long as you apply , to our intended abolition of bourgeois property , the standard of your bourgeois notions of freedom , culture , law , &c . Your very ideas are but the outgrowth of the conditions of your bourgeois production and bourgeois property , just as your jurisprudence is but the will of your class made into a law for all , a will whose essential character and direction are determined by the economical conditions of existence of your class . The selfish misconception that induces you to transform into eternal laws of nature and of reason , the social forms springing from your present mode of production and form of property – historical relations that rise and disappear in the progress of production – this misconception you share with every ruling class that has preceded you . What you see clearly in the case of ancient property , what you admit in the case of feudal property , you are of course forbidden to admit in the case of your own bourgeois form of property . Abolition [ Aufhebung ] of the family ! Even the most radical flare up at this infamous proposal of the Communists . On what foundation is the present family , the bourgeois family , based ? On capital , on private gain . In its completely developed form , this family exists only among the bourgeoisie . But this state of things finds its complement in the practical absence of the family among the proletarians , and in public prostitution . The bourgeois family will vanish as a matter of course when its complement vanishes , and both will vanish with the vanishing of capital . Do you charge us with wanting to stop the exploitation of children by their parents ? To this crime we plead guilty . But , you say , we destroy the most hallowed of relations , when we replace home education by social . And your education ! Is not that also social , and determined by the social conditions under which you educate , by the intervention direct or indirect , of society , by means of schools , &c . ? The Communists have not invented the intervention of society in education ; they do but seek to alter the character of that intervention , and to rescue education from the influence of the ruling class . The bourgeois clap-trap about the family and education , about the hallowed co-relation of parents and child , becomes all the more disgusting , the more , by the action of Modern Industry , all the family ties among the proletarians are torn asunder , and their children transformed into simple articles of commerce and instruments of labour . But you Communists would introduce community of women , screams the bourgeoisie in chorus . The bourgeois sees his wife a mere instrument of production . He hears that the instruments of production are to be exploited in common , and , naturally , can come to no other conclusion that the lot of being common to all will likewise fall to the women . He has not even a suspicion that the real point aimed at is to do away with the status of women as mere instruments of production . For the rest , nothing is more ridiculous than the virtuous indignation of our bourgeois at the community of women which , they pretend , is to be openly and officially established by the Communists . The Communists have no need to introduce community of women ; it has existed almost from time immemorial . Our bourgeois , not content with having wives and daughters of their proletarians at their disposal , not to speak of common prostitutes , take the greatest pleasure in seducing each other’s wives . Bourgeois marriage is , in reality , a system of wives in common and thus , at the most , what the Communists might possibly be reproached with is that they desire to introduce , in substitution for a hypocritically concealed , an openly legalised community of women . For the rest , it is self-evident that the abolition of the present system of production must bring with it the abolition of the community of women springing from that system , i. e. , of prostitution both public and private . The Communists are further reproached with desiring to abolish countries and nationality . The working men have no country . We cannot take from them what they have not got . Since the proletariat must first of all acquire political supremacy , must rise to be the leading class of the nation , must constitute itself the nation , it is so far , itself national , though not in the bourgeois sense of the word . National differences and antagonism between peoples are daily more and more vanishing , owing to the development of the bourgeoisie , to freedom of commerce , to the world market , to uniformity in the mode of production and in the conditions of life corresponding thereto . The supremacy of the proletariat will cause them to vanish still faster . United action , of the leading civilised countries at least , is one of the first conditions for the emancipation of the proletariat . In proportion as the exploitation of one individual by another will also be put an end to , the exploitation of one nation by another will also be put an end to . In proportion as the antagonism between classes within the nation vanishes , the hostility of one nation to another will come to an end . The charges against Communism made from a religious , a philosophical and , generally , from an ideological standpoint , are not deserving of serious examination . Does it require deep intuition to comprehend that man’s ideas , views , and conception , in one word , man’s consciousness , changes with every change in the conditions of his material existence , in his social relations and in his social life ? What else does the history of ideas prove , than that intellectual production changes its character in proportion as material production is changed ? The ruling ideas of each age have ever been the ideas of its ruling class . When people speak of the ideas that revolutionise society , they do but express that fact that within the old society the elements of a new one have been created , and that the dissolution of the old ideas keeps even pace with the dissolution of the old conditions of existence . When the ancient world was in its last throes , the ancient religions were overcome by Christianity . When Christian ideas succumbed in the 18th century to rationalist ideas , feudal society fought its death battle with the then revolutionary bourgeoisie . The ideas of religious liberty and freedom of conscience merely gave expression to the sway of free competition within the domain of knowledge . “ Undoubtedly , ” it will be said , “ religious , moral , philosophical , and juridical ideas have been modified in the course of historical development . But religion , morality , philosophy , political science , and law , constantly survived this change . ” “ There are , besides , eternal truths , such as Freedom , Justice , etc. , that are common to all states of society . But Communism abolishes eternal truths , it abolishes all religion , and all morality , instead of constituting them on a new basis ; it therefore acts in contradiction to all past historical experience . ” What does this accusation reduce itself to ? The history of all past society has consisted in the development of class antagonisms , antagonisms that assumed different forms at different epochs . But whatever form they may have taken , one fact is common to all past ages , viz . , the exploitation of one part of society by the other . No wonder , then , that the social consciousness of past ages , despite all the multiplicity and variety it displays , moves within certain common forms , or general ideas , which cannot completely vanish except with the total disappearance of class antagonisms . The Communist revolution is the most radical rupture with traditional property relations ; no wonder that its development involved the most radical rupture with traditional ideas . But let us have done with the bourgeois objections to Communism . We have seen above , that the first step in the revolution by the working class is to raise the proletariat to the position of ruling class to win the battle of democracy . The proletariat will use its political supremacy to wrest , by degree , all capital from the bourgeoisie , to centralise all instruments of production in the hands of the State , i. e. , of the proletariat organised as the ruling class ; and to increase the total productive forces as rapidly as possible . Of course , in the beginning , this cannot be effected except by means of despotic inroads on the rights of property , and on the conditions of bourgeois production ; by means of measures , therefore , which appear economically insufficient and untenable , but which , in the course of the movement , outstrip themselves , necessitate further inroads upon the old social order , and are unavoidable as a means of entirely revolutionising the mode of production . These measures will , of course , be different in different countries . Nevertheless , in most advanced countries , the following will be pretty generally applicable . 1. Abolition of property in land and application of all rents of land to public purposes . 2. A heavy progressive or graduated income tax . 3. Abolition of all rights of inheritance . 4. Confiscation of the property of all emigrants and rebels . 5. Centralisation of credit in the hands of the state , by means of a national bank with State capital and an exclusive monopoly . 6. Centralisation of the means of communication and transport in the hands of the State . 7. Extension of factories and instruments of production owned by the State ; the bringing into cultivation of waste-lands , and the improvement of the soil generally in accordance with a common plan . 8. Equal liability of all to work . Establishment of industrial armies , especially for agriculture . 9. Combination of agriculture with manufacturing industries ; gradual abolition of all the distinction between town and country by a more equable distribution of the populace over the country . 10. Free education for all children in public schools . Abolition of children’s factory labour in its present form . Combination of education with industrial production , &c , &c . When , in the course of development , class distinctions have disappeared , and all production has been concentrated in the hands of a vast association of the whole nation , the public power will lose its political character . Political power , properly so called , is merely the organised power of one class for oppressing another . If the proletariat during its contest with the bourgeoisie is compelled , by the force of circumstances , to organise itself as a class , if , by means of a revolution , it makes itself the ruling class , and , as such , sweeps away by force the old conditions of production , then it will , along with these conditions , have swept away the conditions for the existence of class antagonisms and of classes generally , and will thereby have abolished its own supremacy as a class . In place of the old bourgeois society , with its classes and class antagonisms , we shall have an association , in which the free development of each is the condition for the free development of all . III . Socialist and Communist Literature 1. Reactionary Socialism A. Feudal Socialism Owing to their historical position , it became the vocation of the aristocracies of France and England to write pamphlets against modern bourgeois society . In the French Revolution of July 1830 , and in the English reform agitation , these aristocracies again succumbed to the hateful upstart . Thenceforth , a serious political struggle was altogether out of the question . A literary battle alone remained possible . But even in the domain of literature the old cries of the restoration period had become impossible . * In order to arouse sympathy , the aristocracy was obliged to lose sight , apparently , of its own interests , and to formulate their indictment against the bourgeoisie in the interest of the exploited working class alone . Thus , the aristocracy took their revenge by singing lampoons on their new masters and whispering in his ears sinister prophesies of coming catastrophe . In this way arose feudal Socialism : half lamentation , half lampoon ; half an echo of the past , half menace of the future ; at times , by its bitter , witty and incisive criticism , striking the bourgeoisie to the very heart’s core ; but always ludicrous in its effect , through total incapacity to comprehend the march of modern history . The aristocracy , in order to rally the people to them , waved the proletarian alms-bag in front for a banner . But the people , so often as it joined them , saw on their hindquarters the old feudal coats of arms , and deserted with loud and irreverent laughter . One section of the French Legitimists and “ Young England ” exhibited this spectacle . In pointing out that their mode of exploitation was different to that of the bourgeoisie , the feudalists forget that they exploited under circumstances and conditions that were quite different and that are now antiquated . In showing that , under their rule , the modern proletariat never existed , they forget that the modern bourgeoisie is the necessary offspring of their own form of society . For the rest , so little do they conceal the reactionary character of their criticism that their chief accusation against the bourgeois amounts to this , that under the bourgeois régime a class is being developed which is destined to cut up root and branch the old order of society . What they upbraid the bourgeoisie with is not so much that it creates a proletariat as that it creates a revolutionary proletariat . In political practice , therefore , they join in all coercive measures against the working class ; and in ordinary life , despite their high-falutin phrases , they stoop to pick up the golden apples dropped from the tree of industry , and to barter truth , love , and honour , for traffic in wool , beetroot-sugar , and potato spirits . † As the parson has ever gone hand in hand with the landlord , so has Clerical Socialism with Feudal Socialism . Nothing is easier than to give Christian asceticism a Socialist tinge . Has not Christianity declaimed against private property , against marriage , against the State ? Has it not preached in the place of these , charity and poverty , celibacy and mortification of the flesh , monastic life and Mother Church ? Christian Socialism is but the holy water with which the priest consecrates the heart-burnings of the aristocrat . B. Petty-Bourgeois Socialism The feudal aristocracy was not the only class that was ruined by the bourgeoisie , not the only class whose conditions of existence pined and perished in the atmosphere of modern bourgeois society . The medieval burgesses and the small peasant proprietors were the precursors of the modern bourgeoisie . In those countries which are but little developed , industrially and commercially , these two classes still vegetate side by side with the rising bourgeoisie . In countries where modern civilisation has become fully developed , a new class of petty bourgeois has been formed , fluctuating between proletariat and bourgeoisie , and ever renewing itself as a supplementary part of bourgeois society . The individual members of this class , however , are being constantly hurled down into the proletariat by the action of competition , and , as modern industry develops , they even see the moment approaching when they will completely disappear as an independent section of modern society , to be replaced in manufactures , agriculture and commerce , by overlookers , bailiffs and shopmen . In countries like France , where the peasants constitute far more than half of the population , it was natural that writers who sided with the proletariat against the bourgeoisie should use , in their criticism of the bourgeois régime , the standard of the peasant and petty bourgeois , and from the standpoint of these intermediate classes , should take up the cudgels for the working class . Thus arose petty-bourgeois Socialism . Sismondi was the head of this school , not only in France but also in England . This school of Socialism dissected with great acuteness the contradictions in the conditions of modern production . It laid bare the hypocritical apologies of economists . It proved , incontrovertibly , the disastrous effects of machinery and division of labour ; the concentration of capital and land in a few hands ; overproduction and crises ; it pointed out the inevitable ruin of the petty bourgeois and peasant , the misery of the proletariat , the anarchy in production , the crying inequalities in the distribution of wealth , the industrial war of extermination between nations , the dissolution of old moral bonds , of the old family relations , of the old nationalities . In its positive aims , however , this form of Socialism aspires either to restoring the old means of production and of exchange , and with them the old property relations , and the old society , or to cramping the modern means of production and of exchange within the framework of the old property relations that have been , and were bound to be , exploded by those means . In either case , it is both reactionary and Utopian . Its last words are : corporate guilds for manufacture ; patriarchal relations in agriculture . Ultimately , when stubborn historical facts had dispersed all intoxicating effects of self-deception , this form of Socialism ended in a miserable fit of the blues . C. German or “ True ” Socialism The Socialist and Communist literature of France , a literature that originated under the pressure of a bourgeoisie in power , and that was the expressions of the struggle against this power , was introduced into Germany at a time when the bourgeoisie , in that country , had just begun its contest with feudal absolutism . German philosophers , would-be philosophers , and beaux esprits ( men of letters ) , eagerly seized on this literature , only forgetting , that when these writings immigrated from France into Germany , French social conditions had not immigrated along with them . In contact with German social conditions , this French literature lost all its immediate practical significance and assumed a purely literary aspect . Thus , to the German philosophers of the Eighteenth Century , the demands of the first French Revolution were nothing more than the demands of “ Practical Reason ” in general , and the utterance of the will of the revolutionary French bourgeoisie signified , in their eyes , the laws of pure Will , of Will as it was bound to be , of true human Will generally . The work of the German literati consisted solely in bringing the new French ideas into harmony with their ancient philosophical conscience , or rather , in annexing the French ideas without deserting their own philosophic point of view . This annexation took place in the same way in which a foreign language is appropriated , namely , by translation . It is well known how the monks wrote silly lives of Catholic Saints over the manuscripts on which the classical works of ancient heathendom had been written . The German literati reversed this process with the profane French literature . They wrote their philosophical nonsense beneath the French original . For instance , beneath the French criticism of the economic functions of money , they wrote “ Alienation of Humanity ” , and beneath the French criticism of the bourgeois state they wrote “ Dethronement of the Category of the General ” , and so forth . The introduction of these philosophical phrases at the back of the French historical criticisms , they dubbed “ Philosophy of Action ” , “ True Socialism ” , “ German Science of Socialism ” , “ Philosophical Foundation of Socialism ” , and so on . The French Socialist and Communist literature was thus completely emasculated . And , since it ceased in the hands of the German to express the struggle of one class with the other , he felt conscious of having overcome “ French one-sidedness ” and of representing , not true requirements , but the requirements of Truth ; not the interests of the proletariat , but the interests of Human Nature , of Man in general , who belongs to no class , has no reality , who exists only in the misty realm of philosophical fantasy . This German socialism , which took its schoolboy task so seriously and solemnly , and extolled its poor stock-in-trade in such a mountebank fashion , meanwhile gradually lost its pedantic innocence . The fight of the Germans , and especially of the Prussian bourgeoisie , against feudal aristocracy and absolute monarchy , in other words , the liberal movement , became more earnest . By this , the long-wished for opportunity was offered to “ True ” Socialism of confronting the political movement with the Socialist demands , of hurling the traditional anathemas against liberalism , against representative government , against bourgeois competition , bourgeois freedom of the press , bourgeois legislation , bourgeois liberty and equality , and of preaching to the masses that they had nothing to gain , and everything to lose , by this bourgeois movement . German Socialism forgot , in the nick of time , that the French criticism , whose silly echo it was , presupposed the existence of modern bourgeois society , with its corresponding economic conditions of existence , and the political constitution adapted thereto , the very things those attainment was the object of the pending struggle in Germany . To the absolute governments , with their following of parsons , professors , country squires , and officials , it served as a welcome scarecrow against the threatening bourgeoisie . It was a sweet finish , after the bitter pills of flogging and bullets , with which these same governments , just at that time , dosed the German working-class risings . While this “ True ” Socialism thus served the government as a weapon for fighting the German bourgeoisie , it , at the same time , directly represented a reactionary interest , the interest of German Philistines . In Germany , the petty-bourgeois class , a relic of the sixteenth century , and since then constantly cropping up again under the various forms , is the real social basis of the existing state of things . To preserve this class is to preserve the existing state of things in Germany . The industrial and political supremacy of the bourgeoisie threatens it with certain destruction – on the one hand , from the concentration of capital ; on the other , from the rise of a revolutionary proletariat . “ True ” Socialism appeared to kill these two birds with one stone . It spread like an epidemic . The robe of speculative cobwebs , embroidered with flowers of rhetoric , steeped in the dew of sickly sentiment , this transcendental robe in which the German Socialists wrapped their sorry “ eternal truths ” , all skin and bone , served to wonderfully increase the sale of their goods amongst such a public . And on its part German Socialism recognised , more and more , its own calling as the bombastic representative of the petty-bourgeois Philistine . It proclaimed the German nation to be the model nation , and the German petty Philistine to be the typical man . To every villainous meanness of this model man , it gave a hidden , higher , Socialistic interpretation , the exact contrary of its real character . It went to the extreme length of directly opposing the “ brutally destructive ” tendency of Communism , and of proclaiming its supreme and impartial contempt of all class struggles . With very few exceptions , all the so-called Socialist and Communist publications that now ( 1847 ) circulate in Germany belong to the domain of this foul and enervating literature . * 2. Conservative or Bourgeois Socialism A part of the bourgeoisie is desirous of redressing social grievances in order to secure the continued existence of bourgeois society . To this section belong economists , philanthropists , humanitarians , improvers of the condition of the working class , organisers of charity , members of societies for the prevention of cruelty to animals , temperance fanatics , hole-and-corner reformers of every imaginable kind . This form of socialism has , moreover , been worked out into complete systems . We may cite Proudhon’s Philosophie de la Misère as an example of this form . The Socialistic bourgeois want all the advantages of modern social conditions without the struggles and dangers necessarily resulting therefrom . They desire the existing state of society , minus its revolutionary and disintegrating elements . They wish for a bourgeoisie without a proletariat . The bourgeoisie naturally conceives the world in which it is supreme to be the best ; and bourgeois Socialism develops this comfortable conception into various more or less complete systems . In requiring the proletariat to carry out such a system , and thereby to march straightway into the social New Jerusalem , it but requires in reality , that the proletariat should remain within the bounds of existing society , but should cast away all its hateful ideas concerning the bourgeoisie . A second , and more practical , but less systematic , form of this Socialism sought to depreciate every revolutionary movement in the eyes of the working class by showing that no mere political reform , but only a change in the material conditions of existence , in economical relations , could be of any advantage to them . By changes in the material conditions of existence , this form of Socialism , however , by no means understands abolition of the bourgeois relations of production , an abolition that can be affected only by a revolution , but administrative reforms , based on the continued existence of these relations ; reforms , therefore , that in no respect affect the relations between capital and labour , but , at the best , lessen the cost , and simplify the administrative work , of bourgeois government . Bourgeois Socialism attains adequate expression when , and only when , it becomes a mere figure of speech . Free trade : for the benefit of the working class . Protective duties : for the benefit of the working class . Prison Reform : for the benefit of the working class . This is the last word and the only seriously meant word of bourgeois socialism . It is summed up in the phrase : the bourgeois is a bourgeois – for the benefit of the working class . 3. Critical-Utopian Socialism and Communism We do not here refer to that literature which , in every great modern revolution , has always given voice to the demands of the proletariat , such as the writings of Babeuf and others . The first direct attempts of the proletariat to attain its own ends , made in times of universal excitement , when feudal society was being overthrown , necessarily failed , owing to the then undeveloped state of the proletariat , as well as to the absence of the economic conditions for its emancipation , conditions that had yet to be produced , and could be produced by the impending bourgeois epoch alone . The revolutionary literature that accompanied these first movements of the proletariat had necessarily a reactionary character . It inculcated universal asceticism and social levelling in its crudest form . The Socialist and Communist systems , properly so called , those of Saint-Simon , Fourier , Owen , and others , spring into existence in the early undeveloped period , described above , of the struggle between proletariat and bourgeoisie ( see Section I. Bourgeois and Proletarians ) . The founders of these systems see , indeed , the class antagonisms , as well as the action of the decomposing elements in the prevailing form of society . But the proletariat , as yet in its infancy , offers to them the spectacle of a class without any historical initiative or any independent political movement . Since the development of class antagonism keeps even pace with the development of industry , the economic situation , as they find it , does not as yet offer to them the material conditions for the emancipation of the proletariat . They therefore search after a new social science , after new social laws , that are to create these conditions . Historical action is to yield to their personal inventive action ; historically created conditions of emancipation to fantastic ones ; and the gradual , spontaneous class organisation of the proletariat to an organisation of society especially contrived by these inventors . Future history resolves itself , in their eyes , into the propaganda and the practical carrying out of their social plans . In the formation of their plans , they are conscious of caring chiefly for the interests of the working class , as being the most suffering class . Only from the point of view of being the most suffering class does the proletariat exist for them . The undeveloped state of the class struggle , as well as their own surroundings , causes Socialists of this kind to consider themselves far superior to all class antagonisms . They want to improve the condition of every member of society , even that of the most favoured . Hence , they habitually appeal to society at large , without the distinction of class ; nay , by preference , to the ruling class . For how can people , when once they understand their system , fail to see in it the best possible plan of the best possible state of society ? Hence , they reject all political , and especially all revolutionary action ; they wish to attain their ends by peaceful means , necessarily doomed to failure , and by the force of example , to pave the way for the new social Gospel . Such fantastic pictures of future society , painted at a time when the proletariat is still in a very undeveloped state and has but a fantastic conception of its own position , correspond with the first instinctive yearnings of that class for a general reconstruction of society . But these Socialist and Communist publications contain also a critical element . They attack every principle of existing society . Hence , they are full of the most valuable materials for the enlightenment of the working class . The practical measures proposed in them – such as the abolition of the distinction between town and country , of the family , of the carrying on of industries for the account of private individuals , and of the wage system , the proclamation of social harmony , the conversion of the function of the state into a more superintendence of production – all these proposals point solely to the disappearance of class antagonisms which were , at that time , only just cropping up , and which , in these publications , are recognised in their earliest indistinct and undefined forms only . These proposals , therefore , are of a purely Utopian character . The significance of Critical-Utopian Socialism and Communism bears an inverse relation to historical development . In proportion as the modern class struggle develops and takes definite shape , this fantastic standing apart from the contest , these fantastic attacks on it , lose all practical value and all theoretical justification . Therefore , although the originators of these systems were , in many respects , revolutionary , their disciples have , in every case , formed mere reactionary sects . They hold fast by the original views of their masters , in opposition to the progressive historical development of the proletariat . They , therefore , endeavour , and that consistently , to deaden the class struggle and to reconcile the class antagonisms . They still dream of experimental realisation of their social Utopias , of founding isolated “ phalansteres ” , of establishing “ Home Colonies ” , or setting up a “ Little Icaria”* – duodecimo editions of the New Jerusalem – and to realise all these castles in the air , they are compelled to appeal to the feelings and purses of the bourgeois . By degrees , they sink into the category of the reactionary [ or ] conservative Socialists depicted above , differing from these only by more systematic pedantry , and by their fanatical and superstitious belief in the miraculous effects of their social science . They , therefore , violently oppose all political action on the part of the working class ; such action , according to them , can only result from blind unbelief in the new Gospel . The Owenites in England , and the Fourierists in France , respectively , oppose the Chartists and the Réformistes . IV . Position of the Communists in Relation to the Various Existing Opposition Parties Section II has made clear the relations of the Communists to the existing working-class parties , such as the Chartists in England and the Agrarian Reformers in America . The Communists fight for the attainment of the immediate aims , for the enforcement of the momentary interests of the working class ; but in the movement of the present , they also represent and take care of the future of that movement . In France , the Communists ally with the Social-Democrats* against the conservative and radical bourgeoisie , reserving , however , the right to take up a critical position in regard to phases and illusions traditionally handed down from the great Revolution . In Switzerland , they support the Radicals , without losing sight of the fact that this party consists of antagonistic elements , partly of Democratic Socialists , in the French sense , partly of radical bourgeois . In Poland , they support the party that insists on an agrarian revolution as the prime condition for national emancipation , that party which fomented the insurrection of Cracow in 1846. In Germany , they fight with the bourgeoisie whenever it acts in a revolutionary way , against the absolute monarchy , the feudal squirearchy , and the petty bourgeoisie . But they never cease , for a single instant , to instil into the working class the clearest possible recognition of the hostile antagonism between bourgeoisie and proletariat , in order that the German workers may straightway use , as so many weapons against the bourgeoisie , the social and political conditions that the bourgeoisie must necessarily introduce along with its supremacy , and in order that , after the fall of the reactionary classes in Germany , the fight against the bourgeoisie itself may immediately begin . The Communists turn their attention chiefly to Germany , because that country is on the eve of a bourgeois revolution that is bound to be carried out under more advanced conditions of European civilisation and with a much more developed proletariat than that of England was in the seventeenth , and France in the eighteenth century , and because the bourgeois revolution in Germany will be but the prelude to an immediately following proletarian revolution . In short , the Communists everywhere support every revolutionary movement against the existing social and political order of things . In all these movements , they bring to the front , as the leading question in each , the property question , no matter what its degree of development at the time . Finally , they labour everywhere for the union and agreement of the democratic parties of all countries . The Communists disdain to conceal their views and aims . They openly declare that their ends can be attained only by the forcible overthrow of all existing social conditions . Let the ruling classes tremble at a Communistic revolution . The proletarians have nothing to lose but their chains . They have a world to win . Working Men of All Countries , Unite ! </text>
<text id="MarxMarxK_Feuerbach_EN.txt">
﻿ -------------------------------------------------------------------------------- I The chief defect of all hitherto existing materialism – that of Feuerbach included – is that the thing , reality , sensuousness , is conceived only in the form of the object or of contemplation , but not as sensuous human activity , practice , not subjectively . Hence , in contradistinction to materialism , the active side was developed abstractly by idealism – which , of course , does not know real , sensuous activity as such . Feuerbach wants sensuous objects , really distinct from the thought objects , but he does not conceive human activity itself as objective activity . Hence , in The Essence of Christianity , he regards the theoretical attitude as the only genuinely human attitude , while practice is conceived and fixed only in its dirty-judaical manifestation . Hence he does not grasp the significance of “ revolutionary ” , of “ practical-critical ” , activity . II The question whether objective truth can be attributed to human thinking is not a question of theory but is a practical question . Man must prove the truth — i. e. the reality and power , the this-sidedness of his thinking in practice . The dispute over the reality or non-reality of thinking that is isolated from practice is a purely scholastic question . III The materialist doctrine concerning the changing of circumstances and upbringing forgets that circumstances are changed by men and that it is essential to educate the educator himself . This doctrine must , therefore , divide society into two parts , one of which is superior to society . The coincidence of the changing of circumstances and of human activity or self-changing can be conceived and rationally understood only as revolutionary practice . IV Feuerbach starts out from the fact of religious self-alienation , of the duplication of the world into a religious world and a secular one . His work consists in resolving the religious world into its secular basis . But that the secular basis detaches itself from itself and establishes itself as an independent realm in the clouds can only be explained by the cleavages and self-contradictions within this secular basis . The latter must , therefore , in itself be both understood in its contradiction and revolutionized in practice . Thus , for instance , after the earthly family is discovered to be the secret of the holy family , the former must then itself be destroyed in theory and in practice . V Feuerbach , not satisfied with abstract thinking , wants contemplation ; but he does not conceive sensuousness as practical , human-sensuous activity . VI Feuerbach resolves the religious essence into the human essence . But the human essence is no abstraction inherent in each single individual . In its reality it is the ensemble of the social relations . Feuerbach , who does not enter upon a criticism of this real essence , is consequently compelled : 1. To abstract from the historical process and to fix the religious sentiment as something by itself and to presuppose an abstract – isolated – human individual . 2. Essence , therefore , can be comprehended only as “ genus ” , as an internal , dumb generality which naturally unites the many individuals . VII Feuerbach , consequently , does not see that the “ religious sentiment ” is itself a social product , and that the abstract individual whom he analyses belongs to a particular form of society . VIII All social life is essentially practical . All mysteries which lead theory to mysticism find their rational solution in human practice and in the comprehension of this practice . IX The highest point reached by contemplative materialism , that is , materialism which does not comprehend sensuousness as practical activity , is contemplation of single individuals and of civil society . X The standpoint of the old materialism is civil society ; the standpoint of the new is human society , or social humanity . XI The philosophers have only interpreted the world , in various ways ; the point is to change it . -------------------------------------------------------------------------------- </text>
<text id="MarxMarxK_GothaProg_EN.txt">
﻿ Critique of the Gotha Programme -------------------------------------------------------------------------------- I -------------------------------------------------------------------------------- 1. " Labor is the source of wealth and all culture , and since useful labor is possible only in society and through society , the proceeds of labor belong undiminished with equal right to all members of society . " First part of the paragraph : " Labor is the source of all wealth and all culture . " Labor is not the source of all wealth . Nature is just as much the source of use values ( and it is surely of such that material wealth consists ! ) as labor , which itself is only the manifestation of a force of nature , human labor power . the above phrase is to be found in all children 's primers and is correct insofar as it is implied that labor is performed with the appurtenant subjects and instruments . But a socialist program cannot allow such bourgeois phrases to pass over in silence the conditions that lone give them meaning . And insofar as man from the beginning behaves toward nature , the primary source of all instruments and subjects of labor , as an owner , treats her as belonging to him , his labor becomes the source of use values , therefore also of wealth . The bourgeois have very good grounds for falsely ascribing supernatural creative power to labor ; since precisely from the fact that labor depends on nature it follows that the man who possesses no other property than his labor power must , in all conditions of society and culture , be the slave of other men who have made themselves the owners of the material conditions of labor . He can only work with their permission , hence live only with their permission . Let us now leave the sentence as it stands , or rather limps . What could one have expected in conclusion ? Obviously this : " Since labor is the source of all wealth , no one in society can appropriate wealth except as the product of labor . Therefore , if he himself does not work , he lives by the labor of others and also acquires his culture at the expense of the labor of others . " Instead of this , by means of the verbal river " and since " , a proposition is added in order to draw a conclusion from this and not from the first one . Second part of the paragraph : " Useful labor is possible only in society and through society . " According to the first proposition , labor was the source of all wealth and all culture ; therefore no society is possible without labor . Now we learn , conversely , that no " useful " labor is possible without society . One could just as well have said that only in society can useless and even socially harmful labor become a branch of gainful occupation , that only in society can one live by being idle , etc. , etc. -- in short , once could just as well have copied the whole of Rousseau . And what is " useful " labor ? Surely only labor which produces the intended useful result . A savage -- and man was a savage after he had ceased to be an ape -- who kills an animal with a stone , who collects fruit , etc. , performs " useful " labor . Thirdly , the conclusion : " Useful labor is possible only in society and through society , the proceeds of labor belong undiminished with equal right to all members of society . " A fine conclusion ! If useful labor is possible only in society and through society , the proceeds of labor belong to society -- and only so much therefrom accrues to the individual worker as is not required to maintain the " condition " of labor , society . In fact , this proposition has at all times been made use of by the champions of the state of society prevailing at any given time . First comes the claims of the government and everything that sticks to it , since it is the social organ for the maintenance of the social order ; then comes the claims of the various kinds of private property , for the various kinds of private property are the foundations of society , etc. One sees that such hollow phrases are the foundations of society , etc. One sees that such hollow phrases can be twisted and turned as desired . The first and second parts of the paragraph have some intelligible connection only in the following wording : " Labor becomes the source of wealth and culture only as social labor " , or , what is the same thing , " in and through society " . This proposition is incontestably correct , for although isolated labor ( its material conditions presupposed ) can create use value , it can create neither wealth nor culture . But equally incontestable is this other proposition : " In proportion as labor develops socially , and becomes thereby a source of wealth and culture , poverty and destitution develop among the workers , and wealth and culture among the nonworkers . " This is the law of all history hitherto . What , therefore , had to be done here , instead of setting down general phrases about " labor " and " society " , was to prove concretely how in present capitalist society the material , etc. , conditions have at last been created which enable and compel the workers to lift this social curse . In fact , however , the whole paragraph , bungled in style and content , is only there in order to inscribe the Lassallean catchword of the " undiminished proceeds of labor " as a slogan at the top of the party banner . I shall return later to the " proceeds of labor " , " equal right " , etc. , since the same thing recurs in a somewhat different form further on . 2. " In present-day society , the instruments of labor are the monopoly of the capitalist class ; the resulting dependence of the working class is the cause of misery and servitude in all forms . " This sentence , borrowed from the Rules of the International , is incorrect in this " improved " edition . In present-day society , the instruments of labor are the monopoly of the landowners ( the monopoly of property in land is even the basis of the monopoly of capital ) and the capitalists . In the passage in question , the Rules of the International do not mention either one or the other class of monopolists . They speak of the " monopolizer of the means of labor , that is , the sources of life . " The addition , " sources of life " , makes it sufficiently clear that land is included in the instruments of labor . The correction was introduced because Lassalle , for reasons now generally known , attacked only the capitalist class and not the landowners . In England , the capitalist class is usually not even the owner of the land on which his factory stands . 3. " The emancipation of labor demands the promotion of the instruments of labor to the common property of society and the co-operative regulation of the total labor , with a fair distribution of the proceeds of labor . " Promotion of the instruments of labor to the common property " ought obviously to read their " conversion into the common property " ; but this is only passing . What are the " proceeds of labor " ? The product of labor , or its value ? And in the latter case , is it the total value of the product , or only that part of the value which labor has newly added to the value of the means of production consumed ? " Proceeds of labor " is a loose notion which Lassalle has put in the place of definite economic conceptions . What is " a fair distribution " ? Do not the bourgeois assert that the present-day distribution is " fair " ? And is it not , in fact , the only " fair " distribution on the basis of the present-day mode of production ? Are economic relations regulated by legal conceptions , or do not , on the contrary , legal relations arise out of economic ones ? Have not also the socialist sectarians the most varied notions about " fair " distribution ? To understand what is implied in this connection by the phrase " fair distribution " , we must take the first paragraph and this one together . The latter presupposes a society wherein the instruments of labor are common property and the total labor is co-operatively regulated , and from the first paragraph we learn that " the proceeds of labor belong undiminished with equal right to all members of society . " " To all members of society " ? To those who do not work as well ? What remains then of the " undiminished " proceeds of labor ? Only to those members of society who work ? What remains then of the " equal right " of all members of society ? But " all members of society " and " equal right " are obviously mere phrases . The kernel consists in this , that in this communist society every worker must receive the " undiminished " Lassallean " proceeds of labor " . Let us take , first of all , the words " proceeds of labor " in the sense of the product of labor ; then the co-operative proceeds of labor are the total social product . From this must now be deducted : First , cover for replacement of the means of production used up . Second , additional portion for expansion of production . Third , reserve or insurance funds to provide against accidents , dislocations caused by natural calamities , etc. These deductions from the " undiminished " proceeds of labor are an economic necessity , and their magnitude is to be determined according to available means and forces , and partly by computation of probabilities , but they are in no way calculable by equity . There remains the other part of the total product , intended to serve as means of consumption . Before this is divided among the individuals , there has to be deducted again , from it : First , the general costs of administration not belonging to production . This part will , from the outset , be very considerably restricted in comparison with present-day society , and it diminishes in proportion as the new society develops . Second , that which is intended for the common satisfaction of needs , such as schools , health services , etc. From the outset , this part grows considerably in comparison with present-day society , and it grows in proportion as the new society develops . Third , funds for those unable to work , etc. , in short , for what is included under so-called official poor relief today . Only now do we come to the " distribution " which the program , under Lassallean influence , alone has in view in its narrow fashion -- namely , to that part of the means of consumption which is divided among the individual producers of the co-operative society . The " undiminished " proceeds of labor have already unnoticeably become converted into the " diminished " proceeds , although what the producer is deprived of in his capacity as a private individual benefits him directly or indirectly in his capacity as a member of society . Just as the phrase of the " undiminished " proceeds of labor has disappeared , so now does the phrase of the " proceeds of labor " disappear altogether . Within the co-operative society based on common ownership of the means of production , the producers do not exchange their products ; just as little does the labor employed on the products appear here as the value of these products , as a material quality possessed by them , since now , in contrast to capitalist society , individual labor no longer exists in an indirect fashion but directly as a component part of total labor . The phrase " proceeds of labor " , objectionable also today on account of its ambiguity , thus loses all meaning . What we have to deal with here is a communist society , not as it has developed on its own foundations , but , on the contrary , just as it emerges from capitalist society ; which is thus in every respect , economically , morally , and intellectually , still stamped with the birthmarks of the old society from whose womb it emerges . Accordingly , the individual producer receives back from society -- after the deductions have been made -- exactly what he gives to it . What he has given to it is his individual quantum of labor . For example , the social working day consists of the sum of the individual hours of work ; the individual labor time of the individual producer is the part of the social working day contributed by him , his share in it . He receives a certificate from society that he has furnished such-and-such an amount of labor ( after deducting his labor for the common funds ) ; and with this certificate , he draws from the social stock of means of consumption as much as the same amount of labor cost . The same amount of labor which he has given to society in one form , he receives back in another . Here , obviously , the same principle prevails as that which regulates the exchange of commodities , as far as this is exchange of equal values . Content and form are changed , because under the altered circumstances no one can give anything except his labor , and because , on the other hand , nothing can pass to the ownership of individuals , except individual means of consumption . But as far as the distribution of the latter among the individual producers is concerned , the same principle prevails as in the exchange of commodity equivalents : a given amount of labor in one form is exchanged for an equal amount of labor in another form . Hence , equal right here is still in principle -- bourgeois right , although principle and practice are no longer at loggerheads , while the exchange of equivalents in commodity exchange exists only on the average and not in the individual case . In spite of this advance , this equal right is still constantly stigmatized by a bourgeois limitation . The right of the producers is proportional to the labor they supply ; the equality consists in the fact that measurement is made with an equal standard , labor . But one man is superior to another physically , or mentally , and supplies more labor in the same time , or can labor for a longer time ; and labor , to serve as a measure , must be defined by its duration or intensity , otherwise it ceases to be a standard of measurement . This equal right is an unequal right for unequal labor . It recognizes no class differences , because everyone is only a worker like everyone else ; but it tacitly recognizes unequal individual endowment , and thus productive capacity , as a natural privilege . It is , therefore , a right of inequality , in its content , like every right . Right , by its very nature , can consist only in the application of an equal standard ; but unequal individuals ( and they would not be different individuals if they were not unequal ) are measurable only by an equal standard insofar as they are brought under an equal point of view , are taken from one definite side only -- for instance , in the present case , are regarded only as workers and nothing more is seen in them , everything else being ignored . Further , one worker is married , another is not ; one has more children than another , and so on and so forth . Thus , with an equal performance of labor , and hence an equal in the social consumption fund , one will in fact receive more than another , one will be richer than another , and so on . To avoid all these defects , right , instead of being equal , would have to be unequal . But these defects are inevitable in the first phase of communist society as it is when it has just emerged after prolonged birth pangs from capitalist society . Right can never be higher than the economic structure of society and its cultural development conditioned thereby . In a higher phase of communist society , after the enslaving subordination of the individual to the division of labor , and therewith also the antithesis between mental and physical labor , has vanished ; after labor has become not only a means of life but life 's prime want ; after the productive forces have also increased with the all-around development of the individual , and all the springs of co-operative wealth flow more abundantly -- only then then can the narrow horizon of bourgeois right be crossed in its entirety and society inscribe on its banners : From each according to his ability , to each according to his needs ! I have dealt more at length with the " undiminished " proceeds of labor , on the one hand , and with " equal right " and " fair distribution " , on the other , in order to show what a crime it is to attempt , on the one hand , to force on our Party again , as dogmas , ideas which in a certain period had some meaning but have now become obsolete verbal rubbish , while again perverting , on the other , the realistic outlook , which it cost so much effort to instill into the Party but which has now taken root in it , by means of ideological nonsense about right and other trash so common among the democrats and French socialists . Quite apart from the analysis so far given , it was in general a mistake to make a fuss about so-called distribution and put the principal stress on it . Any distribution whatever of the means of consumption is only a consequence of the distribution of the conditions of production themselves . The latter distribution , however , is a feature of the mode of production itself . The capitalist mode of production , for example , rests on the fact that the material conditions of production are in the hands of nonworkers in the form of property in capital and land , while the masses are only owners of the personal condition of production , of labor power . If the elements of production are so distributed , then the present-day distribution of the means of consumption results automatically . If the material conditions of production are the co-operative property of the workers themselves , then there likewise results a distribution of the means of consumption different from the present one . Vulgar socialism ( and from it in turn a section of the democrats ) has taken over from the bourgeois economists the consideration and treatment of distribution as independent of the mode of production and hence the presentation of socialism as turning principally on distribution . After the real relation has long been made clear , why retrogress again ? 4. " The emancipation of labor must be the work of the working class , relative to which all other classes are only one reactionary mass . " The first strophe is taken from the introductory words of the Rules of the International , but " improved " . There it is said : " The emancipation of the working class must be the act of the workers themselves " ; here , on the contrary , the " working class " has to emancipate -- what ? " Labor . " Let him understand who can . In compensation , the antistrophe , on the other hand , is a Lassallean quotation of the first water : " relative to which " ( the working class ) " all other classes are only one reactionary mass . " In the Communist Manifesto it is said : " Of all the classes that stand face-to-face with the bourgeoisie today , the proletariat alone is a really revolutionary class . The other classes decay and finally disappear in the face of modern industry ; the proletariat is its special and essential product . " The bourgeoisie is here conceived as a revolutionary class -- as the bearer of large-scale industry -- relative to the feudal lords and the lower middle class , who desire to maintain all social positions that are the creation of obsolete modes of production . thus , they do not form together with the bourgeoisie " only one reactionary mass " . On the other hand , the proletariat is revolutionary relative to the bourgeoisie because , having itself grown up on the basis of large-scale industry , it strives to strip off from production the capitalist character that the bourgeoisie seeks to perpetuate . But the Manifesto adds that the " lower middle class " is becoming revolutionary " in view of [ its ] impending transfer to the proletariat " . From this point of view , therefore , it is again nonsense to say that it , together with the bourgeoisie , and with the feudal lords into the bargain , " form only one reactionary mass " relative to the working class . Has one proclaimed to the artisan , small manufacturers , etc. , and peasants during the last elections : Relative to us , you , together with the bourgeoisie and feudal lords , form one reactionary mass ? Lassalle knew the Communist Manifesto by heart , as his faithful followers know the gospels written by him . If , therefore , he has falsified it so grossly , this has occurred only to put a good color on his alliance with absolutist and feudal opponents against the bourgeoisie . In the above paragraph , moreover , his oracular saying is dragged in by main force without any connection with the botched quotation from the Rules of the International . Thus , it is simply an impertinence , and indeed not at all displeasing to Herr Bismarck , one of those cheap pieces of insolence in which the Marat of Berlin deals . [ Marat of Berlin a reference to Hasselmann , cheif editor of the Neuer Social-Demokrat ] 5. " The working class strives for its emancipation first of all within the framework of the present-day national states , conscious that the necessary result of its efforts , which are common to the workers of all civilized countries , will be the international brotherhood of peoples . " Lassalle , in opposition to the Communist Manifesto and to all earlier socialism , conceived the workers ' movement from the narrowest national standpoint . He is being followed in this -- and that after the work of the International ! It is altogether self-evident that , to be able to fight at all , the working class must organize itself at home as a class and that its own country is the immediate arena of its struggle -- insofar as its class struggle is national , not in substance , but , as the Communist Manifesto says , " in form " . But the " framework of the present-day national state " , for instance , the German Empire , is itself , in its turn , economically " within the framework " of the world market , politically " within the framework " of the system of states . Every businessman knows that German trade is at the same time foreign trade , and the greatness of Herr Bismarck consists , to be sure , precisely in his pursuing a kind of international policy . And to what does the German Workers ' party reduce its internationalism ? To the consciousness that the result of its efforts will be " the international brotherhood of peoples " -- a phrase borrowed from the bourgeois League of Peace and Freedom , which is intended to pass as equivalent to the international brotherhood of working classes in the joint struggle against the ruling classes and their governments . Not a word , therefore , about the international functions of the German working class ! And it is thus that it is to challenge its own bourgeoisie -- which is already linked up in brotherhood against it with the bourgeois of all other countries -- and Herr Bismarck 's international policy of conspiracy . In fact , the internationalism of the program stands even infinitely below that of the Free Trade party . The latter also asserts that the result of its efforts will be " the international brotherhood of peoples " . But it also does something to make trade international and by no means contents itself with the consciousness that all people are carrying on trade at home . The international activity of the working classes does not in any way depend on the existence of the International Working Men 's Association . This was only the first attempt to create a central organ for the activity ; an attempt which was a lasting success on account of the impulse which it gave but which was no longer realizable in its historical form after the fall of the Paris Commune . Bismarck 's Norddeutsche was absolutely right when it announced , to the satisfaction of its master , that the German Workers ' party had sworn off internationalism in the new program . II " Starting from these basic principles , the German workers ' party strives by all legal means for the free state—and—socialist society : that abolition of the wage system together with the iron law of wages -- and—exploitation in every form ; the elimination of all social and political inequality . " I shall return to the " free " state later . So , in future , the German Workers ' party has got to believe in Lassalle 's " iron law of wages " ! That this may not be lost , the nonsense is perpetrated of speaking of the " abolition of the wage system " ( it should read : system of wage labor ) , " together with the iron law of wages " . If I abolish wage labor , then naturally I abolish its laws also , whether they are of " iron " or sponge . But Lassalle 's attack on wage labor turns almost solely on this so-called law . In order , therefore , to prove that Lassalle 's sect has conquered , the " wage system " must be abolished " together with the iron law of wages " and not without it . It is well known that nothing of the " iron law of wages " is Lassalle 's except the word " iron " borrowed from Goethe 's " great , eternal iron laws " . [ 1 ] The word " iron " is a label by which the true believers recognize one another . But if I take the law with Lassalle 's stamp on it , and consequently in his sense , then I must also take it with his substantiation for it . And what is that ? As Lange already showed , shortly after Lassalle 's death , it is the Malthusian theory of population ( preached by Lange himself ) . But if this theory is correct , then again I cannot abolish the law even if I abolish wage labor a hundred times over , because the law then governs not only the system of wage labor but every social system . Basing themselves directly on this , the economists have been proving for 50 years and more that socialism cannot abolish poverty , which has its basis in nature , but can only make it general , distribute it simultaneously over the whole surface of society ! But all this is not the main thing . Quite apart from the false Lassallean formulation of the law , the truly outrageous retrogression consists in the following : Since Lassalle 's death , there has asserted itself in our party the scientific understanding that wages are not what they appear to be -- namely , the value , or price , of labor—but only a masked form for the value , or price , of labor power . Thereby , the whole bourgeois conception of wages hitherto , as well as all the criticism hitherto directed against this conception , was thrown overboard once and for all . It was made clear that the wage worker has permission to work for his own subsistence—that is , to live , only insofar as he works for a certain time gratis for the capitalist ( and hence also for the latter 's co-consumers of surplus value ) ; that the whole capitalist system of production turns on the increase of this gratis labor by extending the working day , or by developing the productivity—that is , increasing the intensity or labor power , etc. ; that , consequently , the system of wage labor is a system of slavery , and indeed of a slavery which becomes more severe in proportion as the social productive forces of labor develop , whether the worker receives better or worse payment . And after this understanding has gained more and more ground in our party , some return to Lassalle 's dogma although they must have known that Lassalle did not know what wages were , but , following in the wake of the bourgeois economists , took the appearance for the essence of the matter . It is as if , among slaves who have at last got behind the secret of slavery and broken out in rebellion , a slave still in thrall to obsolete notions were to inscribe on the program of the rebellion : Slavery must be abolished because the feeding of slaves in the system of slavery cannot exceed a certain low maximum ! Does not the mere fact that the representatives of our party were capable of perpetrating such a monstrous attack on the understanding that has spread among the mass of our party prove , by itself , with what criminal levity and with what lack of conscience they set to work in drawing up this compromise program ! Instead of the indefinite concluding phrase of the paragraph , " the elimination of all social and political inequality " , it ought to have been said that with the abolition of class distinctions all social and political inequality arising from them would disappear of itself . III -------------------------------------------------------------------------------- " The German Workers ' party , in order to pave the way to the solution of the social question , demands the establishment of producers ' co-operative societies with state aid under the democratic control of the toiling people . The producers ' co-operative societies are to be called into being for industry and agriculture on such a scale that the socialist organization of the total labor will arise from them . " After the Lassallean " iron law of wages " , the physic of the prophet . The way to it is " paved " in worthy fashion . In place of the existing class struggle appears a newspaper scribbler 's phrase : " the social question " , to the " solution " of which one " paves the way " . Instead of arising from the revolutionary process of transformation of society , the " socialist organization of the total labor " " arises " from the " state aid " that the state gives to the producers ' co-operative societies and which the state , not the workers , " calls into being " . It is worthy of Lassalle 's imagination that with state loans one can build a new society just as well as a new railway ! From the remnants of a sense of shame , " state aid " has been put -- under the democratic control of the " toiling people " . In the first place , the majority of the " toiling people " in Germany consists of peasants , not proletarians . Second , " democratic " means in German " Volksherrschaftlich " [ by the rule of the people ] . But what does " control by the rule of the people of the toiling people " mean ? And particularly in the case of a toiling people which , through these demands that it puts to the state , expresses its full consciousness that it neither rules nor is ripe for ruling ! It would be superfluous to deal here with the criticism of the recipe prescribed by Buchez in the reign of Louis Philippe , in opposition to the French socialists and accepted by the reactionary workers , of the Atelier . The chief offense does not lie in having inscribed this specific nostrum in the program , but in taking , in general , a retrograde step from the standpoint of a class movement to that of a sectarian movement . That the workers desire to establish the conditions for co-operative production on a social scale , and first of all on a national scale , in their own country , only means that they are working to revolutionize the present conditions of production , and it has nothing in common with the foundation of co-operative societies with state aid . But as far as the present co-operative societies are concerned , they are of value only insofar as they are the independent creations of the workers and not protégés either of the governments or of the bourgeois . IV -------------------------------------------------------------------------------- I come now to the democratic section . A. " The free basis of the state . " First of all , according to II , the German Workers ' party strives for " the free state " . Free state — what is this ? It is by no means the aim of the workers , who have got rid of the narrow mentality of humble subjects , to set the state free . In the German Empire , the " state " is almost as " free " as in Russia . Freedom consists in converting the state from an organ superimposed upon society into one completely subordinate to it ; and today , too , the forms of state are more free or less free to the extent that they restrict the " freedom of the state " . The German Workers ' party — at least if it adopts the program — shows that its socialist ideas are not even skin-deep ; in that , instead of treating existing society ( and this holds good for any future one ) as the basis of the existing state ( or of the future state in the case of future society ) , it treats the state rather as an independent entity that possesses its own intellectual , ethical , and libertarian bases . And what of the riotous misuse which the program makes of the words " present-day state " , " present-day society " , and of the still more riotous misconception it creates in regard to the state to which it addresses its demands ? " Present-day society " is capitalist society , which exists in all civilized countries , more or less free from medieval admixture , more or less modified by the particular historical development of each country , more or less developed . On the other hand , the " present-day state " changes with a country 's frontier . It is different in the Prusso-German Empire from what it is in Switzerland , and different in England from what it is in the United States . The " present-day state " is therefore a fiction . Nevertheless , the different states of the different civilized countries , in spite or their motley diversity of form , all have this in common : that they are based on modern bourgeois society , only one more or less capitalistically developed . They have , therefore , also certain essential characteristics in common . In this sense , it is possible to speak of the " present-day state " in contrast with the future , in which its present root , bourgeois society , will have died off . The question then arises : What transformation will the state undergo in communist society ? In other words , what social functions will remain in existence there that are analogous to present state functions ? This question can only be answered scientifically , and one does not get a flea-hop nearer to the problem by a thousand-fold combination of the word 'people ' with the word 'state ' . Between capitalist and communist society there lies the period of the revolutionary transformation of the one into the other . Corresponding to this is also a political transition period in which the state can be nothing but the revolutionary dictatorship of the proletariat . Now the program does not deal with this nor with the future state of communist society . Its political demands contain nothing beyond the old democratic litany familiar to all : universal suffrage , direct legislation , popular rights , a people 's militia , etc. They are a mere echo of the bourgeois People 's party , of the League of Peace and Freedom . They are all demands which , insofar as they are not exaggerated in fantastic presentation , have already been realized . Only the state to which they belong does not lie within the borders of the German Empire , but in Switzerland , the United States , etc. This sort of " state of the future " is a present-day state , although existing outside the " framework " of the German Empire . But one thing has been forgotten . Since the German Workers ' party expressly declares that it acts within " the present-day national state " , hence within its own state , the Prusso-German Empire — its demands would indeed be otherwise largely meaningless , since one only demands what one has not got — it should not have forgotten the chief thing , namely , that all those pretty little gewgaws rest on the recognition of the so-called sovereignty of the people and hence are appropriate only in a democratic republic . Since one has not the courage — and wisely so , for the circumstances demand caution — to demand the democratic republic , as the French workers ' programs under Louis Philippe and under Louis Napoleon did , one should not have resorted , either , to the subterfuge , neither " honest " [ 1 ] nor decent , of demanding things which have meaning only in a democratic republic from a state which is nothing but a police-guarded military despotism , embellished with parliamentary forms , alloyed with a feudal admixture , already influenced by the bourgeoisie , and bureaucratically carpentered , and then to assure this state into the bargain that one imagines one will be able to force such things upon it " by legal means " . Even vulgar democracy , which sees the millennium in the democratic republic , and has no suspicion that it is precisely in this last form of state of bourgeois society that the class struggle has to be fought out to a conclusion — even it towers mountains above this kind of democratism , which keeps within the limits of what is permitted by the police and not permitted by logic . That , in fact , by the word " state " is meant the government machine , or the state insofar as it forms a special organism separated from society through division of labor , is shown by the words " the German Workers ' party demands as the economic basis of the state : a single progressive income tax " , etc. Taxes are the economic basis of the government machinery and of nothing else . In the state of the future , existing in Switzerland , this demand has been pretty well fulfilled . Income tax presupposes various sources of income of the various social classes , and hence capitalist society . It is , therefore , nothing remarkable that the Liverpool financial reformers — bourgeois headed by Gladstone 's brother — are putting forward the same demand as the program . B. " The German Workers ' party demands as the intellectual and ethical basis of the state : " 1. Universal and equal elementary education by the state . Universal compulsory school attendance . Free instruction . " " Equal elementary education " ? What idea lies behind these words ? Is it believed that in present-day society ( and it is only with this one has to deal ) education can be equal for all classes ? Or is it demanded that the upper classes also shall be compulsorily reduced to the modicum of education — the elementary school — that alone is compatible with the economic conditions not only of the wage-workers but of the peasants as well ? " Universal compulsory school attendance . Free instruction . " The former exists even in Germany , the second in Switzerland and in the United States in the case of elementary schools . If in some states of the latter country higher education institutions are also " free " , that only means in fact defraying the cost of education of the upper classes from the general tax receipts . Incidentally , the same holds good for " free administration of justice " demanded under A , 5. The administration of criminal justice is to be had free everywhere ; that of civil justice is concerned almost exclusively with conflicts over property and hence affects almost exclusively the possessing classes . Are they to carry on their litigation at the expense of the national coffers ? This paragraph on the schools should at least have demanded technical schools ( theoretical and practical ) in combination with the elementary school . " Elementary education by the state " is altogether objectionable . Defining by a general law the expenditures on the elementary schools , the qualifications of the teaching staff , the branches of instruction , etc. , and , as is done in the United States , supervising the fulfillment of these legal specifications by state inspectors , is a very different thing from appointing the state as the educator of the people ! Government and church should rather be equally excluded from any influence on the school . Particularly , indeed , in the Prusso-German Empire ( and one should not take refuge in the rotten subterfuge that one is speaking of a " state of the future " ; we have seen how matters stand in this respect ) the state has need , on the contrary , of a very stern education by the people . But the whole program , for all its democratic clang , is tainted through and through by the Lassallean sect 's servile belief in the state , or , what is no better , by a democratic belief in miracles ; or rather it is a compromise between these two kinds of belief in miracles , both equally remote from socialism . " Freedom of science " says paragraph of the Prussian Constitution . Why , then , here ? . " Freedom of conscience " ! If one desired , at this time of the Kulturkampf to remind liberalism of its old catchwords , it surely could have been done only in the following form : Everyone should be able to attend his religious as well as his bodily needs without the police sticking their noses in . But the Workers ' party ought , at any rate in this connection , to have expressed its awareness of the fact that bourgeois " freedom of conscience " is nothing but the toleration of all possible kinds of religious freedom of conscience , and that for its part it endeavours rather to liberate the conscience from the witchery of religion . But one chooses not to transgress the " bourgeois " level . I have now come to the end , for the appendix that now follows in the program does not constitute a characteristic component part of it . Hence , I can be very brief . ------------- Appendix -------------------------------------------------------------------------------- " 2. Normal working day . " In no other country has the workers ' party limited itself to such an indefinite demand , but has always fixed the length of the working day that it considers normal under the given circumstances . " 3. Restriction of female labor and prohibition of child labor . " The standardization of the working day must include the restriction of female labor , insofar as it relates to the duration , intermissions , etc. , of the working day ; otherwise , it could only mean the exclusion of female labor from branches of industry that are especially unhealthy for the female body , or are objectionable morally for the female sex . If that is what was meant , it should have been said so . " Prohibition of child labor . " Here it was absolutely essential to state the age limit . A general prohibition of child labor is incompatible with the existence of large-scale industry and hence an empty , pious wish . Its realization -- if it were possible -- would be reactionary , since , with a strict regulation of the working time according to the different age groups and other safety measures for the protection of children , an early combination of productive labor with education is one of the most potent means for the transformation of present-day society . " 4. State supervision of factory , workshop , and domestic industry . " In consideration of the Prusso-German state , it should definitely have been demanded that the inspectors are to be removable only by a court of law ; that any worker can have them prosecuted for neglect of duty ; that they must belong to the medical profession . " 5. Regulation of prison labor . " A petty demand in a general workers ' program . In any case , it should have been clearly stated that there is no intention from fear of competition to allow ordinary criminals to be treated like beasts , and especially that there is no desire to deprive them of their sole means of betterment , productive labor . This was surely the least one might have expected from socialists . " 6. An effective liability law . " It should have been stated what is meant by an " effective " liability law . Be it noted , incidentally , that , in speaking of the normal working day , the part of factory legislation that deals with health regulations and safety measures , etc. , has been overlooked . The liability law comes into operation only when these regulations are infringed . In short , this appendix also is distinguished by slovenly editing . Dixi et salvavi animam meam . [ I have spoken and saved my soul . ] </text>
<text id="MarxMarxK_JewishQ_EN.txt">
﻿ I Bruno Bauer , The Jewish Question , Braunschweig , 1843 The German Jews desire emancipation . What kind of emancipation do they desire ? Civic , political emancipation . Bruno Bauer replies to them : No one in Germany is politically emancipated . We ourselves are not free . How are we to free you ? You Jews are egoists if you demand a special emancipation for yourselves as Jews . As Germans , you ought to work for the political emancipation of Germany , and as human beings , for the emancipation of mankind , and you should feel the particular kind of your oppression and your shame not as an exception to the rule , but on the contrary as a confirmation of the rule . Or do the Jews demand the same status as Christian subjects of the state ? In that case , they recognize that the Christian state is justified and they recognize , too , the regime of general oppression . Why should they disapprove of their special yoke if they approve of the general yoke ? Why should the German be interested in the liberation of the Jew , if the Jew is not interested in the liberation of the German ? The Christian state knows only privileges . In this state , the Jew has the privilege of being a Jew . As a Jew , he has rights which the Christians do not have . Why should he want rights which he does not have , but which the Christians enjoy ? In wanting to be emancipated from the Christian state , the Jew is demanding that the Christian state should give up its religious prejudice . Does he , the Jew , give up his religious prejudice ? Has he , then , the right to demand that someone else should renounce his religion ? By its very nature , the Christian state is incapable of emancipating the Jew ; but , adds Bauer , by his very nature the Jew cannot be emancipated . So long as the state is Christian and the Jew is Jewish , the one is as incapable of granting emancipation as the other is of receiving it . The Christian state can behave towards the Jew only in the way characteristic of the Christian state – that is , by granting privileges , by permitting the separation of the Jew from the other subjects , but making him feel the pressure of all the other separate spheres of society , and feel it all the more intensely because he is in religious opposition to the dominant religion . But the Jew , too , can behave towards the state only in a Jewish way – that is , by treating it as something alien to him , by counterposing his imaginary nationality to the real nationality , by counterposing his illusory law to the real law , by deeming himself justified in separating himself from mankind , by abstaining on principle from taking part in the historical movement , by putting his trust in a future which has nothing in common with the future of mankind in general , and by seeing himself as a member of the Jewish people , and the Jewish people as the chosen people . On what grounds , then , do you Jews want emancipation ? On account of your religion ? It is the mortal enemy of the state religion . As citizens ? In Germany , there are no citizens . As human beings ? But you are no more human beings than those to whom you appeal . Bauer has posed the question of Jewish emancipation in a new form , after giving a critical analysis of the previous formulations and solutions of the question . What , he asks , is the nature of the Jew who is to be emancipated and of the Christian state that is to emancipate him ? He replies by a critique of the Jewish religion , he analyzes the religious opposition between Judaism and Christianity , he elucidates the essence of the Christian state – and he does all this audaciously , trenchantly , wittily , and with profundity , in a style of writing that is as precise as it is pithy and vigorous . How , then , does Bauer solve the Jewish question ? What is the result ? The formulation of a question is its solution . The critique of the Jewish question is the answer to the Jewish question . The summary , therefore , is as follows : We must emancipate ourselves before we can emancipate others . The most rigid form of the opposition between the Jew and the Christian is the religious opposition . How is an opposition resolved ? By making it impossible . How is religious opposition made impossible ? By abolishing religion . As soon as Jew and Christian recognize that their respective religions are no more than different stages in the development of the human mind , different snake skins cast off by history , and that man is the snake who sloughed them , the relation of Jew and Christian is no longer religious but is only a critical , scientific , and human relation . Science , then , constitutes their unity . But , contradictions in science are resolved by science itself . The German Jew , in particular , is confronted by the general absence of political emancipation and the strongly marked Christian character of the state . In Bauer’s conception , however , the Jewish question has a universal significance , independent of specifically German conditions . It is the question of the relation of religion to the state , of the contradiction between religious constraint and political emancipation . Emancipation from religion is laid down as a condition , both to the Jew who wants to be emancipated politically , and to the state which is to effect emancipation and is itself to be emancipated . “ Very well , ” it is said , and the Jew himself says it , “ the Jew is to become emancipated not as a Jew , not because he is a Jew , not because he possesses such an excellent , universally human principle of morality ; on the contrary , the Jew will retreat behind the citizen and be a citizen , although he is a Jew and is to remain a Jew . That is to say , he is and remains a Jew , although he is a citizen and lives in universally human conditions : his Jewish and restricted nature triumphs always in the end over his human and political obligations . The prejudice remains in spite of being outstripped by general principles . But if it remains , then , on the contrary , it outstrips everything else . ” “ Only sophistically , only apparently , would the Jew be able to remain a Jew in the life of the state . Hence , if he wanted to remain a Jew , the mere appearance would become the essential and would triumph ; that is to say , his life in the state would be only a semblance or only a temporary exception to the essential and the rule . ” ( “ The Capacity of Present-Day Jews and Christians to Become Free , ” Einundzwanzig Bogen , pp . 57 ) Let us hear , on the other hand , how Bauer presents the task of the state . “ France , ” he says , “ has recently shown us ” ( Proceedings of the Chamber of Deputies , December 26 , 1840 ) “ in the connection with the Jewish question – just as it has continually done in all other political questions – the spectacle of a life which is free , but which revokes its freedom by law , hence declaring it to be an appearance , and on the other hand contradicting its free laws by its action . ” ( The Jewish Question , p. 64 ) “ In France , universal freedom is not yet the law , the Jewish question too has not yet been solved , because legal freedom – the fact that all citizens are equal – is restricted in actual life , which is still dominated and divided by religious privileges , and this lack of freedom in actual life reacts on law and compels the latter to sanction the division of the citizens , who as such are free , into oppressed and oppressors . ” ( p. 65 ) When , therefore , would the Jewish question be solved for France ? “ The Jew , for example , would have ceased to be a Jew if he did not allow himself to be prevented by his laws from fulfilling his duty to the state and his fellow citizens , that is , for example , if on the Sabbath he attended the Chamber of Deputies and took part in the official proceedings . Every religious privilege , and therefore also the monopoly of a privileged church , would have been abolished altogether , and if some or many persons , or even the overwhelming majority , still believed themselves bound to fulfil religious duties , this fulfilment ought to be left to them as a purely private matter . ” ( p. 65 ) “ There is no longer any religion when there is no longer any privileged religion . Take from religion its exclusive power and it will no longer exist . ” ( p. 66 ) “ Just as M. Martin du Nord saw the proposal to omit mention of Sunday in the law as a motion to declare that Christianity has ceased to exist , with equal reason ( and this reason is very well founded ) the declaration that the law of the Sabbath is no longer binding on the Jew would be a proclamation abolishing Judaism . ” ( p. 71 ) Bauer , therefore , demands , on the one hand , that the Jew should renounce Judaism , and that mankind in general should renounce religion , in order to achieve civic emancipation . On the other hand , he quite consistently regards the political abolition of religion as the abolition of religion as such . The state which presupposes religion is not yet a true , real state . “ Of course , the religious notion affords security to the state . But to what state ? To what kind of state ? ” ( p. 97 ) At this point , the one-sided formulation of the Jewish question becomes evident . It was by no means sufficient to investigate : Who is to emancipate ? Who is to be emancipated ? Criticism had to investigate a third point . It had to inquire : What kind of emancipation is in question ? What conditions follow from the very nature of the emancipation that is demanded ? Only the criticism of political emancipation itself would have been the conclusive criticism of the Jewish question and its real merging in the “ general question of time . ” Because Bauer does not raise the question to this level , he becomes entangled in contradictions . He puts forward conditions which are not based on the nature of political emancipation itself . He raises questions which are not part of his problem , and he solves problems which leave this question unanswered . When Bauer says of the opponents of Jewish emancipation : “ Their error was only that they assumed the Christian state to be the only true one and did not subject it to the same criticism that they applied to Judaism ” ( op . cit . , p. 3 ) , we find that his error lies in the fact that he subjects to criticism only the “ Christian state , ” not the “ state as such , ” that he does not investigate the relation of political emancipation to human emancipation and , therefore , puts forward conditions which can be explained only by uncritical confusion of political emancipation with general human emancipation . If Bauer asks the Jews : Have you , from your standpoint , the right to want political emancipation ? We ask the converse question : Does the standpoint of political emancipation give the right to demand from the Jew the abolition of Judaism and from man the abolition of religion ? The Jewish question acquires a different form depending on the state in which the Jew lives . In Germany , where there is no political state , no state as such , the Jewish question is a purely theological one . The Jew finds himself in religious opposition to the state , which recognizes Christianity as its basis . This state is a theologian ex professo . Criticism here is criticism of theology , a double-edged criticism – criticism of Christian theology and of Jewish theology . Hence , we continue to operate in the sphere of theology , however much we may operate critically within it . In France , a constitutional state , the Jewish question is a question of constitutionalism , the question of the incompleteness of political emancipation . Since the semblance of a state religion is retained here , although in a meaningless and self-contradictory formula , that of a religion of the majority , the relation of the Jew to the state retains the semblance of a religious , theological opposition . Only in the North American states – at least , in some of them – does the Jewish question lose its theological significance and become a really secular question . Only where the political state exists in its completely developed form can the relation of the Jew , and of the religious man in general , to the political state , and therefore the relation of religion to the state , show itself in its specific character , in its purity . The criticism of this relation ceases to be theological criticism as soon as the state ceases to adopt a theological attitude toward religion , as soon as it behaves towards religion as a state – i. e. , politically . Criticism , then , becomes criticism of the political state . At this point , where the question ceases to be theological , Bauer’s criticism ceases to be critical . “ In the United States there is neither a state religion nor a religion declared to be that of the majority , nor the predominance of one cult over another . The state stands aloof from all cults . ” ( Marie ou l’esclavage aux Etats-Unis , etc. , by G. de Beaumont , Paris , 1835 , p. 214 ) Indeed , there are some North American states where “ the constitution does not impose any religious belief or religious practice as a condition of political rights . ” ( op . cit . , p. 225 ) Nevertheless , “ in the United States people do not believe that a man without religion could be an honest man . ” ( op . cit . , p. 224 ) Nevertheless , North America is pre-eminently the country of religiosity , as Beaumont , Tocqueville , and the Englishman Hamilton unanimously assure us . The North American states , however , serve us only as an example . The question is : What is the relation of complete political emancipation to religion ? If we find that even in the country of complete political emancipation , religion not only exists , but displays a fresh and vigorous vitality , that is proof that the existence of religion is not in contradiction to the perfection of the state . Since , however , the existence of religion is the existence of defect , the source of this defect can only be sought in the nature of the state itself . We no longer regard religion as the cause , but only as the manifestation of secular narrowness . Therefore , we explain the religious limitations of the free citizen by their secular limitations . We do not assert that they must overcome their religious narrowness in order to get rid of their secular restrictions , we assert that they will overcome their religious narrowness once they get rid of their secular restrictions . We do not turn secular questions into theological ones . History has long enough been merged in superstition , we now merge superstition in history . The question of the relation of political emancipation to religion becomes for us the question of the relation of political emancipation to human emancipation . We criticize the religious weakness of the political state by criticizing the political state in its secular form , apart from its weaknesses as regards religion . The contradiction between the state and a particular religion , for instance Judaism , is given by us a human form as the contradiction between the state and particular secular elements ; the contradiction between the state and religion in general as the contradiction between the state and its presuppositions in general . The political emancipation of the Jew , the Christian , and , in general , of religious man , is the emancipation of the state from Judaism , from Christianity , from religion in general . In its own form , in the manner characteristic of its nature , the state as a state emancipates itself from religion by emancipating itself from the state religion – that is to say , by the state as a state not professing any religion , but , on the contrary , asserting itself as a state . The political emancipation from religion is not a religious emancipation that has been carried through to completion and is free from contradiction , because political emancipation is not a form of human emancipation which has been carried through to completion and is free from contradiction . The limits of political emancipation are evident at once from the fact that the state can free itself from a restriction without man being really free from this restriction , that the state can be a free state [ pun on word Freistaat , which also means republic ] without man being a free man . Bauer himself tacitly admits this when he lays down the following condition for political emancipation : “ Every religious privilege , and therefore also the monopoly of a privileged church , would have been abolished altogether , and if some or many persons , or even the overwhelming majority , still believed themselves bound to fulfil religious duties , this fulfilment ought to be left to them as a purely private matter . ” [ The Jewish Question , p. 65 ] It is possible , therefore , for the state to have emancipated itself from religion even if the overwhelming majority is still religious . And the overwhelming majority does not cease to be religious through being religious in private . But , the attitude of the state , and of the republic [ free state ] in particular , to religion is , after all , only the attitude to religion of the men who compose the state . It follows from this that man frees himself through the medium of the state , that he frees himself politically from a limitation when , in contradiction with himself , he raises himself above this limitation in an abstract , limited , and partial way . It follows further that , by freeing himself politically , man frees himself in a roundabout way , through an intermediary , although an essential intermediary . It follows , finally , that man , even if he proclaims himself an atheist through the medium of the state – that is , if he proclaims the state to be atheist – still remains in the grip of religion , precisely because he acknowledges himself only by a roundabout route , only through an intermediary . Religion is precisely the recognition of man in a roundabout way , through an intermediary . The state is the intermediary between man and man’s freedom . Just as Christ is the intermediary to whom man transfers the burden of all his divinity , all his religious constraint , so the state is the intermediary to whom man transfers all his non-divinity and all his human unconstraint . The political elevation of man above religion shares all the defects and all the advantages of political elevation in general . The state as a state annuls , for instance , private property , man declares by political means that private property is abolished as soon as the property qualification for the right to elect or be elected is abolished , as has occurred in many states of North America . Hamilton quite correctly interprets this fact from a political point of view as meaning : “ the masses have won a victory over the property owners and financial wealth . ” [ Thomas Hamilton , Men and Manners in America , 2 vols , Edinburgh , 1833 , p. 146 ] Is not private property abolished in idea if the non-property owner has become the legislator for the property owner ? The property qualification for the suffrage is the last political form of giving recognition to private property . Nevertheless , the political annulment of private property not only fails to abolish private property but even presupposes it . The state abolishes , in its own way , distinctions of birth , social rank , education , occupation , when it declares that birth , social rank , education , occupation , are non-political distinctions , when it proclaims , without regard to these distinction , that every member of the nation is an equal participant in national sovereignty , when it treats all elements of the real life of the nation from the standpoint of the state . Nevertheless , the state allows private property , education , occupation , to act in their way – i. e. , as private property , as education , as occupation , and to exert the influence of their special nature . Far from abolishing these real distinctions , the state only exists on the presupposition of their existence ; it feels itself to be a political state and asserts its universality only in opposition to these elements of its being . Hegel , therefore , defines the relation of the political state to religion quite correctly when he says : “ In order [ ... ] that the state should come into existence as the self-knowing , moral reality of the mind , its distraction from the form of authority and faith is essential . But this distinction emerges only insofar as the ecclesiastical aspect arrives at a separation within itself . It is only in this way that the state , above the particular churches , has achieved and brought into existence universality of thought , which is the principle of its form ” ( Hegel’s Philosophy of Right , 1st edition , p. 346 ) . Of course ! Only in this way , above the particular elements , does the state constitute itself as universality . The perfect political state is , by its nature , man’s species-life , as opposed to his material life . All the preconditions of this egoistic life continue to exist in civil society outside the sphere of the state , but as qualities of civil society . Where the political state has attained its true development , man – not only in thought , in consciousness , but in reality , in life – leads a twofold life , a heavenly and an earthly life : life in the political community , in which he considers himself a communal being , and life in civil society , in which he acts as a private individual , regards other men as a means , degrades himself into a means , and becomes the plaything of alien powers . The relation of the political state to civil society is just as spiritual as the relations of heaven to earth . The political state stands in the same opposition to civil society , and it prevails over the latter in the same way as religion prevails over the narrowness of the secular world – i. e. , by likewise having always to acknowledge it , to restore it , and allow itself to be dominated by it . In his most immediate reality , in civil society , man is a secular being . Here , where he regards himself as a real individual , and is so regarded by others , he is a fictitious phenomenon . In the state , on the other hand , where man is regarded as a species-being , he is the imaginary member of an illusory sovereignty , is deprived of his real individual life and endowed with an unreal universality . Man , as the adherent of a particular religion , finds himself in conflict with his citizenship and with other men as members of the community . This conflict reduces itself to the secular division between the political state and civil society . For man as a bourgeois [ i. e. , as a member of civil society , “ bourgeois society ” in German ] , “ life in the state ” is “ only a semblance or a temporary exception to the essential and the rule . ” Of course , the bourgeois , like the Jew , remains only sophistically in the sphere of political life , just as the citoyen [ ‘ citizen ’ in French , i. e. , the participant in political life ] only sophistically remains a Jew or a bourgeois . But , this sophistry is not personal . It is the sophistry of the political state itself . The difference between the merchant and the citizen [ Staatsbürger ] , between the day-laborer and the citizen , between the landowner and the citizen , between the merchant and the citizen , between the living individual and the citizen . The contradiction in which the religious man finds himself with the political man is the same contradiction in which the bourgeois finds himself with the citoyen , and the member of civil society with his political lion’s skin . This secular conflict , to which the Jewish question ultimately reduces itself , the relation between the political state and its preconditions , whether these are material elements , such as private property , etc. , or spiritual elements , such as culture or religion , the conflict between the general interest and private interest , the schism between the political state and civil society – these secular antitheses Bauer allows to persist , whereas he conducts a polemic against their religious expression . “ It is precisely the basis of civil society , the need that ensures the continuance of this society and guarantees its necessity , which exposes its existence to continual dangers , maintains in it an element of uncertainty , and produces that continually changing mixture of poverty and riches , of distress and prosperity , and brings about change in general . ” ( p. 8 ) Compare the whole section : “ Civil Society ” ( pp . 8-9 ) , which has been drawn up along the basic lines of Hegel’s philosophy of law . Civil society , in its opposition to the political state , is recognized as necessary , because the political state is recognized as necessary . Political emancipation is , of course , a big step forward . True , it is not the final form of human emancipation in general , but it is the final form of human emancipation within the hitherto existing world order . It goes without saying that we are speaking here of real , practical emancipation . Man emancipates himself politically from religion by banishing it from the sphere of public law to that of private law . Religion is no longer the spirit of the state , in which man behaves – although in a limited way , in a particular form , and in a particular sphere – as a species-being , in community with other men . Religion has become the spirit of civil society , of the sphere of egoism , of bellum omnium contra omnes . It is no longer the essence of community , but the essence of difference . It has become the expression of man’s separation from his community , from himself and from other men – as it was originally . It is only the abstract avowal of specific perversity , private whimsy , and arbitrariness . The endless fragmentation of religion in North America , for example , gives it even externally the form of a purely individual affair . It has been thrust among the multitude of private interests and ejected from the community as such . But one should be under no illusion about the limits of political emancipation . The division of the human being into a public man and a private man , the displacement of religion from the state into civil society , this is not a stage of political emancipation but its completion ; this emancipation , therefore , neither abolished the real religiousness of man , nor strives to do so . The decomposition of man into Jew and citizen , Protestant and citizen , religious man and citizen , is neither a deception directed against citizenhood , nor is it a circumvention of political emancipation , it is political emancipation itself , the political method of emancipating oneself from religion . Of course , in periods when the political state as such is born violently out of civil society , when political liberation is the form in which men strive to achieve their liberation , the state can and must go as far as the abolition of religion , the destruction of religion . But it can do so only in the same way that it proceeds to the abolition of private property , to the maximum , to confiscation , to progressive taxation , just as it goes as far as the abolition of life , the guillotine . At times of special self-confidence , political life seeks to suppress its prerequisite , civil society and the elements composing this society , and to constitute itself as the real species-life of man , devoid of contradictions . But , it can achieve this only by coming into violent contradiction with its own conditions of life , only by declaring the revolution to be permanent , and , therefore , the political drama necessarily ends with the re-establishment of religion , private property , and all elements of civil society , just as war ends with peace . Indeed , the perfect Christian state is not the so-called Christian state – which acknowledges Christianity as its basis , as the state religion , and , therefore , adopts an exclusive attitude towards other religions . On the contrary , the perfect Christian state is the atheistic state , the democratic state , the state which relegates religion to a place among the other elements of civil society . The state which is still theological , which still officially professes Christianity as its creed , which still does not dare to proclaim itself as a state , has , in its reality as a state , not yet succeeded in expressing the human basis – of which Christianity is the high-flown expression – in a secular , human form . The so-called Christian state is simply nothing more than a non-state , since it is not Christianity as a religion , but only the human background of the Christian religion , which can find its expression in actual human creations . The so-called Christian state is the Christian negation of the state , but by no means the political realization of Christianity . The state which still professes Christianity in the form of religion , does not yet profess it in the form appropriate to the state , for it still has a religious attitude towards religion – that is to say , it is not the true implementation of the human basis of religion , because it still relies on the unreal , imaginary form of this human core . The so-called Christian state is the imperfect state , and the Christian religion is regarded by it as the supplementation and sanctification of its imperfection . For the Christian state , therefore , religion necessarily becomes a means ; hence , it is a hypocritical state . It makes a great difference whether the complete state , because of the defect inherent in the general nature of the state , counts religion among its presuppositions , or whether the incomplete state , because of the defect inherent in its particular existence as a defective state , declares that religion is its basis . In the latter case , religion becomes imperfect politics . In the former case , the imperfection even of consummate politics becomes evident in religion . The so-called Christian state needs the Christian religion in order to complete itself as a state . The democratic state , the real state , does not need religion for its political completion . On the contrary , it can disregard religion because in it the human basis of religion is realized in a secular manner . The so-called Christian state , on the other hand , has a political attitude to religion and a religious attitude to politics . By degrading the forms of the state to mere semblance , it equally degrades religion to mere semblance . In order to make this contradiction clearer , let us consider Bauer’s projection of the Christian state , a projection based on his observation of the Christian-German state . “ Recently , ” says Bauer , “ in order to prove the impossibility or non-existence of a Christian state , reference has frequently been made to those sayings in the Gospel with which the [ present-day ] state not only does not comply , but cannot possibly comply , if it does not want to dissolve itself completely [ as a state ] . ” “ But the matter cannot be disposed of so easily . What do these Gospel sayings demand ? Supernatural renunciation of self , submission to the authority of revelation , a turning-away from the state , the abolition of secular conditions . Well , the Christian state demands and accomplishes all that . It has assimilated the spirit of the Gospel , and if it does not reproduce this spirit in the same terms as the Gospel , that occurs only because it expresses this spirit in political forms , i. e. , in forms which , it is true , are taken from the political system in this world , but which in the religious rebirth that they have to undergo become degraded to a mere semblance . This is a turning-away from the state while making use of political forms for its realization . ” ( p. 55 ) Bauer then explains that the people of a Christian state is only a non-people , no longer having a will of its own , but whose true existence lies in the leader to whom it is subjected , although this leader by his origin and nature is alien to it – i. e. , given by God and imposed on the people without any co-operation on its part . Bauer declares that the laws of such a people are not its own creation , but are actual revelations , that its supreme chief needs privileged intermediaries with the people in the strict sense , with the masses , and that the masses themselves are divided into a multitude of particular groupings which are formed and determined by chance , which are differentiated by their interests , their particular passions and prejudices , and obtain permission as a privilege , to isolate themselves from one another , etc. ( p. 56 ) However , Bauer himself says : “ Politics , if it is to be nothing but religion , ought not to be politics , just as the cleaning of saucepans , if it is to be accepted as a religious matter , ought not to be regarded as a matter of domestic economy . ” ( p. 108 ) In the Christian-German state , however , religion is an “ economic matter ” just as “ economic matters ” belong to the sphere of religion . The domination of religion in the Christian-German state is the religion of domination . The separation of the “ spirit of the Gospel ” from the “ letter of the Gospel ” is an irreligious act . A state which makes the Gospel speak in the language of politics – that is , in another language than that of the Holy Ghost – commits sacrilege , if not in human eyes , then in the eyes of its own religion . The state which acknowledges Christianity as its supreme criterion , and the Bible as its Charter , must be confronted with the words of Holy Scripture , for every word of Scripture is holy . This state , as well as the human rubbish on which it is based , is caught in a painful contradiction that is insoluble from the standpoint of religious consciousness when it is referred to those sayings of the Gospel with which it “ not only does not comply , but cannot possibly comply , if it does not want to dissolve itself completely as a state . ” And why does it not want to dissolve itself completely ? The state itself cannot give an answer either to itself or to others . In its own consciousness , the official Christian state is an imperative , the realization of which is unattainable , the state can assert the reality of its existence only by lying to itself , and therefore always remains in its own eyes an object of doubt , an unreliable , problematic object . Criticism is , therefore , fully justified in forcing the state that relies on the Bible into a mental derangement in which it no longer knows whether it is an illusion or a reality , and in which the infamy of its secular aims , for which religion serves as a cloak , comes into insoluble conflict with the sincerity of its religious consciousness , for which religion appears as the aim of the world . This state can only save itself from its inner torment if it becomes the police agent of the Catholic Church . In relation to the church , which declares the secular power to be its servant , the state is powerless , the secular power which claims to be the rule of the religious spirit is powerless . It is , indeed , estrangement which matters in the so-called Christian state , but not man . The only man who counts , the king , is a being specifically different from other men , and is , moreover , a religious being , directly linked with heaven , with God . The relationships which prevail here are still relationships dependent of faith . The religious spirit , therefore , is still not really secularized . But , furthermore , the religious spirit cannot be really secularized , for what is it in itself but the non-secular form of a stage in the development of the human mind ? The religious spirit can only be secularized insofar as the stage of development of the human mind of which it is the religious expression makes its appearance and becomes constituted in its secular form . This takes place in the democratic state . Not Christianity , but the human basis of Christianity is the basis of this state . Religion remains the ideal , non-secular consciousness of its members , because religion is the ideal form of the stage of human development achieved in this state . The members of the political state are religious owing to the dualism between individual life and species-life , between the life of civil society and political life . They are religious because men treat the political life of the state , an area beyond their real individuality , as if it were their true life . They are religious insofar as religion here is the spirit of civil society , expressing the separation and remoteness of man from man . Political democracy is Christian since in it man , not merely one man but everyman , ranks as sovereign , as the highest being , but it is man in his uncivilized , unsocial form , man in his fortuitous existence , man just as he is , man as he has been corrupted by the whole organization of our society , who has lost himself , been alienated , and handed over to the rule of inhuman conditions and elements – in short , man who is not yet a real species-being . That which is a creation of fantasy , a dream , a postulate of Christianity , i. e. , the sovereignty of man – but man as an alien being different from the real man – becomes , in democracy , tangible reality , present existence , and secular principle . In the perfect democracy , the religious and theological consciousness itself is in its own eyes the more religious and the more theological because it is apparently without political significance , without worldly aims , the concern of a disposition that shuns the world , the expression of intellectual narrow-mindedness , the product of arbitrariness and fantasy , and because it is a life that is really of the other world . Christianity attains , here , the practical expression of its universal-religious significance in that the most diverse world outlooks are grouped alongside one another in the form of Christianity and still more because it does not require other people to profess Christianity , but only religion in general , any kind of religion ( cf . Beaumont’s work quoted above ) . The religious consciousness revels in the wealth of religious contradictions and religious diversity . We have , thus , shown that political emancipation from religion leaves religion in existence , although not a privileged religion . The contradiction in which the adherent of a particular religion finds himself involved in relation to his citizenship is only one aspect of the universal secular contradiction between the political state and civil society . The consummation of the Christian state is the state which acknowledges itself as a state and disregards the religion of its members . The emancipation of the state from religion is not the emancipation of the real man from religion . Therefore , we do not say to the Jews , as Bauer does : You cannot be emancipated politically without emancipating yourselves radically from Judaism . On the contrary , we tell them : Because you can be emancipated politically without renouncing Judaism completely and incontrovertibly , political emancipation itself is not human emancipation . If you Jews want to be emancipated politically , without emancipating yourselves humanly , the half-hearted approach and contradiction is not in you alone , it is inherent in the nature and category of political emancipation . If you find yourself within the confines of this category , you share in a general confinement . Just as the state evangelizes when , although it is a state , it adopts a Christian attitude towards the Jews , so the Jew acts politically when , although a Jew , he demands civic rights . But , if a man , although a Jew , can be emancipated politically and receive civic rights , can he lay claim to the so-called rights of man and receive them ? Bauer denies it . “ The question is whether the Jew as such , that is , the Jew who himself admits that he is compelled by his true nature to live permanently in separation from other men , is capable of receiving the universal rights of man and of conceding them to others . ” “ For the Christian world , the idea of the rights of man was only discovered in the last century . It is not innate in men ; on the contrary , it is gained only in a struggle against the historical traditions in which hitherto man was brought up . Thus the rights of man are not a gift of nature , not a legacy from past history , but the reward of the struggle against the accident of birth and against the privileges which up to now have been handed down by history from generation to generation . These rights are the result of culture , and only one who has earned and deserved them can possess them . ” “ Can the Jew really take possession of them ? As long as he is a Jew , the restricted nature which makes him a Jew is bound to triumph over the human nature which should link him as a man with other men , and will separate him from non-Jews . He declares by this separation that the particular nature which makes him a Jew is his true , highest nature , before which human nature has to give way . ” “ Similarly , the Christian as a Christian cannot grant the rights of man . ” ( p. 19-20 ) According to Bauer , man has to sacrifice the “ privilege of faith ” to be able to receive the universal rights of man . Let us examine , for a moment , the so-called rights of man – to be precise , the rights of man in their authentic form , in the form which they have among those who discovered them , the North Americans and the French . These rights of man are , in part , political rights , rights which can only be exercised in community with others . Their content is participation in the community , and specifically in the political community , in the life of the state . They come within the category of political freedom , the category of civic rights , which , as we have seen , in no way presuppose the incontrovertible and positive abolition of religion – nor , therefore , of Judaism . There remains to be examined the other part of the rights of man – the droits d’homme , insofar as these differ from the droits d’citoyen . Included among them is freedom of conscience , the right to practice any religion one chooses . The privilege of faith is expressly recognized either as a right of man or as the consequence of a right of man , that of liberty . Déclaration des droits de l’droits et du citoyen , 1791 , Article 10 : “ No one is to be subjected to annoyance because of his opinions , even religious opinions . ” “ The freedom of every man to practice the religion of which he is an adherent . ” Declaration of the Rights of Man , etc. , 1793 , includes among the rights of man , Article 7 : “ The free exercise of religion . ” Indeed , in regard to man’s right to express his thoughts and opinions , to hold meetings , and to exercise his religion , it is even stated : “ The necessity of proclaiming these rights presupposes either the existence or the recent memory of despotism . ” Compare the Constitution of 1795 , Section XIV , Article 354. Constitution of Pennsylvania , Article 9 , § 3 : “ All men have received from nature the imprescriptible right to worship the Almighty according to the dictates of their conscience , and no one can be legally compelled to follow , establish , or support against his will any religion or religious ministry . No human authority can , in any circumstances , intervene in a matter of conscience or control the forces of the soul . ” Constitution of New Hampshire , Article 5 and 6 : “ Among these natural rights some are by nature inalienable since nothing can replace them . The rights of conscience are among them . ” ( Beaumont , op . cit . , pp . 213,214 ) Incompatibility between religion and the rights of man is to such a degree absent from the concept of the rights of man that , on the contrary , a man’s right to be religious , in any way he chooses , to practise his own particular religion , is expressly included among the rights of man . The privilege of faith is a universal right of man . The droits de l’homme , the rights of man , are , as such , distinct from the droits du citoyen , the rights of the citizen . Who is homme as distinct from citoyen ? None other than the member of civil society . Why is the member of civil society called “ man , ” simply man ; why are his rights called the rights of man ? How is this fact to be explained ? From the relationship between the political state and civil society , from the nature of political emancipation . Above all , we note the fact that the so-called rights of man , the droits de l’homme as distinct from the droits du citoyen , are nothing but the rights of a member of civil society – i. e. , the rights of egoistic man , of man separated from other men and from the community . Let us hear what the most radical Constitution , the Constitution of 1793 , has to say : Declaration of the Rights of Man and of the Citizen . Article 2. “ These rights , etc. , ( the natural and imprescriptible rights ) are : equality , liberty , security , property . ” What constitutes liberty ? Article 6. “ Liberty is the power which man has to do everything that does not harm the rights of others , ” or , according to the Declaration of the Rights of Man of 1791 : “ Liberty consists in being able to do everything which does not harm others . ” Liberty , therefore , is the right to do everything that harms no one else . The limits within which anyone can act without harming someone else are defined by law , just as the boundary between two fields is determined by a boundary post . It is a question of the liberty of man as an isolated monad , withdrawn into himself . Why is the Jew , according to Bauer , incapable of acquiring the rights of man ? “ As long as he is a Jew , the restricted nature which makes him a Jew is bound to triumph over the human nature which should link him as a man with other men , and will separate him from non-Jews . ” But , the right of man to liberty is based not on the association of man with man , but on the separation of man from man . It is the right of this separation , the right of the restricted individual , withdrawn into himself . The practical application of man’s right to liberty is man’s right to private property . What constitutes man’s right to private property ? Article 16. ( Constitution of 1793 ) : “ The right of property is that which every citizen has of enjoying and of disposing at his discretion of his goods and income , of the fruits of his labor and industry . ” The right of man to private property is , therefore , the right to enjoy one’s property and to dispose of it at one’s discretion ( à son gré ) , without regard to other men , independently of society , the right of self-interest . This individual liberty and its application form the basis of civil society . It makes every man see in other men not the realization of his own freedom , but the barrier to it . But , above all , it proclaims the right of man “ of enjoying and of disposing at his discretion of his goods and income , of the fruits of his labor and industry . ” There remain the other rights of man : égalité and sûreté . Equality , used here in its non-political sense , is nothing but the equality of the liberté described above – namely : each man is to the same extent regarded as such a self-sufficient monad . The Constitution of 1795 defines the concept of this equality , in accordance with this significance , as follows : Article 3 ( Constitution of 1795 ) : “ Equality consists in the law being the same for all , whether it protects or punishes . ” And security ? Article 8 ( Constitution of 1793 ) : “ Security consists in the protection afforded by society to each of its members for the preservation of his person , his rights , and his property . ” Security is the highest social concept of civil society , the concept of police , expressing the fact that the whole of society exists only in order to guarantee to each of its members the preservation of his person , his rights , and his property . It is in this sense that Hegel calls civil society “ the state of need and reason . ” The concept of security does not raise civil society above its egoism . On the contrary , security is the insurance of egoism . None of the so-called rights of man , therefore , go beyond egoistic man , beyond man as a member of civil society – that is , an individual withdrawn into himself , into the confines of his private interests and private caprice , and separated from the community . In the rights of man , he is far from being conceived as a species-being ; on the contrary , species-like itself , society , appears as a framework external to the individuals , as a restriction of their original independence . The sole bond holding them together is natural necessity , need and private interest , the preservation of their property and their egoistic selves . It is puzzling enough that a people which is just beginning to liberate itself , to tear down all the barriers between its various sections , and to establish a political community , that such a people solemnly proclaims ( Declaration of 1791 ) the rights of egoistic man separated from his fellow men and from the community , and that indeed it repeats this proclamation at a moment when only the most heroic devotion can save the nation , and is therefore imperatively called for , at a moment when the sacrifice of all the interest of civil society must be the order of the day , and egoism must be punished as a crime . ( Declaration of the Rights of Man , etc. , of 1793 ) This fact becomes still more puzzling when we see that the political emancipators go so far as to reduce citizenship , and the political community , to a mere means for maintaining these so-called rights of man , that , therefore , the citoyen is declared to be the servant of egotistic homme , that the sphere in which man acts as a communal being is degraded to a level below the sphere in which he acts as a partial being , and that , finally , it is not man as citoyen , but man as private individual [ bourgeois ] who is considered to be the essential and true man . “ The aim of all political association is the preservation of the natural and imprescriptible rights of man . ” ( Declaration of the Rights , etc. , of 1791 , Article 2 ) “ Government is instituted in order to guarantee man the enjoyment of his natural and imprescriptible rights . ” ( Declaration , etc. , of 1793 , Article 1 ) Hence , even in moments when its enthusiasm still has the freshness of youth and is intensified to an extreme degree by the force of circumstances , political life declares itself to be a mere means , whose purpose is the life of civil society . It is true that its revolutionary practice is in flagrant contradiction with its theory . Whereas , for example , security is declared one of the rights of man , violation of the privacy of correspondence is openly declared to be the order of the day . Whereas “ unlimited freedom of the press ” ( Constitution of 1793 , Article 122 ) is guaranteed as a consequence of the right of man to individual liberty , freedom of the press is totally destroyed , because “ freedom of the press should not be permitted when it endangers public liberty . ” ( “ Robespierre jeune , ” Historie parlementaire de la Révolution française by Buchez and Roux , vol.28 , p. 159 ) That is to say , therefore : The right of man to liberty ceases to be a right as soon as it comes into conflict with political life , whereas in theory political life is only the guarantee of human rights , the rights of the individual , and therefore must be abandoned as soon as it comes into contradiction with its aim , with these rights of man . But , practice is merely the exception , theory is the rule . But even if one were to regard revolutionary practice as the correct presentation of the relationship , there would still remain the puzzle of why the relationship is turned upside-down in the minds of the political emancipators and the aim appears as the means , while the means appears as the aim . This optical illusion of their consciousness would still remain a puzzle , although now a psychological , a theoretical puzzle . The puzzle is easily solved . Political emancipation is , at the same time , the dissolution of the old society on which the state alienated from the people , the sovereign power , is based . What was the character of the old society ? It can be described in one word – feudalism . The character of the old civil society was directly political – that is to say , the elements of civil life , for example , property , or the family , or the mode of labor , were raised to the level of elements of political life in the form of seigniory , estates , and corporations . In this form , they determined the relation of the individual to the state as a whole – i. e. , his political relation , that is , his relation of separation and exclusion from the other components of society . For that organization of national life did not raise property or labor to the level of social elements ; on the contrary , it completed their separation from the state as a whole and constituted them as discrete societies within society . Thus , the vital functions and conditions of life of civil society remained , nevertheless , political , although political in the feudal sense – that is to say , they secluded the individual from the state as a whole and they converted the particular relation of his corporation to the state as a whole into his general relation to the life of the nation , just as they converted his particular civil activity and situation into his general activity and situation . As a result of this organization , the unity of the state , and also the consciousness , will , and activity of this unity , the general power of the state , are likewise bound to appear as the particular affair of a ruler and of his servants , isolated from the people . The political revolution which overthrew this sovereign power and raised state affairs to become affairs of the people , which constituted the political state as a matter of general concern , that is , as a real state , necessarily smashed all estates , corporations , guilds , and privileges , since they were all manifestations of the separation of the people from the community . The political revolution thereby abolished the political character of civil society . It broke up civil society into its simple component parts ; on the one hand , the individuals ; on the other hand , the material and spiritual elements constituting the content of the life and social position of these individuals . It set free the political spirit , which had been , as it were , split up , partitioned , and dispersed in the various blind alleys of feudal society . It gathered the dispersed parts of the political spirit , freed it from its intermixture with civil life , and established it as the sphere of the community , the general concern of the nation , ideally independent of those particular elements of civil life . A person’s distinct activity and distinct situation in life were reduced to a merely individual significance . They no longer constituted the general relation of the individual to the state as a whole . Public affairs as such , on the other hand , became the general affair of each individual , and the political function became the individual’s general function . But , the completion of the idealism of the state was at the same time the completion of the materialism of civil society . Throwing off the political yoke meant at the same time throwing off the bonds which restrained the egoistic spirit of civil society . Political emancipation was , at the same time , the emancipation of civil society from politics , from having even the semblance of a universal content . Feudal society was resolved into its basic element – man , but man as he really formed its basis – egoistic man . This man , the member of civil society , is thus the basis , the precondition , of the political state . He is recognized as such by this state in the rights of man . The liberty of egoistic man and the recognition of this liberty , however , is rather the recognition of the unrestrained movement of the spiritual and material elements which form the content of his life . Hence , man was not freed from religion , he received religious freedom . He was not freed from property , he received freedom to own property . He was not freed from the egoism of business , he received freedom to engage in business . The establishment of the political state and the dissolution of civil society into independent individuals – whose relation with one another on law , just as the relations of men in the system of estates and guilds depended on privilege – is accomplished by one and the same act . Man as a member of civil society , unpolitical man , inevitably appears , however , as the natural man . The “ rights of man ” appears as “ natural rights , ” because conscious activity is concentrated on the political act . Egoistic man is the passive result of the dissolved society , a result that is simply found in existence , an object of immediate certainty , therefore a natural object . The political revolution resolves civil life into its component parts , without revolutionizing these components themselves or subjecting them to criticism . It regards civil society , the world of needs , labor , private interests , civil law , as the basis of its existence , as a precondition not requiring further substantiation and therefore as its natural basis . Finally , man as a member of civil society is held to be man in his sensuous , individual , immediate existence , whereas political man is only abstract , artificial man , man as an allegorical , juridical person . The real man is recognized only in the shape of the egoistic individual , the true man is recognized only in the shape of the abstract citizen . Therefore , Rousseau correctly described the abstract idea of political man as follows : “ Whoever dares undertake to establish a people’s institutions must feel himself capable of changing , as it were , human nature , of transforming each individual , who by himself is a complete and solitary whole , into a part of a larger whole , from which , in a sense , the individual receives his life and his being , of substituting a limited and mental existence for the physical and independent existence . He has to take from man his own powers , and give him in exchange alien powers which he cannot employ without the help of other men . ” All emancipation is a reduction of the human world and relationships to man himself . Political emancipation is the reduction of man , on the one hand , to a member of civil society , to an egoistic , independent individual , and , on the other hand , to a citizen , a juridical person . Only when the real , individual man re-absorbs in himself the abstract citizen , and as an individual human being has become a species-being in his everyday life , in his particular work , and in his particular situation , only when man has recognized and organized his “ own powers ” as social powers , and , consequently , no longer separates social power from himself in the shape of political power , only then will human emancipation have been accomplished . II Bruno Bauer , “ The Capacity of Present-day Jews and Christians to Become Free , ” Einundzwanzig Bogen aus der Schweiz , pp . 56-71 It is in this form that Bauer deals with the relation between the Jewish and the Christian religions , and also with their relation to criticism . Their relation to criticism is their relation “ to the capacity to become free . ” The result arrived at is : “ The Christian has to surmount only one stage , namely , that of his religion , in order to give up religion altogether , ” and therefore become free . “ The Jew , on the other hand , has to break not only with his Jewish nature , but also with the development towards perfecting his religion , a development which has remained alien to him . ” ( p. 71 ) Thus , Bauer here transforms the question of Jewish emancipation into a purely religious question . The theological problem as to whether the Jew or the Christian has the better prospect of salvation is repeated here in the enlightened form : which of them is more capable of emancipation . No longer is the question asked : Is it Judaism or Christianity that makes a man free ? On the contrary , the question is now : Which makes man freer , the negation of Judaism or the negation of Christianity ? “ If the Jews want to become free , they should profess belief not in Christianity , but in the dissolution of Christianity , in the dissolution of religion in general , that is to say , in enlightenment , criticism , and its consequences , free humanity . ” ( p. 70 ) For the Jew , it is still a matter of a profession of faith , but no longer a profession of belief in Christianity , but of belief in Christianity in dissolution . Bauer demands of the Jews that they should break with the essence of the Christian religion , a demand which , as he says himself , does not arise out of the development of Judaism . Since Bauer , at the end of his work on the Jewish question , had conceived Judaism only as crude religious criticism of Christianity , and therefore saw in it “ merely ” a religious significance , it could be foreseen that the emancipation of the Jews , too , would be transformed into a philosophical-theological act . Bauer considers that the ideal , abstract nature of the Jew , his religion , is his entire nature . Hence , he rightly concludes : “ The Jew contributes nothing to mankind if he himself disregards his narrow law , ” if he invalidates his entire Judaism . ( p. 65 ) Accordingly , the relation between Jews and Christians becomes the following : the sole interest of the Christian in the emancipation of the Jew is a general human interest , a theoretical interest . Judaism is a fact that offends the religious eye of the Christian . As soon as his eye ceases to be religious , this fact ceases to be offensive . The emancipation of the Jew is , in itself , not a task for the Christian . The Jew , on the other hand , in order to emancipate himself , has to carry out not only his own work , but also that of the Christian – i. e. , the Critique of the Evangelical History of the Synoptics and the Life of Jesus , etc. “ It is up to them to deal with it : they themselves will decide their fate ; but history is not to be trifled with . ” ( p. 71 ) We are trying to break with the theological formulation of the question . For us , the question of the Jew’s capacity for emancipation becomes the question : What particular social element has to be overcome in order to abolish Judaism ? For the present-day Jew’s capacity for emancipation is the relation of Judaism to the emancipation of the modern world . This relation necessarily results from the special position of Judaism in the contemporary enslaved world . Let us consider the actual , worldly Jew – not the Sabbath Jew , as Bauer does , but the everyday Jew . Let us not look for the secret of the Jew in his religion , but let us look for the secret of his religion in the real Jew . What is the secular basis of Judaism ? Practical need , self-interest . What is the worldly religion of the Jew ? Huckstering . What is his worldly God ? Money . Very well then ! Emancipation from huckstering and money , consequently from practical , real Judaism , would be the self-emancipation of our time . An organization of society which would abolish the preconditions for huckstering , and therefore the possibility of huckstering , would make the Jew impossible . His religious consciousness would be dissipated like a thin haze in the real , vital air of society . On the other hand , if the Jew recognizes that this practical nature of his is futile and works to abolish it , he extricates himself from his previous development and works for human emancipation as such and turns against the supreme practical expression of human self-estrangement . We recognize in Judaism , therefore , a general anti-social element of the present time , an element which through historical development – to which in this harmful respect the Jews have zealously contributed – has been brought to its present high level , at which it must necessarily begin to disintegrate . In the final analysis , the emancipation of the Jews is the emancipation of mankind from Judaism . The Jew has already emancipated himself in a Jewish way . “ The Jew , who in Vienna , for example , is only tolerated , determines the fate of the whole Empire by his financial power . The Jew , who may have no rights in the smallest German state , decides the fate of Europe . While corporations and guilds refuse to admit Jews , or have not yet adopted a favorable attitude towards them , the audacity of industry mocks at the obstinacy of the material institutions . ” ( Bruno Bauer , The Jewish Question , p. 114 ) This is no isolated fact . The Jew has emancipated himself in a Jewish manner , not only because he has acquired financial power , but also because , through him and also apart from him , money has become a world power and the practical Jewish spirit has become the practical spirit of the Christian nations . The Jews have emancipated themselves insofar as the Christians have become Jews . Captain Hamilton , for example , reports : “ The devout and politically free inhabitant of New England is a kind of Laocoön who makes not the least effort to escape from the serpents which are crushing him . Mammon is his idol which he adores not only with his lips but with the whole force of his body and mind . In his view the world is no more than a Stock Exchange , and he is convinced that he has no other destiny here below than to become richer than his neighbor . Trade has seized upon all his thoughts , and he has no other recreation than to exchange objects . When he travels he carries , so to speak , his goods and his counter on his back and talks only of interest and profit . If he loses sight of his own business for an instant it is only in order to pry into the business of his competitors . ” Indeed , in North America , the practical domination of Judaism over the Christian world has achieved as its unambiguous and normal expression that the preaching of the Gospel itself and the Christian ministry have become articles of trade , and the bankrupt trader deals in the Gospel just as the Gospel preacher who has become rich goes in for business deals . “ The man who you see at the head of a respectable congregation began as a trader ; his business having failed , he became a minister . The other began as a priest but as soon as he had some money at his disposal he left the pulpit to become a trader . In the eyes of very many people , the religious ministry is a veritable business career . ” ( Beaumont , op . cit . , pp . 185,186 ) According to Bauer , it is “ a fictitious state of affairs when in theory the Jew is deprived of political rights , whereas in practice he has immense power and exerts his political influence en gros , although it is curtailed en détail . ” ( Die Judenfrage , p. 114 ) The contradiction that exists between the practical political power of the Jew and his political rights is the contradiction between politics and the power of money in general . Although theoretically the former is superior to the latter , in actual fact politics has become the serf of financial power . Judaism has held its own alongside Christianity , not only as religious criticism of Christianity , not only as the embodiment of doubt in the religious derivation of Christianity , but equally because the practical Jewish spirit , Judaism , has maintained itself and even attained its highest development in Christian society . The Jew , who exists as a distinct member of civil society , is only a particular manifestation of the Judaism of civil society . Judaism continues to exist not in spite of history , but owing to history . The Jew is perpetually created by civil society from its own entrails . What , in itself , was the basis of the Jewish religion ? Practical need , egoism . The monotheism of the Jew , therefore , is in reality the polytheism of the many needs , a polytheism which makes even the lavatory an object of divine law . Practical need , egoism , is the principle of civil society , and as such appears in pure form as soon as civil society has fully given birth to the political state . The god of practical need and self-interest is money . Money is the jealous god of Israel , in face of which no other god may exist . Money degrades all the gods of man – and turns them into commodities . Money is the universal self-established value of all things . It has , therefore , robbed the whole world – both the world of men and nature – of its specific value . Money is the estranged essence of man’s work and man’s existence , and this alien essence dominates him , and he worships it . The god of the Jews has become secularized and has become the god of the world . The bill of exchange is the real god of the Jew . His god is only an illusory bill of exchange . The view of nature attained under the domination of private property and money is a real contempt for , and practical debasement of , nature ; in the Jewish religion , nature exists , it is true , but it exists only in imagination . It is in this sense that [ in a 1524 pamphlet ] Thomas Münzer declares it intolerable “ that all creatures have been turned into property , the fishes in the water , the birds in the air , the plants on the earth ; the creatures , too , must become free . ” Contempt for theory , art , history , and for man as an end in himself , which is contained in an abstract form in the Jewish religion , is the real , conscious standpoint , the virtue of the man of money . The species-relation itself , the relation between man and woman , etc. , becomes an object of trade ! The woman is bought and sold . The chimerical nationality of the Jew is the nationality of the merchant , of the man of money in general . The groundless law of the Jew is only a religious caricature of groundless morality and right in general , of the purely formal rites with which the world of self-interest surrounds itself . Here , too , man’s supreme relation is the legal one , his relation to laws that are valid for him not because they are laws of his own will and nature , but because they are the dominant laws and because departure from them is avenged . Jewish Jesuitism , the same practical Jesuitism which Bauer discovers in the Talmud , is the relation of the world of self-interest to the laws governing that world , the chief art of which consists in the cunning circumvention of these laws . Indeed , the movement of this world within its framework of laws is bound to be a continual suspension of law . Judaism could not develop further as a religion , could not develop further theoretically , because the world outlook of practical need is essentially limited and is completed in a few strokes . By its very nature , the religion of practical need could find its consummation not in theory , but only in practice , precisely because its truth is practice . Judaism could not create a new world ; it could only draw the new creations and conditions of the world into the sphere of its activity , because practical need , the rationale of which is self-interest , is passive and does not expand at will , but finds itself enlarged as a result of the continuous development of social conditions . Judaism reaches its highest point with the perfection of civil society , but it is only in the Christian world that civil society attains perfection . Only under the dominance of Christianity , which makes all national , natural , moral , and theoretical conditions extrinsic to man , could civil society separate itself completely from the life of the state , sever all the species-ties of man , put egoism and selfish need in the place of these species-ties , and dissolve the human world into a world of atomistic individuals who are inimically opposed to one another . Christianity sprang from Judaism . It has merged again in Judaism . From the outset , the Christian was the theorizing Jew , the Jew is , therefore , the practical Christian , and the practical Christian has become a Jew again . Christianity had only in semblance overcome real Judaism . It was too noble-minded , too spiritualistic to eliminate the crudity of practical need in any other way than by elevation to the skies . Christianity is the sublime thought of Judaism , Judaism is the common practical application of Christianity , but this application could only become general after Christianity as a developed religion had completed theoretically the estrangement of man from himself and from nature . Only then could Judaism achieve universal dominance and make alienated man and alienated nature into alienable , vendible objects subjected to the slavery of egoistic need and to trading . Selling [ Veräußerung ] is the practical aspect of alienation [ Entäußerung ] . Just as man , as long as he is in the grip of religion , is able to objectify his essential nature only by turning it into something alien , something fantastic , so under the domination of egoistic need he can be active practically , and produce objects in practice , only by putting his products , and his activity , under the domination of an alien being , and bestowing the significance of an alien entity – money – on them . In its perfected practice , Christian egoism of heavenly bliss is necessarily transformed into the corporal egoism of the Jew , heavenly need is turned into world need , subjectivism into self-interest . We explain the tenacity of the Jew not by his religion , but , on the contrary , by the human basis of his religion – practical need , egoism . Since in civil society the real nature of the Jew has been universally realized and secularized , civil society could not convince the Jew of the unreality of his religious nature , which is indeed only the ideal aspect of practical need . Consequently , not only in the Pentateuch and the Talmud , but in present-day society we find the nature of the modern Jew , and not as an abstract nature but as one that is in the highest degree empirical , not merely as a narrowness of the Jew , but as the Jewish narrowness of society . Once society has succeeded in abolishing the empirical essence of Judaism – huckstering and its preconditions – the Jew will have become impossible , because his consciousness no longer has an object , because the subjective basis of Judaism , practical need , has been humanized , and because the conflict between man’s individual-sensuous existence and his species-existence has been abolished . The social emancipation of the Jew is the emancipation of society from Judaism . </text>
<text id="NewsEnnajiM_Maghreb_EN.txt">
The Maghreb’s Modern Islamists Moha Ennaji 2012-02-16 FEZ – Just over a year ago , the Arab Spring sparked dramatic change throughout the Arab world . Popular movements have brought a range of avowedly Islamist political parties to power , replacing the largely secular former regimes . What that will mean for these countries , and for the region , is one of today’s central geopolitical questions . In North Africa , two Islamist parties have come fully to power via democratic elections : al-Nahda ( Renaissance ) in Tunisia , where the Arab Spring began , and the Justice and Development Party ( PJD ) in Morocco , both of which now lead new coalition governments . Whereas a popular revolution produced regime change in Tunisia , Morocco underwent a peaceful transformation that left the monarchy in place . Last July , Moroccans voted overwhelmingly to approve a new constitution that shifts executive power from the king to the prime minister , who will now be fully responsible for the cabinet , the civil service , and the implementation of government policies . The king retains some prerogatives , such as the authority to select the prime minister ( from the parliament’s majority party ) and the head of the army . Furthermore , like heads of state in other parliamentary systems , he has the right to appoint the government ministers and ambassadors , dissolve the parliament , and dismiss the cabinet . While the PJD’s success was based on institution-building within a constitutional monarchy , al-Nahda has revolutionized the Tunisian system . But both parties won after running on a moderate platform of constitutionalism , separation of powers , civil liberties , and women’s rights . This new political reality in the Maghreb will bring Europe – particularly France , the region’s old colonial master – face-to-face with Islamist governments determined to promote a new type of relationship . But these governments have much work to do at home first . Currently , the Maghreb countries suffer from soaring unemployment , poverty , and high prices for basic commodities . In response , both al-Nahda and the PJD are emphasizing job creation , free trade , foreign investment , and a crackdown on the corruption that has plagued their countries ’ economies . These governments ’ first major test of economic stewardship will be how they treat the tourism industry . Although Western tourism is a critically important source of employment and foreign currency in both countries , some Muslims have criticized the industry for promoting alcohol and other relaxed social conventions that threaten Islamic values . So far , both al-Nahda and the PJD have taken a pragmatic stance . They recognize that , while their supporters may be devout Muslims , they also need to earn a living ; empty hotels and beaches would be economically disastrous . Thus , tourism professionals in both countries have received strong government assurances that business will continue as usual . Some European analysts predict that , over the longer term , greater stability will follow the political changes in the Maghreb , with perhaps more than a million unemployed Moroccan and Tunisian immigrants returning home if their countries ’ economies improve . That remains very much an open question . Islamist parties will now have enormous influence on economic policy , after decades of official separation of mosque and state . Islamic banking , for example , may soon be introduced , though some local and foreign investors argue that sharia regulations could drive away much-needed foreign investment . There are also concerns about inexperienced Islamist officials ’ ability to run finance ministries . But the region’s Islamist parties appear to be conscious of these risks , and determined to mitigate them . They know that they need economic growth to curb unemployment and pay for social services , so they are working to bolster the private sector . In many cases , they are even advocating the kind of free-market policies that their secular predecessors favored . Those policies should include trade liberalization . Until now , less than 2 % of the Maghreb countries ’ foreign trade has remained within the region . If the region’s new leaders can integrate their economies , a market of more than 75 million consumers would attract more foreign investment and trade with the rest of the world . Before an economically unified Maghreb can be realized , however , inter-state conflicts such as the Algerian-Moroccan dispute over the “ Western ” Sahara must be resolved . Otherwise , it will be difficult even to conceive a common future – without which the economic grievances that fueled the Maghreb’s revolutions are likely to continue . Much like the Muslim Brotherhood in Egypt , al-Nahda and the PJD will have to marginalize Islamic extremists in their movements , such as the Salafis , and adopt a pragmatic approach . To succeed economically , they will need Western support – and the West will not be eager to fund radical Islamist governments . As they negotiate the realities of modern economic life , the Maghreb’s Islamist ruling parties are likely to lose some supporters . But , unless they are willing to break with the past , they will not succeed in the present . </text>
<text id="NewsGoalcom_MessiTop50_EN.txt">
Welcome to the Goal . com 50 ! In this special series , Goal . com editors worldwide vote for the top 50 players of 2010-11 . We count down to the announcement of the winner on August 22 with profiles of each and every player who made it into the top 50 ... Do n't Miss Goal . com 50 : Xavi ( 3 ) Goal . com 50 : Andres Iniesta ( 4 ) Goal . com 50 : Radamel Falcao ( 5 ) Goal . com 50 : Nemanja Vidic ( 6 ) On Wednesday night , Lionel Messi produced one of the finest individual performances seen on a football field in recent memory . Two fantastic goals and one quite wonderful assist swung a captivating Clasico against Real Madrid in Barcelona’s favour . And yet , after the game , nobody was talking about the Argentine forward . There were other talking points , of course . There was Marcelo’s foul on Cesc Fabregas , Jose Mourinho poking Barca assistant coach Tito Vilanova in the eye , David Villa’s slap on Mesut Ozil and a whole host of other ill-tempered incidents , not to mention an epic encounter between two superb sides . Nevertheless , Messi’s masterclass had been the difference between a magnificent Madrid and a Barca team struggling to keep the pace with their biggest rivals . Having netted a vital goal in the first leg at the Santiago Bernabeu , Leo won the return almost single-handedly . It was a performance worthy of acclaim and accolades aplenty , of extreme eulogy . Quite simply , though , there is now little left to say about Messi’s magic and marvel . As Pep Guardiola has oft opined : “ We are running out of words to describe Leo . ” Indeed , decisive displays have become the norm when it comes to this exceptional young man ; peerless performances are not only hoped for by Barcelona players and their fans , but expected . " There are no words to describe Messi . You have to see it - it is something you cannot describe because you have to see it to believe it . " - Barcelona boss Pep Guardiola The Camp Nou crowds have become accustomed to special stars . Diego Maradona , Johan Cruyff , Ronaldo , Rivaldo and Romario have all graced the turf at Barca 's famous old stadium . But none have done so quite as brilliantly – or consistently – as Messi . The new season has barely begun and Leo already has three goals in two games , having only just returned from his holidays – and a disappointing Copa America campaign with Argentina – ahead of the Supercopa’s first leg in Madrid . Last term , he hit 53 in just 55 games , racking up an incredible 24 assists along the way . MOMENT OF THE SEASON CHAMPIONS LEAGUE SEMI-FINAL L1 REAL MADRID 0-2 BARCELONA Just as he did in last week 's Spanish Supercopa , Messi proved the difference between Barca and Madrid as he decided this tie with a brilliant brace at the Bernabeu , including a stunning second which saw him beat no less than four Real players on a trademark slalom run towards goal and angled finish past Iker Casillas . Messi missed out as Barca began the 2010-11 campaign with a 3-1 defeat in the first leg of the Supercopa in Seville , having been away on international duty earlier in the week . Back for the Camp Nou clash , however , the Argentine blew away the Andalusians with a brilliant hat-trick to ensure Barca started the season as they have become accostumed of late – by winning trophies . Leo then took just three minutes to make his mark in La Liga , netting his side’s first of the campaign in a 3-0 win at Racing Santander . Be it Supercopa , Liga , Copa del Rey or Champions League , Messi made his mark . A brilliant brace against Panathinaikos was accompanied by two assists and the Argentine came within a whisker of his hat-trick , rattling the woodwork on two occasions . A treble did come in a 5-0 thrashing of Betis in the Copa del Rey , though , while another arrived in the historic 8-0 humiliation of Almeria . Those were part of the forward’s most prolific scoring run as he netted in nine consecutive games . He was unable to make it a perfect 10 in his side’s next fixture , but will hardly have cared as the Catalans trounced Real Madrid 5-0 . In that match , Messi demonstrated to the watching world just how much of a complete player he has become . There were no goals , nor mazy runs , but two glorious assists for Villa and a breathtaking display of pressure and passing to inflict upon Mourinho his worst ever result as coach . The goals continued to fly in after that , with two more at Osasuna and another brace against Real Sociedad , capping a sensational 2010 as he beat off team-mates Andres Iniesta and Xavi to the Fifa Ballon d’Or . But he would be even more decisive in 2011. When Barca were in need of inspiration , there was Messi to provide it . Two goals , including a sensational strike to open the scoring , saw the Catalan club overcome a 2-1 first-leg deficit in the last 16 of the Champions League against Arsenal , while a hat-trick against Atletico Madrid saw the Catalans achieve a 16th successive victory , breaking a record held by Alfredo Di Stefano’s brilliant Real side of the 1960s . He also bagged the only goal of the game in a vital league win at Valencia and surpassed his previous mark of 47 goals – which he had tied with Ronaldo the season before – with another strike in the Champions League quarter-final against Shakhtar Donetsk . The best , however , was yet to come . After the disappointment of losing the final of the Copa del Rey to Madrid , Messi soon erased the pain with both goals – including a stunning second – as Guardiola’s side erased memories of that defeat with a 2-0 win at the Santiago Bernabeu , which sealed their passage - following a 1-1 draw at Camp Nou in the second leg - to the European showpiece against Manchester United at Wembley . " While Ronaldo remains selfish at times , Leo 's decision-making is impeccable ; he knows when to shoot , when to pass and even when to return , conserving his energies for quick , intuitive bursts and sprints . The results are often devastasting . " For the second time in three years , Barca and United squared up in the final . And Messi , who had converted with a superb header in a 2-0 win in 2009 , beat Edwin Van der Sar this time with a thunderous left-footed drive which gave the Dutch keeper no time to react on its way in from outside the box . It turned out to be the game-winning goal and was a fitting end to a fairytale season for Barca 's talisman . His 53 strikes saw him tied with Cristiano Ronaldo at the end of the campaign , but while both players were lauded for their sensational scoring form , Messi’s were more often decisive . The Argentine’s assist total also shows he provided more than the Portuguese . While Ronaldo remains selfish at times , Leo’s decision-making is impeccable ; he knows when to shoot , when to pass and even when to run , conserving his energies for quick , intuitive bursts and sprints . The results are often devastating : Lionel Andres Messi is the best player in the world’s best team , still the finest footballer on the planet and our overwhelming choice as Goal . com’s prime performer from the last 12 months . With few adjectives left to describe his talents , perhaps the title of the Tina Turner track that blasts out of the tannoys before Barca’s matches at Camp Nou is all that is required . Goal . com 50’s worthy winner , Lionel Messi : Simply The Best . </text>
<text id="NewsGueyeA_BlackPete_EN.txt">
The Netherlands : A Holiday Season of Festivities , Costumes … and Racism ? In the winter season in The Netherlands a character named Zwarte Piet ( Black Pete ) accompanies Sinterklaas ( Saint Nicholas , the original inspiration for Santa Claus ) for a yearly feast that is celebrated on the evening of December 5 or morning of December 6 with sweets and presents for all good children . This traditional holiday rivals Christmas in importance . In recent years the role of Zwarte Piet has become part of a recurring debate in The Netherlands as some citizens take offense at holiday costumes with black painted faces . The story goes that the companions of Saint Nicholas are Moors who help carry the presents brought to children when he arrives by boat from Spain . The tradition continues to be popular , though some have been moved to protest against what they see as racist imagery . On November 12 , 2011 a protester wearing a t-shirt that said ‘ Zwarte Piet is racisme ’ ( Black Pete is racism ) was arrested in Dordrecht amidst accusations of police brutality . The t-shirt campaign has its own Tumblr blog with photos and a Facebook page with more than 800 followers . The blogger at Stuff Dutch People Like wrote in 2010 about the tradition of Zwarte Piet : You know it’s that time of the year again in Holland , when you are greeted by some Dutch person on the street , whose face is painted completely black and is sporting an afro wig , bright red lips and a ridiculous clown-like costume . Sinterklaas and Zwarte Piet , The Hague , The Netherlands , November 2008 , by Zemistor ( CC-BY-ND ) Dutch graffiti artist and blogger BNE posts some photos of Zwarte Piet , and asks : Is The Dutch Holiday Of Sinterklaas’s Tradition Of “ Black Pete ” Racist ? : This “ tradition ” has evolved throughout the years , partially due to increasing protests from groups that find these depictions offensive . Nowadays , it is claimed that the Black face is due to the fact that the helpers have gone through chimneys and as a result , their faces are covered in soot . What again , nobody can clearly explain , is what kind of soot leaves such a uniform and evenly spread residue . Or worse , why these “ chimney dwellers ” speak in a fake accent that parodies the Black population of the Dutch former colony of Suriname . Anthropologist and blogger Martijn de Koning of CLOSER explains in Jolly Black Servant – Tradition and Racism in the Netherlands : I dont expect a change in this tradition very soon . It should be clear however that Black Pete is a construction , and invention that has already changed in history . The current tradition has lost many of negative connotations which is partly positive but the negative side is that this makes the racism more hidden . Nevertheless , I think this Dutch tradition lends itself perfectly for teaching young children about racism , colonialism and religion throughout history . Maybe that would be a starting point for some change in the future ? On travel website Off Track Planet , Anna Starostinetskaya gives this answer to the question , What the F*ck is Zwarte Piet ? : So is Pete a children’s tale or a racist figure ? We promise no definitive answer exists . We’re not saying this tradition is not objectifying black people in a racist way and it is understandable that Americans have the strongest feelings on the topic because Zwarte Piet is visually too close to what our racist roots look like . But Americans must also realize that our own history drives us to apply what we know about our own racist past on traditions that may not have anything in common but black face paint . Although it may be racist in some way , we cannot just superimpose our own racist history atop another country’s tradition and say it’s the same . Either way , we hope a happy medium exists that doesn’t involve smurfs , midgets or complete Americanization of world traditions . Sinterklaas arrives by boat in Arnhem , November 2011 , by Bas Boerman ( CC-BY-NC ) On the blog Tiger Beatdown , beneath Flavia’s post “ If you protest racism during Black Face season in The Netherlands , you will be beaten up and arrested ” a comment by Elfe echoes the above : I read your post because I needed to understand why I do not find this tradition racist …The “ slaves ” or “ helpers ” are you refer to them are not ridicule : these are pages not clowns and they are wearing nice clothes , they are not parading around half naked with a bone across their nostrils like some savages ( or like Josephine Baker and her banana skirt ) . … Like “ Tintin in the Congo ” the Zwarte Piets are a reminder of the past . … I know it is very insulting for Blacks in America to see White people with their face painted in black ( but it took me to live in the US to understand why : a period when black were not even allowed to play their own role in theater ) . …Like the rappers who have decided to own the N word we can just ignore this tradition if it annoys us , personally I could not care less . Being African I don’t see the Zwarte Piets as Blacks ( they don’t look like me or like any African I know ) … To feel insulted by them you really need to have a really poor self-esteem . Sorry for being politically incorrect … Written by Anna Gueye </text>
<text id="NewsLeM_OrbanGoldmanSachs_EN.txt">
Hungary : “ We Voted For Orbán , Not For Goldman Sachs ” Last Saturday , after several protests organized by citizen movements and opposition forces against the politics of the ruling Fidesz-KDNP government , Hungarians supporting those in power decided to express their opinion at a rally called Peace March . According to the Hungarian Interior Ministry 's report [ hu ] , some 400,000 people expressed their support for the government at the peaceful - and cheerful - event . ‘ We are the Hungarian people and we stand for Orbán 's government ! ' . Photo by Redjade , used with permission . Those who thought Fidesz-KDNP had lost the trust of the Hungarian citizens , drawing the consequence from the extensive foreign media coverage of the opposition protests in Budapest , were challenged this time by the fact that the government elected in 2010 with a two-thirds majority still enjoyed the support of many . Fidelitas , a youth group derived from Fidesz , shared some 360-degree panoramic photos of the march . The protesters marched from Heroes ' Square to Kossuth Square by the Parliament , where brief speeches were delivered . The main organizers of the event were Zsolt Bayer , author of opinion pieces at the conservative daily Magyar Hírlap , Gábor Széles , a wealthy Hungarian entrepreneur and owner of Magyar Hírlap , and András Bencsik , editor-in-chief of Magyar Demokrata [ hu ] , also a Hungarian conservative daily . The right-leaning blog Mandiner has been very critical of the government recently , and , at first , their blogger , Dobray , who visited the Peace March , also had some doubts regarding the event [ hu ] : [ … ] Compared to what I had anticipated , the march came off even better : the mass of 400,000 ( probably fewer than that , the protest maths [ competition of whose protest had more attendees ] was started by Bencsik at Kossuth Square when he said , referring to a television report , that they were 1 million , which was evidently an unreal figure ) walked the distance , and , as no other options were listed on the program , no lame events happened . The puritan minimalism goes hand in hand with a portion of boredom well known from the first , eventless left-wing rallies . But it 's hard to pick at that . And that there were some groups with Arpad 's striped flags [ a symbol of the far right ] was not a big deal , we are used to that , they do n't do any trouble . We will worry about some Arpad stripes protesters in a mass of a couple of hundred thousands if the left wing expels from their community the comrades parading in the USSR and Che t-shirts . [ … ] The fact that describes the complex situation in Hungary best is that the government 's supporters oppose the talks and future agreements on the bailout from the EU and the IMF , while the opposition is in favor of reaching the agreements as soon as possible , in order to strengthen Hungary 's volatile economy . Pro-government protesters criticized EU/ECB/IMF for pressure on the government to take more bailout loans . Photo by Redjade , used with permission . Many protesters arrived from outside the capital . The blog of the city of Ócsa wrote [ hu ] about why they considered it important to participate in the march : People set off from almost every settlement of the country to express their solidarity with the government elected with the two-thirds majority , with its leader Viktor Orbán and with everyone who has been attacked in the past days. The marchers stand up for the sovereignity of Hungary and stick to the achievements of democracy , they ca n't stand that foreign politicians , businessmen , banks are willing to administer their lives . [ … ] Véleményvezér pointed out [ hu ] that most of the protesters were elderly : [ … ] it was very striking that most of the marchers were aged 50 or older . They are the ones whose private pension savings were not taken away , almost none of them has a foreign currency loan , and the government specifically tried to support them , through measures like the one-time 8-percent pension makeup or by implementing the institution of securing employment for older persons . [ … ] 'We voted for Orbán and not for Goldman Sachs ' . Photo by Redjade , used with permission . Dobray hints at the rumours about paid protesters and organized travel to the rally location , the accusations raised by opposition members : [ … ] So now we are even , now really each and everyone has brought politics to the street . And it 's funny that at any sort of protest the actual side opposing the protesters tries every method to discredit the other 's event ; and tries to find those whose travel has been paid for , who were paid to come and who were cheated , etc. Everyone is generous when it 's about their protest , but if it 's about the other 's , they turn petty and suspicious . The neighbour 's lawn is always wilted . I also would be happy if the Peace March did n't get listed among the ultimate arguments of Fidesz government allowing them to knock down all the opposing opinions . [ … ] Zoltán Ruzsbaczky of Mos Maiorum blog published a guest post [ hu ] on Konzervatórium blog , noting that the huge number of the pro-government supporters may signify the arrival of a new stage of democracy in Hungary , with a lot of people daring to stand up for their opinion : [ … ] Of course , this needs a government that applies this trust and successfully navigates the tempestuous sea of international politics and with its economic policy it sets Hungary on the track of growth . Besides this , one ca n't get by those masses who still oppose the politics of the government . We will learn only later what the long-term effects [ of this march ] will be , [ and whether there will be any ] . </text>
<text id="NewsMendesFrancoJ_HaitiBeyondCapital_EN.txt">
Haiti : Beyond the Capital Posted 17 January 2010 22:42 GMT Much of the coverage of the destruction in the earthquake 's aftermath has been focused in and around Haiti 's capital city , Port-au-Prince . But many other areas close to the ‘ quake 's epicentre have also been affected , as bloggers are quick to point out … Jacmel , located about twenty-five miles south of Port-au-Prince , is “ stranded and increasingly desperate ” , according to Repeating Islands ' republication of an excerpt from “ the award-winning team of reporters from the Miami Herald : Residents of Jacmel , a quaint , historic Caribbean port city that suffered widespread damage and has been cut off from Port-au-Prince to the north , complain they have been forgotten . Four days after the quake struck Jacmel with equal force , they say they are still awaiting food , water , medical supplies and relief workers . Despite the blog 's discontent “ about the nature of the coverage of the earthquake in Haiti on American television and other media ” , in another post it follows the Herald team as it reports on another area that is receiving little media attention , Carrefour : This town , which on Tuesday was the epicenter of the earthquake , is living in the epicenter of oblivion . Pwoje Espwa - Hope in Haiti , meanwhile , reports on the relief efforts taking place in Les Cayes : In contrast to the situation in PAP , the UN is guiding the relief efforts in les Cayes , and will be coordinating and providing a platform for the efforts of all the NGOs working in the area . There is no fuel left for purchase in Cayes and the UN has very little left . The UN folks are not sure when food and fuel will be delivered . All of us are nervous about this . There was a commercial flight on Tortugair this afternoon from Cap Haitian to Cayes , and they delivered a group of 8 orthopedic surgeons to work at the hospital . As the people arrive here from the destroyed capitol we will assist them in any way we can . Some need money to go on to family on the coast or inland ; some require medical attention ; all are hungry and thirsty ; almost all need clothing and shoes along with personal hygiene items . A simple thing like letting this young woman use my cell phone to call her mother and tell her she was all right and in Cayes was momentous for her and her mother . Konbit Pou Ayiti says that “ Haiti KONPAY has been playing a critical role coordinating a rapid response to the crisis in both Jacmel and Port-au-Prince…pursuing two major strategies ” : 1. Delivering immediate support to people on the ground in Jacmel and Port-au-Prince by coordinating the transport of supplies and volunteers . Carefully design volunteer interventions to avoid exacerbating the developing food and water shortages . 2. Encouraging the evacuation of Port-au-Prince and establishing the resources necessary to assist victims when they arrive in the countryside by assessing existing resources in outlying areas and sending teams and equipment to clinics . The post goes on to quote a report “ from Amber Munger on the ground in Port-au-Prince ” : These are some details of the damage in Jacmel , which is a city of 34,000 : · 1,785 homes completely destroyed · 4410 homes partially destroyed · 87 commercial businesses destroyed · 54 schools destroyed · 24 hotels destroyed · 26 churches destroyed · 5730 families displaced · Death count approaching 3,000 , nearly 10 % of the population ( Reported by Gwenn Mangine , www . mangine . org ) Mangine also posts images from the ( severely damaged ) general hospital , with a further update on Sunday 16 : …we noticed that the main pharmacy in town was open . And so we went in and bought them out of everything they had from the list — alcohol , hand sanitizer , peroxide , wound care items , meds … ( another truckload . ) Yesterday we were expecting a big shipment of supplies , but we got one box . Still – we rushed over to the hospital with it . Mostly antibiotics and trauma care supplies – both were desperately needed . The doctors were thrilled . Pye 's in Haiti discusses the “ crazy busy ” situation at the local airstrip : We had a plane full of supplies ready to come , however the San Juan airport would not let the plane leave with the medical supplies … . We are hoping that flights start today of supplies and medicine . And Darren Tyler of Conduit Mission , who has been trying to send emergency supplies to Jacmel by boat , shares an update from a member of his organisation on the ground : The port can be used , cruise ships can come in there . We need help bad here is the city . What kind of supplies are on the boat ? How fast can they get here ? We are starting to feel people get frustrated and scared … . Updates are being posted regularly on Twitter . @melindayiti noted ( 15 January ) that “ Jacmel is a mess - we have planes and boats but US coordinators wo n't give us clearance to get in ! ” And a few hours later added : “ 2 boats on the way , still no clearance to land plane w/critical medical teams ” . Meanwhile , @RescueJacmel , a new Twitter account , is attempting to ensure that international rescue efforts do not overlook the small city . Video bloggers are also chronicling their experiences , with clips from Les Cayes and Jacmel getting lots of attention on YouTube and other video sharing websites . The Cine Institute in Jacmel also posted eyewitness accounts of the earthquake . Lougou Corner is one of the blogs eager to supply information from their community : # We last communicated with Ginette last Thursday evening and she said that an exodus of people left Port-au-Prince already and came back to the provinces and rural areas . # We communicated via email with some ministries in Cayes and they reported that hospitals in Cayes are flooded with patients returning from Port and other areas affected in the provinces . We have seen firsthand in Lougou how an entire community has changed when residents have a say on the issues that affect their own lives . They have the best knowledge on what can and should be done to meet their pressing needs and bring lasting change in their community . And finally , from a U. S. -based Caribbean diaspora blogger , comes a stirring account of her friend 's quest to find his mother , most likely in a neighbourhood of Port-au-Prince : ‘ As we came up on the block , I first walked right by the house because a good portion of it was totally demolished . The fitness center across the street was also completely demolished with a really strong smell coming from in between the bricks . When I asked people if they knew my mom , they shook their heads until I mentioned her by her nickname , Tita . And they were like , “ Oh , yeah , ” with joy in their eyes . “ She 's right there in the house next door . ” ‘ I opened the door . Her back was to me . I tapped her on the shoulder . The surprise , the tears , the hug so hard to explain . It was an unbelievable moment . She squeezed me so hard , crazy with joy . She paraded me down the street . “ Meet my fourth son . He came for me , ” she said . “ He came for me . ” ‘ We can only hope for similar stories coming out of other affected areas . For more on the earthquake in Haiti , visit our Special Coverage page . </text>
<text id="NewsMillerH_FrankensteinTradition_EN.txt">
Understanding the Frankenstein Tradition Henry I. Miller 2010-11-03 PALO ALTO – “ It’s alive , it’s moving , it’s alive ... IT’S ALIVE ! ” So said Dr. Victor Frankenstein when his “ creation ” was complete . Researchers have long been fascinated with trying to create life , but mainly they have had to settle for crafting variations of living organisms via mutation or other techniques of genetic engineering . In May , researchers at the J. Craig Venter Institute , led by Venter himself , synthesized the genome of a bacterium from scratch using chemical building blocks , and inserted it into the cell of a different variety of bacteria . The new genetic information “ rebooted ” its host cell and got it to function , replicate , and take on the characteristics of the “ donor . ” In other words , a sort of synthetic organism had been created . Reactions in the scientific community ranged from “ slight novelty ” to “ looming apocalypse . ” The former is more apt : Venter’s creation is evolutionary , not revolutionary . The goal of “ synthetic biology , ” as the field is known , is to move microbiology and cell biology closer to the approach of engineering , so that standardized parts can be mixed , matched , and assembled – just as off-the-shelf chassis , engines , transmissions , and so on can be combined to build a hot-rod . Achieving this goal could offer scientists unprecedented opportunities for innovation , and better enable them to craft bespoke microorganisms and plants that produce pharmaceuticals , clean up toxic wastes , and obtain ( or “ fix ” ) nitrogen from the air ( obviating the need for chemical fertilizers ) . During the past half-century , genetic engineers , using increasingly powerful and precise tools and resources , have achieved breakthroughs that are opening up new opportunities in a broad array of fields . The Venter lab’s achievement builds on similar work that began decades ago . In 1967 , a research group from Stanford Medical School and Caltech demonstrated the infectiousness of the genome of a bacterial virus called ΦΧ174 , whose DNA had been synthesized with an enzyme using the intact viral DNA as a template , or blueprint . That feat was hailed as “ life in a test tube . ” In 2002 , a research group at the State University of New York , Stony Brook , created a functional , infectious poliovirus solely from basic , off-the-shelf chemical building blocks . Their only blueprint for engineering the genome was the known sequence of RNA ( which comprises the viral genome and is chemically very similar to DNA ) . Similar to the 1967 experiments , the infectious RNA was synthesized enzymatically . It was able to direct the synthesis of viral proteins in the absence of a natural template . Once again , scientists had , in effect , created life in a test tube . Venter’s group did much the same thing in the recently reported research , except that they used chemical synthesis instead of enzymes to make the DNA . But some of the hype that surrounded the publication of the ensuing article in the journal Nature was disproportionate . Along with the Venter paper , Nature published eight commentaries on the significance of the work . The “ real ” scientists were aware of the incremental nature of the work , and questioned whether the Venter group had created a genuine “ synthetic cell , ” while the social scientists tended to exaggerate the implications of the work . Mark Bedau , a professor of philosophy at Reed College , wrote that the technology’s “ new powers create new responsibilities . Nobody can be sure about the consequences of making new forms of life , and we must expect the unexpected and the unintended . This calls for fundamental innovations in precautionary thinking and risk analysis . ” But , with increasing sophistication , genetic engineers using old and new techniques have been creating organisms with novel or enhanced properties for decades . Regulations and standards of good practice already effectively address organisms that may be pathogenic or that threaten the natural environment . ( If anything , these standards are excessively burdensome . ) On the other hand , Swiss bioengineer Martin Fussenegger correctly observed that the Venter achievement “ is a technical advance , not a conceptual one . ” Other scientists noted that the organism is really only “ semi-synthetic , ” because the synthetic DNA ( which comprises only about 1 % of the dry weight of the cell ) was introduced into a normal , or non-synthetic , bacterium . Understanding the history of synthetic biology is important , because recognizing the correct paradigm has critical implications for how governments regulate it , which in turn affects the potential application and diffusion of the technology . Thirty-five years ago , the US National Institutes of Health adopted overly risk-averse guidelines for research using recombinant DNA , or “ genetic engineering , ” techniques . Those guidelines , based on what has proved to be an idiosyncratic and largely invalid set of assumptions , sent a powerful message that scientists and the federal government were taking seriously speculative , exaggerated risk scenarios – a message that has afflicted the technology’s development worldwide ever since . Synthetic biology offers the prospect of powerful new tools for research and development in innumerable fields . But its potential can be fulfilled only if regulatory oversight is based on science , sound risk analysis , and an appreciation of the mistakes of history . </text>
<text id="NewsRabinovichI_IranNuclear_EN.txt">
The Iranian Nuclear Threat Goes Global Itamar Rabinovich 2012-02-16 TEL AVIV – The current drive to prevent Iran from developing a nuclear arsenal reflects two important , and interrelated , changes . From Israel’s perspective , these changes are to be welcomed , though its government must remain cautious about the country’s own role . The first change is the escalation of efforts by the United States and its Western allies to abort the Iranian regime’s nuclear quest . This was instigated in part by the International Atomic Energy Agency’s finding in November 2011 that Iran is indeed developing a nuclear weapon , and that it is getting perilously close to crossing the “ red line ” – the point beyond which its progress could no longer be stopped . Moreover , the US and its allies understand that failure to take serious action might prompt Israel to launch its own unilateral military offensive . The second change is the perception that Iran’s nuclear capacity would threaten not only Israel . In a speech to the Union for Reform Judaism in December , US President Barack Obama stated that “ another threat to the security of Israel , the US , and the world is Iran’s nuclear program . ” But , by this February , Obama was saying of Iran that “ my number-one priority continues to be the security of the US , but also the security of Israel , and we continue to work in lockstep as we proceed to try to solve this … ” That choice of words was no accident ; rather , it was a sign that the US is changing tack when it comes to Iran . For more than a decade , the question “ Whose issue is it ? ” has been part of the policy debate about Iran’s nuclear ambitions . Israel’s former prime minister , Ariel Sharon , used to caution his colleagues against “ rushing to the head of the line ” on Iran . He argued that if Israel were to take the lead in sounding the alarm on Iran’s nuclear ambitions , the issue would be perceived as yet another “ Israeli problem . ” Indeed , Israel’s critics were already arguing that this was another case of the tail wagging the dog – that Israel and its American lobby were trying to push the US into serving Israel’s interests rather than its own . The most egregious examples of this view were statements made by the political scientists John Mearsheimer and Stephen Walt . In a paper published prior to the release of their much-debated book The Israel Lobby , they argued : “ … Iran’s nuclear ambitions do not pose an existential threat to the US . If Washington could live with a nuclear Soviet Union , a nuclear China , and even a nuclear North Korea , then it can live with a nuclear Iran . And that is why the [ Israel ] Lobby must keep constant pressure on US politicians to confront Tehran . ” Israel’s current prime minister , Benjamin Netanyahu , has been less worried than Sharon was about Israel’s perceived role . He is too busy being directly engaged in the attempt to eliminate the deadly threat that a nuclear-armed Iran would pose to the Jewish state . Prior to the 2009 election that brought him to power , Netanyahu campaigned on the Iranian danger , and his government made the issue its cardinal concern . Together with his defense minister , Ehud Barak , Netanyahu succeeded in persuading Obama and the rest of the world that Israel was preparing a military attack as a last resort , should the US and its allies fail to stop the Iranian program in time . That policy has been effective , but it has also drawn attention to Israel’s influence on the Iran question . Curiously , this has not been held against Israel , at least not so far , partly because Obama and other leaders now regard Iran as a more serious threat , and therefore feel the need to take appropriate action . The international community must underscore that its members are acting in the service of their national interests , and not simply for Israel’s sake . But their willingness to engage could wane , particularly if sanctions exact a high financial price or military action causes a large number of casualties . Israel would therefore be wise to remember Sharon’s cautionary words , and reinforce its pressure on the US administration with a broader diplomatic campaign . Like it or not , Israel must urge the world to remember that Iran is everyone’s problem . </text>
<text id="NewsRian_IranCutsOil_EN.txt">
Iran Cuts Oil Exports to UK , France Iran has stopped oil exports to British and French companies , the Islamic republic 's oil ministry said on Sunday . A statement the ministry 's website that Iran , OPEC 's second biggest oil producer after Saudi Arabia , would sell oil to " new customers . " Iran 's English-language television station Press TV said the move was " in line with the decision to end crude exports to six European states . " The European Union said last month it would stop importing Iranian crude from July 1 in a bid to force Iran to agree to halt its nuclear program . Western powers suspect Iran of seeking to create a nuclear bomb but Tehran insists its program is peaceful . Iranian media reported on Wednesday that Iran had cut oil exports to the Netherlands , Greece , France , Portugal , Spain and Italy in response to the EU oil embargo , but the country 's oil ministry later denied this . The 27-nation bloc currently buys about 20 percent of Iran 's oil exports . </text>
<text id="NewsRian_MedvedevDismisses_EN.txt">
Medvedev dismisses EU criticism of Duma elections Russian President Dmitry Medvedev on Thursday said a European Parliament resolution calling for new State Duma elections “ means nothing . ” “ I have nothing to say on this resolution , because these are our elections . The European Parliament has no relation to them . They can comment on anything they want . I will not comment on their decisions as they mean nothing to me , ” the Russian president said at a joint press conference with European Commission President Jose Manuel Barroso and European Council President Herman Van Rompuy . Russia’s parliamentary parties have severely criticized the European Parliament’s resolution , labeling it interference in the country’s domestic affairs , Medvedev added . They have also demanded that it stop such “ escapades . ” </text>
<text id="NewsWiki_KaradzicArrest_EN.txt">
Alleged war criminal Radovan Karadžić caught in Serbia Tuesday , July 22 , 2008 Radovan Karadžić Alleged war criminal Radovan Karadžić was caught yesterday in Serbia by Serbian security forces after almost 13 years on the run from authorities . Last night he was questioned by an inquisitor of the War Crimes Court in Belgrade . Karadžić has been accused by the International Criminal Tribunal for the former Yugoslavia of genocide , war crimes and crimes against humanity during the Bosnian War from 1992 to 1995. The Srebrenica massacre , in which about 8,000 Muslims were killed , is among the most serious of his alleged crimes . The massacre was categorised as genocide by both the International Court of Justice and the International Criminal Tribunal for the former Yugoslavia . Internationally , the arrest was unanimously welcomed . Along with former military chief Ratko Mladić , Karadžić has been one of the most sought-after war criminals of the Balkan conflict . Described by the BBC 's Kate Adie as a " smart , rather vain man " , his capture found him with a long white beard working in a clinic and practicing alternative medicine under the name Dragan Dabic . </text>
<text id="OpacStallman_FreeSoft_EN.txt">
﻿ The Free Software Definition We maintain this free software definition to show clearly what must be true about a particular software program for it to be considered free software . From time to time we revise this definition to clarify it . If you would like to review the changes we 've made , please see the History section below for more information . “ Free software ” is a matter of liberty , not price . To understand the concept , you should think of “ free ” as in “ free speech , ” not as in “ free beer . ” Free software is a matter of the users ' freedom to run , copy , distribute , study , change and improve the software . More precisely , it means that the program 's users have the four essential freedoms : • The freedom to run the program , for any purpose ( freedom 0 ) . • The freedom to study how the program works , and change it so it does your computing as you wish ( freedom 1 ) . Access to the source code is a precondition for this . • The freedom to redistribute copies so you can help your neighbor ( freedom 2 ) . • The freedom to distribute copies of your modified versions to others ( freedom 3 ) . By doing this you can give the whole community a chance to benefit from your changes . Access to the source code is a precondition for this . A program is free software if users have all of these freedoms . Thus , you should be free to redistribute copies , either with or without modifications , either gratis or charging a fee for distribution , to anyone anywhere . Being free to do these things means ( among other things ) that you do not have to ask or pay for permission to do so . You should also have the freedom to make modifications and use them privately in your own work or play , without even mentioning that they exist . If you do publish your changes , you should not be required to notify anyone in particular , or in any particular way . The freedom to run the program means the freedom for any kind of person or organization to use it on any kind of computer system , for any kind of overall job and purpose , without being required to communicate about it with the developer or any other specific entity . In this freedom , it is the user 's purpose that matters , not the developer 's purpose ; you as a user are free to run the program for your purposes , and if you distribute it to someone else , she is then free to run it for her purposes , but you are not entitled to impose your purposes on her . The freedom to redistribute copies must include binary or executable forms of the program , as well as source code , for both modified and unmodified versions . ( Distributing programs in runnable form is necessary for conveniently installable free operating systems . ) It is OK if there is no way to produce a binary or executable form for a certain program ( since some languages do n't support that feature ) , but you must have the freedom to redistribute such forms should you find or develop a way to make them . In order for freedoms 1 and 3 ( the freedom to make changes and the freedom to publish improved versions ) to be meaningful , you must have access to the source code of the program . Therefore , accessibility of source code is a necessary condition for free software . Obfuscated “ source code ” is not real source code and does not count as source code . Freedom 1 includes the freedom to use your changed version in place of the original . If the program is delivered in a product designed to run someone else 's modified versions but refuse to run yours — a practice known as “ tivoization ” or “ lockdown ” , or ( in its practitioners ' perverse terminology ) as “ secure boot ” — freedom 1 becomes a theoretical fiction rather than a practical freedom . This is not sufficient . In other words , these binaries are not free software even if the source code they are compiled from is free . One important way to modify a program is by merging in available free subroutines and modules . If the program 's license says that you cannot merge in a suitably licensed existing module — for instance , if it requires you to be the copyright holder of any code you add — then the license is too restrictive to qualify as free . Freedom 3 includes the freedom to release your modified versions as free software . A free license may also permit other ways of releasing them ; in other words , it does not have to be a copyleft license . However , a license that requires modified versions to be nonfree does not qualify as a free license . In order for these freedoms to be real , they must be permanent and irrevocable as long as you do nothing wrong ; if the developer of the software has the power to revoke the license , or retroactively change its terms , without your doing anything wrong to give cause , the software is not free . However , certain kinds of rules about the manner of distributing free software are acceptable , when they do n't conflict with the central freedoms . For example , copyleft ( very simply stated ) is the rule that when redistributing the program , you cannot add restrictions to deny other people the central freedoms . This rule does not conflict with the central freedoms ; rather it protects them . “ Free software ” does not mean “ noncommercial . ” A free program must be available for commercial use , commercial development , and commercial distribution . Commercial development of free software is no longer unusual ; such free commercial software is very important . You may have paid money to get copies of free software , or you may have obtained copies at no charge . But regardless of how you got your copies , you always have the freedom to copy and change the software , even to sell copies . Whether a change constitutes an improvement is a subjective matter . If your modifications are limited , in substance , to changes that someone else considers an improvement , that is not freedom . However , rules about how to package a modified version are acceptable , if they do n't substantively limit your freedom to release modified versions , or your freedom to make and use modified versions privately . Thus , it is acceptable for the license to require that you change the name of the modified version , remove a logo , or identify your modifications as yours . As long as these requirements are not so burdensome that they effectively hamper you from releasing your changes , they are acceptable ; you 're already making other changes to the program , so you wo n't have trouble making a few more . Rules that “ if you make your version available in this way , you must make it available in that way also ” can be acceptable too , on the same condition . An example of such an acceptable rule is one saying that if you have distributed a modified version and a previous developer asks for a copy of it , you must send one . ( Note that such a rule still leaves you the choice of whether to distribute your version at all . ) Rules that require release of source code to the users for versions that you put into public use are also acceptable . In the GNU project , we use copyleft to protect these freedoms legally for everyone . But noncopylefted free software also exists . We believe there are important reasons why it is better to use copyleft , but if your program is noncopylefted free software , it is still basically ethical . ( See Categories of Free Software for a description of how “ free software , ” “ copylefted software ” and other categories of software relate to each other . ) Sometimes government export control regulations and trade sanctions can constrain your freedom to distribute copies of programs internationally . Software developers do not have the power to eliminate or override these restrictions , but what they can and must do is refuse to impose them as conditions of use of the program . In this way , the restrictions will not affect activities and people outside the jurisdictions of these governments . Thus , free software licenses must not require obedience to any export regulations as a condition of any of the essential freedoms . Most free software licenses are based on copyright , and there are limits on what kinds of requirements can be imposed through copyright . If a copyright-based license respects freedom in the ways described above , it is unlikely to have some other sort of problem that we never anticipated ( though this does happen occasionally ) . However , some free software licenses are based on contracts , and contracts can impose a much larger range of possible restrictions . That means there are many possible ways such a license could be unacceptably restrictive and nonfree . We ca n't possibly list all the ways that might happen . If a contract-based license restricts the user in an unusual way that copyright-based licenses cannot , and which is n't mentioned here as legitimate , we will have to think about it , and we will probably conclude it is nonfree . When talking about free software , it is best to avoid using terms like “ give away ” or “ for free , ” because those terms imply that the issue is about price , not freedom . Some common terms such as “ piracy ” embody opinions we hope you wo n't endorse . See Confusing Words and Phrases that are Worth Avoiding for a discussion of these terms . We also have a list of proper translations of “ free software ” into various languages . Finally , note that criteria such as those stated in this free software definition require careful thought for their interpretation . To decide whether a specific software license qualifies as a free software license , we judge it based on these criteria to determine whether it fits their spirit as well as the precise words . If a license includes unconscionable restrictions , we reject it , even if we did not anticipate the issue in these criteria . Sometimes a license requirement raises an issue that calls for extensive thought , including discussions with a lawyer , before we can decide if the requirement is acceptable . When we reach a conclusion about a new issue , we often update these criteria to make it easier to see why certain licenses do or do n't qualify . If you are interested in whether a specific license qualifies as a free software license , see our list of licenses . If the license you are concerned with is not listed there , you can ask us about it by sending us email at <licensing@gnu.org>
. If you are contemplating writing a new license , please contact the Free Software Foundation first by writing to that address . The proliferation of different free software licenses means increased work for users in understanding the licenses ; we may be able to help you find an existing free software license that meets your needs . If that is n't possible , if you really need a new license , with our help you can ensure that the license really is a free software license and avoid various practical problems . Beyond Software Software manuals must be free , for the same reasons that software must be free , and because the manuals are in effect part of the software . The same arguments also make sense for other kinds of works of practical use — that is to say , works that embody useful knowledge , such as educational works and reference works . Wikipedia is the best-known example . Any kind of work can be free , and the definition of free software has been extended to a definition of free cultural works applicable to any kind of works . Open Source ? Another group has started using the term “ open source ” to mean something close ( but not identical ) to “ free software . ” We prefer the term “ free software ” because , once you have heard that it refers to freedom rather than price , it calls to mind freedom . The word “ open ” never refers to freedom . </text>
<text id="OpacTeam_Berlin_EN.txt">
﻿ Berlin Declaration on Open Access to Knowledge in the Sciences and Humanities The Internet has fundamentally changed the practical and economic realities of distributing scientific knowledge and cultural heritage . For the first time ever , the Internet now offers the chance to constitute a global and interactive representation of human knowledge , including cultural heritage and the guarantee of worldwide access . We , the undersigned , feel obliged to address the challenges of the Internet as an emerging functional medium for distributing knowledge . Obviously , these developments will be able to significantly modify the nature of scientific publishing as well as the existing system of quality assurance . In accordance with the spirit of the Declaration of the Budapest Open Access Initiative , the ECHO Charter and the Bethesda Statement on Open Access Publishing , we have drafted the Berlin Declaration to promote the Internet as a functional instrument for a global scientific knowledge base and human reflection and to specify measures which research policy makers , research institutions , funding agencies , libraries , archives and museums need to consider . Goals Our mission of disseminating knowledge is only half complete if the information is not made widely and readily available to society . New possibilities of knowledge dissemination not only through the classical form but also and increasingly through the open access paradigm via the Internet have to be supported . We define open access as a comprehensive source of human knowledge and cultural heritage that has been approved by the scientific community . In order to realize the vision of a global and accessible representation of knowledge , the future Web has to be sustainable , interactive , and transparent . Content and software tools must be openly accessible and compatible . Definition of an Open Access Contribution Establishing open access as a worthwhile procedure ideally requires the active commitment of each and every individual producer of scientific knowledge and holder of cultural heritage . Open access contributions include original scientific research results , raw data and metadata , source materials , digital representations of pictorial and graphical materials and scholarly multimedia material . Preface Open access contributions must satisfy two conditions : 1. The author(s ) and right holder(s ) of such contributions grant(s ) to all users a free , irrevocable , worldwide , right of access to , and a license to copy , use , distribute , transmit and display the work publicly and to make and distribute derivative works , in any digital medium for any responsible purpose , subject to proper attribution of authorship ( community standards , will continue to provide the mechanism for enforcement of proper attribution and responsible use of the published work , as they do now ) , as well as the right to make small numbers of printed copies for their personal use . 2. A complete version of the work and all supplemental materials , including a copy of the permission as stated above , in an appropriate standard electronic format is deposited ( and thus published ) in at least one online repository using suitable technical standards ( such as the Open Archive definitions ) that is supported and maintained by an academic institution , scholarly society , government agency , or other well established organization that seeks to enable open access , unrestricted distribution , inter operability , and long-term archiving . Supporting the Transition to the Electronic Open Access Paradigm Our organizations are interested in the further promotion of the new open access paradigm to gain the most benefit for science and society . Therefore , we intend to make progress by · encouraging our researchers/grant recipients to publish their work according to the principles of the open access paradigm . · encouraging the holders of cultural heritage to support open access by providing their resources on the Internet . · developing means and ways to evaluate open access contributions and online journals in order to maintain the standards of quality assurance and good scientific practice . · advocating that open access publication be recognized in promotion and tenure evaluation . · advocating the intrinsic merit of contributions to an open access infrastructure by software tool development , content provision , metadata creation , or the publication of individual articles . We realize that the process of moving to open access changes the dissemination of knowledge with respect to legal and financial aspects . Our organizations aim to find solutions that support further development of the existing legal and financial frameworks in order to facilitate optimal use and access . </text>
<text id="OpacTeam_Budapest_EN.txt">
﻿ Budapest Open Access Initiative An old tradition and a new technology have converged to make possible an unprecedented public good . The old tradition is the willingness of scientists and scholars to publish the fruits of their research in scholarly journals without payment , for the sake of inquiry and knowledge . The new technology is the internet . The public good they make possible is the world-wide electronic distribution of the peer-reviewed journal literature and completely free and unrestricted access to it by all scientists , scholars , teachers , students , and other curious minds . Removing access barriers to this literature will accelerate research , enrich education , share the learning of the rich with the poor and the poor with the rich , make this literature as useful as it can be , and lay the foundation for uniting humanity in a common intellectual conversation and quest for knowledge . For various reasons , this kind of free and unrestricted online availability , which we will call open access , has so far been limited to small portions of the journal literature . But even in these limited collections , many different initiatives have shown that open access is economically feasible , that it gives readers extraordinary power to find and make use of relevant literature , and that it gives authors and their works vast and measurable new visibility , readership , and impact . To secure these benefits for all , we call on all interested institutions and individuals to help open up access to the rest of this literature and remove the barriers , especially the price barriers , that stand in the way . The more who join the effort to advance this cause , the sooner we will all enjoy the benefits of open access . The literature that should be freely accessible online is that which scholars give to the world without expectation of payment . Primarily , this category encompasses their peer-reviewed journal articles , but it also includes any unreviewed preprints that they might wish to put online for comment or to alert colleagues to important research findings . There are many degrees and kinds of wider and easier access to this literature . By " open access " to this literature , we mean its free availability on the public internet , permitting any users to read , download , copy , distribute , print , search , or link to the full texts of these articles , crawl them for indexing , pass them as data to software , or use them for any other lawful purpose , without financial , legal , or technical barriers other than those inseparable from gaining access to the internet itself . The only constraint on reproduction and distribution , and the only role for copyright in this domain , should be to give authors control over the integrity of their work and the right to be properly acknowledged and cited . While the peer-reviewed journal literature should be accessible online without cost to readers , it is not costless to produce . However , experiments show that the overall costs of providing open access to this literature are far lower than the costs of traditional forms of dissemination . With such an opportunity to save money and expand the scope of dissemination at the same time , there is today a strong incentive for professional associations , universities , libraries , foundations , and others to embrace open access as a means of advancing their missions . Achieving open access will require new cost recovery models and financing mechanisms , but the significantly lower overall cost of dissemination is a reason to be confident that the goal is attainable and not merely preferable or utopian . To achieve open access to scholarly journal literature , we recommend two complementary strategies . I. Self-Archiving : First , scholars need the tools and assistance to deposit their refereed journal articles in open electronic archives , a practice commonly called , self-archiving . When these archives conform to standards created by the Open Archives Initiative , then search engines and other tools can treat the separate archives as one . Users then need not know which archives exist or where they are located in order to find and make use of their contents . II . Open-access Journals : Second , scholars need the means to launch a new generation of journals committed to open access , and to help existing journals that elect to make the transition to open access . Because journal articles should be disseminated as widely as possible , these new journals will no longer invoke copyright to restrict access to and use of the material they publish . Instead they will use copyright and other tools to ensure permanent open access to all the articles they publish . Because price is a barrier to access , these new journals will not charge subscription or access fees , and will turn to other methods for covering their expenses . There are many alternative sources of funds for this purpose , including the foundations and governments that fund research , the universities and laboratories that employ researchers , endowments set up by discipline or institution , friends of the cause of open access , profits from the sale of add-ons to the basic texts , funds freed up by the demise or cancellation of journals charging traditional subscription or access fees , or even contributions from the researchers themselves . There is no need to favor one of these solutions over the others for all disciplines or nations , and no need to stop looking for other , creative alternatives . Open access to peer-reviewed journal literature is the goal . Self-archiving ( I. ) and a new generation of open-access journals ( II . ) are the ways to attain this goal . They are not only direct and effective means to this end , they are within the reach of scholars themselves , immediately , and need not wait on changes brought about by markets or legislation . While we endorse the two strategies just outlined , we also encourage experimentation with further ways to make the transition from the present methods of dissemination to open access . Flexibility , experimentation , and adaptation to local circumstances are the best ways to assure that progress in diverse settings will be rapid , secure , and long-lived . The Open Society Institute , the foundation network founded by philanthropist George Soros , is committed to providing initial help and funding to realize this goal . It will use its resources and influence to extend and promote institutional self-archiving , to launch new open-access journals , and to help an open-access journal system become economically self-sustaining . While the Open Society Institute 's commitment and resources are substantial , this initiative is very much in need of other organizations to lend their effort and resources . We invite governments , universities , libraries , journal editors , publishers , foundations , learned societies , professional associations , and individual scholars who share our vision to join us in the task of removing the barriers to open access and building a future in which research and education in every part of the world are that much more free to flourish . February 14 , 2002 Budapest , Hungary </text>
<text id="TediAndersonEt_NuclearEnergy_EN.txt">
﻿ Chris Anderson : We 're having a debate . The debate is over the proposition " What the world needs now is nuclear energy " -- true or false ? And before we have the debate , I 'd like to actually take a show of hands -- on balance , right now , are you for or against this ? So those who are " yes , " raise your hand . " For . " Okay , hands down . Those who are " against , " raise your hands . Okay , I 'm reading that at about 75-25 in favor at the start . Which means we 're going to take a vote at the end and see how that shifts , if at all . So here 's the format : They 're going to have six minutes each , and then after one little , quick exchange between them , I want two people on each side of this debate in the audience to have 30 seconds to make one short , crisp , pungent , powerful point . So , in favor of the proposition , possibly shockingly , is one of , truly , the founders of the environmental movement , a long-standing TEDster , the founder of the Whole Earth Catalog , someone we all know and love , Stewart Brand . Stewart Brand : Whoa . ( Applause ) The saying is that with climate , those who know the most are the most worried . With nuclear , those who know the most are the least worried . A classic example is James Hansen , a NASA climatologist pushing for 350 parts per million carbon dioxide in the atmosphere . He came out with a wonderful book recently called " Storms of My Grandchildren . " And Hansen is hard over for nuclear power , as are most climatologists who are engaging this issue seriously . This is the design situation : a planet that is facing climate change and is now half urban . Look at the client base for this . Five out of six of us live in the developing world . We are moving to cities . We are moving up in the world . And we are educating our kids , having fewer kids , basically good news all around . But we move to cities , toward the bright lights , and one of the things that is there that we want , besides jobs , is electricity . And if it is n't easily gotten , we 'll go ahead and steal it . This is one of the most desired things by poor people all over the world , in the cities and in the countryside . Electricity for cities , at its best , is what 's called baseload electricity . That 's where it is on all the time . And so far there are only three major sources of that -- coal and gas , hydro-electric , which in most places is maxed-out -- and nuclear . I would love to have something in the fourth place here , but in terms of constant , clean , scalable energy , [ solar ] and wind and the other renewables are n't there yet because they 're inconstant . Nuclear is and has been for 40 years . Now , from an environmental standpoint , the main thing you want to look at is what happens to the waste from nuclear and from coal , the two major sources of electricity . If all of your electricity in your lifetime came from nuclear , the waste from that lifetime of electricity would go in a Coke can -- a pretty heavy Coke can , about two pounds . But one day of coal adds up to one hell of a lot of carbon dioxide in a normal one-gigawatt coal-fired plant . Then what happens to the waste ? The nuclear waste typically goes into a dry cask storage out back of the parking lot at the reactor site because most places do n't have underground storage yet . It 's just as well , because it can stay where it is . While the carbon dioxide , vast quantities of it , gigatons , goes into the atmosphere where we ca n't get it back , yet , and where it is causing the problems that we 're most concerned about . So when you add up the greenhouse gases in the lifetime of these various energy sources , nuclear is down there with wind and hydro , below solar and way below , obviously , all the fossil fuels . Wind is wonderful ; I love wind . I love being around these big wind generators . But one of the things we 're discovering is that wind , like solar , is an actually relatively dilute source of energy . And so it takes a very large footprint on the land , a very large footprint in terms of materials , five to 10 times what you 'd use for nuclear , and typically to get one gigawatt of electricity is on the order of 250 sq . mi . of wind farm . In places like Denmark and Germany , they 've maxed out on wind already . They 've run out of good sites . The power lines are getting overloaded . And you peak out . Likewise , with solar , especially here in California , we 're discovering that the 80 solar farm schemes that are going forward want to basically bulldoze 1,000 sq . mi . of southern California desert . Well , as an environmentalist , we would rather that did n't happen . It 's okay on frapped-out agricultural land . Solar 's wonderful on rooftops . But out in the landscape , one gigawatt is on the order of 50 sq . mi . of bulldozed desert . When you add all these things up -- Saul Griffith did the numbers and figured out what it would take to get 13 clean terawatts of energy from wind , solar and biofuels , and that area would be roughly the size the United States , an area he refers to as " Renewistan . " A guy who 's added all this up very well is David Mackay , a physicist in England , and in his wonderful book , " Sustainable Energy , " among other things , he says , " I 'm not trying to be pro-nuclear . I 'm just pro-arithmetic . " ( Laughter ) In terms of weapons , the best disarmament tool so far is nuclear energy . We have been taking down the Russian warheads , turning it into electricity . 10 percent of American electricity comes from decommissioned warheads . We have n't even started the American stockpile . I think of most interest to a TED audience would be the new generation of reactors that are very small , down around 10 to 125 megawatts . This is one from Toshiba . Here 's one that the Russians are already building that floats on a barge . And that would be very interesting in the developing world . Typically , these things are put in the ground . They 're referred to as nuclear batteries . They 're incredibly safe , weapons proliferation-proof and all the rest of it . Here is a commercial version from New Mexico called the Hyperion , and another one from Oregon called NuScale . Babcock & Wilcox that make nuclear reactors ... here 's an integral fast reactor . Thorium reactor that Nathan Myhrvold 's involved in . The governments of the world are going to have to decide that coal needs to be made expensive , and these will go ahead . And here 's the future . ( Applause ) CA : Okay . Okay . ( Applause ) So arguing against , a man who 's been at the nitty , gritty heart of the energy debate and the climate change debate for years . In 2000 , he discovered that soot was probably the second leading cause of global warming , after CO2 . His team have been making detailed calculations of the relative impacts of different energy sources . His first time at TED , possibly a disadvantage -- we shall see -- from Stanford , Professor Mark Jacobson . Good luck . Mark Jacobson : Thank you . ( Applause ) So my premise here is that nuclear energy puts out more carbon dioxide , puts out more air pollutants , enhances mortality more and takes longer to put up than real renewable energy systems , namely wind , solar , geothermal power , hydro-tidal wave power . And it also enhances nuclear weapons proliferation . So let 's just start by looking at the CO2 emissions from the life cycle . CO2e emissions are equivalent emissions of all the greenhouse gases and particles that cause warming , and converted to CO2 . And if you look , wind and concentrated solar have the lowest CO2 emissions , if you look at the graph . Nuclear -- there are two bars here . One is a low estimate , and one is a high estimate . The low estimate is the nuclear energy industry estimate of nuclear . The high is the average of 103 scientific , peer-reviewed studies . And this is just the CO2 from the life cycle . If we look at the delays , it takes between 10 and 19 years to put up a nuclear power plant from planning to operation . This includes about three and a half to six years for a site permit . and another two and a half to four years for a construction permit and issue , and then four to nine years for actual construction . And in China , right now , they 're putting up five gigawatts of nuclear . And the average , just for the construction time of these , is 7.1 years on top of any planning times . While you 're waiting around for your nuclear , you have to run the regular electric power grid , which is mostly coal in the United States and around the world . And the chart here shows the difference between the emissions from the regular grid , resulting if you use nuclear , or anything else , versus wind , CSP or photovoltaics . Wind takes about two to five years on average , same as concentrated solar and photovoltaics . So the difference is the opportunity cost of using nuclear versus wind , or something else . So if you add these two together , alone , you can see a separation that nuclear puts out at least nine to 17 times more CO2 equivalent emissions than wind energy . And this does n't even account for the footprint on the ground . If you look at the air pollution health effects , this is the number of deaths per year in 2020 just from vehicle exhaust . Let 's say we converted all the vehicles in the United States to battery electric vehicles , hydrogen fuel cell vehicles or flex fuel vehicles run on E85 . Well , right now in the United States , 50 to 100,000 people die per year from air pollution , and vehicles are about 25,000 of those . In 2020 , the number will go down to 15,000 due to improvements . And so , on the right , you see gasoline emissions , the death rates of 2020. If you go to corn or cellulosic ethanol , you 'd actually increase the death rate slightly . If you go to nuclear , you do get a big reduction , but it 's not as much as with wind and/or concentrated solar . Now if you consider the fact that nuclear weapons proliferation is associated with nuclear energy proliferation , because we know for example , India and Pakistan developed nuclear weapons secretly by enriching uranium in nuclear energy facilities . North Korea did that to some extent . Iran is doing that right now . And Venezuela would be doing it if they started with their nuclear energy facilities . If you do a large scale expansion of nuclear energy across the world , and as a result there was just one nuclear bomb created that was used to destroy a city such as Mumbai or some other big city , megacity , the additional death rates due to this averaged over 30 years and scaled to the population of the U. S. would be this . So , do we need this ? The next thing is : What about the footprint ? Stewart mentioned the footprint . Actually , the footprint on the ground for wind is by far the smallest of any energy source in the world . That , because the footprint , as you can see , is just the pole touching the ground . And you can power the entire U. S. vehicle fleet with 73,000 to 145,000 five-megawatt wind turbines . That would take between one and three sq . km . of footprint on the ground , entirely . The spacing is something else . That 's the footprint that 's always being confused . People confuse footprint with spacing . As you can see from these pictures , the spacing between can be used for multiple purposes including agricultural land , range land or open space . Over the ocean , it 's not even land . Now if we look at nuclear -- ( Laughter ) With nuclear , what do we have ? We have facilities around there . You also have a buffer zone that 's 17 sq . km . And you have the uranium mining that you have to deal with . Now if we go to the area , lots is worse than nuclear or wind . For example , cellulosic ethanol , to power the entire U. S. vehicle fleet , this is how much land you would need . That 's cellulosic , second generation biofuels from prairie grass . Here 's corn ethanol . It 's smaller . This is based on ranges from data , but if you look at nuclear , it would be the size of Rhode Island to power the U. S. vehicle fleet . For wind , there 's a larger area , but much smaller footprint . And of course , with wind , you could put it all over the east coast , offshore theoretically , or you can split it up . And now , if you go back to looking at geothermal , it 's even smaller than both , and solar is slightly larger than the nuclear spacing , but it 's still pretty small . And this is to power the entire U. S. vehicle fleet . To power the entire world with 50 percent wind , you would need about one percent of world land . Matching the reliability , base load is actually irrelevant . We want to match the hour-by-hour power supply . You can do that by combining renewables . This is from real data in California , looking at wind data and solar data . And it considers just using existing hydro to match the hour-by-hour power demand . Here are the world wind resources . There 's 5 to 10 times more wind available worldwide than we need for all the world . So then the finally ranking . And one last slide I just want to show : this is the choice . You can either have wind or nuclear . If you use wind , you guarantee ice will last . Nuclear , the time lag alone will allow the Arctic to melt and other places to melt more . And we can guarantee a clean , blue sky or an uncertain future with nuclear power . ( Applause ) CA : All right . So while they 're having their comebacks on each other -- and yours is slightly short because you slightly overran -- I need two people from either side . So if you 're for this , if you 're for nuclear power , put up two hands . If you 're against , put up one . And I want two of each for the mics . Now then , you guys have -- you have a minute comeback on him to pick up a point he said , challenge it , whatever . SB : I think a point of difference we 're having , Mark , has to do with weapons and energy . These diagrams that show that nuclear is somehow putting out a lot of greenhouse gases -- a lot of those studies will include , " Well of course war will be inevitable and therefore we 'll have cities burning and stuff like that , " which is kind of finessing it a little bit , I think . The reality is that there 's , what , 21 nations that have nuclear power ? Of those , seven have nuclear weapons . In every case , they got the weapons before they got the nuclear power . There are two nations , North Korea and Israel , that have nuclear weapons and do n't have nuclear power at all . The places that we would most like to have really clean energy occur are China , India , Europe , North America , all of which have sorted out their situation in relation to nuclear weapons . So that leaves a couple of places like Iran , maybe Venezuela , that you would like to have very close surveillance of anything that goes on with fissile stuff . Pushing ahead with nuclear power will mean we really know where all of the fissile material is , and we can move toward zero weapons left , once we know all that . CA : Mark , 30 seconds , either on that or on anything Stewart said . MJ : Well we know India and Pakistan had nuclear energy first , and then they developed nuclear weapons secretly in the factories . So the other thing is , we do n't need nuclear energy . There 's plenty of solar and wind . You can make it reliable , as I showed with that diagram . That 's from real data . And this is an ongoing research . This is not rocket science . Solving the world 's problems can be done , if you 're really put your mind to it and use clean , renewable energy . There 's absolutely no need for nuclear power . ( Applause ) CA : We need someone for . Rod Beckstrom : Thank you Chris . I 'm Rod Beckstrom , CEO of ICANN . I 've been involved in global warming policy since 1994 , when I joined the board of Environmental Defense Fund that was one of the crafters of the Kyoto Protocol . And I want to support Stewart Brand 's position . I 've come around in the last 10 years . I used to be against nuclear power . I 'm now supporting Stewart 's position , softly , from a risk-management standpoint , agreeing that the risks of overheating the planet outweigh the risk of nuclear incident , which certainly is possible and is a very real problem . However , I think there may be a win-win solution here where both parties can win this debate , and that is , we face a situation where it 's carbon caps on this planet or die . And in the United States Senate , we need bipartisan support -- only one or two votes are needed -- to move global warming through the Senate , and this room can help . So if we get that through , then Mark will solve these problems . Thanks Chris . CA : Thank you Rod Beckstrom . Against . David Fanton : Hi , I 'm David Fanton . I just want to say a couple quick things . The first is : be aware of the propaganda . The propaganda from the industry has been very , very strong . And we have not had the other side of the argument fully aired so that people can draw their own conclusions . Be very aware of the propaganda . Secondly , think about this . If we build all these nuclear power plants , all that waste is going to be on hundreds , if not thousands , of trucks and trains , moving through this country every day . Tell me they 're not going to have accidents . Tell me that those accidents are n't going to put material into the environment that is poisonous for hundreds of thousands of years And then tell me that each and every one of those trucks and trains is n't a potential terrorist target . CA : Thank you . For . Anyone else for ? Go . Alex : Hi , I 'm Alex . I just wanted to say , I 'm , first of all , renewable energy 's biggest fan . I 've got solar PV on my roof . I 've got a hydro conversion at a watermill that I own . And I 'm , you know , very much " pro " that kind of stuff . However , there 's a basic arithmetic problem here . The capability of the sun shining , the wind blowing and the rain falling , simply is n't enough to add up . So if we want to keep the lights on , we actually need a solution which is going to keep generating all of the time . I campaigned against nuclear weapons in the 80s , and I continue to do so now . But we 've got an opportunity to recycle them into something more useful that enables us to get energy all of the time . And , ultimately , the arithmetic problem is n't going to go away . We 're not going to get enough energy from renewables alone . We need a solution that generates all of the time . If we 're going to keep the lights on , nuclear is that solution . CA : Thank you . Anyone else against ? Man : The last person who was in favor made the premise that we do n't have enough alternative renewable resources . And our " against " proponent up here made it clear that we actually do . And so the fallacy that we need this resource and we can actually make it in a time frame that is meaningful is not possible . I will also add one other thing . Ray Kurzweil and all the other talks -- we know that the stick is going up exponentially . So you ca n't look at state-of-the-art technologies in renewables and say , " That 's all we have . " Because five years from now , it will blow you away what we 'll actually have as alternatives to this horrible , disastrous nuclear power . CA : Point well made . Thank you . ( Applause ) So each of you has really just a couple sentences -- 30 seconds each to sum up . Your final pitch , Stewart . SB : I loved your " It all balances out " chart that you had there . It was a sunny day and a windy night . And just now in England they had a cold spell . All of the wind in the entire country shut down for a week . None of those things were stirring . And as usual , they had to buy nuclear power from France . Two gigawatts comes through the Chunnel . This keeps happening . I used to worry about the 10,000 year factor . And the fact is , we 're going to use the nuclear waste we have for fuel in the fourth generation of reactors that are coming along . And especially the small reactors need to go forward . I heard from Nathan Myhrvold -- and I think here 's the action point -- it 'll take an act of Congress to make the Nuclear Regulatory Commission start moving quickly on these small reactors , which we need very much , here and in the world . ( Applause ) MJ : So we 've analyzed the hour-by-hour power demand and supply , looking at solar , wind , using data for California . And you can match that demand , hour-by-hour , for the whole year almost . Now , with regard to the resources , we 've developed the first wind map of the world , from data alone , at 80 meters . We know what the resources are . You can cover 15 percent . 15 percent of the entire U. S. has wind at fast-enough speeds to be cost-competitive . And there 's much more solar than there is wind . There 's plenty of resource . You can make it reliable . CA : Okay . So , thank you , Mark . ( Applause ) So if you were in Palm Springs ... ( Laughter ) ( Applause ) Shameless . Shameless . Shameless . ( Applause ) So , people of the TED community , I put it to you that what the world needs now is nuclear energy . All those in favor , raise your hands . ( Shouts ) And all those against . Ooooh . Now that is -- my take on that ... Just put up ... Hands up , people who changed their minds during the debate , who voted differently . Those of you who changed your mind in favor of " for " put your hands up . Okay . So here 's the read on it . Both people won supporters , but on my count , the mood of the TED community shifted from about 75-25 to about 65-35 in favor , in favor . You both won . I congratulate both of you . Thank you for that . ( Applause ) </text>
<text id="TediBelcherA_Batteries_EN.txt">
﻿ I thought I would talk a little bit about how nature makes materials . I brought along with me an abalone shell . This abalone shell is a biocomposite material that 's 98 percent by mass calcium carbonate and two percent by mass protein . Yet , it 's 3,000 times tougher than its geological counterpart . And a lot of people might use structures like abalone shells , like chalk . I 've been fascinated by how nature makes materials , and there 's a lot of sequence to how they do such an exquisite job . Part of it is that these materials are macroscopic in structure , but they 're formed at the nanoscale . They 're formed at the nanoscale , and they use proteins that are coded by the genetic level that allow them to build these really exquisite structures . So something I think is very fascinating is what if you could give life to non-living structures , like batteries and like solar cells ? What if they had some of the same capabilities that an abalone shell did , in terms of being able to build really exquisite structures at room temperature and room pressure , using non-toxic chemicals and adding no toxic materials back into the environment ? So that 's the vision that I 've been thinking about . And so what if you could grow a battery in a petri dish ? Or , what if you could give genetic information to a battery so that it could actually become better as a function of time , and do so in an environmentally friendly way ? And so , going back to this abalone shell , besides being nano-structured , one thing that 's fascinating , is when a male and a female abalone get together , they pass on the genetic information that says , " This is how to build an exquisite material . Here 's how to do it at room temperature and pressure , using non-toxic materials . " Same with diatoms , which are shone right here , which are glasseous structures . Every time the diatoms replicate , they give the genetic information that says , " Here 's how to build glass in the ocean that 's perfectly nano-structured . And you can do it the same , over and over again . " So what if you could do the same thing with a solar cell or a battery ? I like to say my favorite biomaterial is my four year-old . But anyone who 's ever had , or knows , small children knows they 're incredibly complex organisms . And so if you wanted to convince them to do something they do n't want to do , it 's very difficult . So when we think about future technologies , we actually think of using bacteria and virus , simple organisms . Can you convince them to work with a new tool box , so that they can build a structure that will be important to me ? Also , we think about future technologies . We start with the beginning of Earth . Basically , it took a billion years to have life on Earth . And very rapidly , they became multi-cellular , they could replicate , they could use photosynthesis as a way of getting their energy source . But it was n't until about 500 million years ago -- during the Cambrian geologic time period -- that organisms in the ocean started making hard materials . Before that they were all soft , fluffy structures . And it was during this time that there was increased calcium and iron and silicon in the environment . And organisms learned how to make hard materials . And so that 's what I would like be able to do -- convince biology to work with the rest of the periodic table . Now if you look at biology , there 's many structures like DNA and antibodies and proteins and ribosomes that you 've heard about that are already nano-structured . So nature already gives us really exquisite structures on the nanoscale . What if we could harness them and convince them to not be an antibody that does something like HIV ? But what if we could convince them to build a solar cell for us ? So here are some examples : these are some natural shells . There are natural biological materials . The abalone shell here -- and if you fracture it , you can look at the fact that it 's nano-structured . There 's diatoms made out of SIO2 , and they 're magnetotactic bacteria that make small , single-domain magnets used for navigation . What all these have in common is these materials are structured at the nanoscale , and they have a DNA sequence that codes for a protein sequence , that gives them the blueprint to be able to build these really wonderful structures . Now , going back to the abalone shell , the abalone makes this shell by having these proteins . These proteins are very negatively charged . And they can pull calcium out of the environment , put down a layer of calcium and then carbonate , calcium and carbonate . It has the chemical sequences of amino acids which says , " This is how to build the structure . Here 's the DNA sequence , here 's the protein sequence in order to do it . " And so an interesting idea is , what if you could take any material that you wanted , or any element on the periodic table , and find its corresponding DNA sequence , then code it for a corresponding protein sequence to build a structure , but not build an abalone shell -- build something that , through nature , it has never had the opportunity to work with yet . And so here 's the periodic table . And I absolutely love the periodic table . Every year for the incoming freshman class at MIT , I have a periodic table made that says , " Welcome to MIT . Now you 're in your element . " And you flip it over , and it 's the amino acids with the PH at which they have different charges . And so I give this out to thousands of people . And I know it says MIT , and this is Caltech , but I have a couple extra if people want it . And I was really fortunate to have President Obama visit my lab this year on his visit to MIT , and I really wanted to give him a periodic table . So I stayed up at night , and I talked to my husband , " How do I give President Obama a periodic table ? What if he says , 'Oh , I already have one , ' or , 'I 've already memorized it ' ? " And so he came to visit my lab and looked around -- it was a great visit . And then afterward , I said , " Sir , I want to give you the periodic table in case you 're ever in a bind and need to calculate molecular weight . " And I thought molecular weight sounded much less nerdy than molar mass . And so he looked at it , and he said , " Thank you . I 'll look at it periodically . " ( Laughter ) ( Applause ) And later in a lecture that he gave on clean energy , he pulled it out and said , " And people at MIT , they give out periodic tables . " So basically what I did n't tell you is that about 500 million years ago , organisms starter making materials , but it took them about 50 million years to get good at it . It took them about 50 million years to learn how to perfect how to make that abalone shell . And that 's a hard sell to a graduate student . " I have this great project -- 50 million years . " And so we had to develop a way of trying to do this more rapidly . And so we use a virus that 's a non-toxic virus called M13 bacteriophage that 's job is to infect bacteria . Well it has a simple DNA structure that you can go in and cut and paste additional DNA sequences into it . And by doing that , it allows the virus to express random protein sequences . And this is pretty easy biotechnology . And you could basically do this a billion times . And so you can go in and have a billion different viruses that are all genetically identical , but they differ from each other based on their tips , on one sequence that codes for one protein . Now if you take all billion viruses , and you can put them in one drop of liquid , you can force them to interact with anything you want on the periodic table . And through a process of selection evolution , you can pull one of a billion that does something that you 'd like it to do , like grow a battery or grow a solar cell . So basically , viruses ca n't replicate themselves , they need a host . Once you find that one out of a billion , you infect it into a bacteria , and you make millions and billions of copies of that particular sequence . And so the other thing that 's beautiful about biology is that biology gives you really exquisite structures with nice link scales . And these viruses are long and skinny , and we can get them to express the ability to grow something like semiconductors or materials for batteries . Now this is a high-powered battery that we grew in my lab . We engineered a virus to pick up carbon nanotubes . So one part of the virus grabs a carbon nanotube . The other part of the virus has a sequence that can grow an electrode material for a battery . And then it wires itself to the current collector . And so through a process of selection evolution , we went from having a virus that made a crummy battery to a virus that made a good battery to a virus that made a record-breaking , high-powered battery that 's all made at room temperature , basically at the bench top . And that battery went to the White House for a press conference . I brought it here . You can see it in this case -- that 's lighting this LED . Now if we could scale this , you could actually use it to run your Prius , which is my dream -- to be able to drive a virus-powered car . But it 's basically -- you can pull one out of a billion . You can make lots of amplifications to it . Basically , you make an amplification in the lab . And then you get it to self-assemble into a structure like a battery . We 're able to do this also with catalysis . This is the example of photocatalytic splitting of water . And what we 've been able to do is engineer a virus to basically take dye absorbing molecules and line them up on the surface of the virus so it acts as an antenna , and you get an energy transfer across the virus . And then we give it a second gene to grow an inorganic material that can be used to split water into oxygen and hydrogen , that can be used for clean fuels . And I brought an example with me of that today . My students promised me it would work . These are virus-assembled nanowires . When you shine light on them , you can see them bubbling . In this case , you 're seeing oxygen bubbles come out . And basically by controlling the genes , you can control multiple materials to improve your device performance . The last example are solar cells . You can also do this with solar cells . We 've been able to engineer viruses to pick up carbon nanotubes and then grow titanium dioxide around them -- and use as a way of getting electrons through the device . And what we 've found is that , through genetic engineering , we can actually increase the efficiencies of these solar cells to record numbers for these types of dye-sensitized systems . And I brought one of those as well that you can play around with outside afterward . So this is a virus-based solar cell . Through evolution and selection , we took it from an eight percent efficiency solar cell to an 11 percent efficiency solar cell . So I hope that I 've convinced you that there 's a lot of great , interesting things to be learned about how nature makes materials -- and taking it to the next step to see if you can force , or whether you can take advantage of how nature makes materials , to make things that nature has n't yet dreamed of making . Thank you . </text>
<text id="TediGellMannM_Lang_EN.txt">
﻿ Well , I 'm involved in other things besides physics . In fact , mostly now in other things . One thing is distant relationships among human languages . And the professional , historical linguists in the US and in Western Europe mostly try to stay away from any long-distance relationships ; big groupings , groupings that go back a long time , longer than the familiar families . They do n't like that ; they think it 's crank . I do n't think it 's crank . And there are some brilliant linguists , mostly Russians , who are working on that at Santa Fe Institute and in Moscow , and I would love to see where that leads . Does it really lead to a single ancestor some 20 , 25,000 years ago ? And what if we go back beyond that single ancestor , when there was presumably a competition among many languages ? How far back does that go ? How far back does modern language go ? How many tens of thousands of years does it go back ? Chris Anderson : Do you have a hunch or a hope for what the answer to that is ? Murray Gell-Mann : Well , I would guess that modern language must be older than the cave paintings and cave engravings and cave sculptures and dance steps in the soft clay in the caves in Western Europe in the Aurignacian Period some 35,000 years ago , or earlier . I ca n't believe they did all those things and did n't also have a modern language . So I would guess that the actual origin goes back at least that far and maybe further . But that does n't mean that all , or many , or most of today 's attested languages could n't descend perhaps from one that 's much younger than that , like say 20,000 years , or something of that kind . It 's what we call a bottleneck . CA : Well , Philip Anderson may have been right . You may just know more about everything than anyone . So it 's been an honor . Thank you Murray Gell-Mann . ( Applause ) </text>
<text id="TediJakubowskiM_OpenTech_EN.txt">
﻿ Hi , my name is Marcin -- farmer , technologist . I was born in Poland , now in the U. S. I started a group called Open Source Ecology . We 've identified the 50 most important machines that we think it takes for modern life to exist -- things from tractors , bread ovens , circuit makers . Then we set out to create an open source , DIY , do it yourself version that anyone can build and maintain at a fraction of the cost . We call this the Global Village Construction Set . So let me tell you a story . So I finished my 20s with a Ph. D. in fusion energy , and I discovered I was useless . I had no practical skills . The world presented me with options , and I took them . I guess you can call it the consumer lifestyle . So I started a farm in Missouri and learned about the economics of farming . I bought a tractor -- then it broke . I paid to get it repaired -- then it broke again . Then pretty soon I was broke too . I realized that the truly appropriate , low-cost tools that I needed to start a sustainable farm and settlement just did n't exist yet . I needed tools that were robust , modular , highly efficient and optimized , low-cost , made from local and recycled materials that would last a lifetime , not designed for obsolescence . I found that I would have to build them myself . So I did just that . And I tested them . And I found that industrial productivity can be achieved on a small scale . So then I published the 3D designs , schematics , instructional videos and budgets on a wiki . Then contributors from all over the world began showing up , prototyping new machines during dedicated project visits . So far , we have prototyped eight of the 50 machines . And now the project is beginning to grow on its own . We know that open source has succeeded with tools for managing knowledge and creativity . And the same is starting to happen with hardware too . We 're focusing on hardware because it is hardware that can change people 's lives in such tangible material ways . If we can lower the barriers to farming , building , manufacturing , then we can unleash just massive amounts of human potential . That 's not only in the developing world . Our tools are being made for the American farmer , builder , entrepreneur , maker . We 've seen lots of excitement from these people , who can now start a construction business , parts manufacturing , organic CSA or just selling power back to the grid . Our goal is a repository of published designs so clear , so complete , that a single burned DVD is effectively a civilization starter kit . I 've planted a hundred trees in a day . I 've pressed 5,000 bricks in one day from the dirt beneath my feet and built a tractor in six days. From what I 've seen , this is only the beginning . If this idea is truly sound , then the implications are significant . A greater distribution of the means of production , environmentally sound supply chains , and a newly-relevant DIY maker culture can hope to transcend artificial scarcity . We 're exploring the limits of what we all can do to make a better world with open hardware technology . Thank you . ( Applause ) </text>
<text id="TediJordanC_ShockStats_EN.txt">
﻿ My work is about the behaviors that we all engage in unconsciously , on a collective level . And what I mean by that , it 's the behaviors that we 're in denial about , and the ones that operate below the surface of our daily awareness . And as individuals , we all do these things , all the time , everyday . It 's like when you 're mean to your wife because you 're mad at somebody else . Or when you drink a little too much at a party just out of anxiety . Or when you overeat because your feelings are hurt , or whatever . And when we do these kind of things , when 300 million people do unconscious behaviors , then it can add up to a catastrophic consequence that nobody wants , and no one intended . And that 's what I look at with my photographic work . This is an image I just recently completed , that is , when you stand back at a distance , it looks like some kind of neo-gothic , cartoon image of a factory spewing out pollution . And as you get a little bit closer , it starts looking like lots of pipes , like maybe a chemical plant , or a refinery , or maybe a hellish freeway interchange . And as you get all the way up close , you realize that it 's actually made of lots and lots of plastic cups . And in fact , this is one million plastic cups , which is the number of plastic cups that are used on airline flights in the United States every six hours . We use four million cups a day on airline flights , and virtually none of them are reused or recycled ; they just do n't do that in that industry . Now that number is dwarfed by the number of paper cups we use every day , and that is 40 million cups a day for hot beverages , most of which is coffee . I could n't fit 40 million cups on a canvas , but I was able to put 410,000 . That 's what 410,000 cups looks like . That 's 15 minutes of our cup consumption . And if you could actually stack up that many cups in real life , that 's the size it would be . And there 's an hour 's worth of our cups . And there 's a day 's worth of our cups . You can still see the little people way down there . That 's as high as a 42-story building , and I put the Statue of Liberty in there as a scale reference . Speaking of justice , there 's another phenomenon going on in our culture that I find deeply troubling , and that is that America right now has the largest percentage of its population in prison of any country on Earth . One out of four people , one out of four humans in prison are Americans , imprisoned in our country . And I wanted to show the number . The number is 2.3 million Americans were incarcerated in 2005. And that 's gone up since then , but we do n't have the numbers yet . So I wanted to show 2.3 million prison uniforms , and in the actual print of this piece , each uniform is the size of a nickel on its edge . They 're tiny , they 're barely visible as a piece of material , and to show 2.3 million of them required a canvas that was larger than any printer in the world would print . And so I had to divide it up into multiple panels that are 10 feet tall by 25 feet wide . This is that piece installed in a gallery in New York ; those are my parents looking at the piece . ( Laughter ) Every time I look at this piece , I always wonder if my mom 's whispering to my dad , " He finally folded his laundry . " ( Laughter ) I want to show you some pieces now that are about addiction . And this particular one is about cigarette addiction . I wanted to make a piece that shows the actual number of Americans who die from cigarette smoking . More than 400,000 people die in the United States every year from smoking cigarettes . And so this piece is made up of lots and lots of boxes of cigarettes . And , as you slowly step back , you see that it 's a painting by Van Gogh , called " Skull with Cigarette . " It 's a strange thing to think about , that on 9/11 , when that tragedy happened , 3,000 Americans died , and do you remember the response ? It reverberated around the world , and will continue to reverberate through time . It will be something that we talk about in 100 years . And yet on that same day , 1,100 Americans died from smoking . And the day after that , another 1,100 Americans died from smoking . And every single day since then , 1,100 Americans have died , and today , 1,100 Americans are dying from cigarette smoking . And we are n't talking about it ; we dismiss it . The tobacco lobby , it 's too strong . We just dismiss it out of our consciousness . And knowing what we know about the destructive power of cigarettes , we continue to allow our children , our sons and daughters , to be in the presence of the influences that start them smoking . And this is what the next piece is about . This is just lots and lots of cigarettes : 65,000 cigarettes , which is equal to the number of teenagers who will start smoking this month , and every month in the US . More than 700,000 children in the United States aged 18 and under begin smoking every year . One more strange epidemic in the United States that I want to acquaint you with is this phenomenon of abuse and misuse of prescription drugs . This is an image I 've made out of lots and lots of Vicodin -- well , actually I only had one Vicodin that I scanned lots and lots of times . ( Laughter ) And so as you stand back you see 213,000 Vicodin pills , which is the number of hospital emergency room visits yearly in the United States , attributable to abuse and misuse of prescription painkillers and anti-anxiety medications . One-third of all drug overdoses in the U. S. -- and that includes cocaine , heroin , alcohol , everything -- one-third of drug overdoses are prescription medications . A strange phenomenon . This is a piece that I just recently completed about another tragic phenomenon . And that is the phenomenon , this growing obsession we have with breast augmentation surgery . 384,000 women , American women , last year went in for elective breast augmentation surgery . It 's rapidly becoming the most popular high school graduation gift , given to young girls who are about to go off to college . So I made this image out of Barbie dolls , and so as you stand back you see this kind of floral pattern , and as you get all the way back , you see 32,000 Barbie dolls , which represents the number of breast augmentation surgeries that are performed in the U. S. each month . The vast majority of those are on women under the age of 21. And strangely enough , the only plastic surgery that is more popular than breast augmentation is liposuction , and most of that is being done by men . Now , I want to emphasize that these are just examples . I 'm not holding these out as being the biggest issues . They 're just examples . And the reason that I do this , it 's because I have this fear that we are n't feeling enough as a culture right now . There 's this kind of anesthesia in America at the moment . We 've lost our sense of outrage , our anger and our grief about what 's going on in our culture right now , what 's going on in our country , the atrocities that are being committed in our names around the world . They 've gone missing ; these feelings have gone missing . Our cultural joy , our national joy is nowhere to be seen . And one of the causes of this , I think , is that as each of us attempts to build this new kind of world view , this holoptical world view , this holographic image that we 're all trying to create in our mind of the inter-connection of things : the environmental footprints 1,000 miles away of the things that we buy ; the social consequences 10,000 miles away of the daily decisions that we make as consumers . As we try to build this view , and try to educate ourselves about the enormity of our culture , the information that we have to work with is these gigantic numbers : numbers in the millions , in the hundreds of millions , in the billions and now in the trillions . Bush 's new budget is in the trillions , and these are numbers that our brain just does n't have the ability to comprehend . We ca n't make meaning out of these enormous statistics . And so that 's what I 'm trying to do with my work , is to take these numbers , these statistics from the raw language of data , and to translate them into a more universal visual language , that can be felt . Because my belief is , if we can feel these issues , if we can feel these things more deeply , then they 'll matter to us more than they do now . And if we can find that , then we 'll be able to find within each one of us what it is that we need to find to face the big question , which is : How do we change ? That , to me , is the big question that we face as a people right now : How do we change ? How do we change as a culture , and how do we each individually take responsibility for the one piece of the solution that we are in charge of , and that is our own behavior ? My belief is that you do n't have to make yourself bad to look at these issues . I 'm not pointing the finger at America in a blaming way . I 'm simply saying , this is who we are right now . And if there are things that we see that we do n't like about our culture , then we have a choice . The degree of integrity that each of us can bring to the surface , to bring to this question , the depth of character that we can summon as we show up for the question of how do we change . It 's already defining us as individuals and as a nation , and it will continue to do that on into the future . And it will profoundly affect the well-being , the quality of life , of the billions of people who are going to inherit the results of our decisions . I 'm not speaking abstractly about this , I 'm speaking -- this is who we are in this room . Right now in this moment . Thank you and good afternoon . ( Applause ) </text>
<text id="TediMcKeanE_Dict_EN.txt">
﻿ Now , have any of y'all ever looked up this word ? You know , in a dictionary ? ( Laughter ) Yeah , that 's what I thought . How about this word ? Here , I 'll show it to you : Lexicography : the practice of compiling dictionaries . Notice -- we 're very specific . That word " compile . " The dictionary is not carved out of a piece of granite , out of a lump of rock . It 's made up of lots of little bits . It 's little discrete -- that 's spelled D-I-S-C-R-E-T-E -- bits . And those bits are words . Now one of the perks of being a lexicographer -- besides getting to come to TED -- is that you get to say really fun words , like lexicographical . Lexicographical has this great pattern -- it 's called a double dactyl . And just by saying double dactyl , I 've sent the geek needle all the way into the red . But " lexicographical " is the same pattern as " higgledy-piggledy . " Right ? It 's a fun word to say , and I get to say it a lot . Now , one of the non-perks of being a lexicographer is that people do n't usually have a kind of warm , fuzzy , snuggly image of the dictionary . Right ? Nobody hugs their dictionaries . But what people really often think about the dictionary is , they think more like this . Just to let you know , I do not have a lexicographical whistle . But people think that my job is to let the good words make that difficult left hand turn into the dictionary , and keep the bad words out . But the thing is , I do n't want to be a traffic cop . For one thing , I just do not do uniforms . And for another -- deciding what words are good and what words are bad is actually not very easy . And it 's not very fun . And when parts of your job are not easy or fun , you kind of look for an excuse not to do them . So if I had to think of some kind of occupation as a metaphor for my work , I would much rather be a fisherman . I wanna throw my big net into the deep blue ocean of English and see what marvelous creatures I can drag up from the bottom . But why do people want me to direct traffic , when I would much rather go fishing ? Well , I blame the Queen . Why do I blame the Queen ? Well , first of all , I blame the Queen because it 's funny . But secondly , I blame the Queen because dictionaries have really not changed . Our idea of what a dictionary is has not changed since her reign . The only thing Queen Victoria would not be amused by in modern dictionaries is our inclusion of the F-word , which has happened in American dictionaries since 1965. So , there 's this guy , right ? Victorian era . James Murray , first editor of the Oxford English Dictionary . I do not have that hat . I wish I had that hat . So he 's really responsible for a lot of what we consider modern in dictionaries today . When a guy who looks like that -- in that hat -- is the face of modernity , you have a problem . And so , James Murray could get a job on any dictionary today . There 'd be virtually no learning curve . And of course , a few of us are saying : Computers ! Computers ! What about computers ? The thing about computers is -- I love computers . I mean , I 'm a huge geek , I love computers . I would go on a hunger strike before I let them take away Google Book Search from me . But computers do n't do much else other than speed up the process of compiling dictionaries . They do n't change the end result . Because what a dictionary is , is it 's Victorian design merged with a little bit of modern propulsion . It 's steampunk . What we have is an electric velocipede . You know , we have Victorian design with an engine on it . That 's all ! The design has not changed . And OK , what about online dictionaries , right ? Online dictionaries must be different . This is the Oxford English Dictionary Online , one of the best online dictionaries . This is my favorite word , by the way : Erinaceous : Pertaining to the hedgehog family ; of the nature of a hedgehog . Very useful word . So look at that . Online dictionaries right now are paper thrown up on a screen . This is flat . Look how many links there are in the actual entry : two ! Right ? Those little buttons -- I had them all expanded except for the date chart . So there 's not very much going on here . There 's not a lot of clickiness . And in fact , online dictionaries replicate almost all the problems of print , except for searchability . And when you improve searchability , you actually take away the one advantage of print , which is serendipity . Serendipity is when you find things you were n't looking for because finding what you are looking for is so damned difficult . So -- ( Laughter ) -- now , when you think about this , what we have here is a ham butt problem . Does everyone know the ham butt problem ? Woman 's making a ham for a big family dinner . She goes to cut the butt off the ham and throw it away , and she looks at this piece of ham and she 's like , " This is a perfectly good piece of ham . Why am I throwing this away ? " She thought , " Well my mom always did this . " So she calls up Mom , and she says , " Mom , why 'd you cut the butt off the ham when you 're making a ham ? " She says , " I do n't know , my mom always did it ! " So they call Grandma , and Grandma says , " My pan was too small ! " ( Laughter ) So it 's not that we have good words and bad words -- we have a pan that 's too small ! You know , that ham butt is delicious ! There 's no reason to throw it away . The bad words -- see , when people think about a place and they do n't find a place on the map , they think , " This map sucks ! " When they find a nightspot or a bar and it 's not in the guidebook , they 're like , " Ooh , this place must be cool ! It 's not in the guidebook . " When they find a word that 's not in the dictionary , they think , " This must be a bad word . " Why ? It 's more likely to be a bad dictionary . Why are you blaming the ham for being too big for the pan ? So you ca n't get a smaller ham . The English language is as big as it is . So if you have a ham butt problem , and you 're thinking about the ham butt problem , the conclusion it leads you to is inexorable and counter-intuitive : paper is the enemy of words . How can this be ? I mean , I love books . I really love books . Some of my best friends are books . But the book is not the best shape for the dictionary . Now they 're gonna think " Oh , boy . People are gonna take away my beautiful , paper dictionaries ? " No. There will still be paper dictionaries . When we had cars -- when cars became the dominant mode of transportation , we did n't round up all the horses and shoot them . You know , there 're still gonna be paper dictionaries , but it 's not going to be the dominant dictionary . The book-shaped dictionary is not going to be the only shape dictionaries come in . And it 's not going to be the prototype for the shapes dictionaries come in . So think about it this way : if you 've got an artificial constraint , artificial constraints lead to arbitrary distinctions and a skewed worldview . What if biologists could only study animals that made people go , " Aww . " Right ? What if we made aesthetic judgments about animals , and only the ones we thought were cute were the ones that we could study ? We 'd know a whole lot about charismatic megafauna , and not very much about much else . And I think this is a problem . I think we should study all the words , because when you think about words , you can make beautiful expressions from very humble parts . Lexicography is really more about material science . We are studying the tolerances of the materials that you use to build the structure of your expression : your speeches and your writing . And then often people say to me , " Well , OK -- how do I know that this word is real ? " They think , " OK , if we think words are the tools that we use to build the expressions of our thoughts , how can you say that screwdrivers are better than hammers ? How can you say that a sledgehammer is better than a ball-peen hammer ? They 're just the right tool for the job . " And so people say to me , " How do I know if a word is real ? " You know , anyone that 's read a children 's book knows that love makes things real . If you love a word , use it . That makes it real . Being in the dictionary is an artificial distinction . It does n't make a word any more real than any other way . If you love a word , it becomes real . So if we 're not worrying about directing traffic , if we 've transcended paper , if we are worrying less about control and more about description , then we can think of the English language as being this beautiful mobile . And any time one of those little parts of the mobile changes , is touched -- any time you touch a word , you use it in a new context , you give it a new connotation , you verb it -- you make the mobile move . You did n't break it ; it 's just in a new position , and that new position can be just as beautiful . Now , if you 're no longer a traffic cop -- the problem with being a traffic cop is there can only be so many traffic cops in any one intersection , or the cars get confused . Right ? But if your goal is no longer to direct the traffic , but maybe to count the cars that go by , then more eyeballs are better . You can ask for help ! If you ask for help , you get more done . And we really need help . Library of Congress : 17 million books . Of which half are in English . If only one out of every 10 of those books had a word that 's not in the dictionary in it , that would be equivalent to more than two unabridged dictionaries . And I find an un-dictionaried word -- a word like " un-dictionaried , " for example -- in almost every book I read . What about newspapers ? Newspaper archive goes back to 1759. 58.1 million newspaper pages . If only one in 100 of those pages had an un-dictionaried word on it , it would be an entire other OED . That 's 500,000 more words . So that 's -- that 's a lot . And I 'm not even talking about magazines , I 'm not talking about blogs -- and I find more new words on BoingBoing in a given week than I do Newsweek or Time . There 's a lot going on there . And I 'm not even talking about polysemy , which is the greedy habit some words have of taking more than one meaning for themselves . So if you think of the word " set " -- a set can be a badger 's burrow , a set can be one of the pleats in an Elizabethan ruff -- and there 's one numbered definition in the OED . The OED has 33 different numbered definitions for set . Tiny little word , 33 numbered definitions . One of them is just labeled " miscellaneous technical senses . " Do you know what that says to me ? That says to me it was Friday afternoon and somebody wanted to go down the pub . That 's a lexicographical cop out , to say , " miscellaneous technical senses . " So we have all these words , and we really need help ! And the thing is , we could ask for help -- asking for help 's not that hard . I mean , lexicography is not rocket science . See , I just gave you a lot of words and a lot of numbers , and this is more of a visual explanation . If we think of the dictionary as being the map of the English language , these bright spots are what we know about and the dark spots are where we are in the dark . If that was the map of all the words in American English , we do n't know very much . And we do n't even know the shape of the language . If this was the dictionary -- if this was the map of American English -- look , we have a kind of lumpy idea of Florida , but there 's no California ! We 're missing California from American English . We just do n't know enough , and we do n't even know we 're missing California . We do n't even see that there 's a gap on the map . So again , lexicography is not rocket science . But even if it were , rocket science is being done by dedicated amateurs these days. You know ? It ca n't be that hard to find some words ! So , enough scientists in other disciplines are really asking people to help , and they 're doing a good job of it . For instance : there 's eBird , where amateur birdwatchers can upload information about their bird sightings . And then ornithologists can go and help track populations , migrations , et cetera . And there 's this guy Mike Oates . Mike Oates lives in the U. K. He 's a director of an electroplating company . He 's found more than 140 comets . He 's found so many comets , they named a comet after him . It 's kind of out past Mars -- it 's a hike . I do n't think he 's getting his picture taken there anytime soon . But he found 140 comets without a telescope . He downloaded data from the NASA SOHO satellite , and that 's how he found them . If we can find comets without a telescope , should n't we be able to find words ? Now , y'all know where I 'm going with this . Because I 'm going to the Internet , which is where everybody goes . And the Internet is great for collecting words , because the Internet 's full of collectors . And this is a little-known technological fact about the Internet , but the Internet is actually made up of words and enthusiasm . And words and enthusiasm actually happen to be the recipe for lexicography . Is n't that great ? So there are a lot of really good word-collecting sites out there right now , but the problem with some of them is that they 're not scientific enough . They show the word , but they do n't show any context : Where did it come from ? Who said it ? What newspaper was it in ? What book ? Because a word is like an archaeological artifact . If you do n't know the provenance or the source of the artifact , it 's not science -- it 's a pretty thing to look at . So a word without its source is like a cut flower . You know -- it 's pretty to look at for a while , but then it dies . It dies too fast . So this whole time I 've been saying , " The dictionary , the dictionary , the dictionary , the dictionary . " Not " a dictionary , " or " dictionaries . " And that 's because -- well , people use the dictionary to stand for the whole language . They use it synecdochically -- and one of the problems of knowing a word like " synecdochically " is that you really want an excuse to say synecdochically . This whole talk has just been an excuse to get me to the point where I could say synecdochically to all of you . So I 'm really sorry . But when you use a part of something -- like the dictionary is a part of the language , or a flag stands for the United States , a symbol of the country -- then you 're using it synecdochically . But the thing is , we could make the dictionary the whole language . If we get a bigger pan , then we can put all the words in . We can put in all the meanings . Does n't everyone want more meaning in their lives ? And we can make the dictionary not just be a symbol of the language -- we can make it be the whole language . You see , what I 'm really hoping for is that my son -- who turns seven this month -- I want him to barely remember that this is the form factor that dictionaries used to come in . This is what dictionaries used to look like . I want him to think of this kind of dictionary as an eight-track tape . It 's a format that died because it was n't useful enough . It was n't really what people needed . And the thing is , if we can put in all the words , no longer have that artificial distinction between good and bad , we can really describe the language like scientists . We can leave the aesthetic judgments to the writers and the speakers . If we can do that , then I can spend all my time fishing and I do n't have to be a traffic cop anymore . Thank you very much for your kind attention . </text>
<text id="TediMillerA_News_EN.txt">
﻿ How does the news shape the way we see the world ? Here 's the world based on the way it looks -- based on land mass . And here 's how news shapes what Americans see . This map -- ( Applause ) -- this map shows the number of seconds that American network and cable news organizations dedicated to news stories , by country , in February of 2007 -- just one year ago . Now , this was a month when North Korea agreed to dismantle its nuclear facilities . There was massive flooding in Indonesia . And in Paris , the IPCC released its study confirming man 's impact on global warming . The U. S. accounted for 79 percent of total news coverage . And when we take out the U. S. and look at the remaining 21 percent , we see a lot of Iraq -- that 's that big green thing there -- and little else . The combined coverage of Russia , China and India , for example , reached just one percent . When we analyzed all the news stories and removed just one story , here 's how the world looked . What was that story ? The death of Anna Nicole Smith . This story eclipsed every country except Iraq , and received 10 times the coverage of the IPCC report . And the cycle continues ; as we all know , Britney has loomed pretty large lately . So why do n't we hear more about the world ? One reason is that news networks have reduced the number of their foreign bureaus by half . Aside from one-person ABC mini-bureaus in Nairobi , New Delhi and Mumbai , there are no network news bureaus in all of Africa , India or South America -- places that are home to more than two billion people . The reality is that covering Britney is cheaper . And this lack of global coverage is all the more disturbing when we see where people go for news . Local TV news looms large , and unfortunately only dedicates 12 percent of its coverage to international news . And what about the web ? The most popular news sites do n't do much better . Last year , Pew and the Colombia J-School analyzed the 14,000 stories that appeared on Google News ' front page . And they , in fact , covered the same 24 news events . Similarly , a study in e-content showed that much of global news from U. S. news creators is recycled stories from the AP wire services and Reuters , and do n't put things into a context that people can understand their connection to it . So , if you put it all together , this could help explain why today 's college graduates as well as less educated Americans know less about the world than their counterparts did 20 years ago . And if you think it 's simply because we are not interested , you would be wrong . In recent years , Americans who say they closely follow global news most of the time grew to over 50 percent . The real question : is this distorted world view what we want for Americans in our increasingly interconnected world ? I know we can do better . And can we afford not to ? Thank you . </text>
<text id="TediNatchweyJ_WarPhotos_EN.txt">
﻿ As someone who has spent his entire career trying to be invisible , standing in front of an audience is a cross between an out-of-body experience and a deer caught in the headlights , so please forgive me for violating one of the TED commandments by relying on words on paper , and I only hope I 'm not struck by lightning bolts before I 'm done . I 'd like to begin by talking about some of the ideas that motivated me to become a documentary photographer . I was a student in the '60s , a time of social upheaval and questioning , and on a personal level , an awakening sense of idealism . The war in Vietnam was raging , the Civil Rights Movement was under way , and pictures had a powerful influence on me . Our political and military leaders were telling us one thing , and photographers were telling us another . I believed the photographers , and so did millions of other Americans . Their images fueled resistance to the war and to racism . They not only recorded history , they helped change the course of history . Their pictures became part of our collective consciousness and , as consciousness evolved into a shared sense of conscience , change became not only possible , but inevitable . I saw that the free flow of information represented by journalism , specifically visual journalism , can bring into focus both the benefits and the cost of political policies . It can give credit to sound decision making , adding momentum to success . In the face of poor political judgment or political inaction , it becomes a kind of intervention , assessing the damage and asking us to reassess our behavior . It puts a human face on issues which from afar can appear abstract or ideological or monumental in their global impact . What happens at ground level , far from the halls of power , happens to ordinary citizens one by one . And I understood that documentary photography has the ability to interpret events from their point of view . It gives a voice to those who otherwise would not have a voice . And as a reaction , it stimulates public opinion and gives impetus to public debate , thereby preventing the interested parties from totally controlling the agenda , much as they would like to . Coming of age in those days made real the concept that the free flow of information is absolutely vital for a free and dynamic society to function properly . The press is certainly a business , and in order to survive it must be a successful business , but the right balance must be found between marketing considerations and journalistic responsibility . Society 's problems ca n't be solved until they 're identified . On a higher plane , the press is a service industry , and the service it provides is awareness . Every story does not have to sell something . There 's also a time to give . That was a tradition I wanted to follow . Seeing the war created such incredibly high stakes for everyone involved and that visual journalism could actually become a factor in conflict resolution , I wanted to be a photographer in order to be a war photographer . But I was driven by an inherent sense that a picture that revealed the true face of war would almost by definition be an anti-war photograph . I 'd like to take you on a visual journey through some of the events and issues I 've been involved in over the past 25 years . In 1981 , I went to Northern Ireland . 10 IRA prisoners were in the process of starving themselves to death in protest against conditions in jail . The reaction on the streets was violent confrontation . I saw that the front lines of contemporary wars are not on isolated battlefields , but right where people live . During the early '80s , I spent a lot of time in Central America , which was engulfed by civil wars that straddled the ideological divide of the Cold War . In Guatemala , the central government -- controlled by a oligarchy of European decent -- was waging a scorched earth campaign against an indigenous rebellion , and I saw an image that reflected the history of Latin America : conquest through a combination of the Bible and the sword . An anti-Sandinista guerrilla was mortally wounded as Commander Zero attacked a town in Southern Nicaragua . A destroyed tank belonging to Somoza 's national guard was left as a monument in a park in Managua , and was transformed by the energy and spirit of a child . At the same time , a civil war was taking place in El Salvador , and again , the civilian population was caught up in the conflict . I 've been covering the Palestinian-Israeli conflict since 1981. This is a moment from the beginning of the second intifada , in 2000 , when it was still stones and Molotovs against an army . In 2001 , the uprising escalated into an armed conflict , and one of the major incidents was the destruction of the Palestinian refugee camp in the West Bank town of Jenin . Without the political world to find common ground , the continual friction of tactic and counter-tactic only creates suspicion and hatred and vengeance , and perpetuates the cycle of violence . In the '90s , after the breakup of the Soviet Union , Yugoslavia fractured along ethnic fault lines , and civil war broke out between Bosnia , Croatia and Serbia . This is a scene of house-to-house fighting in Mostar , neighbor against neighbor . A bedroom , the place where people share intimacy , where life itself is conceived , became a battlefield . A mosque in northern Bosnia was destroyed by Serbian artillery and was used as a makeshift morgue . Dead Serbian soldiers were collected after a battle and used as barter for the return of prisoners or Bosnian soldiers killed in action . This was once a park . The Bosnian soldier who guided me told me that all of his friends were there now . At the same time in South Africa , after Nelson Mandela had been released from prison , the black population commenced the final phase of liberation from apartheid . One of the things I had to learn as a journalist was what to do with my anger . I had to use it , channel its energy , turn it into something that would clarify my vision , instead of clouding it . In Transkei , I witnessed a rite of passage into manhood , of the Xhosa tribe . Teenage boys lived in isolation , their bodies covered with white clay . After several weeks , they washed off the white and took on the full responsibilities of men . It was a very old ritual that seemed symbolic of the political struggle that was changing the face of South Africa . Children in Soweto playing on a trampoline . Elsewhere in Africa there was famine . In Somalia , the central government collapsed and clan warfare broke out . Farmers were driven off their land , and crops and livestock were destroyed or stolen . Starvation was being used as a weapon of mass destruction -- primitive but extremely effective . Hundreds of thousands of people were exterminated , slowly and painfully . The international community responded with massive humanitarian relief , and hundreds of thousands of more lives were saved . American troops were sent to protect the relief shipments , but they were eventually drawn into the conflict , and after the tragic battle in Mogadishu , they were withdrawn . In southern Sudan , another civil war saw similar use of starvation as a means of genocide . Again , international NGOs , united under the umbrella of the UN , staged a massive relief operation and thousands of lives were saved . I 'm a witness , and I want my testimony to be honest and uncensored . I also want it to be powerful and eloquent , and to do as much justice as possible to the experience of the people I 'm photographing . This man was in an NGO feeding center , being helped as much as he could be helped . He literally had nothing . He was a virtual skeleton , yet he could still summon the courage and the will to move . He had not given up , and if he did n't give up , how could anyone in the outside world ever dream of losing hope ? In 1994 , after three months of covering the South African election , I saw the inauguration of Nelson Mandela , and it was the most uplifting thing I 've ever seen . It exemplified the best that humanity has to offer . The next day I left for Rwanda , and it was like taking the express elevator to hell . This man had just been liberated from a Hutu death camp . He allowed me to photograph him for quite a long time , and he even turned his face toward the light , as if he wanted me to see him better . I think he knew what the scars on his face would say to the rest of the world . This time , maybe confused or discouraged by the military disaster in Somalia , the international community remained silent , and somewhere around 800,000 people were slaughtered by their own countrymen -- sometimes their own neighbors -- using farm implements as weapons . Perhaps because a lesson had been learned by the weak response to the war in Bosnia and the failure in Rwanda , when Serbia attacked Kosovo international action was taken much more decisively . NATO forces went in , and the Serbian army withdrew . Ethnic Albanians had been murdered , their farms destroyed and a huge number of people forcibly deported . They were received in refugee camps set up by NGOs in Albania and Macedonia . The imprint of a man who had been burned inside his own home . The image reminded me of a cave painting , and echoed how primitive we still are in so many ways . Between 1995 and '96 , I covered the first two wars in Chechnya from inside Grozny . This is a Chechen rebel on the front line against the Russian army . The Russians bombarded Grozny constantly for weeks , killing mainly the civilians who were still trapped inside . I found a boy from the local orphanage wandering around the front line . My work has evolved from being concerned mainly with war to a focus on critical social issues as well . After the fall of Ceausescu , I went to Romania and discovered a kind of gulag of children , where thousands of orphans were being kept in medieval conditions . Ceausescu had imposed a quota on the number of children to be produced by each family , thereby making women 's bodies an instrument of state economic policy . Children who could n't be supported by their families were raised in government orphanages . Children with birth defects were labeled incurables , and confined for life to inhuman conditions . As reports began to surface , again international aid went in . Going deeper into the legacy of the Eastern European regimes , I worked for several months on a story about the effects of industrial pollution , where there had been no regard for the environment or the health of either workers or the general population . An aluminum factory in Czechoslovakia was filled with carcinogenic smoke and dust , and four out of five workers came down with cancer . After the fall of Suharto in Indonesia , I began to explore conditions of poverty in a country that was on its way towards modernization . I spent a good deal of time with a man who lived with his family on a railway embankment and had lost an arm and a leg in a train accident . When the story was published , unsolicited donations poured in . A trust fund was established , and the family now lives in a house in the countryside and all their basic necessities are taken care of . It was a story that was n't trying to sell anything . Journalism had provided a channel for people 's natural sense of generosity , and the readers responded . I met a band of homeless children who 'd come to Jakarta from the countryside , and ended up living in a train station . By the age of 12 or 14 , they 'd become beggars and drug addicts . The rural poor had become the urban poor , and in the process they 'd become invisible . These heroin addicts in detox in Pakistan reminded me of figures in a play by Beckett : isolated , waiting in the dark , but drawn to the light . Agent Orange was a defoliant used during the Vietnam War to deny cover to the Vietcong and the North Vietnamese army . The active ingredient was dioxin , an extremely toxic chemical that was sprayed in vast quantities , and whose effects passed through the genes to the next generation . In 2000 , I began documenting global health issues , concentrating first on AIDS in Africa . I tried to tell the story through the work of caregivers . I thought it was important to emphasize that people were being helped , whether by international NGOs or by local grassroots organizations . So many children have been orphaned by the epidemic that grandmothers have taken the place of parents , and a lot of children had been born with HIV . A hospital in Zambia . I begun documenting the close connection between HIV/AIDS and tuberculosis . This is an MSF hospital in Cambodia . My pictures can play a supporting role to the work of NGOs by shedding light on the critical social problems they 're trying to deal with . I went to Congo with MSF , and contributed to a book and an exhibition that focused attention on a forgotten war in which millions of people have died , and exposure to disease without treatment is used as a weapon . A malnourished child being measured as part of the supplemental feeding program . In the fall of 2004 I went to Darfur . This time I was on an assignment for a magazine , but again worked closely with MSF . The international community still has n't found a way to create the pressure necessary to stop this genocide . An MSF hospital in a camp for displaced people . I 've been working on a long project on crime and punishment in America . This is a scene from New Orleans . A prisoner on a chain gang in Alabama was punished by being handcuffed to a post in the midday sun . This experience raised a lot of questions , among them questions about race and equality and for whom in our country opportunities and options are available . In the yard of a chain gang in Alabama . I did n't see either of the planes hit . When I glanced out my window , I saw the first tower burning , and I thought it might have been an accident . A few minutes later when I looked again and saw the second tower burning , I knew we were at war . In the midst of the wreckage at Ground Zero , I had a realization . I 'd been photographing in the Islamic world since 1981 -- not only in the Middle East , but also in Africa , Asia and Europe . At the time I was photographing in these different places , I thought I was covering separate stories . But on 9/11 history crystallized , and I understood I 'd actually been covering a single story for more than 20 years , and the attack on New York was its latest manifestation . The central commercial district of Kabul , Afghanistan at the end of the civil war , shortly before the city fell to the Taliban . Land mine victims being helped at the Red Cross rehab center being run by Alberto Cairo . A boy who lost a leg to a leftover mine . I 'd witnessed immense suffering in the Islamic world from political oppression , civil war , foreign invasions , poverty , famine . I understood that in its suffering , the Islamic world had been crying out . Why were n't we listening ? A Taliban fighter shot during a battle as the Northern Alliance entered the city of Kunduz . When war with Iraq was imminent , I realized the American troops would be very well covered , so I decided to cover the invasion from inside Baghdad . A marketplace was hit by a mortar shell that killed several members of a single family . A day after American forces entered Baghdad , a company of Marines began rounding up bank robbers and were cheered on by the crowds -- a hopeful moment that was short lived . For the first time in years , Shi'ites were allowed to make the pilgrimage to Karbala to observe Ashura , and I was amazed by the sheer number of people and how fervently they practiced their religion . A group of men march through the streets cutting themselves with knives . It was obvious that the Shi'ites were a force to be reckoned with , and we would do well to understand them and learn how to deal with them . Last year I spent several months documenting our wounded troops , from the battlefield in Iraq all the way home . This is a helicopter medic giving CPR to a soldier who had been shot in the head . Military medicine has become so efficient that the percentage of troops who survive after being wounded is much higher in this war than in any other war in our history . The signature weapon of the war is the IED , and the signature wound is severe leg damage . After enduring extreme pain and trauma , the wounded face a grueling physical and psychological struggle in rehab . The spirit they displayed was absolutely remarkable . I tried to imagine myself in their place , and I was totally humbled by their courage and determination in the face of such catastrophic loss . Good people had been put in a very bad situation for questionable results . One day in rehab someone , started talking about surfing and all these guys who 'd never surfed before said , " Hey , lets go . " And they went surfing . Photographers go to the extreme edges of human experience to show people what 's going on . Sometimes they put their lives on the line , because they believe your opinions and your influence matter . They aim their pictures at your best instincts , generosity , a sense of right and wrong , the ability and the willingness to identify with others , the refusal to accept the unacceptable . My TED wish : there 's a vital story that needs to be told , and I wish for TED to help me gain access to it and then to help me come up with innovative and exciting ways to use news photography in the digital era . Thank you very much . ( Applause ) </text>
<text id="TediOConnellA_Quantum_EN.txt">
﻿ This is a representation of your brain . And your brain can be broken into two parts . There 's the left half , which is the logical side , and then the right half , which is the intuitive . And so if we had a scale to measure the aptitude of each hemisphere , then we can plot our brain . And for example , this would be somebody who 's completely logical . This would be someone who 's entirely intuitive . So where would you put your brain on this scale ? Some of us may have opted for one of these extremes , but I think for most people in the audience , your brain is something like this -- with a high aptitude in both hemispheres at the same time . It 's not like they 're mutually exclusive or anything . You can be logical and intuitive . And so I consider myself one of these people , along with most of the other experimental quantum physicists , who need a good deal of logic to string together these complex ideas . But at the same time , we need a good deal of intuition to actually make the experiments work . How do we develop this intuition ? Well we like to play with stuff . So we go out and play with it , and then we see how it acts . And then we develop our intuition from there . And really you do the same thing . So some intuition that you may have developed over the years is that one thing is only in one place at a time . I mean , it can sound weird to think about one thing being in two different places at the same time , but you were n't born with this notion , you developed it . And I remember watching a kid playing on a car stop . He was just a toddler and he was n't very good at it , and he kept falling over . But I bet playing with this car stop taught him a really valuable lesson , and that 's that large things do n't let you get right past them , and that they stay in one place . And so this is a great conceptual model to have of the world , unless you 're a particle physicist . It 'd be a terrible model for a particle physicist , because they do n't play with car stops , they play with these little weird particles . And when they play with their particles , they find they do all sorts of really weird things -- like they can fly right through walls , or they can be in two different places at the same time . And so they wrote down all these observations , and they called it the theory of quantum mechanics . And so that 's where physics was at a few years ago ; you needed quantum mechanics to describe little , tiny particles . But you did n't need it to describe the large , everyday objects around us . This did n't really sit well with my intuition , and maybe it 's just because I do n't play with particles very often . Well , I play with them sometimes , but not very often . And I 've never seen them . I mean , nobody 's ever seen a particle . But it did n't sit well with my logical side either . Because if everything is made up of little particles and all the little particles follow quantum mechanics , then should n't everything just follow quantum mechanics ? I do n't see any reason why it should n't . And so I 'd feel a lot better about the whole thing if we could somehow show that an everyday object also follows quantum mechanics . So a few years ago , I set off to do just that . So I made one . This is the first object that you can see that has been in a mechanical quantum superposition . So what we 're looking at here is a tiny computer chip . And you can sort of see this green dot right in the middle . And that 's this piece of metal I 'm going to be talking about in a minute . This is a photograph of the object . And here I 'll zoom-in a little bit . We 're looking right there in the center . And then here 's a really , really big close-up of the little piece of metal . So what we 're looking at is a little chunk of metal , and it 's shaped like a diving board , and it 's sticking out over a ledge . And so I made this thing in nearly the same way as you make a computer chip . I went into a clean room with a fresh silicon wafer , and then I just cranked away at all the big machines for about 100 hours . For the last stuff , I had to build my own machine -- to make this swimming pool-shaped hole underneath the device . This device has the ability to be in a quantum superposition , but it needs a little help to do it . Here , let me give you an analogy . You know how uncomfortable it is to be in a crowded elevator ? I mean , when I 'm in an elevator all alone , I do all sorts of weird things , but then other people get on board and I stop doing those things , because I do n't want to bother them , or , frankly , scare them . So quantum mechanics says that inanimate objects feel the same way . The fellow passengers for inanimate objects are not just people , but it 's also the light shining on it and the wind blowing past it and the heat of the room . And so we knew , if we wanted to see this piece of metal behave quantum mechanically , we 're going to have to kick out all the other passengers . And so that 's what we did . We turned off the lights , and then we put it in a vacuum and sucked out all the air , and then we cooled it down to just a fraction of a degree above absolute zero . Now , all alone in the elevator , the little chunk of metal is free to act however it wanted . And so we measured its motion . We found it was moving in really weird ways . Instead of just sitting perfectly still , it was vibrating . And the way it was vibrating was breathing something like this -- like expanding and contracting bellows . And by giving it a gentle nudge , we were able to make it both vibrate and not vibrate at the same time -- something that 's only allowed with quantum mechanics . So what I 'm telling you here is something truly fantastic . What does it mean for one thing to be both vibrating and not vibrating at the same time ? So let 's think about the atoms . So one case : all the trillions of atoms that make up that chunk of metal are sitting still and at the same time those same atoms are moving up and down . Now it 's only at precise times when they align . The rest of the time they 're delocalized . That means that every atom is in two different places at the same time , which in turn means the entire chunk of metal is in two different places . I think this is really cool . ( Laughter ) Really . ( Applause ) It was worth locking myself in a clean room to do this for all those years . Because , check this out , the difference in scale between a single atom and that chunk of metal is about the same as the difference between that chunk of metal and you . So if a single atom can be in two different places at the same time , that chunk of metal can be in two different places , then why not you ? I mean , this is just my logical side talking . So imagine if you 're in multiple places at the same time , what would that be like ? How would your consciousness handle your body being delocalized in space ? There 's one more part to the story . It 's when we warmed it up , and we turned on the lights and looked inside the box , we saw that the piece metal was still there in one piece . And so I had to develop this new intuition , that it seems like all the objects in the elevator are really just quantum objects just crammed into a tiny space . You hear a lot of talk about how quantum mechanics says that everything is all interconnected . Well , that 's not quite right ; it 's more than that , it 's deeper . It 's that those connections , your connections to all the things around you , literally define who you are . And that 's the profound weirdness of quantum mechanics . Thank you . ( Applause ) </text>
<text id="TediRoslingH_Poverty_EN.txt">
﻿ I told you three things last year . I told you that the statistics of the world have not been made properly available . Because of that , we still have the old mindset of developing and industrialized countries , which is wrong . And that animated graphics can make a difference . Things are changing . And today , on the United Nations Statistic Division Home Page , it says , by first of May , full access to the databases . ( Applause ) And if I could share the image with you on the screen . So three things had happened . U. N. opened their statistic databases , and we have a new version of the software up working as a beta on the net , so you do n't have to download it any longer . And let me repeat what you saw last year . The bubbles are the countries . Here you have the fertility rate -- the number of children per woman -- and there you have the length of life in years . This is 1950 -- those were the industrialized countries , those were developing countries . At that time there was a " we " and " them . " There was a huge difference in the world . But then it changed , and it went on quite well . And this is what happens . You can see how China is the red , big bubble ; the blue there is India . And they go over all this ... I 'm going to try to be a little more serious this year in showing you how things really changed . And it 's Africa which stands out as the problem down here , does n't it ? Large families still , and the HIV epidemic brought down the countries like this . This is more or less what we saw last year , and this is how it will go on into the future . And I will talk on , is this possible ? Because you see now , I presented statistics that do n't exist . Because this is where we are . Will it be possible that this will happen ? I cover my lifetime here , you know ? I expect to live 100 years . And this is where we are today . Now could we look here at instead the economic situation in the world ? And I would like to show that against child survival . We 'll swap the axis : here you have child mortality -- that is , survival -- four kids dying there , 200 dying there . And this is GDP per capita on this axis . And this was 2007. And if I go back in time , I 've added some historical statistics -- here we go , here we go , here we go -- not so much statistics 100 years ago . Some countries still had statistics . We are looking down in the archive , and where we are down into 1820 , there is only Austria and Sweden that can produce numbers . ( Laughter ) But they were down here , they had 1,000 dollars per person per year . And they lost one-fifth of their kids before their first birthday . So this is what happens in the world , if we play the entire world . How they got slowly richer and richer , and they add statistics . Is n't it beautiful when they get statistics ? You see the importance of that ? And here , children do n't live longer . The last century , 1870 , was bad for the kids in Europe , because most of this statistics is Europe . It was only by the turn of the century that more than 90 percent of the children survived their first year . This is India coming up , with the first data from India . And this is the United States moving away here , earning more money . And we will soon see China coming up in the very far end corner here . And it moves up with Mao Tse-Tung getting health , not getting so rich . There he died , then Deng Xiaoping brings money , it moves this way over here . And the bubbles keep moving up there , and this is what the world looks like today . ( Applause ) Let us have a look at the United States . We have a function here -- I can tell the world , " Stay where you are . " And I take the United States -- we still want to see the background -- I put them up like this , and now we go backwards . And we can see that the United States goes to the right of the mainstream . They are on the money side all the time . And down in 1915 , the United States was a neighbor of India -- present , contemporary India . And that means United States was richer , but lost more kids than India is doing today , proportionally . And look here -- compare to the Philippines of today . The Philippines of today has almost the same economy as the United States during the First World War . But we have to bring United States forward quite a while to find the same health of the United States as we have in the Philippines . About 1957 here , the health of the United States is the same as the Philippines . And this is the drama of this world which many call globalized , is that Asia , Arabic countries , Latin America , are much more ahead in being healthy , educated , having human resources than they are economically . There 's a discrepancy in what 's happening today in the emerging economies . There now , social benefits , social progress , are going ahead of economical progress . And 1957 -- the United States had the same economy as Chile has today . And how long do we have to bring United States to get the same health as Chile has today ? I think we have to go , there -- we have 2001 , or 2002 -- the United States has the same health than Chile . Chile 's catching up ! Within some years Chile may have better child survival than the United States . This is really a change , that you have this lag of more or less 30 , 40 years ' difference on the health . And behind the health is the educational level . And there 's a lot of infrastructure things , and general human resources are there . Now we can take away this -- and I would like to show you the rate of speed , the rate of change , how fast they have gone . And we go back to 1920 , and I want to look at Japan . And I want to look at Sweden and the United States . And I 'm going to stage a race here between this sort of yellowish Ford here and the red Toyota down there , and the brownish Volvo . ( Laughter ) And here we go , here we go . The Toyota has a very bad start down here , you can see , and the United States Ford is going off-road there . And the Volvo is doing quite fine . This is the war . The Toyota got off track , and now the Toyota is coming on the healthier side of Sweden -- can you see that ? And they are taking over Sweden , and they are now healthier than Sweden . That 's the part where I sold the Volvo and bought the Toyota . ( Laughter ) And now we can see that the rate of change was enormous in Japan . They really caught up . And this changes gradually . We have to look over generations to understand it . And let me show you my own sort of family history -- we made these graphs here . And this is the same thing , money down there , and health , you know ? And this is my family . This is Sweden , 1830 , when my great-great-grandma was born . Sweden was like Sierra Leone today . And this is when great-grandma was born , 1863. And Sweden was like Mozambique . And this is when my grandma was born , 1891. She took care of me as a child , so I 'm not talking about statistic now -- now it 's oral history in my family . That 's when I believe statistics , when it 's grandma-verified statistics . ( Laughter ) I think it 's the best way of verifying historical statistics . Sweden was like Ghana . It 's interesting to see the enormous diversity within sub-Saharan Africa . I told you last year , I 'll tell you again , my mother was born in Egypt , and I -- who am I ? I 'm the Mexican in the family . And my daughter , she was born in Chile , and the grand-daughter was born in Singapore , now the healthiest country on this Earth . It bypassed Sweden about two to three years ago , with better child survival . But they 're very small , you know . They 're so close to the hospital we can never beat them out in these forests . ( Laughter ) But homage to Singapore . Singapore are the best ones , now . Now this looks also like a very good story . But it 's not really that easy , that it 's all a good story . Because I have to show you one of the other facility . We can also make the color here represent the variable -- and what am I choosing here ? Carbon-dioxide emission , metric ton per capita . This is 1962 , and United States was emitting 16 tons per person . And China was emitting 0.6 , and India was emitting 0.32 tons per capita . And what happens when we moved on ? Well , you see the nice story of getting richer and getting healthier -- everyone did it at the cost of emission of carbon dioxide . There is no one who has done it so far . And we do n't have all the updated data any longer , because this is really hot data today . And there we are , 2001. And in the discussion I attended with global leaders , you know , many say now , the problem is the emerging economies , they are getting out too much carbon dioxide . The Minister of the Environment of India said , " Well , you were the one who caused the problem . " The OECD countries -- the high-income countries -- they were the ones who caused the climate change . " But we forgive you , because you did n't know it . But from now on , we count per capita . From now on we count per capita . And everyone is responsible for the per capita emission . " This really shows you , we have not seen good economic and health progress anywhere in the world without destroying the climate . And this is really what has to be changed . I 've been criticized for showing you a too positive image of the world , but I do n't think it 's like this . The world is quite a messy place . This we can call Dollar Street . Everyone lives on this street here . What they earn here -- what number they live on -- is how much they earn per day . This family earns about one dollar per day . We drive up the street here , we find a family here which earns about two to three dollars a day . And we drive away here -- we find the first garden in the street , and they earn 10 to 50 dollars a day . And how do they live ? If we look at the bed here , we can see that they sleep on a rug on the floor . This is what poverty line is -- 80 percent of the family income is just to cover the energy needs , the food for the day . This is two to five dollars , you have a bed . And here it 's a much nicer bedroom , you can see . I lectured on this for Ikea , and they wanted to see the sofa immediately here . ( Laughter ) And this is the sofa , how it will emerge from there . And the interesting thing , when you go around here in the photo panorama , you see the family still sitting on the floor there , although there is a sofa . If you watch in the kitchen , you can see that the great difference for women does not come between one to 10 dollar . It comes beyond here , when you really can get good working conditions in the family . And if you really want to see the difference , you look at the toilet over here . This can change , this can change . These are all pictures and images from Africa , and it can become much better . We can get out of poverty . My own research has not been in IT or anything like this . I spent 20 years in interviews with African farmers who were on the verge of famine . And this is the result of the farmers-needs research . The nice thing here is that you ca n't see who are the researchers in this picture . That 's when research functions for societies -- you must really live with the people . When you 're in poverty , everything is about survival . It 's about having food . And these two young farmers , they are girls now -- because the parents are dead from HIV and AIDS -- they discuss with a trained agronomist . This is one of the best agronomists in Malawi , Junatambe Kumbira , and he 's discussing what sort of cassava they will plant -- the best converter of sunshine to food that man has found . And they are very , very eagerly interested to get advice , and that 's to survive in poverty . That 's one context . Getting out of poverty . The women told us one thing . " Get us technology . We hate this mortar , to stand hours and hours . Get us a mill so that we can mill our flour , then we will be able to pay for the rest ourselves . " Technology will bring you out of poverty , but there 's a need for a market to get away from poverty . And this woman is very happy now , bringing her products to the market . But she 's very thankful for the public investment in schooling so she can count , and wo n't be cheated when she reaches the market . She wants her kid to be healthy , so she can go to the market and does n't have to stay home . And she wants the infrastructure -- it is nice with a paved road There 's also good with credit . Micro-credits gave her the bicycle , you know . And information will tell her when to go to market with which product . You can do this . I find my experience from 20 years of Africa is that the seemingly impossible is possible . Africa has not done bad . In 50 years they 've gone from a pre-Medieval situation to a very decent 100-year-ago Europe , with a functioning nation and state . I would say that sub-Saharan Africa has done best in the world during the last 50 years . Because we do n't consider where they came from . It 's this stupid concept of developing countries which puts us , Argentina and Mozambique together 50 years ago , and says that Mozambique did worse . We have to know a little more about the world . I have a neighbor who knows 200 types of wine . He knows everything . He knows the name of the grape , the temperature and everything . I only know two types of wine -- red and white . ( Laughter ) But my neighbor only knows two types of countries -- industrialized and developing . And I know 200 , I know about the small data . But you can do that . ( Applause ) But I have to get serious . And how do you get serious ? You make a PowerPoint , you know ? ( Laughter ) Homage to the Office package , no ? What is this , what is this , what am I telling ? I 'm telling you that there are many dimensions of development . Everyone wants your pet thing . If you are in the corporate sector , you love micro-credit . If you are fighting in a non-governmental organization , you love equity between gender . Or if you are a teacher , you 'll love UNESCO , and so on . On the global level , we have to have more than our own thing . We need everything . All these things are important for development , especially when you just get out of poverty and you should go towards welfare . Now , what we need to think about is , what is a goal for development , and what are the means for development ? Let me first grade what are the most important means . Economic growth to me , as a public-health professor , is the most important thing for development , because it explains 80 percent of survival . Governance . To have a government that functions -- that 's what brought California out of the misery of 1850. It was the government which made law function finally . Education , human resources are important . Health is also important , but not that much as a mean . Environment is important . Human rights is also important , but it just gets one cross . Now what about goals ? Where are we going toward ? We are not interested in money . Money is not a goal . It 's the best mean , but I give it zero as a goal . Governance , well it 's fun to vote in a little thing , but it 's not a goal . And going to school , that 's not a goal , it 's a mean . Health I give two points . I mean it 's nice to be healthy -- at my age especially -- you can stand here , you 're healthy . And that 's good , it gets two plusses . Environment is very , very crucial . There 's nothing for the grandkid if you do n't save up . But where are the important goals ? Of course , it 's human rights . Human rights is the goal , but it 's not that strong of a mean for achieving development . And culture . Culture is the most important thing , I would say , because that 's what brings joy to life . That 's the value of living . So the seemingly impossible is possible . Even African countries can achieve this . And I 've shown you the shot where the seemingly impossible is possible . And remember , please remember my main message , which is this : the seemingly impossible is possible . We can have a good world . I showed you the shots , I proved it in the PowerPoint , and I think I will convince you also by culture . ( Laughter ) ( Applause ) Bring me my sword ! Sword swallowing is from ancient India . It 's a cultural expression that for thousands of years has inspired human beings to think beyond the obvious . ( Laughter ) And I will now prove to you that the seemingly impossible is possible by taking this piece of steel -- solid steel -- this is the army bayonet from the Swedish Army , 1850 , in the last year we had war . And it 's all solid steel -- you can hear here . And I 'm going to take this blade of steel , and push it down through my body of blood and flesh , and prove to you that the seemingly impossible is possible . Can I request a moment of absolute silence ? ( Applause ) </text>
<text id="TediSinclairC_OpenArchitech_EN.txt">
﻿ I 'm going to take you on a journey very quickly . To explain the wish , I 'm going to have to take you somewhere which many people have n't been , and that 's around the world . When I was about 24 years old , Kate Store and myself started an organization to get architects and designers involved in humanitarian work . Not only about responding to natural disasters , but involved in systemic issues . We believed that where the resources and expertise are scarce , innovative , sustainable design can really make a difference in people 's lives . So this all began my -- I started my life as an architect , or training as an architect , and I was always interested in socially responsible design , and how you can really make an impact . But when I went to architectural school , it seemed that I was the black sheep in the family . Many architects seemed to think that when you design , you design a jewel , and it 's a jewel that you try and crave for . Whereas I felt that when you design , you either improve or you create a detriment to the community in which you 're designing in . So you 're not just doing a building for the residents or for the people who are going to use it , but for the community as a whole . And in 1999 , we started by responding to the issue of the housing crisis for returning refugees in Kosovo and I did n't know what I was doing , like I say , mid-20s , and I 'm the , I 'm the Internet generation , so we started a website . We put a call out there , and to my surprise in a couple of months we had hundreds of entries from around the world . That led to a number of prototypes being built and really experimenting with some ideas . Two years later we started doing a project on developing mobile health clinics in sub-Saharan Africa , responding to the HIV/AIDS pandemic . That -- that led to 550 entries from 53 countries . We also have designers from around the world that participate . And we had an exhibit of work that followed that . 2004 was the tipping point for us . We started responding to natural disasters and getting involved in Iran and Bam , also following up on our work in Africa . Working within the United States , most people look at poverty and they see the face of a foreigner , but go live -- I live in Bozeman , Montana -- go up to the north plains on the reservations , or go down to Alabama or Mississippi pre-Katrina , and I could have shown you places that have far worse conditions than many developing countries I 've been to . So we got involved in and worked in inner cities and elsewhere . And then also I will go into some more projects . 2005 Mother Nature kicked our arse . I think we can pretty much assume that 2005 was a horrific year when it comes to natural disasters . And because of the Internet , and because of connections to blogs and so forth , within literally hours of the tsunami , we were already raising funds , getting involved , working with people on the ground . We run from a couple of laptops in the first couple of days , I had 4,000 emails from people needing help . So we began to get involved in projects there , and I 'll talk about some others . And then of course , this year we 've been responding to Katrina , as well as following up on our reconstruction works . This is a brief overview . In 2004 , I really could n't manage the number of people who wanted to help , or the number of requests that I was getting . It was all coming into my laptop and cell phone . So we decided to embrace an open -- basically an open source model of business , that anyone , anywhere in the world , could start a local chapter , and they can get involved in local problems . Because I believe there is no such thing as Utopia . All problems are local . All solutions are local . So , and that means , you know , somebody who is based in , in Mississippi , knows more about Mississippi than I do . So what happened is , we used MeetUp and all these other kind of Internet tools , and we ended up having 40 chapters starting up , thousands of architects in 104 countries . So the , the bullet point -- sorry , I never do a suit , so I knew that I was going to take this off . OK , because I 'm going to do it very quick . So in the past seven years , this is n't just about nonprofit . What it showed me is that there 's a grassroots movement going on of socially responsible designers who really believe that this world has got a lot smaller , and that we have the opportunity -- not the responsibility , but the opportunity -- to really get involved in making change . ( Laughter ) I 'm adding that to my time . So what you do n't know is , we 've got these thousands of designers working around the world , connected basically by a website , and we have a staff of three . By doing something , the fact that nobody told us we could n't do it , we did it . And so there 's something to be said about naivete . So seven years later , we 've developed so that we 've got advocacy , instigation and implementation . We advocate for good design , not only through student workshops and lectures and public forums , op-eds , we have a book on humanitarian work , but also disaster mitigation and dealing with public policy . We can talk about FEMA , but that 's another talk . Instigation , developing ideas with communities and NGOs doing open-source design competitions . Referring , matchmaking with communities and then implementing -- actually going out there and doing the work , because when you invent , it 's never a reality until it 's built . So it 's really important that if we 're designing and trying to create change , we build that change . So here 's a select number of projects . Kosovo . This is Kosovo in '99 . We did an open design competition , like I said . It led to a whole variety of ideas , and this was n't about emergency shelter , but transitional shelter that would last five to 10 years , that would be placed next to the land the resident lived in , and that they would rebuild their own home . This was n't imposing an architecture on a community , this was giving them the tools and , and the space to allow them to rebuild and regrow the way they want to . We have from the sublime to the ridiculous , but they worked . This is an inflatable hemp house . It was built ; it works . This is a shipping container . Built and works . And a whole variety of ideas that not only dealt with architectural building , but also the issues of governance and the idea of creating communities through complex networks . So we 've engaged not just designers , but also , you know , a whole variety of technology-based professionals . Using rubble from destroyed homes to create new homes . Using strawbale construction , creating heat walls . And then something remarkable happened in '99 . We went to Africa , originally to look at the housing issue . Within three days , we realized the problem was not housing ; it was the growing pandemic of HIV/AIDS . And it was n't doctors telling us this ; it was actual villagers that we were staying with . And so we came up with the bright idea that instead of getting people to walk 10 , 15 kilometers to see doctors , you get the doctors to the people . And we started engaging the the medical community . And I thought , you know , we thought we were real bright , you know , sparks -- we 've come up with this great idea , mobile health clinics that can -- widely distributed throughout sub-Saharan Africa . And the community , the medical community there said , " We 've said this for the last decade . We know this . We just do n't know how to show this . " So in a way , we had taken a pre-existing need and shown solutions . And so again , we had a whole variety of ideas that came in . This one I personally love , because the idea that architecture is not just about solutions , but about raising awareness . This is a kenaf clinic . You get seed and you grow it in a plot of land , and then once -- and it grows 14 feet in a month . And on the fourth week , the doctors come and they mow out an area , put a tensile structure on the top and when the doctors have finished treating and seeing patients and villagers , you cut down the clinic and you eat it . It 's an Eat Your Own Clinic . ( Laughter ) So it 's dealing with the fact that if you have AIDS , you also need to have nutrition rates , and the idea that the idea of nutrition is as important as getting anti-retrovirals out there . So you know , this is a serious solution . This one I love . The idea is it 's not just a clinic -- it 's a community center . This looked at setting up trade routes and economic engines within the community , so it can be a self-sustaining project . Every one of these projects is sustainable . That 's not because I 'm a tree-hugging green person . It 's because when you live on four dollars a day , you 're living on survival and you have to be sustainable . You have to know where your energy is coming from . You have to know where your resource is coming from . And you have to keep the maintenance down . So this is about getting an economic engine , and then at night it turns into a movie theater . So it 's not an AIDS clinic . It 's a community center . So you can see ideas . And these ideas developed into prototypes , and they were eventually built . And currently as of this year , there are clinics rolling out in Nigeria and Kenya . From that we also developed Siyathemba , which was a project -- the community came to us and said , the problem is that the girls do n't have education . And we 're working in an area where young women between the ages of 16 and 24 have a 50 percent HIV/AIDS rate . And that 's not because they 're promiscuous , it 's because there 's no knowledge . And so we decided to look at the idea of sports and create a youth sports center that doubled as an HIV/AIDS outreach center , and the coaches of the girls ' team were also trained doctors . So that there would be a very slow way of developing kind of confidence in health care . And we picked nine finalists , and then those nine finalists were distributed throughout the entire region , and then the community picked their design . They said , this is our design , because it 's not only about engaging a community , it 's about empowering a community and about getting them to be a part of the rebuilding process . So the winning design is here , and then of course , we actually go and work with the community and the clients . So this is the designer . He 's out there working with the first ever women 's soccer team in Kwa-Zulu Natal , Siyathemba , and they can tell it better . Video : Well , my name is Sisi , because I work at the African center . I 'm a consultant and I 'm also the national football player for South Africa , Bafana Bafana , and I also play in the Vodacom League for the team called Tembisa , which has now changed to Siyathemba . This is our home ground . Cameron Sinclair : So I 'm going to show that later because I 'm running out of time . I can see Chris looking at me slyly . This was a connection , just a meeting with somebody who wanted to develop Africa 's first telemedicine center , in Tanzania . And we met , literally , a couple of months ago . We 've already developed a design , and the team is over there , working in partnership . This was a matchmaking , thanks to a couple of TEDsters : [ unclear ] Cheryl Heller and Andrew Zolli , who connected me with this amazing African woman . And we start construction in June , and it will be opened by TEDGlobal . So when you come to TEDGlobal , you can check it out . But what we 're known probably most for is dealing with disasters and development , and we 've been involved in a lot of issues , such as the tsunami and also things like Hurricane Katrina . This is a 370 dollar shelter that can be easily assembled . This is a community design . A community-designed community center . And what that means is we actually live and work with the community , and they 're part of the design process . The kids actually get involved in mapping out where the the community center should be , and then eventually , the community is actually , through skills training , end up building the building with us . Here is another school . This is what the U. N. gave these guys for six months -- 12 plastic tarps . This was in August . This was the replacement , and it 's supposed to last for two years . When the rain comes down , you ca n't hear a thing , and in the summer it 's about 140 degrees inside . So we said , if the rain 's coming down , let 's get fresh water . So every one of our schools have rain water collection systems , very low cost . A class , three classrooms and rainwater collection is five thousand dollars . This was raised by hot chocolate sales in Atlanta . It 's built by the parents of the kids . The kids are out there on-site , building the buildings . And it opened a couple of weeks ago , and there 's 600 kids that are now using the schools . ( Applause ) So , disaster hits home . We 've see the bad stories on CNN and Fox and all that , but we do n't see the good stories . Here is a community that got together and they said no to wait , to waiting . They formed a partnership , a diverse partnership of players to actually map out East Biloxi , to figure out who is getting involved . We 've had 1,500 volunteers rebuilding , rehabbing homes . Figuring out what FEMA regulations are , not waiting for them to dictate to us how you should rebuild . Working with residents , getting out -- them out of their homes , so they do n't get ill . This is what they 're cleaning up on their own . Designing housing . This house is going to go in , in a couple of weeks . This is a rehabbed home , done in four days. This is a utility room for a woman who is on a walker . She 's 70 years old . This is what FEMA gave her . 600 bucks , happened two days ago . We put together very quickly a washroom . It 's built , it 's running and she just started a business today , where she 's washing other peoples clothes . This is Shandra and the Calhouns . They 're photographers who have documented the Lower Ninth for the last 40 years . That was their home , and these are the photographs they took . And we 're helping , working with them to create a new building . Projects we 've done . Projects we 've been a part of , support . Why do n't aid agencies do this ? This is the U. N. tent . This is the new U. N. tent , just introduced this year . Quick to assemble . It 's got a flap , that 's the invention . It took 20 years to design this and get it implemented in the field . I was 12 years old . There 's a problem here . Luckily , we 're not alone . There are hundreds and hundreds and hundreds and hundreds and hundreds of architects and designers and inventors around the world that are getting involved in humanitarian work . More hemp houses -- it 's a theme in Japan apparently . I 'm not sure what they 're smoking . This is a grip clip designed by somebody who said , all you need is some way to attach membrane structures to physical support beams . This guy , designed for NASA -- is now doing housing . I 'm going to whip through this quickly , because I know I 've got only a couple of minutes . So this is all done in the last two years . I showed you something that took 20 years to do . And this is just a selection of things that got happened in -- that were built in the last couple of years . From Brazil to India , Mexico , Alabama , China , Israel , Palestine , Vietnam . The average age of a designer who gets involved in this project is 32 -- that 's how old I am . So it 's a young -- I just have to stop here , because Arup is in the room and this is the best-designed toilet in the world . If you 're ever , ever in India , go use this toilet . ( Laughter ) Chris Luebkeman will tell you why . I 'm sure that 's how he wanted to spend the party , but -- but the future is not going to be the sky-scraping cities of New York , but this . And when you look at this , you see crisis . What I see is many , many inventors . One billion people live in abject poverty . We hear about them all the time . Four billion live in growing but fragile economies . One in seven live in unplanned settlements . If we do nothing about the housing crisis that 's about to happen , in 20 years , one in three people will live in an unplanned settlement or a refugee camp . Look left , look right : one of you will be there . How do we improve the living standards of five billion people ? With 10 million solutions . So I wish to develop a community that actively embraces innovative and sustainable design to improve the living conditions for everyone . Chris Anderson : Wait a second . Wait a second . That 's your wish ? CS : That 's my wish . CA : That 's his wish ! ( Applause ) We started Architecture for Humanity with 700 dollars and a website . So Chris somehow decided to give me 100,000 dollars . So why not this many people ? Open-source architecture is the way to go . You have a diverse community of participants -- and we 're not just talking about inventors and designers , but we 're talking about the funding model . My role is not as a designer ; it 's a conduit between the design world and the humanitarian world . And what we need is something that replicates me globally , because I have n't slept in seven years . ( Laughter ) Secondly , what will this thing be ? Designers want to respond to issues of humanitarian crisis , but they do n't want some company in the West taking their idea and basically profiting from it . So Creative Commons has developed the developing nations license . And what that means that a designer can -- the Siyathemba project I showed was the first ever building to have a Creative Commons license on it . As soon as that is built , anyone in Africa or any developing nation can take the construction documents and replicate it for free . ( Applause ) So why not allow designers the opportunity to do this , but still protecting their rights , here ? We want to have a community where you can upload ideas , and those ideas can be tested in earthquake , in flood , in all sorts of austere environments . The reason that 's important is I do n't want to wait for the next Katrina to find out if my house works . That 's too late . We need to do it now . So doing that globally . And I want this whole thing to work multi-lingually . When you look at the face of an architect , most people think a gray-haired white guy . I do n't see that . I see the face of the world . So I want everyone from all over the planet , to be able to be a part of this design and development . The idea of needs-based competitions -- X-Prize for the other 98 percent , if you want to call it that . We also want to look at ways of matchmaking and putting funding partners together . And the idea of integrating manufacturers -- fab labs in every country . When I hear about the 100 dollar laptop and it 's going to educate every child , educate every designer in the world . Put one in every favela , every slum settlement , because you know what , innovation will happen . And I need to know that . It 's called the leap-back . We talk about leapfrog technologies . I write with Worldchanging , and the one thing we 've been talking about is , I learn more on the ground than I 've ever learned here . So let 's take those ideas , adapt them and we can use them . These ideas are supposed to have adaptable , they 're allowed to be -- they should have the potential for evolution , they should be developed by every nation on the world and useful for every nation on the world . What will it take ? There should be a sheet . I do n't have time to read this , because I 'm going to be yanked off . CA : Just leave it up there for a sec . CS : Well , what will it take ? You guys are smart . So it 's going to take a lot of computing power , because I want this to -- I want the idea that any laptop anywhere in the world can plug into the system and be able to not only participate in developing these designs , but utilize the designs . Also , a process of reviewing the designs . I want every Arup engineer in the world to check and make sure that we 're doing stuff that 's standing , because those guys are the best in the world . Plug . And so you know , I want these -- and I just should note , I have two laptops and one of them there , is there and that has 3000 designs on it . If I drop that laptop , what happens ? So it 's important to have these proven ideas put up there , easy to use , easy to get ahold of . My mom once said , there 's nothing worse than being all mouth and no trousers . ( Laughing ) I 'm fed up of talking about making change . You only make it by doing it . We 've changed FEMA guidelines . We 've changed public policy . We 've changed international response -- based on building things . So for me , it 's important that we create a real conduit for innovation , and that it 's free innovation . Think of free culture -- this is free innovation . Somebody said this a couple of years back . I will give points for those who know it , I think the man was maybe 25 years too early , so let 's do it . Thank you . ( Applause ) </text>
<text id="TeleHTC_Manual_0_EN.txt">
﻿User Manual www . htc . com Please Read Before Proceeding THE BATTERY IS NOT CHARGED WHEN YOU TAKE IT OUT OF THE BOX . DO NOT REMOVE THE BATTERY PACK WHEN THE DEVICE IS CHARGING . YOUR WARRANTY IS INVALIDATED IF YOU DISASSEMBLE OR ATTEMPT TO DISASSEMBLE THE DEVICE . PRIVACY RESTRICTIONS Some countries require full disclosure of recorded telephone conversations , and stipulate that you must inform the person with whom you are speaking that the conversation is being recorded . Always obey the relevant laws and regulations of your country when using the recording feature of your PDA Phone . INTELLECTUAL PROPERTY RIGHT INFORMATION Copyright © 2009 HTC Corporation . All Rights Reserved . HTC , the HTC logo , HTC Innovation , ExtUSB , TouchFLO , HTC Touch Pro , Straight Talk , Push Internet and HTC Care are trademarks and/or service marks of HTC Corporation . Microsoft , Windows , Windows Mobile , Windows XP , Windows Vista , ActiveSync , Windows Mobile Device Center , Internet Explorer , MSN , Hotmail , Windows Live , Outlook , Excel , PowerPoint , Word , OneNote and Windows Media are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries . Bluetooth and the Bluetooth logo are trademarks owned by Bluetooth SIG , Inc. Wi-Fi is a registered trademark of the Wireless Fidelity Alliance , Inc. Java , J2ME and all other Java-based marks are trademarks or registered trademarks of Sun Microsystems , Inc. in the United States and other countries . Copyright © 2009 , Sun Microsystems , Inc. All Rights Reserved . Copyright © 2009 , Adobe Systems Incorporated . All Rights Reserved . microSD is a trademark of SD Card Association . Opera Mobile from Opera Software ASA . Copyright 1995-2009 Opera Software ASA . All Rights Reserved . Google , Google Maps , and YouTube are trademarks of Google , Inc. in the United States and other countries . Copyright © 2009 , Esmertec AG . All Rights Reserved . Copyright © 2003-2009 , ArcSoft , Inc. and its licensors . All Rights Reserved . ArcSoft and the ArcSoft logo are registered trademarks of ArcSoft , Inc. in the United States and/or other countries . Copyright © 2004-2009 , Ilium Software , Inc. All Rights Reserved . Copyright © 2009 , Aplix Corporation . All Rights Reserved . Copyright © 2000 - 2008 WESTTEK LLC . All Rights Reserved . WESTTEK and the WT Logo are registered trademarks of WESTTEK , LLC . Licensed by QUALCOMM Incorporated under one or more of the following patents : 4,901,307 5,506,865 5,267,261 5,600,754 5,490,165 5,109,390 5,544,196 5,414,796 5,056,109 5,511,073 5,267,262 5,657,420 5,504,773 5,101,501 5,778,338 5,228,054 5,535,239 5,710,784 5,568,483 5,337,338 5,659,569 5,416,797 All other company , product and service names mentioned herein are trademarks , registered trademarks or service marks of their respective owners . HTC shall not be liable for technical or editorial errors or omissions contained herein , nor for incidental or consequential damages resulting from furnishing this material . The information is provided “ as is ” without warranty of any kind and is subject to change without notice . HTC also reserves the right to revise the content of this document at any time without prior notice . No part of this document may be reproduced or transmitted in any form or by any means , electronic or mechanical , including photocopying , recording or storing in a retrieval system , or translated into any language in any form without prior written permission of HTC . Disclaimers THE WEATHER INFORMATION , STOCK DATA , DATA AND DOCUMENTATION ARE PROVIDED “ AS IS ” AND WITHOUT WARRANTY OR TECHNICAL SUPPORT OF ANY KIND FROM HTC . TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW , HTC AND ITS AFFILIATES expressly disclaim any and all representations and warranties , express or implied , arising by law or otherwise , regarding the Weather Information , Stock Data , Data , Documentation , or any other Products and services , including without limitation any express or implied warranty of merchantability , express or implied warranty of fitness for a particular purpose , non-infringement , quality , accuracy , completeness , effectiveness , reliability , usefulness , that the Weather Information , Stock Data , Data and/or Documentation will be error-free , or implied warranties arising from course of dealing or course of performance . Without limiting the foregoing , it is further understood that HTC and its Providers are not responsible for Your use or misuse of the Weather Information , Stock Data , Data and/or Documentation or the results from such use . HTC and its Providers make no express or implied warranties , guarantees or affirmations that weather information will occur or has occurred as the reports , forecasts , data , or information state , represent or depict and it shall have no responsibility or liability whatsoever to any person or entity , parties and non-parties alike , for any inconsistency , inaccuracy , or omission for weather or events predicted or depicted , reported , occurring or occurred . WITHOUT LIMITING THE GENERALITY OF THE FOREGOING , YOU ACKNOWLEDGE THAT THE WEATHER INFORMATION , STOCK DATA , DATA AND/ OR DOCUMENTATION MAY INCLUDE INACCURACIES AND YOU WILL USE COMMON SENSE AND FOLLOW STANDARD SAFETY PRECAUTIONS IN CONNECTION WITH THE USE OF THE WEATHER INFORMATION , STOCK DATA , DATA OR DOCUMENTATION . Limitation of Damages TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW , IN NO EVENT SHALL HTC OR ITS PROVIDERS BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY INDIRECT , SPECIAL , CONSEQUENTIAL , INCIDENTAL OR PUNITIVE DAMAGES OF ANY KIND , IN CONTRACT OR TORT , INCLUDING , BUT NOT LIMITED TO , INJURY , LOSS OF REVENUE , LOSS OF GOODWILL , LOSS OF BUSINESS OPPORTUNITY , LOSS OF DATA , AND/OR LOSS OF PROFITS ARISING OUT OF , OR RELATED TO , IN ANY MANNER , OR THE DELIVERY , PERFORMANCE OR NONPERFORMANCE OF OBLIGATIONS , OR USE OF THE WEATHER INFORMATION , STOCK DATA , DATA OR DOCUMENTATION HEREUNDER REGARDLESS OF THE FORESEEABILITY THEREOF . Important Health Information and Safety Precautions When using this product , the safety precautions below must be taken to avoid possible legal liabilities and damages . Retain and follow all product safety and operating instructions . Observe all warnings in the operating instructions on the product . To reduce the risk of bodily injury , electric shock , fire , and damage to the equipment , observe the following precautions . ELECTRICAL SAFETY This product is intended for use when supplied with power from the designated battery or power supply unit . Other usage may be dangerous and will invalidate any approval given to this product . SAFETY PRECAUTIONS FOR PROPER GROUNDING INSTALLATION CAUTION : Connecting to an improperly grounded equipment can result in an electric shock to your device . This product is equipped with a USB Cable for connecting with desktop or notebook computer . Be sure your computer is properly grounded ( earthed ) before connecting this product to the computer . The power supply cord of a desktop or notebook computer has an equipment-grounding conductor and a grounding plug . The plug must be plugged into an appropriate outlet which is properly installed and grounded in accordance with all local codes and ordinances . SAFETY PRECAUTIONS FOR POWER SUPPLY UNIT • Use the correct external power source A product should be operated only from the type of power source indicated on the electrical ratings label . If you are not sure of the type of power source required , consult your authorized service provider or local power company . For a product that operates from battery power or other sources , refer to the operating instructions that are included with the product . • Handle battery packs carefully This product contains a Li-ion or Li-ion Polymer battery . There is a risk of fire and burns if the battery pack is handled improperly . Do not attempt to open or service the battery pack . Do not disassemble , crush , puncture , short external contacts or circuits , dispose of in fire or water , or expose a battery pack to temperatures higher than 60°C ( 140°F ) . ARNING : Danger of explosion if battery is incorrectly replaced . To reduce risk W of fire or burns , do not disassemble , crush , puncture , short external contacts , expose to temperature above 60° C ( 140° F ) , or dispose of in fire or water . Replace only with specified batteries . Recycle or dispose of used batteries according to the local regulations or reference guide supplied with your product . • Take extra precautions • Keep the battery or device dry and away from water or any liquid as it may cause a short circuit . • Keep metal objects away so they don’t come in contact with the battery or its connectors as it may lead to short circuit during operation . • The phone should only be connected to products that bear the USB-IF logo or have completed the USB-IF compliance program . • Do not use a battery that appears damaged , deformed , or discolored , or the one that has any rust on its casing , overheats , or emits a foul odor . • Always keep the battery out of the reach of babies and small children , to avoid swallowing of the battery . Consult the doctor immediately if the battery is swallowed . • If the battery leaks : • Do not allow the leaking fluid to come in contact with skin or clothing . If already in contact , flush the affected area immediately with clean water and seek medical advice . • Do not allow the leaking fluid to come in contact with eyes . If already in contact , DO NOT rub ; rinse with clean water immediately and seek medical advice . • Take extra precautions to keep a leaking battery away from fire as there is a danger of ignition or explosion . SAFETY PRECAUTIONS FOR DIRECT SUNLIGHT Keep this product away from excessive moisture and extreme temperatures . Do not leave the product or its battery inside a vehicle or in places where the temperature may exceed 60°C ( 140°F ) , such as on a car dashboard , window sill , or behind a glass that is exposed to direct sunlight or strong ultraviolet light for extended periods of time . This may damage the product , overheat the battery , or pose a risk to the vehicle . PREVENTION OF HEARING LOSS CAUTION : Permanent hearing loss may occur if earphones or headphones are used at high volume for prolonged periods of time . NOTE : For France , Earphone ( listed below ) for this device have been tested to comply with the Sound Pressure Level requirement laid down in the applicable NF EN 503321:2000 and/or NF EN 50332-2:2003 standards as required by French Article L. 5232-1 . • Earphone , manufactured by HTC , Model HS S300 . SAFETY IN AIRCRAFT Due to the possible interference caused by this product to an aircraft’s navigation system and its communications network , using this device’s phone function on board an airplane is against the law in most countries . If you want to use this device when on board an aircraft , remember to turn off your phone by switching to Airplane Mode . ENVIRONMENT RESTRICTIONS Do not use this product in gas stations , fuel depots , chemical plants or where blasting operations are in progress , or in potentially explosive atmospheres such as fuelling areas , fuel storehouses , below deck on boats , chemical plants , fuel or chemical transfer or storage facilities , and areas where the air contains chemicals or particles , such as grain , dust , or metal powders . Please be aware that sparks in such areas could cause an explosion or fire resulting in bodily injury or even death . EXPLOSIVE ATMOSPHERES When in any area with a potentially explosive atmosphere or where flammable materials exist , the product should be turned off and the user should obey all signs and instructions . Sparks in such areas could cause an explosion or fire resulting in bodily injury or even death . Users are advised not to use the equipment at refueling points such as service or gas stations , and are reminded of the need to observe restrictions on the use of radio equipment in fuel depots , chemical plants , or where blasting operations are in progress . Areas with a potentially explosive atmosphere are often , but not always , clearly marked . These include fueling areas , below deck on boats , fuel or chemical transfer or storage facilities , and areas where the air contains chemicals or particles , such as grain , dust , or metal powders . ROAD SAFETY Vehicle drivers in motion are not permitted to use telephony services with handheld devices , except in the case of emergency . In some countries , using handsfree devices as an alternative is allowed . SAFETY PRECAUTIONS FOR RF EXPOSURE • Avoid using your phone near metal structures ( for example , the steel frame of a building ) . • Avoid using your phone near strong electromagnetic sources , such as microwave ovens , sound speakers , TV and radio . • Use only original manufacturer-approved accessories , or accessories that do not contain any metal . • Use of non-original manufacturer-approved accessories may violate your local RF exposure guidelines and should be avoided . INTERFERENCE WITH MEDICAL EQUIPMENT FUNCTIONS This product may cause medical equipment to malfunction . The use of this device is forbidden in most hospitals and medical clinics . If you use any other personal medical device , consult the manufacturer of your device to determine if they are adequately shielded from external RF energy . Your physician may be able to assist you in obtaining this information . Turn your phone OFF in health care facilities when any regulations posted in these areas instruct you to do so . Hospitals or health care facilities may be using equipment that could be sensitive to external RF energy . 10 HEARING AIDS Some digital wireless phones may interfere with some hearing aids . In the event of such interference , you may want to consult your service provider , or call the customer service line to discuss alternatives . NONIONIZING RADIATION Your device has an internal antenna . This product should be operated in its normaluse position to ensure the radiative performance and safety of the interference . As with other mobile radio transmitting equipment , users are advised that for satisfactory operation of the equipment and for the safety of personnel , it is recommended that no part of the human body be allowed to come too close to the antenna during operation of the equipment . Use only the supplied integral antenna . Use of unauthorized or modified antennas may impair call quality and damage the phone , causing loss of performance and SAR levels exceeding the recommended limits as well as result in non-compliance with local regulatory requirements in your country . To assure optimal phone performance and ensure human exposure to RF energy is within the guidelines set forth in the relevant standards , always use your device only in its normal-use position . Contact with the antenna area may impair call quality and cause your device to operate at a higher power level than needed . Avoiding contact with the antenna area when the phone is IN USE optimizes the antenna performance and the battery life . Antenna location 11 General Precautions • Avoid applying excessive pressure to the device Do not apply excessive pressure on the screen and the device to prevent damaging them and remove the device from your pants ’ pocket before sitting down . It is also recommended that you store the device in a protective case and only use the device stylus or your finger when interacting with the touch screen . Cracked display screens due to improper handling are not covered by the warranty . • Device getting warm after prolonged use When using your device for prolonged periods of time , such as when you’re talking on the phone , charging the battery or browsing the web , the device may become warm . In most cases , this condition is normal and therefore should not be interpreted as a problem with the device . • Heed service markings Except as explained elsewhere in the Operating or Service documentation , do not service any product yourself . Service needed on components inside the device should be done by an authorized service technician or provider . • Damage requiring service Unplug the product from the electrical outlet and refer servicing to an authorized service technician or provider under the following conditions : • Liquid has been spilled or an object has fallen onto the product . • The product has been exposed to rain or water . • The product has been dropped or damaged . • There are noticeable signs of overheating . • The product does not operate normally when you follow the operating instructions . • Avoid hot areas The product should be placed away from heat sources such as radiators , heat registers , stoves , or other products ( including amplifiers ) that produce heat . 12 • Avoid wet areas Never use the product in a wet location . • Avoid using your device after a dramatic change in temperature When you move your device between environments with very different temperature and/or humidity ranges , condensation may form on or within the device . To avoid damaging the device , allow sufficient time for the moisture to evaporate before using the device . NOTICE : When taking the device from low-temperature conditions into a warmer environment or from high-temperature conditions into a cooler environment , allow the device to acclimate to room temperature before turning on power . • Avoid pushing objects into product Never push objects of any kind into cabinet slots or other openings in the product . Slots and openings are provided for ventilation . These openings must not be blocked or covered . • Mounting accessories Do not use the product on an unstable table , cart , stand , tripod , or bracket . Any mounting of the product should follow the manufacturer’s instructions , and should use a mounting accessory recommended by the manufacturer . • Avoid unstable mounting Do not place the product with an unstable base . • Use product with approved equipment This product should be used only with personal computers and options identified as suitable for use with your equipment . • Adjust the volume Turn down the volume before using headphones or other audio devices . • Cleaning Unplug the product from the wall outlet before cleaning . Do not use liquid cleaners or aerosol cleaners . Use a damp cloth for cleaning , but NEVER use water to clean the LCD screen . 13 </text>
<text id="TeleHTC_Manual_10_EN.txt">
Chapter 10 Navigating on the Road 10.1 Google™ Maps ( Available by Country ) Google™ Maps lets you track your current location , view real-time traffic situations , and receive detailed directions to your destination . It also allows you to search and locate places of interest or even a contact address . Note You need an active data or Wi-Fi connection to use Google Maps . To open Google Maps , tap Start > Google Maps . Zoom in Zoom out View your current location . Get directions , see traffic information , and more . Search for places 190 Navigating on the Road Notes • Traffic information is available only in some selected cities . • Tap Menu > Help > Tips to learn more about the program and its many features . Searching a place of interest Google Maps lets you search and locate a place of interest , shows the contact information for that place , and gives directions on how to get there from your current location . 1. On the Google Maps screen , tap Search . 2. Enter the name , address , or postal code of the place on the search field and then tap OK . 3. In the search results list , tap the place to view its address , phone number , and other details . Navigating on the Road 191 4. On the Address tab , tap : • The [ phone number ] to call the place of interest . • The web address ( if available ) to go to the web site of the place of interest . • Get directions to get directions to the place of interest from your current location . • Street view ( available by country ) to display a street view of the place of interest , when available . • Send as text message to send the place’s contact information to your contact via SMS . • Save as favorite to add the place of interest to your list of favorite places . To access your favorite places , on the Google Maps screen , tap Menu > Favorites . • Save as contact to save the contact information of the place of interest to your contacts list . 5. Tap See map to view the place of interest on the map . For more information about Google Maps , go to http://www.google.com/gmm/index.html. 10.2 Guidelines and Preparation for Using GPS If you installed a GPS navigation software on your device , follow these guidelines before and when using your device for GPS navigation . • When using GPS navigation software in the car , always plot your GPS route before starting to drive . Do not try to configure the GPS navigation software while driving . • The plotted GPS route is only for driving reference . It should not interfere with actual driving behavior . 192 Navigating on the Road • Do not leave your device in a vehicle or expose the device to direct sunlight to avoid overheating the battery , which could pose damage to the device or risk to the vehicle . • When using the device inside a vehicle , use the car holder to mount the device securely in place . Avoid placing the device in the areas shown in the following diagram : 1 Do not place where it will block the driver’s vision . 2 Do not place where air bags could deploy . 3 Do not place anywhere in the vehicle without securing the device in the holder . • Use the GPS system cautiously . Users shall be liable for any damages resulting from negligent operation of the system . • The GPS signal cannot pass through solid non-transparent objects . Signal reception may be affected by obstructions such as high-rise buildings , tunnels , bridges , forests , weather ( rainy or cloudy days ) , etc. If the vehicle’s visor contains metal , it will be difficult for the GPS signal to pass through . • Other nearby wireless communication products ( such as mobile phones or radar-detecting devices ) may interfere with the satellite signal , resulting in unstable signal reception . Navigating on the Road 193 • The Global Positioning System ( GPS ) is built and operated by the US Defense Department . The Department is responsible for the accuracy and maintenance of the system . Any changes that the Department makes may affect the accuracy and function of the GPS system . 10.3 Downloading Location Data via QuickGPS Before using the device for GPS navigation , open QuickGPS to download ephemeris data ( current satellite position and timing information ) . QuickGPS significantly speeds up the time for determining your GPS position . QuickGPS downloads ephemeris data from web servers , instead of from satellites , using your device’s Internet connection via Wi-Fi , ActiveSync or GPRS/3G . To open QuickGPS Tap Start > All Programs > QuickGPS . To download GPS data Tap Download on the QuickGPS screen . On the screen , initially , you will see the Valid time of the downloaded data . As time passes , the remaining days and hours of validity will be shown . To speed up GPS positioning , download the latest ephemeris data when the validity of the data expires . 194 Navigating on the Road Changing the download options To configure download options , tap Menu > Options and choose from available options : • Remind me when data expires . Display a message when ephemeris data expires . • Auto download when data expires . Automatically download ephemeris data when it expires . • Auto download when connected to PC via ActiveSync . Automatically download ephemeris data when it is connected to your computer via ActiveSync . Your computer must be connected to the Internet to download ephemeris data . • Exit QuickGPS after downloading . Close QuickGPS after satellite data is downloaded . </text>
<text id="TeleHTC_Manual_11_EN.txt">
Chapter 11 Camera and Multimedia 11.1 Taking Photos and Videos Use Camera to take photos and record video clips . To open the Camera screen On the Home screen , slide to the Photos and Videos tab and then tap the camera icon ( ) . The screen orientation automatically switches to landscape mode when you open Camera . To close the Camera Tap the On-screen control button ( ) , and then tap . Changing the capture mode Tap , then tap the capture mode icon ( — the icon displayed is based on the current capture mode ) . On the menu , tap the capture mode you want to use . Icon Capture Mode Captures standard still images . Records video clips , with or without audio . 196 Camera and Multimedia Icon Capture Mode Captures still images continuously in one direction , and then stitches them to create a panoramic view of a scenery . Records video clips suitable for sending via MMS . Captures a still image that you can assign as a contact picture . Captures still images and places them within frames . Note When using the second camera to capture , you can use all modes , except for Panorama . Using the focus Note Use the automatic focus or Touch Focus function to capture sharp and crisp photos and videos . The second ( front ) camera has no auto-focus function . Auto-focus Auto-focus sets the focus on the object at the center of the screen and is available for all capture modes . By default , touching the Virtual Camera button ( ) activates auto-focus and a flashing white bracket ( ) appears in the center of the screen . When focus is set , the bracket changes to a steady green bracket ( ) , and then the Camera takes the photo or starts to record the video . Touch Focus Touch Focus allows you to focus on a particular area of the screen . Touch Focus is enabled by default and is only available for Photo or Contacts Picture mode . Note To disable Touch Focus , see “ Setting advanced options ” in this chapter . Camera and Multimedia 197 To use Touch Focus : 1. Set the Camera to Photo or Contacts Picture mode . 2. Touch the area on the screen that you want to focus . The Touch Focus indicator ( ) positions itself on the selected area . Note If you tap outside the effective focus area , a white box appears to indicate the area where you can use Touch Focus . 3. Touch to activate auto-focus on the selected area and take the photo . See “ Auto-focus ” in this chapter for more information . Tip To move the Touch Focus indicator back to the center of the screen , tap . Capturing photo or recording video By default , the Camera automatically takes the shot or starts capturing video after you have set the focus . • In Photo or Contacts Picture mode , touch the Virtual Camera button to activate auto-focus ; when focus is set , the Camera automatically takes the shot . • In Video or MMS Video mode , touch the Virtual Camera button to activate auto-focus ; when focus is set , the Camera automatically starts recording . Touch the Virtual camera button again to stop recording . • In Picture Theme or Panorama mode , touch the Virtual Camera button to activate auto-focus ; when focus is set , the Camera automatically takes the first shot . Do the same for each shot you need to take . 198 Camera and Multimedia The Review screen Icon After capturing a photo or recording video , the Review screen gives you the option to view/play , send , or delete the photo or video clip . Function Return to the live Camera screen . / View the captured image or play the captured video in Album . See “ Viewing Photos and Videos Using Album ” in this chapter . Delete the captured image or video . Send the captured image or video via MMS or e-mail . After capturing in Contacts Picture mode , tap to assign the photo to a contact . On-screen controls Tap to display the on-screen controls . 1 2 3 4 5 6 7 1 Album . Open the Album program . See “ Viewing Photos and Videos Using Album ” for details . 2 Capture mode . See “ Changing the capture mode ” for details . 3 Touch Focus / Auto-focus indicator . See “ Using the focus ” for details . Camera and Multimedia 199 4 Menu . Open the Menu Panel . See “ Menu Panel ” for details . 5 Virtual Camera button . Activates the auto-focus and functions as the shutter release button . 6 Template Selector icon . In Picture Theme mode , tap to select another frame . 7 Progress indicator . In Picture Theme and Panorama modes , this shows the number of consecutive shots . Menu Panel The Menu panel lets you quickly adjust common camera settings and provides access to more advanced camera settings . To open the Menu panel , tap on the Camera screen , and then tap . To adjust a setting , keep tapping a button , for instance , White Balance , to cycle through the available settings . Note The available menu panel buttons depend on the selected capture mode . Icon Function Select the white balance setting according to the current lighting condition to capture colors more accurately . Open the Brightness bar and adjust the brightness level . Tap outside the Brightness bar to apply the change . Select the camera to use . You can choose from main camera ( second camera ( ) . ) or Set the ISO level manually to 100 , 200 , 400 , or 800 , or set it back to AUTO . Higher ISO numbers are better for taking pictures in low light conditions . Note The camera automatically adjusts the ISO level up to 400 only . Set the self-timer to 2 seconds , 10 seconds , or Off when in Photo or Contacts Picture mode . Open the advanced camera settings . See “ Setting advanced options ” for details . 200 Camera and Multimedia Zooming Before capturing a photo or a video clip , you can zoom in or out on your subject . To zoom in or out , slide your finger up or down on the Zoom bar while holding the device sideways . While you are sliding your finger on the Zoom bar , the level of zoom is shown on the zoom control bar on the screen . Zoom control bar Zoom bar The camera zoom range for a photo or a video clip depends on the capture mode and resolution . Refer to the table for more information . Capture mode Photo Resolution Normal : 2048 x 1536 3M Widescreen : 2048 x 1216 Normal : 1600 x 1200 2M Widescreen : 1600 x 960 Normal : 1280 x 960 1M Widescreen : 1280 x 768 Normal : 640 x 480 L Widescreen : 640 x 384 Normal : 320 x 240 M Widescreen : 320 x 192 Zoom range 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 3.2x Camera and Multimedia 201 Capture mode Video Resolution VGA 640 x 480* CIF 352 x 288 L 320 x 240 M 176 x 144 S 128 x 96 M 176 x 144 S 128 x 96 L 640 x 480 M 320 x 240 M 272 x 272 Determined by the current template Zoom range 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 1.6x 1.0x to 3.2x 1.0x to 3.2x Depends on the size of the selected template MMS Video Panorama Contacts Picture Picture Theme * Available only in some models . Note The capture resolutions and zoom ranges are only for the main camera . Setting advanced options The Advanced options let you adjust options for your selected capture mode and set Camera program preferences . Tap Advanced on the Menu panel to open the Advanced screen . Tap an item to change the setting . Tap to go back to the Camera screen . Tap to navigate through the Advanced option screens . 202 Camera and Multimedia • Resolution . Select the resolution to use . • Widescreen ( Photo mode ) . When On ( default ) you can use the entire screen as viewfinder . Refer to the zoom table for the resolution when Widescreen is On . • Touch Focus ( Photo and Contacts Picture modes ) . Enables or disables the Touch Focus function . Touch Focus is On by default . • Review Duration . Set the time for a captured photo/video to remain on the Review screen . • Quality . Select the image quality level for captured photos . • Capture Format ( Video and MMS Video modes ) . Select the file format for recorded videos . • Time Stamp ( Photo mode ) . Include the date and time on captured photos . • Storage . Select where to save photos and videos . You can either save the files to the main memory , or to a storage card if available . • Keep Backlight . Turn the backlight on or off . This overrides your device backlight settings while you are using the camera . • Shutter Sound . Play a shutter sound when you tap the Virtual Camera button . • Image Properties . Adjust the image properties . 1 2 Tap a property to adjust . Save the settings . Decrease the value . Reset all properties to default . Increase the value . Close the Image Properties screen without applying and saving the changes . 1 3 4 5 6 2 3 4 5 6 • Effect . Apply a special effect to your photos or videos . Camera and Multimedia 203 • Metering Mode . Select a metering mode to allow the camera to measure the amount of light and calculate the best-fit exposure value before capturing . • Prefix . The file name of a newly captured photo or video is set to “ IMAGE ” or “ VIDEO ” followed by a sequential number , for example : IMAGE_001 . jpg . You can also choose the current date or date and time as the file name prefix . Note You can not change the file name prefix when saving captured photos to a storage card . Captured photos are named using the convention IMAGnnnn . jpg ( where ‘ nnnn ’ is the counter ) , and are saved to the \DCIM\100MEDIA folder on the storage card . • Counter . Reset the file naming counter back to 1. • Flicker Adjustment . When taking indoor shots under fluorescent lighting , keep this setting on Auto or change it to the proper frequency ( 50Hz or 60Hz ) of the power in your country to reduce flicker . • Grid ( Photo mode ) . Show a grid on the screen so you can easily frame and center your subjects . • Record with Audio ( Video or MMS Video mode ) . Select On to record videos with audio , or Off to record videos without audio . • Recording Limit ( Video mode ) . Set the maximum duration or file size for recording video . • Template ( Picture Theme mode ) . Select a template . • Template Folder ( Picture Theme mode ) . By default , templates are stored in the \My Documents\Templates folder on the device’s Main Memory . If you transferred some templates to a storage card , set this option to Main + Card . • Show Reminder ( Contacts Picture mode ) . Select On if you want the Camera to prompt you to assign the captured picture to a contact . • Direction ( Panorama mode ) . Choose the direction in which to stitch the photos in a panorama . • Stitch Count ( Panorama mode ) . Select the number of shots to take and stitch into a panorama . 204 Camera and Multimedia 11.2 Viewing Photos and Videos Using Album Use Album to view photos and videos in your device . To open Album On the Home screen , slide to the Photos and Videos tab , and then tap Album . You can also tap while on the Camera program to open Album . Open the Camera program . View the photo in full screen . View another album . Play the video file . Start a slideshow , set the album as favorite , and more . Camera and Multimedia 205 Viewing photos While viewing a photo , tap the screen to open the menu . Send the photo using e-mail or MMS . Save the photo as a contact picture , save the on-screen image as a new file , and more . Start the slideshow . Return to the previous screen . To view the next or previous photo in the album When you are holding your device upright , view the next or previous photo by swiping your finger up or down the screen . When you turn your device sideways , view the next or previous photo by swiping your finger left or right across the screen . To zoom in or out on an photo Double-tap the area on the photo you want to zoom in on . To zoom out , doubletap the screen again . Tips • Use the zoom bar to zoom in on the center of the photo . Slide your finger to the right of the zoom bar to zoom in . Slide to the left of the zoom bar to zoom out . • When you zoom in on a photo , tap and hold the screen to pan and view other areas of the photo . When you zoom in on a photo , tap the screen , tap and then select Save Screen Image to save the zoomed in photo as a new file . 206 Camera and Multimedia To view a slideshow of photos in the current album While viewing a photo , tap the screen , and then tap Note . Animated GIF and video files are excluded from the slideshow . During the slideshow , tap the screen to show the playback controls . Return to the previous screen . Set the transition effect , time per slide , and orientation of the photos . Go back to the previous image . Tip Go to the next image . Play or pause the slideshow . If the photos are in your favorite album , you can start the slideshow from the Photos and Videos tab on the Home screen . See “ Photos and Videos ” in Chapter 3 for details . Camera and Multimedia 207 Playing videos While playing back video , tap the screen to show the playback controls . Drag to go forward or backward in the video . Elapsed time Go back to the beginning of the video . Play or pause Stop the video . the video . Total duration Change the video display mode to Fit & Crop ( default ) , Best Fit , or Stretch . Closing Album Tap When viewing photos in full screen , tap the screen to show the on-screen menu or playback controls and then tap to go back to the main Album screen . on the main Album screen to close Album . 208 Camera and Multimedia 11.3 Using Windows Media® Player Mobile Windows Media® Player Mobile plays digital audio and video files that are stored on your device or on the web . To open Windows Media® Player Mobile Tap Start > All Programs > Windows Media . Windows Media® Player Mobile opens with the Library screen . Use the Library screen to find and play songs , videos , and playlists that are stored on your device or on the storage card . Playing media To update the Library In most cases , Windows Media® Player Mobile automatically updates the library . However , you can manually update the library to ensure that it contains new files that you recently copied to your device or to the storage card . Tap Menu > Update Library to manually update the library list . To play audio and video files 1. On the Library screen , tap the Library arrow ( near the top of the screen ) , then tap the media storage that you want use , for example , Storage Card . 2. Select a category ( for example , My Music or My Playlists ) . 3. Tap and hold the item that you want to play ( such as a song , album , or artist name ) , and then tap Play . Camera and Multimedia 209 The playback screen opens and plays the audio or video file . Drag to jump to any part of the video or audio . Full screen Mute/Unmute Increase volume Visit WindowsMedia . com Decrease volume Skip to the beginning of Skip to the next file . the current file or to the Play/Pause previous file . Synchronizing video and audio files Use the latest version of Windows Media® Player on your computer to synchronize digital media files from your computer to your device . This ensures that protected files and album art ( for skins ) are correctly copied to your device . To automatically synchronize content to your device 1. On your computer , open Windows Media® Player , then connect your device to your computer . 2. In the Device Setup Wizard , select Yes , search my computer now . 210 Camera and Multimedia Note If you have previously opened Windows Media® Player and searched for media on your computer , you are not prompted to search your computer in step 2. 3. On the Device Setup dialog box , enter a name for your device and click Finish . Note If you installed a storage card that has a capacity of more than 4GB and your entire library can fit into the storage card , Windows Media Player will automatically synchronize your music files . The device also needs to be set to Disk Drive mode for Windows Media Player to automatically synchronize . 4. On the left panel of Windows Media® Player , right-click the name of your device and click Set Up Sync . Note To set up media synchronization on a storage card , right-click Storage Card in the left panel of Windows Media® Player , then click Set Up Sync . 5. Select the playlist(s ) that you want to sync between your computer and device , then click Add . Note On the Device Setup dialog box , make sure that the Sync this device automatically check box is selected . 6. Click Finish . The files begin synchronizing to your device . The next time you connect your device to your computer while Windows Media® Player is running , synchronization will start automatically . To manually synchronize content to your device 1. If you have not set up media synchronization between your device and computer , follow steps 1 to 3 in “ To automatically synchronize content to your device ” . 2. Click the Sync tab on the Windows Media® Player of your computer . Select a Playlist or a Library on the left panel of the Windows Media® Player . 3. From the Content List , drag the media files that you want to sync to your device and drop them to the Sync List . Camera and Multimedia 211 Playlists and Library List Content List Sync List 4. Click Start Sync to start synchronizing the selected files to your device . Notes • Use Windows Media® Player 11 or higher on your computer to synchronize media files to your device . • Audio files copy faster if Windows Media® Player is configured to automatically set the quality level for audio files copied to your device . For more information , see the Windows Media® Player Help . Creating playlists Create a new playlist by saving the current Now Playing playlist and giving it a new name . To save a new playlist 1. If you are not on the Library screen , tap Menu > Library . 2. Tap to select a category ( for example , My Music or My Playlists ) . 212 Camera and Multimedia 3. Select a media file that you want , then tap Menu > Queue Up . This adds the file to the Now Playing list . Repeat this step until you have added all desired media files to the Now Playing list . Note You cannot select multiple files simultaneously . 4. After adding the media files , tap Menu > Now Playing . 5. On the Now Playing screen , tap Menu > Save Playlist . 6. Enter the playlist name , then tap Done . 7. To play back the playlist you created , tap My Playlists in the Library , select your playlist , then tap Play . Troubleshooting For troubleshooting information , visit http://www.microsoft.com/windowsmobile/ en-us/help/more/windows-media-player . mspx Camera and Multimedia 213 11.4 Using Audio Booster Audio Booster optimizes sound by providing an audio equalizer for a better listening experience . To use Audio Booster , connect the supplied wired headset to your device . To open Audio Booster Tap Start > All Programs > Audio Booster . 1 3 1 2 3 4 Enable or disable the equalizer . Apply the modified settings . Choose the equalizer preset to use . Drag the sliders to adjust the frequency . Exit Audio Booster without applying the modified settings , or save or delete preset equalizer settings . 4 5 2 5 To create a custom equalizer preset 1. Adjust the frequency bands to your desired values by dragging the equalizer controls . 2. When finished , tap Menu > Save as Preset . 3. Enter a preset name and then tap Done . The equalizer preset is added to the preset list box . Note To delete a custom equalizer preset , select it on the preset list box and then tap Menu > Delete Preset . You cannot delete pre-installed equalizer presets . 214 Camera and Multimedia </text>
<text id="TeleHTC_Manual_12_EN.txt">
Chapter 12 Programs 12.1 Managing Programs Launching a program Tap Start > All Programs , and then tap a desired program . To view more programs , scroll down the screen by swiping your finger upward . See “ Start Screen ” in Chapter 1 for details . Installing a program Note You can install or uninstall additional programs . Your device does not allow you to uninstall most of the preinstalled programs . Before you purchase additional programs , make sure that they are compatible with your device . Before you launch the program installer , check first whether the installer can directly run on Windows Mobile or needs to be run on a computer . To install a program directly on your device 1. If the installer is a . cab file , directly download or copy it to your device . 2. On your device , open File Explorer and navigate to the installer file . 3. Tap the file to launch the installer . 216 Programs 4. Choose whether to install the program into the main memory or your storage card , if you have the storage card inserted on your device . 5. Wait for the installation to complete . Note You may be prompted to restart your device after installation is completed . To install a program from your computer 1. If the installer is an . exe file such as Setup . exe , most likely , the installer needs to be run on a computer . Download or copy it to your computer . 2. Connect your device to your computer using the USB cable , and then doubleclick the installer file on your computer to launch the installer . 3. Follow the on-screen instructions on your computer and your device to complete the installation . To uninstall a program 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Remove Programs . 3. In the Programs in storage memory list , select the program you want to remove , and then tap Remove . Programs 217 12.2 Contacts Contacts is your address book for people and businesses you communicate with . You can add Outlook contacts from your device or synchronized with your PC or the Exchange Server , SIM contacts stored on the SIM card , or Windows Live™ contacts . Note You can only add Windows Live™ contacts after you have set up Windows Live™ on your device . See “ Using Windows Live™ ” in Chapter 8. To open the Contacts screen Tap Start > All Programs > Contacts . Adding new contacts To add a contact on your device 1. On the Contacts screen , tap New , select Outlook Contact , and enter the contact information . 2. In the File as field , choose how you want the contact name to appear in the contact list . 3. To add a photo of the contact , tap Select a picture , and then select the picture file or tap Camera to take a photo of the contact . 4. To assign a ring tone to the contact , tap the Ring tone field , scroll through the list of tones , then select a desired tone . 5. When finished , tap OK . Tip To edit contact information , tap the contact name and then tap Menu > Edit . To add a contact to your SIM card 1. On the Contacts screen , tap New , then select SIM Contact . 2. Enter a contact name and phone number , and then tap OK . Tip You can also use the SIM Manager to add and edit contacts on your SIM card . For more information , see “ SIM Manager ” in this chapter . 218 Programs Organizing and searching contacts To group similar contacts For easier contact management , you can group contacts by assigning them into categories . 1. Create a new Outlook contact or edit an existing Outlook contact . 2. Tap Categories . 3. Select a preset category such as Business or Personal , or tap New to create your own category . 4. When finished , tap OK . To find a contact on your device There are several ways to find a contact when your contact list is long : • • Begin entering a contact name in the provided text box until the contact you want is displayed . On the Quick Scroll bar on the right of the Contacts screen , scroll to or tap a letter to go directly to the part of the contacts list where contact names start with that letter . Note You can disable the Quick Scroll bar by tapping Menu > Options and selecting the Show alphabetical index check box . This shows the alphabetical index at the top of the Contacts list . Quick Scroll bar • Filter the list by categories . In the contact list , tap Menu > Filter , then tap a category you’ve assigned to a contact . To show all contacts again , select Menu > Filter > All Contacts . Programs 219 Sharing contact information You can quickly send contact information to another mobile phone or device through Bluetooth beaming or text messaging . To send contact information via Bluetooth 1. Tap and hold a contact on the Contacts screen . 2. Tap Send via Bluetooth , then select the device where to send the contact . Note Before sending , make sure Bluetooth is turned on and set to visible mode on your device and the target mobile device . You can also send contact information to your computer . See Chapter 9 for details . To send contact information via text messaging 1. Tap and hold a contact on the Contacts screen . 2. Tap Send Contact > SMS / MMS . 3. Select the contact information you want to send , and then tap Done . 4. In the new text message , enter the mobile phone number of the recipient , and then tap Send . 220 Programs 12.3 JBlend Use JBlend to download , install and manage MIDlets or MIDlet suites on your device . MIDlets are Java applications such as games and tools that can run on mobile devices , while a MIDlet suite is a collection of one or more MIDlets . Your device supports Java 2 Micro Edition ( J2ME ) . To open JBlend Tap Start > All Programs > JBlend . Installing and launching MIDlets/MIDlet suites To download and install from the Internet 1. Open an Internet browser , such as Opera Mobile . 2. Navigate to the web page with the link for the MIDlet/MIDlet suite you want to download , and tap the link . 3. Follow the onscreen instructions to install and run the MIDlet/MIDlet suite . To install from your device You can copy MIDlets/MIDlet suites from your PC to your device using the USB sync cable or Bluetooth connection . 1. On the JBlend screen , tap Install > Local Install . The program then searches for MIDlets/MIDlet suites on your device and displays them in a list . 2. From the list , tap the MIDlet/MIDlet suite that you want to install . 3. Follow the onscreen instructions to install and run the MIDlet/MIDlet suite . To run a MIDlet/MIDlet suite On the JBlend screen , open the folder that contains the MIDlet/MIDlet suite , and then tap the MIDlet/MIDlet suite . Programs 221 Managing MIDlets/MIDlet suites You can update MIDlets/MIDlet suites , or uninstall them to free up memory space . To update a MIDlet/MIDlet suite 1. On the JBlend screen , tap the Input Panel icon , and then tap the up/down navigation keys on the on-screen keyboard to select the MIDlet/MIDlet suite that you want to update . 2. Tap Menu > Application > Update Info . JBlend then searches for updates for the selected MIDlet/MIDlet suite . To uninstall a MIDlet/MIDlet suite Before you uninstall a MIDlet , make sure that it is not running . 1. On the JBlend screen , tap and hold the MIDlet , and then tap Delete . 2. Tap Yes to confirm . Note To uninstall all MIDlets and folders , tap Menu > Application > Delete All . 222 Programs 12.4 JETCET Presentation If you are away from your office and urgently need to make a presentation , you can use JETCET Presentation to create a PowerPoint file and present it from your device . JETCET Presentation also allows you to open and display presentations that were created in Microsoft PowerPoint 97 , PowerPoint 2000 , PowerPoint 2002 ( XP ) , or PowerPoint 2003. Opening JETCET Presentation Creating a new presentation Tap Start > All Programs > JETCET Presenter . When you open JETCET Presentation , the main screen displays a folder tree . Tap Menu > Cancel first and then tap Menu > File > New to create a new presentation . You can then enter text , insert graphics , and add more slides . To add text to a slide 1. Tap Edit > Shape > Insert , tap , and then tap OK . 2. Drag your finger or stylus to draw a text box on the slide . 3. While the text box is selected , set the font type , size and style first and then start entering your text using the hardware keyboard or on-screen keyboard . 4. While the text box is selected , tap Menu > Paragraph and then set the paragraph alignment , indentation , and line spacing . Tip To format the text with automated bullets or numbering , tap Menu > Paragraph > Bullets . 5. To modify the properties of the text box , select the text box and then tap Edit > Shape > Modify . You can change the fill color , add or remove the border , and more . To wrap text inside the text box , tap the Text Box tab and then select the Word wrap text in AutoShape check box . Programs 223 To edit text 1. Select the text box that contains the text you want to edit . 2. Tap Edit > Text > Modify and then change your text . Tap within the text region to place the cursor exactly where you want to start editing . To insert an object shape 1. Tap Edit > Shape > Insert . 2. Tap an object , for example , an arrow , from the Autoshape Objects . 3. Drag on the slide to draw the select shape . Tip To insert a picture , tap Edit > Shape > Picture . To add and edit slides 1. Tap Edit > Slide > New to add a new slide . 2. To change the background color of a slide , tap Edit > Slide > Background . 3. In Background fill , tap Fill Effects to apply a gradient or tap More Colors to choose a solid color . 4. Tap Apply to change the background color of the current slide , or tap Apply to All to change all slides . 5. To apply a transition effect to the slides , tap Edit > Slide > Transition . 6. In Effect , select the type of transition effect to use and then select a speed . 7. Choose whether to advance slides on mouse click or automatically . If you select to auto-display slides , set the time delay . 8. To make the changes to the current slide only , tap Apply . For the changes to affect all slides in the presentation , tap Apply to All . To save the presentation If this is your first time to save your presentation , tap Menu > File > Save As and then enter a new file name . To save changes made to your presentation , tap Menu > File > Save . 224 Programs Displaying the presentation You can connect your device to a large-screen display such as a television and show your presentation to an audience as a full-screen slideshow . For more information about connecting your device to a large-screen display , see “ Connecting to an External Display “ in Chapter 13. To display the presentation as a slideshow 1. Tap the PowerPoint file in the folder tree to open the file , or tap File > Open and then tap the PowerPoint file . 2. Tap Menu > Show > Set Up Show . Select whether to advance slides Manually or Using timings , if present , and then tap OK . 3. Tap Menu > Show > View Show . The presentation is then displayed in landscape and in full screen . 4. Slide open the hardware keyboard . If you have set up the slideshow to advance manually , press the right arrow key to advance one slide forward and the left arrow key to go back one slide . Another way to advance one slide forward is to tap the screen . You can also tap the arrow watermark at the lower-left corner of the screen to open a selection menu , then tap Next or Previous to move between slides . Arrow watermark Programs 225 To exit the slideshow Tap the arrow watermark , tap the down arrow to scroll down the selection menu , and then tap End Show . For more information about using JETCET Presentation , tap JETCET Presentation to view the program help . on the toolbar of 12.5 Microsoft® Office Mobile Microsoft® Office Mobile consists of the following applications : • Microsoft® Office Excel® Mobile lets you create and edit Excel workbooks and templates on your device . • Microsoft® Office OneNote® Mobile lets you create notes with text , photos , and voice recordings for synchronization later with Microsoft® Office OneNote® 2007 on your computer . • Microsoft® Office PowerPoint® Mobile allows you to view ( not create ) slide show presentations in * . ppt and * . pps formats . • Microsoft® Office Word Mobile lets you create and edit documents and templates in Word Mobile and save them as * . doc , * . rtf , * . txt , and * . dot files . To use Microsoft Office Mobile Tap Start > All Programs , and then tap the Office Mobile application that you want to use . Word Mobile and Excel Mobile do not fully support some features of Microsoft® Office Word and Microsoft® Office Excel® . To find out which features are not supported , tap Start > All Programs > Help and then search for “ unsupported ” in the Help . 226 Programs Tips • By default , Word Mobile saves documents in . docx format , while Excel Mobile saves workbooks in . xlsx format . If you want to open these types of files on a computer that uses Microsoft Office 2000 , Office XP , or Office 2003 , you need to download and install the File Format Converter in your computer . Download the File Format Converter at http://www.microsoft.com/downloads/. • If you want Word Mobile to save documents in . doc format , tap Menu> Tools > Options ( or Menu > Options when no document is opened ) , then change the Default template to Word 97-2003 Document ( . doc ) . • If you want Excel Mobile to save workbooks in a format that is compatible with Microsoft Office 2000 , Office XP , or Office 2003 , tap Menu> Options ( with no workbook opened ) , then change the Template for new workbook to Blank 97-2003 Workbook . 12.6 SIM Manager SIM Manager allows you to view the contents of your SIM card , transfer contacts from your SIM card to your device or vice versa , and make a call to a SIM contact . To create a contact on your SIM card 1. Tap Start > All Programs > SIM Manager . 2. Tap New and enter the contact name and phone number . 3. Tap Save . Tip To change contact information on your SIM card , tap a SIM contact , edit the information , and then tap Save . To copy SIM contacts to your device If you have saved contacts on your SIM card , you can copy them into Contacts on your device . 1. On the SIM Manager screen , select the desired contact , or select all SIM contacts by tapping Menu > Select All . 2. Tap Menu > Save to Contacts . Programs 227 To copy contacts to the SIM card Only one phone number per contact name can be stored on a SIM card . 1. On the SIM Manager screen , tap Menu > Contacts to SIM . 2. Select the check boxes of the contact’s phone numbers that you want to copy to your SIM card , then tap Save . When you copy a contact that has several phone numbers to your SIM card , SIM Manager separately saves each number by appending an indicator at the end of each name . By default , /M , /W , and /H are appended to indicate mobile , work , and home phone numbers respectively . To edit the default indicators and to select which other types of numbers to save to the SIM card , tap Menu > Tools > Options . 12.7 WorldCard Mobile WorldCard Mobile lets you take a photo of a business card and easily export the contact information on the card into your Contacts . To capture a business card and export its information to Contacts 1. Tap Start > All Programs > WorldCard Mobile . 2. Tap on the WorldCard Mobile screen to open the Camera program . 3. Tap the Virtual Camera button ( ) to take a photo of the business card , then tap the Back button ( ) on the Review screen . Refer to Chapter 11 for details on how to use the camera . Tip Make sure that the business card is displayed completely on the Camera screen before you take the photo , and that lighting is adequate . 4. On the WorldCard Mobile screen , tap Recognize . Tips • If you want to retake the shot , tap Re-Capture . • For better recognition , choose the language and region based on the language used in the business card . 228 Programs 5. The screen shows various contact information from the business card . Edit the contact information , if needed . Clear the check boxes of items that you do not want to be exported . 6. Tap Export , then go to your Contacts list to view the exported contact . For more information about using WorldCard Mobile , tap Mobile screen to view the program help . on the WorldCard </text>
<text id="TeleHTC_Manual_13_EN.txt">
Chapter 13 Managing Your Device 13.1 Copying and Managing Files Copy files between your device and computer , or copy files to a storage card installed on your device . You can also efficiently manage your files and folders using File Explorer . To copy files using Windows Mobile Device Center or ActiveSync 1. Connect your device to the computer . 2. Click File Management > Browse the contents of your device in Windows Mobile Device Center on your computer , or click Explore in ActiveSync on your computer . This displays the content of your device in Windows Explorer on your computer . 3. To copy a file from your device to your computer : a. Browse the contents of your device , right-click the file you want to copy , and then click Copy . b. Right-click a folder on your computer , and then click Paste . 4. To copy a file from your computer to your device : a. Browse the folders on your computer , right-click the file you want to copy , and then click Copy . b. Right-click a folder on your device , and then click Paste . 230 Managing Your Device To manage files on your device using File Explorer File Explorer lets you browse and manage the contents of your device . The root folder on the device is named My Device , and contains the following folders : My Documents , Program Files , Windows , and more . 1. Tap Start > All Programs > File Explorer . 2. Tap a folder or file to open it . 3. To return to an upper level folder , tap Up . 4. To quickly delete , rename , or copy a file , tap and hold the file , and then choose the desired operation on the shortcut menu . To copy or delete multiple files , tap and drag over the desired files , tap and hold the selection , and then choose an option from the menu . To copy files to a storage card 1. Make sure that the storage card is properly installed on your device . 2. Connect the device to your computer using the USB cable , select Disk Drive on the Connect to PC screen , and then tap Done . 3. On your computer , navigate to the removable disk drive , and then start copying files to the storage card . 4. When finished , disconnect the device from your computer . Managing Your Device 231 13.2 Settings on your Device You can adjust the device settings to suit the way you work . Use the Settings tab to adjust basic device settings . See “ Settings ” in Chapter 3 for details . To see all available settings , tap Start > Settings , and then tap All Settings . Personal tab Icon Description Buttons Assign a program or function to a hardware button or set the function you want to execute ( for instance , lock the device ) when you press and hold the END button . Input Set options for each of the input methods . For instance , you can set the device to play a sound or vibrate when you tap a Full QWERTY or Phone Keypad key . Keyboard Sliding Sound Select a sound to play when you open and close the hardware keyboard . Lock Set a password for your device . Menus Set which programs appear in the Start menu . Note The Start menu is disabled when the TouchFLO 3D Home screen is enabled . To enable the Start menu , tap Start > Settings , tap All Settings > Personal tab > Today > Items tab , and then clear the TouchFLO 3D check box . Owner Information Enter your personal information on your device . Phone Customize phone settings such as the ring tone , or set a PIN number for your SIM card . 232 Managing Your Device Icon Description Sounds & Notifications Enable sounds for events , notifications , and more , and set the type of notification for different events . Today Customize the appearance of the Home screen and the information to display on it . Note You will not see the Today screen when the TouchFLO 3D Home screen is enabled . To display the Today screen , tap Start > Settings button , tap All Settings > Personal tab > Today > Items tab , and then clear the TouchFLO 3D check box . System tab Icon Description About This is where you can see basic information such as the Windows Mobile® version and type of processor used on your device . You can also specify a name for your device . Auto Volume Control Automatically adjust the recording volume to an even level . Certificates See information about certificates that are installed on your device . Clear Storage Reset your device to factory default settings . Clock & Alarms Set the device clock to the date and time of your locale or to a time zone you are visiting . Alarms can also be set on specified days and times of the week . Customer Feedback Set your device to automatically send information about how you use Windows Mobile . By default , this option is disabled . Device Information See information about the firmware version , hardware , identity , and the duration of calls made on your device . Managing Your Device 233 Icon Description Encryption Encrypt files on your storage card . Encrypted files are only readable on your device . Error Reporting Enable or disable the device 's error reporting function . When this function is enabled and a program error occurs , technical data about the state of the program and your computer is logged in a text file and delivered to Microsoft 's technical support if you choose to send it . External GPS Set the appropriate GPS communication ports , if required . You may need to do this when there are programs on your device that access GPS data or you have connected a GPS receiver to your device . G-Sensor Recalibrate the G-Sensor of the device . Use this function when auto-rotate is not working properly . Managed Programs Displays the programs that were installed on your device using System Center Mobile Device Manager . Memory Check the device memory allocation and storage card information . Power Check the remaining battery power . You can also set the brightness of the backlight and the timeout for turning off the display ( switching the device to Sleep mode ) to conserve battery power . Regional Settings Set the regional configuration to use , including the format for displaying numbers , currency , date , and time on your device . Remove Programs Uninstall programs that you previously installed on your device . Screen Recalibrate the screen , apply ClearType to display text more clearly , and change the screen text size . Task Manager Stop running programs and set the ( ) button to end programs immediately when you tap the button . For more information , see “ Using Task Manager ” in this chapter . 234 Managing Your Device Icon Description TouchFLO Set the device to vibrate when you tap the tabs , links , or other onscreen items of supported applications . TV Out Set the video standard to use when outputting to an external display . Windows Update Link to Microsoft 's web site and update Windows Mobile® on your device with the latest security patches or fixes , if they are available . Connections tab Icon Description Advanced Network Turn HSPA on/off , set the GPRS authentication method , and set the line type to use when making a circuit switch data ( CSD ) connection . HSPA is a 3.5G digital data service that provides high-speed downstream/upstream data rates . Check with your wireless service provider whether HSPA is supported in your area . Bluetooth Turn Bluetooth on , set your device to visible mode , and scan for other Bluetooth devices . Comm Manager Manage your device’s connections ( including the phone , GPRS/3G , Wi-Fi , and Bluetooth ) or turn the phone function on or off . Connection Setup Configure your device’s data connections , such as GPRS , and WAP , based on the detected SIM card or selected network operator . See “ Using Connection Setup ” in this chapter for details . Connections Set up one or more types of modem connection for your device , such as phone dial-up and GPRS , so that your device can connect to the Internet or a private local network . Domain Enroll Enroll your device in your company’s domain to let System Center Mobile Device Manager manage the device . Ask your network administrator for more details . Managing Your Device 235 Icon Description USB to PC Set the type of USB connection to your PC . Select the ActiveSync option for synchronizing data , or use Disk Drive mode for transferring files . Wi-Fi Turn the Wi-Fi function on or off , scan for available wireless networks , see information about the active wireless network , and customize Wi-Fi settings . 13.3 Changing Basic Settings Display settings To manually adjust the screen brightness By default , your device automatically adjusts the screen brightness according to the ambient lighting . 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Power > Backlight tab . 3. Clear the Auto adjust backlight check box . 4. Adjust the brightness by dragging the slider under On battery power and On external power . To automatically turn off the screen backlight when the device is not in use 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Power > Advanced tab . 3. In On battery power and On external power , specify the time before the screen backlight turns off . 236 Managing Your Device To increase or decrease the size of text on the screen 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Screen > Text Size tab . 3. Move the slider to increase or decrease the text size . To re-calibrate the touch screen The device touch screen is calibrated before shipment . Re-calibrate the touch screen if it does not accurately respond to screen taps . 1. While the device is on , press and hold the VOLUME UP and VOLUME DOWN buttons , and then tap the screen to open the align screen . 2. Follow the on-screen instructions to complete the calibration . Device name Note The device name is used to identify your device when synchronizing with a computer , connecting to a network , or restoring information from a backup . If you synchronize multiple devices with the same computer , each device must have a unique name . To change the device name 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap About > Device ID tab . 3. Enter the device name . Notes • The device name must begin with a letter , consist of letters from A to Z , numbers from 0 to 9 , and cannot contain spaces . Use the underscore character to separate words . • If you enroll your device to your company’s domain , the device name will be changed to be the same as the one used to enroll the device . Managing Your Device 237 Ringer settings To change the ring type and ring tone 1. Tap Start > Settings , and then tap Sound . 2. Scroll down and then tap Ring Type . Select the ring type you want to use , and then tap Done . 3. Tap Ringtone , and then select the ring tone you want to use . 4. Tap Done . Tips • You can use * . wav , * . mid , * . mp3 , * . wma , or other types of sound files that you downloaded from the Internet or copied from your computer . For a complete list of supported audio file formats , see “ Specifications ” in the Appendix . • To use your sound files as ring tones , copy them first to the /My Documents/My Ringtones folder on your device , and then select the sound from the Ring tone list of your device . For more information about copying files , see “ Copying and Managing Files ” in this chapter . To choose how to be notified about events or actions 1. Tap Start > Settings , and then tap Sound > Advanced . 2. On the Sounds tab , choose how you want to be notified by selecting the appropriate check boxes . 3. On the Notifications tab , in Event , tap a ring type and ring tone for that event or action from the lists below . Tip Turning off sound notifications helps conserve battery power . 238 Managing Your Device Phone services You can change the settings of various phone services for your device . Phone services may include Call Forwarding , Call Waiting , Voicemail , and more . Contact your wireless service provider to find out about the availability of phone services for your device . To access and change settings of phone services 1. Tap Start > Settings , and then tap Communications . 2. On the Comm Manager screen , tap Phone > Phone services . 3. Select the service you want to use , and then tap Get Settings . 4. Choose your desired options , and then tap OK . 13.4 Using Connection Setup After you insert a new SIM card and power on your device , you can use Connection Setup to automatically configure your device’s data connections , such as 3G/GPRS and WAP . Note For details on how to automatically configure the data connections , see “ Auto configuring data connection settings and importing SIM contacts ” in Chapter 1. To manually select the network operator to use for data connections You can manually select your network operator and allow Connection Setup to reconfigure your device’s data connections settings based on the selected operator . 1. Tap Start > Settings , and then tap All Settings . 2. On the Connections tab , tap Connection Setup . 3. Select the network Country and Operator you want to use , then tap OK . Note If you choose a country and/or operator that is different from the installed SIM card network operator , you may not be able to access network services . Managing Your Device 239 4. When prompted to confirm whether you want to configure the data connection settings , tap Yes . 5. After Connection Setup completes the configuration , tap Restart . 13.5 Using Comm Manager Comm Manager lets you easily turn on and off the communication features of your device such as the phone , Bluetooth , Wi-Fi , and data connection . To access Comm Manager Tap Start > Settings , and then tap Communications . 1 2 3 4 5 6 7 8 9 10 11 12 240 Managing Your Device 1 Switch Airplane Mode on or off . See “ Turning the Phone Function On and Off ” in Chapter 2. Access the phone settings and change the PIN codes , configure phone services , and more . Connect a Bluetooth headset or other Bluetooth-enabled device . See Chapter 9 for details . Connect to a wireless network . See Chapter 8 for details . Open ActiveSync and adjust the push e-mail settings . See Chapter 7 for details . Open Connection Setup and automatically configure your data connection settings . 7 Switch the phone on or off . See “ Turning the Phone Function On and Off ” in Chapter 2. 8 Switch Bluetooth on or off . See Chapter 9 for details . 9 Switch Wi-Fi on or off . See Chapter 8 for details . 10 Switch between automatically receiving ( as items arrive ) or manually retrieving Outlook e-mail messages . See Chapter 7 for details . 11 Connect or disconnect active data connections ( 3G/GPRS , or EDGE ) . 12 Adjust the phone , Bluetooth , and Wi-Fi settings . 2 3 4 5 6 13.6 Using Task Manager Task Manager lets you view and stop running programs , configure the and enable the Quick Menu on the Home screen . button , To open Task Manager Tap the Quick Menu button on the top-right corner of the Home screen to open the Quick Menu , and then tap . To configure the Exit ( ) button By default , running programs are shut down when you tap and hold the 1. On the Task Manager screen , tap the Button tab . Note When you clear Enable the “ X ” button to end running programs , tapping the Exit button only closes a program screen . The program is not ended and continues to run in the background . button . Managing Your Device 241 2. Choose the action for shutting down programs ( by tapping the by tapping and holding the button ) . 3. Tap OK . To add a running program to the exclusive list If you add a running program to the Exclusive Programs List , it will not be closed when you tap Stop Selected or Stop All and will not be listed in the Quick Menu on the Home Screen . 1. On the Task Manager screen , tap the Running tab . 2. Tap and hold the program name , and then tap Add Exclusive . Tip To remove a program from the exclusive list , tap and hold the program on the Running tab , then tap Remove from Exclusive . button , or 13.7 Protecting Your Device Protecting your SIM card with a PIN You can protect your SIM card by requiring a PIN ( personal identification number ) every time the device is turned on . You will not be able to use the phone or the data connection until you enter the correct PIN . To enable the SIM card PIN 1. Tap Start > Settings , and then tap Communications . 2. On the Comm Manager screen , tap Phone > PIN Code . 3. Enter the PIN , tap OK , and then tap OK on the dialog box . Tips • To change the PIN , tap Change PIN on the Phone Settings screen . • Emergency calls can be placed at any time , without requiring a PIN . 242 Managing Your Device Protecting your device with a password You can help keep your data more secure by requiring a password every time the device is turned on . To set a device password 1. Tap Start > Settings , and then tap All Settings . 2. On the Personal tab , tap Lock . 3. Select the Prompt if device unused for check box , then specify the idle time before the device requires a password . 4. In the Password type box , select the type of password you would like to use . Tip If your device is configured to connect to a network , use an alphanumeric password for increased security . 5. Enter the password in both the Password and Confirm boxes . 6. Tap OK . The next time the device is turned on , you will be prompted to enter your password . Notes • To ensure that you can always make emergency calls , do not begin your password with the digits of your local emergency number . • If you entered a hint , the hint will be displayed after the wrong password is entered five times . • Each time a wrong password is entered , the device response time gets longer until the device appears to be not responding . • If you forget your password , you can hard reset or clear the device memory . For more information about hard resetting the device and clearing the memory , see “ Resetting Your Device ” . Managing Your Device 243 Encrypting files on your storage card 2. On the System tab , tap Encryption . You can set your device to encrypt files as they are saved on the storage card . 1. Tap Start > Settings , and then tap All Settings . 3. Select Encrypt files when placed on a storage card . Notes • Encrypted files can only be read on the device that encrypted them . • Encrypted files are opened just like other files , provided you are using the device that encrypted them . There is no separate step for you to take to read these files . Important If Encrypt files when placed on a storage card is enabled , backup all files from the storage card before using Clear Storage , hard reset , or updating the operating system . Otherwise you will no longer be able to access the encrypted files on the storage card . Use ActiveSync or Windows Mobile Device Center to transfer files between your storage card and computer . After the procedure , copy your files back to the storage card . 13.8 Resetting Your Device Performing a soft reset Perform a soft ( normal ) reset to clear all active program memory and shut down all active programs . This is useful when your device is running slower than normal , or a program is not performing properly . If a soft reset is performed when programs are running , unsaved work is lost . To perform a soft reset 1. Pull out the stylus . 2. Remove the back cover . For instructions , see “ To remove the back cover ” in Chapter 1. 244 Managing Your Device 3. Use the stylus tip to press the RESET button located at the upper-left side of the open back panel . Your device restarts and displays the Home screen . 4. Replace the back cover and insert the stylus back into its compartment . Performing a hard reset If a normal reset does not solve a system problem , you can perform a hard ( full ) reset . After a hard reset , the device is restored to its default settings—the way it was when you first purchased it and turned it on . You will lose any programs you installed , data you entered , and settings you customized on your device , and only Windows Mobile® software and other pre-installed programs will remain . Warning ! our device will be set back to factory default settings . Make sure that any Y additional installed programs and/or user data have been backed up before you perform a hard reset . Important If Encrypt files when placed on a storage card is enabled , backup all files from the storage card before using Clear Storage , hard reset , or updating the operating system . Otherwise you will no longer be able to access the encrypted files on the storage card . Use ActiveSync or Windows Mobile Device Center to transfer files between your storage card and computer . After the procedure , copy your files back to the storage card . Managing Your Device 245 To perform a hard reset 1. With the device turned off , press and hold the TALK/SEND , END and POWER buttons until you see this message on the screen . This operation will delete all your personal data , and reset all settings to manufacturer default . Press VolUp to restore manufacturer default , or press other keys to cancel . 2. Release the TALK/SEND , END and POWER buttons . 3. Press the VOLUME UP button to perform the hard reset , or press any other button to cancel the reset . Using Clear Storage If you can access the device settings , you can use Clear Storage to reset your device back to factory default settings . 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Clear Storage . 3. Enter “ 1234 ” and then tap Yes . 246 Managing Your Device 13.9 Windows Update Update Windows Mobile® with the latest security patches and fixes from Microsoft , if these are available . To set up Windows Update The first time you run Windows Update , you need to set up how you want Windows Update to check for updates . 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Windows Update . 3. On the Update Setup screen , tap Next . 4. Choose how you want to check for updates , then tap Next . Note If you select Automatic , you are asked if you want to use your current data plan to check for updates . Select or clear the Use my data plan to check for and download updates check box , and tap Next . 5. Tap Finish . To check for updates 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Windows Update . 3. Tap Check Now . To change Windows Update options 1. Tap Start > Settings , and then tap All Settings . 2. On the System tab , tap Windows Update . 3. Tap Menu > Connections to change how the device connects to the Internet when checking for updates , or tap Menu > Change Schedule to change how Windows Update checks for Windows Mobile® updates . Managing Your Device 247 13.10 Connecting to an External Display Your device has a TV output which can be connected to an external display , such as a TV monitor , that has an RCA cable socket . This allows you to output the device screen and audio to a big-screen display . Note You need an HTC TV Out cable to be able to connect your device to an external display . The HTC TV Out cable is sold separately . To connect the device to an external display 1. Turn off the external display . 2. Connect the ends ( red , white , and yellow RCA plugs ) of the HTC TV Out cable to the external display’s RCA sockets . 3. Connect the mini-USB end of the HTC TV Out cable to the sync connector at the bottom of the device . The TV Out screen opens . 4. Choose the video standard to use when outputting the video and then tap Done . For example , if your video is in the NTSC standard and you select PAL-M , TV Out will automatically convert your video to PAL-M before it outputs to the external display . Note If you need to change the video standard option in the future , tap Start > Settings > All Settings > System tab > TV Out . 5. Tap the type of media you want to output . 6. Turn on the external display and then switch it to the input signal that you connected the HTC TV Out cable to ( for example , Video 1 ) . The screen orientation is always in landscape mode while your device is connected to the external display . </text>
<text id="TeleHTC_Manual_1_EN.txt">
Chapter 1 Getting Started 1.1 Getting to Know Your Touch Phone Inside the box • • • • • The product package includes : HTC Touch Pro2 Battery AC adapter Screen protector Wired stereo headset • • • • • USB sync cable Quick Start Guide Extra stylus Pouch Two accompanying discs Top panel POWER Press to turn off the display temporarily . To turn off the power , press and hold for about 3 seconds . For more information , see “ Starting Up ” in this chapter . 24 Getting Started Left panel Right panel VOLUME UP During a call or when playing music , press this button to increase the volume . Microphone VOLUME DOWN During a call or when playing music , press this button to lower the volume . Stylus Tap items , write , or draw on the touch screen . Getting Started 25 Front panel Notification LED* See description below . Earpiece Listen to a phone call from here . START Press to open or close the Start screen . See “ Start Screen ” in this chapter for details . TALK/SEND • Press to answer an incoming call or dial a number . • During a call , press and hold to turn the speakerphone on and off . • While viewing a text or e-mail message , press to call the sender of the message . Second Camera Use this camera for video call conversations or to take a self-portrait . Light Sensor Senses the ambient light and adjusts the screen backlight accordingly . BACK Press to return to the previous screen . END • Press to end a call or return to the Home tab . • Press and hold to lock the device . To customize the END key , see Buttons in Chapter 13. Zoom bar See “ Using the Zoom bar ” later in this chapter for details . * The Notification LED shows a : • Flashing green light when there are new SMS , MMS or e-mail messages , missed calls , or reminders . • Solid green light when the device is connected to the power adapter or a computer and the battery is fully charged . • Solid amber light when the battery is being charged . • Flashing amber light when the remaining battery level reaches below 10 % . 26 Getting Started Hardware keyboard QWERTY Keyboard Slide open the touch screen panel to reveal the keyboard . See Chapter 4 for details . Touch Screen Getting Started 27 Back panel 3.2 Megapixel Camera See “ Taking Photos and Videos ” in Chapter 11 for details . Bottom panel Microphone Mute Press to mute or unmute the dual microphone . Dual Speaker Use this noise-cancelling dual speaker for conference calls . For more information about making conference calls , see “ Straight Talk™ ” in Chapter 2. Back Cover Sync Connector/ Earphone Jack/TV Out • Connect the supplied USB cable to synchronize information . • Connect the power adapter to recharge the battery . • Connect the supplied USB stereo headset for hands-free conversation or for listening to audio media . • Connect an HTC composite video and audio cable ( purchased separately ) to output the device screen contents and device audio to an external viewing device . Strap Holder Attach a wrist strap , neck lanyard , or string accessory . 28 Getting Started 1.2 Installing the SIM Card , Battery , and Storage Card You need to remove the back cover before you can install the SIM card , battery and storage card . Also , make sure to always turn off the power before installing or replacing the SIM card and battery . To remove the back cover 1. Make sure your device is turned off . 2. Remove the stylus . Note You need to temporarily remove the stylus to be able to remove or replace the back cover . 3. Firmly hold the device with both hands and the front panel facing down . 4. Push the back cover up with your thumbs until it disengages from the device and then slide it up to remove . SIM card Note The SIM card contains your phone number , service details , and phonebook/ message memory . Your device supports both 1.8V and 3V SIM cards . Some legacy SIM cards may not function with your device . You should consult with your service provider for a replacement SIM card . There may be fees for this service . To install the SIM card 1. Remove the battery if it is installed . 2. Locate the SIM card slot , then insert the SIM card with its gold contacts facing down and its cut-off corner facing out the card slot . 3. Slide the SIM card completely into the slot . Cut-off corner Getting Started 29 To remove the SIM card 1. Remove the battery if it is installed . 2. Insert the tip of the stylus into the small hole above the SIM card slot , and then push the SIM card out with the stylus . 3. Slide the SIM card out from the slot with your other thumb or finger . Battery Your device comes with a rechargeable Lithium-ion battery and is designed to use only manufacturer-specified original batteries and accessories . Battery performance depends on many factors , including network configuration , signal strength , and usage patterns . For battery life estimates , see “ Specifications ” in the Appendix . Warning ! To reduce risk of fire or burns : • o not attempt to open , disassemble , or service the battery pack . D • o not crush , puncture , short external contacts , or dispose of in fire or water . D • Do not expose to temperatures above 60°C ( 140°F ) . • Replace only with the battery pack designated for this product . • ecycle or dispose of used battery as stipulated by local regulations . R 30 Getting Started To install the battery 1. Align the battery’s exposed copper contacts with the battery connectors at the bottom part of the battery compartment . 2. Insert the contacts side of the battery first and then gently push the battery into place . 3. Replace the back cover and insert the stylus back into the stylus compartment . To remove the battery Lift out the battery from the groove at the upper right side of the battery compartment . Groove Storage card To have additional storage for your images , videos , music , and files , you can purchase a microSD™ card and install it into your device . To install a microSD card 1. Remove the stylus and then remove the back cover . 2. Locate the microSD card slot on the upper part of the exposed right panel . 3. Insert the microSD card into the slot with its gold contacts facing down until it clicks into place . Note To remove the microSD card , press it to eject it from the slot . Storage card slot Getting Started 31 1.3 Charging the Battery New batteries are shipped partially charged . Before you start using your device , it is recommended that you install and charge the battery . Some batteries perform best after several full charge/discharge cycles . Note Only the AC adapter and USB sync cable provided with your device must be used to charge the device . Connect the USB connector of the AC adapter to the sync connector on your device , and then plug in the AC adapter to an electrical outlet to start charging the battery . Charging is indicated by a solid amber light on the Notification LED . As the battery is being charged while the device is on , a charging icon also appears in the title bar of the Home screen . After the battery has been fully charged , a full battery icon appears in the title bar of the Home screen . Warning ! • o not remove the battery from the device while you are charging it using D the AC or car adapter . • s a safety precaution , the battery stops charging before it overheats . A 1.4 Starting Up After installing your SIM card and battery and charging the battery , you can now power on and start using your device . Turning your device on and off To turn on the device Press the POWER button . When you turn on your device for the first time , it installs customized settings and displays the SIM Card Changed screen . See “ Auto configuring data connection settings and importing SIM contacts ” in this chapter for details . 32 Getting Started To turn off the device 1. Press and hold the POWER button for a few seconds . 2. Tap Yes when prompted . Auto configuring data connection settings and importing SIM contacts After installing customized settings , the SIM Card Changed screen appears . Follow the on-screen instructions to automatically configure your device’s data connections and/or import any contacts you have stored on your SIM card . The device restarts after all selected options are completed . Notes • The Import SIM contacts option does not appear if no contacts are found on your SIM card . • Touch Cancel if you prefer to configure your data connections or import your SIM contacts later . • If you choose to automatically configure your device’s data connections and if your SIM card supports multiple network profiles , you will be prompted to select the profile to use . Switching to Sleep mode Briefly press the POWER button to turn off the display temporarily and switch your device to Sleep mode . Sleep mode suspends your device to a low power state while the display is off in order to save battery power . Your device automatically goes into Sleep mode when you leave the device idle after a certain period of time . You are still able to receive messages and calls while your device is in Sleep mode . Your device wakes up automatically when you receive an incoming call . To wake up your device manually , briefly press the POWER button . Getting Started 33 1.5 Home Screen The main screen of the device is the TouchFLO™ 3D Home screen which allows finger-touch access to the most important functions such as contacts , text messages , e-mail , Internet , and more . For more information about using the TouchFLO 3D Home screen , see Chapter 3. Signal strength Connection status Notification Start screen Volume status Battery status Quick menu TouchFLO 3D Home screen Open the Phone screen ( See Chapter 2 for details ) Open the Camera . 34 Getting Started 1.6 Notifications When you touch or tap the icon area of the title bar , the Notifications screen opens to display your connection status and lists all your pending notifications including missed calls , new SMS/MMS messages , and more . Touch an item on the Notifications screen to open the related screen or TouchFLO 3D tab . Open the related screen or tab . Dismiss all notifications . Close the Notifications screen . To close the Notifications screen , touch Close or press the BACK button . Getting Started 35 1.7 Status Icons The following are some of the status icons that you may see on the device . Icons that appear in this area Vibrate mode Sound on Sound off Icons that appear in this area Battery charging Battery full Battery very low Icons that appear in this area Connection Setup Multiple notifications ; tap the icon to view all New text messages ; SMS notification of voice mail Sending MMS Receiving MMS MMS sent Cannot send MMS New incoming MMS New Windows Live™ message Missed call Icons that appear in this area Speakerphone on Roaming Alarm Other wireless network(s ) detected Wired headset connected Bluetooth on Bluetooth visible mode on Bluetooth stereo headset connected 36 Getting Started Icons that appear in this area GPRS available EDGE available HSPA available WCDMA/UMTS available Connected to a wireless network Connection is active Connection is not active Synchronization in progress Icons that appear in this area GPRS connecting GPRS in use EDGE connecting EDGE in use HSPA connecting HSPA in use WCDMA/UMTS connecting WCDMA/UMTS in use Maximum signal strength No signal Phone is turned off No phone service Searching for phone service Voice call in progress Call on hold Calls are forwarded Dialing while no SIM card is inserted No SIM card inserted Getting Started 37 1.8 Start Screen The Start screen , which can be opened by touching Start on the top-left corner of the screen or by pressing the START ( ) button , gives you one-touch access to all the programs and settings of your Windows Mobile-powered device . You can also add the shortcut icons of your favorite programs in the Start screen so you can open them quickly . Open the Start screen . Open the TouchFLO 3D People tab . Open the TouchFLO 3D Calendar tab . Open ActiveSync . Open the TouchFLO 3D Home tab . See “ Home ” in Chapter 3 for details . Open the TouchFLO 3D Settings tab and adjust the device settings . See “ Settings ” in Chapter3 for details . Swipe upward the screen to view or add more program icons . Open the corresponding program . Add a program icon . Access all programs on your device . Note Remove a program icon . The Home , People , Calendar , and Settings icons are permanent icons and cannot be removed or replaced with other program icons . 38 Getting Started To add a program icon to the Start screen 1. Touch an empty slot to open the Add Program screen that lists all programs on your device . 2. Touch the program you want to add to the Start screen . 3. When you have filled up the current Start screen with programs , scroll down the screen to access more empty slots and add more program icons . To scroll down , press and hold on the screen and then drag your finger upward . To scroll back up , press and hold on the screen and then drag your finger downward . To remove or replace a program icon on the Start screen 1. On the Start screen , touch Remove . 2. Touch the program icon you want to remove or replace to clear the slot . 3. Touch Done . 4. If you are replacing the slot with another program icon , follow the steps in “ To add a program icon to the Start screen ” . To launch a program Do any of the following on the Start screen : • • Touch the program icon ; or Touch All Programs , and then touch the program in the list . Tip The programs list is long . If you do not see the desired program on the current screen , drag your finger upward to view more programs . Getting Started 39 1.9 Quick Menu The Quick menu , which can be opened from the top right corner of the screen , shows the currently running programs . You can quickly switch between running programs , stop programs , and see how much program memory is being used . Customize Task Manager settings . ( See “ Using Task Manager ” in Chapter 13. ) Touch this icon to open or close the Quick Menu . Stop all currently running programs . Shows the total percentage of program memory in use . Touch to open the Memory settings screen . • To switch to a running program , touch the program name . • To stop a running program , touch . 40 Getting Started 1.10 Adjusting the Volume A single volume control adjusts both the system volume ( notifications and audio/ video playback volume ) and the phone ring volume of your device . To set a single volume 1. Press the VOLUME UP/DOWN button on the left panel of your device to open the Volume screen . 2. To increase or decrease the volume level , drag your finger up or down the volume bars , or press the VOLUME UP/DOWN button . You can also : • Touch Silent to mute the volume . • Touch Vibrate to switch the device to Vibrate mode . 3. The Volume screen automatically closes . You can also tap an empty area of the Volume screen to close it . Note Use the VOLUME UP/DOWN button on the left panel of your device to adjust the conversation phone volume during an ongoing call . Volume bars To adjust the system and ring volumes separately 1. On the Home screen , slide to the Settings tab , and then touch Sound . 2. Turn off the Single Volume option . 3. Press the VOLUME UP/DOWN button . 4. To switch between the Ring Volume and System Volume screens , touch Ring or System at the top of the screen . 5. To adjust the volume level , follow steps 2 to 3 in “ To set a single volume ” . Getting Started 41 1.11 Using Finger Gestures You can use finger gestures to scroll and pan on the touch screen . Finger scrolling Finger scrolling can be used to scroll up and down web pages , documents , and lists such as the contacts list , file list , message list , calendar appointments list , and more . When finger scrolling , swipe or flick your finger on the touch screen . To scroll up and down • To scroll down , swipe your finger upward on the touch screen . To scroll up , swipe your finger downward on the touch screen . • To auto-scroll , flick your finger upward or downward on the touch screen . Touch the screen to stop scrolling . 42 Getting Started To scroll left and right • To scroll towards the right , swipe your finger to the left . To scroll towards the left , swipe your finger to the right . • To auto-scroll , flick your finger left or right . Touch the screen to stop scrolling . Finger panning You can use finger panning to move to and view other parts of a zoomed photo , web page , document , or an e-mail . To pan , touch and hold on the touch screen and then drag your finger in any direction . Getting Started 43 1.12 Using the Zoom Bar The Zoom bar located below the touch screen is a handy zoom control that is unique on your device . When you are viewing a web page in Opera Mobile or a photo in Album , you can zoom in by sliding your finger from left to right across the Zoom bar , or zoom out by sliding from right to left . What’s more , you can also instantly enlarge or shrink the text size when you open and read messages or Word documents . Slide your finger from left to right across the Zoom bar to increase the text size , or slide from right to left to decrease . To increase or decrease the text size more , slide across the Zoom bar again . Zoom bar 1.13 Connecting Your Device to a Computer Whenever you connect your device to the computer with the USB cable , the Connect to PC screen displays and prompts you to choose the type of USB connection : ActiveSync Select this mode when you need to do the following : • • Synchronize Outlook e-mail messages , contacts , calendar appointments , files , and other data between your device and your computer . Have read and write access to the whole device . For more information about using ActiveSync , see Chapter 5. 44 Getting Started Disk Drive This mode is available for selection only when you installed a microSD card on your device . Select this mode when you want to use your storage card as a USB thumb drive , and copy files between your device’s storage card and your computer faster . When Disk Drive mode is enabled while your device is connected to the computer : • • You will not be able to use your device to access files from the storage card or run applications that are installed on the storage card . Your computer will only connect to the device’s storage card . When you access your device from the computer , you will only see the contents of the device’s storage card . Internet Sharing When you do not have Internet access on your computer , you can select this mode to use your device as a modem for your computer . For more information about using Internet Sharing , see “ Using Your Device as a Modem ( Internet Sharing ) ” in Chapter 8. </text>
<text id="TeleHTC_Manual_2_EN.txt">
Chapter 2 Using Phone Features 2.1 Making Calls To make a call , you can either dial a number or select a contact you want to call . Note Most SIM cards are preset with a PIN ( personal identification number ) that is provided by your wireless service provider . When prompted , enter the preset PIN , then tap Enter . If you enter the wrong PIN three times , the SIM card is blocked . If this happens , you can unblock it with the PUK ( PIN Unblocking Key ) obtained from your wireless service provider . Making a call from the Phone screen To open the Phone screen , press the TALK/SEND button ( ) . The Phone’s Smart Dial feature makes it quick and easy for you to place a call . When you start entering a phone number or contact name , Smart Dial automatically searches and sorts the contacts on the SIM and in Contacts , and the phone numbers in Call History ( incoming , outgoing , and missed calls ) . You can then select the desired number or contact from the filtered list . You can just enter the first letter of the name or number of a contact . Smart Dial searches for contact phone numbers and the first character of a contact name as well as from the character that appears after a space , dash , or underscore in a contact name . 46 Using Phone Features To call a phone number or contact 1. Begin entering the first few numbers or characters by tapping the keys on the Phone keypad . As you enter numbers or letters , the Smart Dial panel displays matches found . If you tap a wrong number or character , tap to erase each subsequent digit or character . To erase the entire entry , tap and hold . 2. Tap to close the phone keypad and to see if there are more matching numbers or contacts in the Smart Dial panel . To browse through the filtered list , flick through the list or slide your finger up or down the list slowly . Add the number to your contacts . Smart Dial panel Open the contact details . Tap to open or close the phone keypad . 3. To call a number or contact , do one of the following : • Tap the desired phone number or contact from the list . • To call a different phone number associated with the contact , touch the contact card icon at the right side of the contact name . On the contact details screen , tap the number you want to call . Using Phone Features 47 Tips • During a call , use the VOLUME UP/DOWN button on the side of the device to adjust the phone volume . • To send a text message to a selected contact , touch , and then tap Send Message . For more information about sending text messages , see “ Text Messages ” in Chapter 6. Making a call from a text message While you are viewing a text message on the TouchFLO 3D Messages tab or in the Inbox , you can directly call the sender of the message . 1. While viewing the text message , press the TALK/SEND button . 2. The Phone screen then opens , with the sender’s phone number automatically filled in and ready to be dialed . To place the call , tap Talk on the Phone screen or press TALK/SEND again . Tapping a phone number that is displayed in the body of the text message also allows you to call that number . For more information about viewing text messages on the TouchFLO 3D Messages tab , see “ Messages ” in Chapter 3. For more information about working with text messages , see “ Text Messages ” in Chapter 6. Making a call from an e-mail message While viewing a received e-mail message , you can directly place a call to the sender of the message . Tapping a phone number that is displayed in the body of the e-mail message also allows you to call that number . Note To receive e-mail , set up your e-mail account first on your device . See “ Mail ” in Chapter 3 for instructions . From the TouchFLO 3D Mail tab or Inbox When you are browsing e-mail messages on the TouchFLO 3D Mail tab or in the Inbox , you can select a received e-mail and then directly call the sender by pressing the TALK/SEND button . To call the sender , follow the same steps in “ Making a call from a text message ” . 48 Using Phone Features For more information about browsing through e-mail on the TouchFLO 3D Mail tab , see “ Mail ” in Chapter 3. For more information about working with e-mail messages , see Chapters 6 and 7. From an open e-mail When you open a received e-mail , you can directly place a call to the sender . 1. On the TouchFLO 3D Home screen , slide to the Mail tab . 2. Swipe your finger up or down the screen to browse through received messages . Tap an e-mail message to open it . 3. To place a call , you can do the following : • If the sender is a contact that is stored with a phone number on your device , tap Talk ( ) that is displayed to the right of the sender name to directly dial the sender’s phone number . • To call the phone number that is contained in the e-mail message , tap that phone number . • Tap the To or Cc button to open the Select Contacts to Call screen , and then tap Phone to open the Phone screen . Talk button Using Phone Features 49 Tip You can also start a conference call from the Select Contacts to Call screen . See “ Starting a conference call from an e-mail “ later in this chapter for details . 4. If you made a call to the sender or the phone number contained in the e-mail message , you can directly view the e-mail message on the Phone screen while the call is in progress . When the call is made from an e-mail message , an e-mail indicator is shown on the Keypad button . Tap this button to view the message directly on the Phone screen . Making a call from a meeting request or reminder When you receive a calendar reminder or meeting request e-mail that contains a phone number , you can tap the number to directly place the call . For example , if you are traveling and need to join a conference bridge call back in the home office , rest assured that you can join the call without delay . Appointment reminders you receive on your device will conveniently display the phone number and PIN , ready for you to dial . 50 Using Phone Features If you made a call from a meeting request e-mail , you can view the meeting details in the e-mail directly on the Phone screen while the call is in progress . An e-mail indicator is shown on the Keypad button ( ) . Tap this button to view the meeting details . Making an emergency call Tip Enter the international emergency number for your locale , and press the TALK/SEND button on your device . Additional emergency numbers may be included in your SIM card . Contact your wireless service provider for details . Making an international call 1. Tap and hold the number 0 key on the Phone screen until the plus ( + ) sign appears . The plus ( + ) sign replaces the international prefix of the country that you are calling . 2. Enter the full phone number you want to dial , and press the TALK/SEND button on your device . The full phone number includes the country code , area code ( without the leading zero , if any ) , and phone number . Calling voice mail Number 1 is generally reserved for your voice mail . Tap and hold this button on the Phone screen keypad to call voice mail and retrieve your voice mail messages . Using Phone Features 51 2.2 Answering and Ending Calls When you receive a phone call , the Incoming Voice Call screen will appear , allowing you to either answer or ignore the call . Accepting or rejecting an incoming voice call To answer a call Do any of the following : • • Fully slide the center button to the left of the Answer/Ignore bar . Press the TALK/SEND button . To reject a call Do any of the following : • • Fully slide the center button to the right of the Answer/Ignore bar . Press the END button . Center button To mute the ringing sound To mute the ring without rejecting the call , tap Mute Ring or press the VOLUME DOWN button . You can also put the device face down on a flat surface to mute the ringing sound . To reject a call and send a text message You can automatically send a default text message to the caller and reject the incoming voice call . Tap Send Text when you have an incoming call to send the text message . You can change the default text message by tapping Menu > Options > Advanced tab while on the Phone screen . 52 Using Phone Features Using the call functions When a call is in progress , use the call function buttons to put a call on hold , dial another contact for a phone conference , enter notes about the conversation , and more . Call functions Contact details . See “ The Contact Details screen ” in Chapter 3. To swap between two calls Your device notifies you when you have another incoming call , and gives you the option of rejecting or accepting the call . If you are already on a call and accept the new call , you can choose to switch between the two callers . 1. Press the TALK/SEND button to accept the second call and put the first call on hold . 2. To switch between callers , tap or tap the dim area that shows “ On Hold ” . 3. To end the second call and return to the first call , tap End Call or press END on your device . Using Phone Features 53 To use the speakerphone During a call , do one of the following to turn the speakerphone on or off : • • • Note Tap to turn the speakerphone on . Tap this button again to turn the speakerphone off . Placing your device face down automatically turns on the speakerphone . To turn the speakerphone off , place your device face up . You can also press and hold the TALK/SEND button during a call to turn the speakerphone on or off . The speakerphone icon ( ) appears in the title bar when the speakerphone is on . Warning ! avoid damage to your hearing , do not hold the device against your ear when To the speakerphone is on . To mute the microphone during a call Tap to turn the microphone on or off . When the microphone is turned off , the mute icon appears on the screen . To turn noise reduction on or off When you are using the earpiece and not the speakerphone during a call , you can tap Menu > Noise Reduction On to reduce ambient noise if the other party cannot hear your voice clearly . When noise reduction is not needed , tap Menu > Noise Reduction Off to disable it and save battery power . You can also turn noise reduction on or off in the Phone settings . Tap Start > Settings > All Settings > Personal tab > Phone > Advanced tab and then select one of the following settings in the Reduce noise in phone calls drop-down list : • Automatically . Analyzes ambient noise only at the beginning of a connected call and applies a certain noise reduction setting based on the detected noise . However , when you move to a noisier environment during the call , your device will not further decrease noise based on your new location . 54 Using Phone Features • • Notes Always . Always reduces ambient noise during the entire course of your phone call . Never . Turns off noise reduction . • If you want to change the noise reduction setting to Automatically , make sure to do this before starting a call . • Noise reduction is not used when you have a wired or Bluetooth headset connected . To open Notes while in a call Tap , or pull out the stylus . To view or create appointments during a call Tap to open the Calendar and browse your appointments or create a new one . Close the Calendar screen to return to the Phone screen . To end a call When a call is in progress , tap End Call or press END . Using Phone Features 55 2.3 Using Call History The missed call icon icon appears in the title bar when you missed a call . Use the Call History tab to check who the caller was , or view all your dialed numbers , and received calls . To open the Call History tab , tap Call History or Missed Call on the TouchFLO 3D Home tab . Received call Dialed number Missed call Return to the People tab . Open the Call History tab of the Contact Details screen and view all calls you exchanged with the contact . Filter or clear the Call History tab . If you have a long list of calls in the Call History tab , tap Menu > Filter , and then select the type of call you want to display . 56 Using Phone Features 2.4 Speed Dial Use Speed Dial to call frequently-used numbers with a single tap . For example , if you assign a contact to the location 2 in Speed Dial , you can tap and hold the number 2 key on the Phone screen keypad to dial the contact’s number . To create a Speed Dial entry 1. On the Phone screen , tap Menu > Speed Dial . 2. Tap Menu > New . 3. Tap a contact , and then select the phone number of the contact that you want to the speed dial key . 4. In Location , select an available key to use as the speed dial key , then tap OK . Tip To delete a Speed Dial entry , in the Speed Dial list , tap and hold the desired entry , and then tap Delete . 2.5 Video Call Your device lets you make video calls when you are within a 3G network coverage area . You need to use a 3G-enabled SIM card and activate the video calling service on your call plan to make video calls . Making a video call 1. On the Phone screen , tap to switch to video call mode . 2. Begin entering the first few digits of the phone number or the first few letters of the contact name you want to call . You can also tap to close the phone keypad so you can simply finger-scroll and select from the list of contacts and phone numbers . 3. After entering or selecting a phone number or contact name , tap the Video Call button at the bottom of the screen . Using Phone Features 57 4. When connected , tap the Camera button , and then wait for the called party’s image to appear on the Phone screen . Notes • The signal strength may influence the quality of streaming images . • The speakerphone automatically turns on when a video call is established . • If the video call is unsuccessful , a message pops up asking you if you want to try again , make a voice call instead , or send an SMS/MMS message . Changing the video call settings 1 While on a video call , you can change certain settings such as the size and brightness of the image , and the camera to use . Displays your image and the other party 's image , depending on the selected Swap View setting . Turns the camera on or off . When the camera is turned off , the image displayed depends on the Video Call options you have set . See “ To change the video call options ” for details . Switches between the Main ( back ) and Second ( front ) camera . Switches between 2 view options . You can choose to have the other party’s image small or large . Displays the phone number or contact name and call timer . 2 1 3 5 2 3 4 4 5 58 Using Phone Features To adjust the brightness 1. During a video call , tap Menu > Brightness . A brightness bar appears on the screen . 2. Drag the slider to the right to increase the brightness or to the left to decrease the brightness of the live image . Note You cannot adjust the brightness for a still image . To change the video call options On the Phone screen , or on the screen of the ongoing video call , tap Menu > Video Call Options and set the following : General tab • Show still image . Select the image you want to display to the other party when you turn off the camera . • Preset ( female ) . Displays a female picture . • Preset ( male ) . Displays a male picture . • Custom image . Use an image file as your display picture . When this option is selected , tap the Browse button ( ) to select an image file . • Last video frame . Use the last video frame before you stopped the camera as your display image . • Video screen preference . Choose the default image sizes to display on your device . • Camera options : • Flip the 2nd Camera video . Select this option if you are going to show a text document to the other party using the second camera . • Switch camera off when answering video call / Switch camera off when making video call . Display a still image instead of live video to the other party when you answer or make a video call . The image displayed is the one selected in Show still image . Using Phone Features 59 • Display info : • Show call timer . Display the elapsed call time during a call . • Show phone number or name . Display the other party’s phone number or name during a call . Services tab To set up further calling options for Video Call , tap the Services tab . Accepting or rejecting an incoming video call When you receive a video call , the Incoming Video Call screen appears . Refer to the “ Accepting or rejecting an incoming voice call ” section earlier in this chapter for details on how to accept or reject an incoming video call , mute the ringing sound , and more . 2.6 Straight Talk™ Your device features Straight Talk™ , a technology that integrates messaging , voice , and conference calling , allowing you to seamlessly transition from a message to a single call or multi-party conference call . With dual microphone and speaker that enhance voice quality and reduce noise , Straight Talk turns your device into a conference room speakerphone system . Note Make sure your SIM card is enabled with conference calling service . Contact your wireless service provider for details . This section shows how to make a conference call and use Straight Talk to transition from e-mail to the conference call . For more information about using Straight Talk to switch from a message to a voice call , see “ Making a call from a text message ” , “ Making a call from an e-mail message ” , and “ Making a call from a meeting request or reminder ” earlier in this chapter . 60 Using Phone Features Starting a conference call from the Phone screen There are two ways to start a conference call from the Phone screen . You can choose your participants first before starting the conference call . You can also directly dial calls and add each connected call to the conference call . To select participants and start a conference call 1. Press the TALK/SEND button to open the Phone screen . 2. Tap to switch the Phone screen to conference mode . 3. Tap to close the phone keypad so you can finger-scroll and select from contacts or phone numbers . 4. Select conference call participants by selecting the check boxes of contacts or phone numbers , and then tap Conference . The participants list is then displayed . Tap these buttons if you want to choose from other stored phone numbers and use them to call the participants . Tip To remove a participant before starting the conference call , tap Keypad and clear the check box of this participant . Using Phone Features 61 5. Slide open the hardware keyboard so that your device will display the Conference Room screen . This is an intuitive interface that makes conference calls much easier and simpler . You can simply tap photos or buttons on the screen to dial participants , join them to your conference call , and more . 6. Tap the photo of the first participant to dial the first call . 7. When the first call is connected , tap the photo of the second participant to dial the second call . The first call is automatically put on hold . 8. When the second call is connected , tap the Join button ( conference call and then dial the next participant . ) to add it to the Repeat this same process until all participants are added and connected to the conference call . Tip If you prefer to do the conference call in portrait view , do not slide open the hardware keyboard . When in portrait view , tap the Talk button ( ) to dial each participant , and then tap the Join button ( ) to add the second call and each subsequent call to the conference . To directly dial and add each participant to the conference call 1. Press the TALK/SEND button to open the Phone screen . 2. Make the call to the first participant . See “ Making a call from the Phone screen ” for instructions . 3. When the first call is connected , tap and make the call to the second participant . The first call is put on hold when you dial the second call . 4. When the second call is connected , tap to start the conference call . 62 Using Phone Features 5. Slide open the hardware keyboard so that your device will display the Conference Room screen . 6. To add another participant , tap Add Call and make the next call . When this call is connected , tap the Join button ( ) to add it to the conference call . Repeat this same process for each subsequent call that you add to the conference call . Tip If you prefer to do the conference call in portrait view , do not slide open the hardware keyboard . When in portrait view , tap Invite participants to dial a new call , and then tap the Join button ( ) to add the connected call to the conference . Managing the conference call While a conference call is in progress , you can do the following : To manage the conference call in landscape view To talk in private with a participant and put the others in the conference call on hold , tap the participant’s photo and then tap Private . To swap between a private call and the conference call , tap the dim area or tap Swap . Tap Join to add a private call back to the conference call . Tap End Call to end a private call and return to the conference call . Using Phone Features 63 To manage the conference call in portrait view Tap a participant from the conference call and then tap one of these buttons : View contact details . Talk in private to this participant only and put the others in the conference call on hold . End the call with this participant . To swap between a private call and the conference call , tap the dim area that shows “ On Hold ” or tap Menu > Swap . 64 Using Phone Features To turn on the speakerphone during a conference call While a call or conference call is in progress , you can turn on the speakerphone by simply placing your device face down . Your device provides crystal-clear sound quality and voice reception during conference calls . When the speakerphone is on , your device also enables the dual microphone to enhance your voice quality and reduce noise . When you need to temporarily mute the dual microphone so that the conference call participants will not hear you , press the MUTE button . Press it again to unmute . To end the conference call Tap End Call or press END . Dual microphone MUTE Dual speaker Starting a conference call from an e-mail Note From a received e-mail message , you can directly start a conference call with the sender and other recipients of the e-mail . To receive e-mail , set up your e-mail account first on your device . See “ Mail ” in Chapter 3 for instructions . 1. On the TouchFLO 3D Home screen , slide to the Mail tab . 2. Swipe your finger up or down the screen to browse through received messages . Tap an e-mail message to open it . 3. Tap the To or Cc button to open the Select Contacts to Call screen . Using Phone Features 65 4. Select the check boxes of the sender and recipients who you want to join in your conference call and then tap Conference . Tap here to close or expand the “ To ” or “ Cc ” recipient list . Select the check boxes of the participants . Tap Conference when you are ready to start the conference call . 5. Do steps 5 to 7 in “ To select participants and start a conference call ” to dial each participant and add each connected call to your conference call . 6. To manage your conference call , such as invite more participants , end the conference call , and more , see “ Managing the conference call ” in this chapter for details . 66 Using Phone Features 2.7 Turning the Phone Function On and Off In many countries , you are required by law to turn off the phone while on board an aircraft . To enable or disable the phone function 1. Tap Start > Settings , and then tap Communications . 2. Tap the OFF/ON slider at the right side of the Phone option to enable or disable the phone function . To enable or disable Airplane Mode Another way to turn off the phone function is to switch your device to Airplane Mode . When you enable Airplane Mode , all wireless radios on your device are turned off , including the phone function , Bluetooth , and Wi-Fi . 1. Tap Start > Settings , and then tap Communications 2. Tap Airplane Mode to enable or disable Airplane Mode . When you disable Airplane Mode , the phone function is turned back on and the previous state of Bluetooth and Wi-Fi are restored . </text>
<text id="TeleHTC_Manual_3_EN.txt">
Chapter 3 TouchFLO™ 3D 3.1 Using the TouchFLO 3D Home Screen TouchFLO™ 3D gives you touch control over your Windows Mobile-powered device . TouchFLO 3D provides a Home screen that allows finger-touch access to the most widely-used functions , such as People , Messages , Mail , Music , and Internet . The TouchFLO 3D Home screen has the following tabs : Home Music Messages Calendar Stock Settings People Mail Internet Photos and Videos Weather Displaying the TouchFLO 3D Home screen in landscape view The TouchFLO 3D Home screen tabs are always shown at the bottom of the screen when the Home screen is in portrait view . When you slide out the hardware keyboard , the Home screen automatically changes to landscape view and temporarily hides the tabs . Touch the Expand button ( ) at the bottom left side of the Home screen to display the tabs . 68 TouchFLO™ 3D Expand button Switching between the tabs of the Home screen To switch between the tabs , you can do any of the following : • • Touch or tap the desired tab . Press and hold your finger on the active tab , and then slide your finger right or left over the tabs . Release when you have selected the desired tab . TouchFLO™ 3D 69 • Swipe left across the screen to move to the next tab , and swipe right across the screen to move to the previous tab . • Tip When using the hardware keyboard , press the right key to move to the next tab , and press the left key to move to the previous tab . While on any other TouchFLO 3D tab , press the END key to return to the Home tab . Customizing the Home screen tabs You can move or hide the tabs on the Home screen , except for the Home tab . The Settings tab cannot be disabled and hidden also from the Home screen . 1. On the Home screen , slide your finger to the Settings tab , and then touch Customize Tabs . 2. To move a tab , touch and hold the icon before the tab name , and then drag it up or down the tabs list . Release the icon when you reach the desired location . 3. To hide a tab , clear the check box at the right of the tab name . 4. Touch Done . 70 TouchFLO™ 3D 3.2 Home The Home tab displays the current date , a flip-style clock , and an alarm icon that indicates whether the alarm is on or off . Missed calls and your upcoming calendar appointments are also shown on the Home tab . Open the Call History tab of the People screen and view the missed call information . Touch the clock to open the World Clock and change the date , time , and alarm clock settings . Swipe upward on the screen to display a smaller digital clock and view more appointments . To change back to the flip clock , swipe downward on the screen . Open the appointment details screen where you can view , edit , or delete the appointment . World Clock On the Home tab , tap the clock to open the World Clock tab ( ) and view the date and time . You can add , remove , or rearrange cities on the World Clock tab . Tip The World Clock tab can have up to 10 cities . TouchFLO™ 3D 71 Add another city . The date and time in selected cities . This is your local time . To change the local time to another city , select the button before the city name . Return to the Home tab . Remove or rearrange the cities , or adjust the local time . To change your local time , date and time zone 1. On the World Clock tab , touch Menu > Local Time Settings . 2. Adjust the time ( hour and minutes ) by tapping the up or down arrow buttons . 3. Touch Date , select the date , year , and month , and then touch Select . 4. Touch City . The Select Country screen then appears . 5. Flick your finger on the screen or use the Quick Scroll bar on the right of the screen to scroll through the country list . Touch the desired country to select it . 6. The Select City screen then appears . Flick your finger on the screen or use the Quick Scroll bar on the right of the screen to scroll through the city list . Touch the desired city to set your time zone . Tip You can also slowly scroll through the country or city list by dragging your finger upward on the screen , or enter the country or city name in the search box . 7. Tap Done . Note When you synchronize your device with your computer , the time on your device is updated with the time on your computer . 72 TouchFLO™ 3D Alarm Clock On the Home tab , tap the clock , and then touch the Alarm Clock tab ( open the Alarm Clock screen . You can set up to three alarms on this tab . Touch an alarm time to open the Set Alarm screen and set the time and days when to sound the alarm clock . ) to Touch the OFF/ON slider to turn an alarm on or off . To set an alarm 1. On the Alarm Clock screen , touch an alarm time . 2. On the Set Alarm screen , adjust the alarm time ( hour and minutes ) , then tap the day of the week for the alarm . Tip Select multiple days by tapping each desired day . Tap a selected day to exclude it from the alarm . 3. Enter the alarm description , select the alarm ring tone , then choose whether you want the device to vibrate when the alarm goes off . 4. Tap Done . 5. On the Alarm Clock screen , tap the OFF/ON slider to turn on the alarm . Note When an alarm goes off , you have the choice to Snooze or Dismiss the alarm . When you select Snooze , the alarm will sound again after 5 minutes . TouchFLO™ 3D 73 3.3 People On the People tab , you can add favorite contacts and quickly make calls or send text and e-mail messages to these contacts . From the People tab , you can also set up your own contact card , create new contacts , and easily view exchanged text , multimedia and e-mail messages with a contact . If contacts have their own Facebook account , you can view their Facebook updates and events right from the People tab . Note You need an active data or wireless network connection to the Internet to link to Facebook . See Chapter 8 for details on how to connect to the Internet . Setting up My Contact Card My Contact Card automatically opens the first time that you access the People tab . You can enter and save your contact information on My Contact Card so you can easily share and send it to your contacts . If you have a Facebook account , you can also sync your Facebook profile with My Contact Card so you can receive instant notifications everytime you or your Facebook friends change profiles or post events . 1. On the Home screen , slide your finger to the People tab . 2. When the My Contact Card screen appears , tap Next . Note Tap Skip if you prefer to set up My Contact Card later . You can open My Contact Card from the Settings tab of the TouchFLO 3D Home screen , or from the All tab of the People screen . See “ To view and search contacts on your device ” and “ Settings ” for details . 3. On the subsequent screen , choose how to add your photo to your contact card . You can use the Camera to take your photo , select a stored photo from your device or storage card , or if you have a Facebook account , login to your account and sync with your Facebook profile . Note When the Link Profile window opens , select or clear the Facebook information that you want to link , and then tap Done . 74 TouchFLO™ 3D 4. On the Detail Information screen , enter your information in the fields provided . You can scroll down the screen to view more fields . 5. When finished entering information , tap Next , and then tap Done on the subsequent screen to return to the People tab . Working with favorite contacts You need to have contacts already stored on your device before you can add them as favorite contacts on the People tab . If there are no existing contacts , create them first on your device . To create a new contact 1. On the People tab , touch All People . 2. The People screen then opens and displays the All tab ( create a new contact . ) . Touch New to 3. Enter the contact information in the fields provided and then tap Done or OK . Add the contact’s photo . You can link to the contact’s Facebook photo , select an existing photo in Album , or open Camera and take a photo of the contact . Touch a field to start entering information . Add another phone number . Save the contact . TouchFLO™ 3D 75 Tips • To link with the contact’s Facebook account , scroll down the New Contact Card screen and then tap Link in the Facebook section . For more information about Facebook , see “ Facebook updates and events ” in this chapter . • Tap More at the bottom of the New Contact Card screen to enter additional contact information from Windows Mobile’s Contacts program . See “ Contacts ” in Chapter 12 for details . To add favorite contacts You can add up to 15 favorite contacts on the People tab . Note SIM contacts cannot be added as favorite contacts . 1. On the People tab , touch one of the plus ( + ) icons , or touch Add Favorite . 2. On the Select a Contact screen , touch the name of the desired contact . Tip To create a new contact , touch New on top of the list . 3. Select a phone number or e-mail address to associate to the favorite contact . Note If there is no picture associated with the contact , the Album program opens and lets you take a photo of the contact or select an existing contact photo . For more information about Album , see Chapter 11. 4. To add another favorite contact , touch the small plus icon ( ) at the right side of the screen and repeat steps 2 and 3. 76 TouchFLO™ 3D To find a favorite contact Do any of the following : • • To flip through the contact pictures one at a time , swipe your finger upward or downward the screen . On the picture strip at the right side of the People tab : • • Touch the picture of the desired favorite contact ; or Press and hold on the currently selected contact picture at the right side of the screen , and then slide upward or downward the picture strip until the desired favorite contact is selected . Swiping upward/downward on the screen Tip Using the picture strip To remove the current favorite contact , touch Menu > Remove Favorite . TouchFLO™ 3D 77 To communicate with your favorite contact After selecting a favorite contact , do any of the following to communicate with that contact : • Touch the contact’s name , phone number , or e-mail address below the contact picture to call or send an e-mail message . For more information about making a call or composing and sending an e-mail message , see Chapter 2 and Chapter 6. Touch an icon below the contact name to communicate with the contact . Call the contact’s mobile phone . Call the contact’s work/office phone . Call the contact’s home phone . Compose and send an e-mail message . Compose and send a text message . • The icons shown depend on available contact information . For example , ( ) is shown if the contact information includes a home phone . • Touch the picture of the favorite contact on the center screen to open the Contact Details screen , and then choose how to communicate with the contact . See “ The Contact Details screen ” in this chapter for details . 78 TouchFLO™ 3D The People screen Touch All People on the People tab to display the People screen where you can view and manage all your contacts . The People screen has these tabs : All , Favorites , Updates and Events , and Call History . All Call History Favorites Updates and Events Note The way to switch between tabs on the People screen is just the same as the way you switch tabs on the main Home screen . See “ Switching between the tabs of the Home screen ” earlier in this chapter . Functions Lists all contacts on your device and on the SIM card . This tab lets you create , delete , or edit a contact , or save a contact to your SIM card using SIM Manager . Touch a contact to open the Contact Details screen . You can also use this tab to open or update My Contact Card . Tip If you imported SIM contacts to your device and duplicated contacts are displayed , tap Menu > View > Contacts to filter and display only contacts stored on your device . Shows the favorite contacts that you have added to the People tab . You can also add favorite contacts through this tab . Displays notifications when there are updates that occurred in Facebook . This tab also shows events of your stored contacts . See “ Facebook updates and events ” in this chapter for details . Lists all your dialed numbers , and received and missed calls . See “ Using Call History ” in Chapter 2. Tab All Favorites Updates and Events Call History TouchFLO™ 3D 79 To view and search contacts on your device On the People screen , touch the All tab to view all your contacts . Swipe upward or downward on the screen to scroll through your contacts . You can also use the search box or the Quick Scroll bar to search for contacts on your device . Tap to send your contact information as an attachment in a multimedia message . Show or hide the search box . Use the search box to search contacts on your device . Create a new contact . Touch to edit or update My Contact Card SIM card contact Touch to open the Contact Details screen . This icon appears when : • You receive a new text or e-mail message , or when you miss a call from the contact . Quick Scroll bar . Touch and hold , and then slide your finger downward . The Facebook status appears when you link the contact to his or her Facebook account . Add a new contact , delete contacts , filter • The contact has updated the contacts list , and more . Facebook profile or added Return to the People tab . events in Facebook . Note When you slide open the hardware keyboard and the screen switches to landscape view , the All tab automatically displays the search box . You can use the hardware keyboard to enter and search for a contact . 80 TouchFLO™ 3D The Contact Details screen When you touch a contact name in the All tab of the People screen or touch the picture of a favorite contact in the center screen of the People tab , the Contact Details screen opens . From this screen , you can view the contact’s details , exchange of messages and calls with the contact , and more . The Contact Details screen has these tabs : Details , Messages , Email , Updates and Events , and Call History . Details Email Call History Messages Updates and Events Note The way to switch between tabs on the Contact Details screen is just the same as the way you switch tabs on the main Home screen . See “ Switching between the tabs of the Home screen ” earlier in this chapter . Tab Details Functions Shows a contact’s details . From this tab , you can call or send a text or e-mail message to the contact , edit or delete the contact information , or save the contact to your SIM card . Messages Displays exchanged text and multimedia messages with the contact . You can also reply with a text message directly on this tab . Email Displays all received e-mail messages from the contact . Updates and Events Displays notifications when the contact has updates on his or her Facebook account . This tab also shows events of the contact . See “ Facebook updates and events ” in this chapter for details . Call History Lists all your incoming , outgoing , and missed calls to and from the contact . This tab also lets you call the contact . See “ Using Call History ” in Chapter 2 for details . TouchFLO™ 3D 81 Facebook updates and events If you and your stored contacts have Facebook accounts and you linked to Facebook when you were creating My Contact Card , you can easily check which of your contacts have updates that occurred in Facebook . The types of Facebook updates include changes in profile information and status as well as new photos added to the Facebook album . You can also easily check which contacts have events that occur on the current day . The types of events include the birthday and anniversary , if specified and stored on the contact details , as well as events that are created in Facebook . To check which contacts have Facebook updates and events You can check for Facebook updates and events of contacts from one convenient location , which is on the Updates and Events tab of the People screen . 1. On the Home screen , slide to the People tab and then tap All People . 2. Tap the Updates and Events tab ( ) . 3. If you haven’t linked your stored contacts to Facebook , the Updates and Events tab will show a Link Profiles option . Tap this option , choose which contacts you want to link to Facebook , and then tap Next . On the Link Profiles window , select or clear the Facebook information that you want to link , and then tap Done . 4. In the Updates list , when you tap a contact who has only one type of Facebook update , Opera Mobile opens and brings you to your Facebook site where you can view details of the contact’s Facebook update . When you tap a contact who has multiple Facebook updates , the Contact Details screen opens and displays the Updates and Events tab of this contact . See “ To check a single contact’s Facebook updates and events ” for details . 5. In the Events list , tap a contact to send a greeting via a text message to the contact or view the contact details . If an event is a Facebook event , tap it to open Opera Mobile and view information about that event . 82 TouchFLO™ 3D Indicates that you have an invitation for an event in Facebook . Tap Me to open Opera Mobile and access your Facebook site so you can choose to accept or decline the invitation . Displays you and the contacts who have updates in Facebook . Lists contacts who have events on the current day . Notes • To manually refresh and display the latest Facebook updates , tap Menu > Update Now . • To enable the Facebook updates to be refreshed automatically , tap Menu > Data Connection Setting and then select the Download data automatically . The refresh is not instant . Your device checks from Facebook in a fixed time period . To check a single contact’s Facebook updates and events To check only for a single contact’s Facebook updates and his or her events , access the Updates and Events tab from the Contact Details screen . 1. On the Home screen , slide to the People tab and then tap All People to open the People screen . 2. Tap a contact to open the Contact Details screen . 3. Tap the Updates and Events tab ( ) . 4. In the Updates list , tap a Facebook update to Opera Mobile and view details of that update . TouchFLO™ 3D 83 5. In the Events list , tap an event to send a greeting via a text message to the contact or view the contact details . If it is a Facebook event , tap it to access your Facebook site and view information about that event . To change your status in Facebook You can change your status in Facebook directly from your own contact card . 1. On the All tab of the People screen , tap Me to open your contact card . 2. Scroll to the bottom of the screen and then tap the button that displays your status . 3. Enter your new status and then tap OK . To log out from Facebook To log out from your Facebook account , open My Contact Card , scroll to the bottom of the screen , and then tap the message that says “ Tap to logout ” . 84 TouchFLO™ 3D To connect back to Facebook Do one of the following : • • • Open My Contact Card , scroll to the bottom of the screen , and then tap the message that says “ Login to my facebook ” . On the Updates and Events tab of the People screen , tap Link . On the Updates and Events tab of a single contact , tap Link Profiles . On the Facebook Login screen , enter the e-mail address and password that you use for your Facebook account . 3.4 Messages On the Messages tab , you can read text messages ( SMS ) as they arrive , and create a new text message . Touch the message to open the Messages tab of the Contact Details screen and view all received messages from the contact . Shows the number of unread text messages . Access all text messages in your inbox and other folders . Create a new text message . To flip through received text messages , swipe your finger upward/downward on the screen . Reply to the current message , delete the current message , and more . TouchFLO™ 3D 85 For more information about working with text messages , see “ Text Messages ” in Chapter 6. Making calls or sending e-mail directly from a text message While reading a text message on the Messages tab , you can directly call the sender of the text message . When you have opened a received text message , you can place a call to the phone number or send e-mail to the e-mail address that is contained in the message . For more information about directly making calls and sending e-mail while viewing text messages , see Chapter 6. 3.5 Mail The Mail tab is where you send and receive e-mail messages . Adding an Internet e-mail account On the Mail tab , use Mail Setup to easily add web-based e-mail accounts such as Yahoo ! Mail Plus , AOL , and more . 1. On the Home screen , slide to the Mail tab . 2. Touch New Account at the bottom-right of the screen . The Mail Setup screen appears . 3. Enter your e-mail address and password , then tap Next . 4. Enter your name and the account display name , then tap Next . Mail Setup then searches for the e-mail provider settings on your device . If the settings are not found on your device , you will be prompted to enter the e-mail account settings manually . Obtain the e-mail account settings from your e-mail provider . 86 TouchFLO™ 3D 5. Tap the Automatic Send/Receive time , and then choose how frequent you want e-mail messages to be automatically sent and downloaded on your device . 6. Select or clear an advanced setting according to your preference , and then tap Done . For more information about specifying e-mail server settings , creating and sending e-mail messages , and customizing e-mail settings , see “ E-mail ” in Chapter 6. Adding an Outlook e-mail account You can also set up and add an Outlook e-mail account on the Mail tab and view the same e-mail messages that you receive in Outlook on your computer or on the Exchange Server . Before you add an Outlook e-mail account , obtain the Exchange Server name , domain name , user name , and password from your network administrator . 1. On the Home screen , slide to the Mail tab . 2. Touch New Account at the bottom-right of the screen . Note If you have previously added an e-mail account on the Mail tab , touch Menu > Account > New Account . 3. On the Mail Setup screen , enter your e-mail address and password , select Exchange Email ( Outlook ) , and then tap Next . 4. Enter the domain name and server address , select the This server requires an encrypted ( SSL ) connection option , if needed , and then tap Next . 5. Clear the data that you want to exclude from synchronization , and then tap Done . Your device synchronizes with the Exchange Server and downloads your Outlook e-mail messages . Note If you include all Outlook data , your Outlook contacts , appointments , and tasks will also synchronize with your device . For more information about working with company e-mail , see Chapter 7. TouchFLO™ 3D 87 Checking and reading e-mail messages The icon on the Mail tab and the respective icons of your e-mail accounts show the number of newly received or unread e-mail messages . Select an e-mail account and then swipe your finger up or down on the center screen to browse through received e-mail messages . • To browse through received e-mail messages , swipe up or down on the envelope image . • Touch the e-mail on the screen to open and read the message . Access all e-mail messages of the currently selected account . After selecting an e-mail account , touch this icon to create and send a new e-mail message . To select an e-mail account : • Touch an e-mail account icon to view the e-mail messages in that account . Or , • Touch and hold the icon of the e-mail account that is currently displayed , then slide upward or downward until the desired e-mail account is selected . Create a new e-mail , add another e-mail account , send and receive e-mails , and more . For more information about creating and sending e-mail messages , see Chapters 6 and 7. Making calls directly from an e-mail message You can directly call the sender of the e-mail message that is currently shown on the Mail tab . When you have opened a received e-mail message , you can place a voice call or conference call to the other recipients of the e-mail . For more information about directly making voice calls and and conference calls while viewing e-mail messages , see Chapters 2 and 6. 88 TouchFLO™ 3D 3.6 Calendar The Calendar tab displays a monthly calendar and allows you to quickly create and view appointments . Indicates that you have appointments for that date . Today’s date . Touch a date to view or create appointments for that date . Switch to Day view so you can view or create appointments for the current day . To go to the next or previous month , swipe your finger upward/downward or touch the Up/Down arrow on the screen . From the menu , choose to create a new appointment for the current date , or go to the current date if it is not displayed on the screen . To create an appointment 1. On the Home screen , slide your finger to the Calendar tab . 2. If you are creating an appointment for the current date , touch Menu > New . Otherwise , touch another date on the calendar , and then touch New Appointment . 3. Enter a name for the appointment , then specify the location . 4. If there is a time frame for the appointment , set the start and end dates and times . If it is a special occasion such as a birthday or a whole-day event , set the All Day option to Yes . 5. When finished , tap OK to return to the Calendar tab . TouchFLO™ 3D 89 To view and manage your appointments On the Calendar tab , dates with appointments are indicated by a triangle ( the upper-right corner of the date box . 1. Touch a date on the calendar to switch to Day view . The screen displays all your appointments and the weather information for that day . Note The weather information appears only if you have set your local time to a city on the World Clock tab , and if the appointment date is within the 5-day forecast on the Weather tab . See “ Home ” and “ Weather ” in this chapter for details . ) at 2. Touch an appointment to view its details . On the appointment details screen , touch Menu to edit , send , or delete the appointment . 3. Touch OK to return to Day view . Tip Your upcoming appointments also appear on the Home tab . To use Windows Mobile Calendar You can also use the Windows Mobile Calendar program to create , view , and send appointments . To open the Calendar program , tap Start > All Programs > Calendar . For more information about using Windows Mobile Calendar , refer to the “ Help & How-To ” topics on the Windows Mobile web site . 90 TouchFLO™ 3D 3.7 Internet On the Internet tab , you can open Opera Mobile™ to browse the web , search information , and add push web pages . This tab also lets you enable Push Internet to update the contents of your push web pages before you browse them . Enter the information you want to search on the web , and tap . Browse the web using Opera Mobile . Add a push web page . View your web favorites ( bookmarks ) . Swipe upward to scroll down the screen and access more web favorites , if any . Remove a push web page , adjust the auto-update time for your push web pages and bookmarks , and more . To add a push web page You can add push web pages on the Internet tab for quick access . 1. On the Home screen , slide your finger to the Internet tab . 2. Tap Add a new push page . On the New Push Page screen , enter the push web page title and address ( URL ) , and then select the auto update time under Frequency . Tip You can also select a bookmark , and add it as a push web page . 3. Tap Save . TouchFLO™ 3D 91 To automatically update your push web pages Automatically update your push web pages to ensure that you browse the latest versions of your favorite web sites every time you access them from the Internet tab . The updated web sites are cached in the device memory so that they load faster in Opera Mobile . 1. On the Internet tab , touch Menu > Schedule Settings . 2. In the Day and Time section , select the day or days you want to auto update your push web pages , and then specify the update time . 3. Scroll down the screen to the Frequency section , then touch the update time below each of your push web pages to set the time interval for automatic updates . 4. Tap Done to return to the Internet tab . To configure Push Internet settings 1. On the Internet tab , touch Menu > Data Settings . 2. Touch the OFF/ON slider to enable or disable the following options : • Push Internet . Enable ( default ) or disable Push Internet . • Roaming . Enable this option if you want to update your push web pages and bookmarks even when you are roaming . Enabling this option may incur additional data charges . This option is disabled by default . 92 TouchFLO™ 3D 3.8 Stock The Stock tab allows you to add , view , and analyze stocks and stock market movements using updated financial information . You can add up to 14 stock quotes or stock market indexes on the Stock tab . Note Downloading stock or stock market information may incur additional fees from your wireless service provider . Contact your service provider for details . To add a stock or stock market quote 1. On the Home screen , slide your finger to the Stock tab , and then touch Add Stock . Note If the Stock tab is not empty , touch Menu > Add Stock to add another stock quote or stock market index . 2. On the Add Stock screen , enter the company name , stock market index , or ticker symbol in the search box , and then tap . Search the company or stock market . Add the stock/stock market to the Stock tab . Enter the company/stock market name or ticker symbol . Return to the Stock tab . Swipe upward to scroll down the screen and access more search results . 3. Tap the company name , stock market index , or ticker symbol to display it on the Stock tab . TouchFLO™ 3D 93 4. To add another stock quote or stock market index , touch Menu > Add Stock on the Stock tab , then repeat steps 2 to 4. To view stock quotes or stock market indexes The Stock tab lists all your stock quotes and stock market indexes including the current price or volume , and the change in price or volume from the previous trading day . The change in price or volume box indicates whether the stock or stock market has gained ( green ) or declined ( red ) . Open the Stock Details screen . Current trading price or volume Toggle between showing the change in points/price or percentage from the previous trading day . Touch the stock quote or stock market index name to view its intraday chart and other details . Touch to open the Stock Details screen . Shows the last time you updated the information . To view more stock quotes or stock market indexes , swipe your finger upward on the screen . Add , delete , or rearrange the stocks and stock market indexes . Return to the Stock tab . Download the latest stock/ stock market information . 94 TouchFLO™ 3D To set the stock or stock market information download 1. On the Stock tab , touch Menu > Settings . 2. You can choose from the following download options : • Download data automatically . When selected , stock and/or stock market index data is automatically downloaded from the Yahoo ! Finance web site at the interval you specified . You can also update information every time an ActiveSync connection is established . Clear this option if you prefer to manually download stock and/or stock market index information . • Download data when roaming . Select this option only if you want to automatically download stock and/or stock market index information when roaming . This may incur additional data charges . TouchFLO™ 3D 95 3.9 Photos and Videos The Photos and Videos tab lets you flip through your photos and video clips and view them in full screen . From this tab , you can also open Camera and capture pictures and record videos . Capture a photo . Touch the photo or video to view or play it in full screen . Record a video . To flip through photos and videos , swipe upward/downward on the screen . Open Album . ( See “ Viewing Photos and Videos Using Album ” in Chapter 11 for details . ) View the photos as a slideshow . If a video is selected , touch Play . The Photos and Videos tab displays pictures and video files from the current favorite album . By default , the Camera Shots album is set as the favorite album . This album stores the pictures and videos you captured using the device camera . 96 TouchFLO™ 3D To set an album as a Favorite 1. On the Photos and Videos tab , touch Album . 2. Touch Albums and then select one of the listed favorite albums . 3. Tap Menu > Set Album as Favorite and then tap OK on the confirmation screen . Tips • For more information about viewing in full screen , see “ Viewing photos ” and “ Playing videos ” in Chapter 11. The file formats that can be viewed on the Photos and Videos tab are the same as in Album . • To transfer media files from a computer and view them on the Photos and Videos tab , copy or synchronize them to a folder under \My Device ( the device memory ) or \Storage Card ( if a microSD card is installed ) . TouchFLO™ 3D 97 3.10 Music The Music tab allows you to visually browse through albums and music tracks and play music . The albums and music tracks that you see on the Music tab are from the Now Playing list of the Library . Go to the previous album or the previous track in the current album . Swipe upward/ downward on the screen to flip through albums or tracks in an album . Play or pause . Go to the next album or the next track in the current album . Set music playback to Repeat , turn Shuffle on or off , and more . Access the Library . Note Your device searches for all supported music files from the following locations : Device : \My Music ( including all subfolders ) \My Documents ( including all subfolders ) Storage Card : \Storage Card ( including all subfolders ) For information about supported music file formats , see “ Specifications ” in the Appendix . To play music On the Music tab , flip through albums and tracks to find the music you want to start listening to , and then touch the Play icon . 98 TouchFLO™ 3D To move forward or backward in the current music track Touch and hold on the thin bar below the album art to display the progress bar : Drag your finger right or left on the progress bar to move forward or backward in the current track . To set repeat and shuffle modes Touch Menu > Repeat and choose whether to repeat the current track , repeat all tracks in the current album or playlist , or not to repeat . To turn shuffle mode on or off , touch Menu > Shuffle and then select Shuffle On or Shuffle Off . The icons on the upper-right side of the Music tab show whether repeat and shuffle modes are enabled . Repeat [ One ] Repeat [ All ] Shuffle [ On ] To browse and play music in the Library The Library organizes music into categories , such as Now Playing , Artists , Albums , Genres , and All Songs . When you add more albums or music tracks to your device , go to the Library to locate and play the new albums or music tracks . 1. On the Music tab , touch Library to open the Library screen . 2. The tabs at the bottom of the Library screen correspond to the different categories . To browse music under a certain category , slide to the tab that corresponds to the desired category . 3. Keep tapping an item on a category tab ( for example , an artist ) until the music tracks display on the screen . 4. Tap a music track to play it . Note When you select a category in the Library such as Artists and play its music , the Now Playing list will be replaced with the music tracks from that category . TouchFLO™ 3D 99 To create and use a playlist 1. Select the desired music on the Music tab or the Library to play it . 2. On the Music tab , touch Menu > Add to Playlist . 3. Touch Create new playlist , enter the Playlist Name and then touch OK . 4. Touch Library , slide to the Playlists tab , then touch a playlist to open it . 5. Touch the plus icon , or touch Menu > Add Songs , then slide to the All Songs tab . 6. Select the check boxes of the music tracks you want to add to the playlist , or touch Menu > Select All to choose all tracks . 7. Touch OK to add the tracks to the playlist . 8. When finished adding songs , touch Back to return to the Playlists tab . 9. On the Playlists tab , touch a playlist to open it . 10. Touch the first track in the playlist to play it on the Music tab . After each track , the next one in the playlist will be played . Note Playlists are not automatically updated when music files have been deleted from the device memory or storage card . There are two types of playlists that can be shown on the Playlists tab : • • Custom playlists ( ) that are created on the Music tab . Windows Media® Player playlists ( ) that are in Windows Media® Player Mobile’s Library ( which is synchronized with Windows Media® Player on your computer ) . These playlists cannot be edited . Note If a Windows Media® Player playlist contains a combination of music , video and image files , only music files in the playlist are synchronized to your device and other media types are filtered out . 100 TouchFLO™ 3D 3.11 Weather The Weather tab shows you the current weather as well as weather information for the next four days of the week . The Weather tab can display weather information of your local city and/or weather in up to ten cities . Shows the last weather update . To view the weather in other cities , swipe your finger upward/downward on the screen . Add or delete a location , change the temperature to Celsius or Fahrenheit , and more . Download the latest weather information . Your device automatically connects to the Internet to download and display weather information . The current temperature , temperature range , type of weather ( sunny , cloudy , showers , or others ) , and the weather information for the next four days of the week are shown on the Weather tab . To add a city 1. On the Weather tab , touch Menu > Add Location . 2. The Select Country screen then appears . Flick your finger on the screen or use the Quick Scroll bar on the right of the screen to scroll through the country list . Touch the desired country to select it . TouchFLO™ 3D 101 3. The Select City screen then appears . Flick your finger on the screen or use the Quick Scroll bar on the right of the screen to scroll through the city list . Touch the desired city to select it . Tip You can also slowly scroll through the country or city list by dragging your finger upward on the screen , or enter the country or city name in the search box . To choose download options 1. On the Weather tab , touch Menu > Settings . 2. You can choose from the following options : • Download weather automatically . When this option is selected , weather information is automatically downloaded whenever you select the Weather tab , if the data has not been updated within the last three hours . Weather data is also downloaded every time an ActiveSync connection is established . Clear this option if you prefer to manually download weather information . • Download weather when roaming . Select this option only if you want to allow automatic download of weather data when roaming . This may incur additional data charges . 102 TouchFLO™ 3D 3.12 Settings The Settings tab gives you access to all the device settings . 1 2 3 4 5 6 7 Access all personal , system , and connection settings . 1 2 3 4 5 6 7 8 9 8 9 Adjust the Wi-Fi , and Bluetooth settings . Swipe your finger upward/downward on the screen to view more settings . Open ActiveSync and sync Outlook information . See Chapter 7 for details . Adjust the audio settings and sound profile . See “ Ringer settings ” in Chapter 13 for details . Change the Home tab wallpaper . Manage the communication features of your device . See “ Using Comm Manager ” in Chapter 13 for details . Move or hide the TouchFLO 3D tabs . See “ Customizing the Home Screen tabs ” earlier in this chapter . Set up My Contact Card . See “ Setting up My Contact Card ” in this chapter . Open Mail Setup and set up an Internet or Exchange Server e-mail account . See “ Mail ” earlier in this chapter . Enable or disable auto screen rotation or calibrate the device’s G-Sensor . Display the TouchFLO 3D information . </text>
<text id="TeleHTC_Manual_4_EN.txt">
Chapter 4 Entering Text 4.1 The Hardware Keyboard Your device comes with a QWERTY keyboard , which is similar to a standard keyboard on a computer . To use the keyboard , slide the screen panel to the right to reveal the keyboard . The screen orientation automatically switches to landscape mode when the keyboard is opened . 104 Entering Text Adjusting the LCD screen angle After sliding out the hardware keyboard , you can adjust the angle of the device screen to minimize glare and reflection . 50° angle The maximum tilting angle of the screen is 50 degrees . Do not force the screen to tilt further than the maximum tilting angle as it will break the device . Before you retract the screen , please be sure to adjust the screen angle back to the original horizontal position . Using the hardware keyboard You can do the following with the hardware keyboard : • To type lowercase letters and numbers , press the keys using your thumbs or fingers . • To enter all uppercase letters , press twice , or press first and then press . To change back to all lowercase letters , press again . Entering Text 105 • To enter a single uppercase letter , press corresponding key . and then press the • To enter the symbol or punctuation mark , or launch the program that is printed at the upper right corner of a key , press , then press the corresponding key . • To open the Symbol Pad , press • Press • Press the arrow keys / / and then press / . to insert a hard return while typing . for directional movement . first and • To delete the character to the right of the blinking cursor , press then press . To delete the previous character , press . • Press • Press • Press to open the Messaging program . and then and then press to open your SMS/MMS messaging account . to open the XT9 menu . • Use the same way as you use the Control key of a computer keyboard . For example , when you are editing a Word document , you can do the following with this key : Press ... Ctrl + A Ctrl + B Ctrl + I Ctrl + U Ctrl + C To ... Select all Bold Italics Underline Copy Press ... Ctrl + X Ctrl + V Ctrl + Z Ctrl + Y Ctrl + Q To ... Cut Paste Undo Redo Exit Note Not all of the Ctrl key shortcuts may be supported in certain programs . 106 Entering Text 4.2 On-screen Input Methods When you start a program or select a field that requires text or numbers , the Input Panel icon is displayed on the menu bar . Tap the Input Selector arrow ( next to the Input Panel icon ) to open a menu where you can select a text input method and customize input options . After selecting a text input method , the corresponding Input Panel is displayed , which you can use to enter text . To show or hide the Input Panel , tap the Input Panel icon . Input Panel ( Full QWERTY ) Input Selector arrow Input Panel icon : Full QWERTY Phone Keypad Note Text input methods Select Other Input Methods to display more input methods . You can choose from Keyboard , which is the Windows Mobile on-screen keyboard with QWERTY layout , Block Recognizer , Letter Recognizer , or Transcriber . Entering Text 107 4.3 Using the Full QWERTY The Full QWERTY is a full on-screen QWERTY keyboard layout similar to a computer keyboard . Note The keyboard layout may vary according to the region or country . • Tap to enter letters or symbols . • Tap and hold to enter the punctuation mark , symbol , or number at the top of a key . Tap to toggle between using Normal or Predictive mode . • Tap to enter an uppercase letter . • Tap twice to turn on Caps Lock . Displays the word candidate list in predictive mode . Tap a word to insert it into your text . Tap to add a word to the XT9 dictionary . Tap to delete the previous character . Tap to create a new line . Tap to open a keyboard layout that lets you easily enter numbers and symbols . See “ Using Numeric and Symbol Mode ” for details . To enter text using the Full QWERTY 1. Start a program that accepts text input , such as Word Mobile . 2. Tap the Input Selector arrow , then tap Full QWERTY . 3. Start tapping keys on the keyboard to enter your text . 108 Entering Text As you tap the keys , the activated character displays on top of the key . Activated character Key when tapped . To learn how to enter text using Predictive mode , see “ Using Predictive Mode ” in this chapter . To enter accented characters 1. Tap and hold a key with accent options ( for example , vowels ) to display the accented characters bar . Accented characters bar Tapped key Slide your finger left or right on the screen to select an accented character . 2. Slide your finger left or right on the screen to select the accented character you want to enter . Entering Text 109 3. When you have selected the character , release your finger to enter it . Tip You can also use the Numeric and Symbol mode to enter accented characters . For more information , see “ Using Numeric and Symbol Mode ” in this chapter for details . 4.4 Using the Phone Keypad The Phone Keypad is an on-screen keypad that has a layout similar to mobile phone keypads , plus some additional keys . The Phone Keypad has large keys and enhanced input features such as predictive text input , which make it faster for you to enter text in your messages and documents . • Tap to enter letters or symbols . • Tap and hold to enter the punctuation mark , symbol , or number at the top of the key . Tap to toggle between using Normal or Predictive mode . • Tap to enter an uppercase letter . • Tap twice to turn on Caps Lock . Displays the word candidate list in Predictive mode . Tap a word to insert it into your text . Tap to add a word to the XT9 dictionary . Tap to delete the previous character . Tap to create a new line . Tap to open a keyboard layout that lets you easily enter numbers , symbols , and accented characters . See “ Using Numeric and Symbol Mode ” for details . 110 Entering Text To enter text using the Phone Keypad 1. Start a program that accepts text input , such as Word Mobile . 2. Tap the Input Selector arrow , then tap Phone Keypad . 3. When in multitap mode ( ) , enter a character by tapping a key until the desired character is displayed on the screen . As you tap the keys , the activated key displays just above the tapped key . • To enter the first letter that shows on a key , tap the key once . To enter the second letter , tap twice , and so on . • To enter a punctuation mark , symbol , or number that appears at the top of a key , tap and hold the key . Note You can also use the Predictive text input mode in Phone Keypad . For more information , see “ Using Predictive Mode ” in this chapter . 4.5 Using Predictive Mode XT9 is a predictive text input mode which displays a word candidate list as you enter the first few characters so you just select the word that you want . To enter text using Predictive mode 1. Make sure that the input mode is set to XT9 ( ) . 2. Start entering the first few letters of a word . As you enter each letter , predicted words appear in the word candidate bar . 3. Tap the desired word to enter . If the word is highlighted in the word candidate bar , you can also tap the Enter key or the Space bar to enter it . Note If there are several words to choose from , touch the left or right directional arrow keys below the input panel to navigate through the word candidate list . Entering Text 111 To add a word to the XT9 dictionary If the word that you have entered is not found in the dictionary , you can add it to the dictionary . 1. While in Predictive mode , type a letter and then tap word candidate list . 2. Type the word you want to add , and then tap key or the Space bar to add the word . on right side of the . You can also tap the Enter Cancel word addition . To customize Predictive mode settings 1. Tap the Input Selector arrow , then tap Touch Input Settings . 2. On the XT9 Settings tab , select or clear the following options according to your preferences : • Spell Correction . Lets you correct typographical errors by selecting from a list of possible words that reflect the characters of the keys you have tapped as well as characters of nearby keys . • Word Completion in XT9 mode . Lets you select from a list of possible words based on the keys that you have tapped and on the words available in the dictionary . • Word Completion in ABC mode ( Phone Keypad only ) . Lets you select from a list of possible combinations based on the characters that appear on the keys that you tapped . • Auto-Substitution . Automatically inserts an apostrophe when you type common contracted words ( for example , “ dont ” automatically becomes “ don’t ” ) . 3. Tap OK . 112 Entering Text 4.6 Using Numeric and Symbol Mode Switch to Numeric and Symbol mode to easily enter numbers and common symbols such as parentheses , braces , currency signs , punctuation marks , and special characters . To switch to Numeric and Symbol mode 1. While using Full QWERTY or Phone Keypad , tap Tap a number or symbol to enter it . Go to the previous or next page of symbols . Tap to switch back to the letter keyboard layout . Phone Keypad Full QWERTY . 2. Locate and tap the desired number or symbol to enter it . To automatically switch to the letter keyboard layout By default , the keyboard in Numeric and Symbol mode is locked so you can continuously enter symbols and numbers . Do the following if you want to automatically switch to the letter keyboard layout after entering a symbol . 1. Tap the Input Selector arrow and then tap Touch Input Settings . 2. On the Options tab , clear Turn on symbol lock . 3. Tap OK . </text>
<text id="TeleHTC_Manual_5_EN.txt">
Chapter 5 Synchronizing Information 5.1 About Synchronization You can take information from your computer wherever you go by synchronizing it to your device . The following types of information can be synchronized between your computer and your device : • Microsoft® Office Outlook® information — Office Outlook e-mail , contacts , calendar , tasks , and notes • Notes created using Microsoft® Office OneNote® 2007 • Media — Pictures , music , and video • Favorites — Website addresses you save as Favorites in Pocket Internet Explorer on your device or in the Mobile Favorites folder of Internet Explorer on your computer . • Files — Documents and other files Tips • You can also synchronize Outlook e-mail , contacts , calendar , and tasks on your device with the Exchange Server at your work . For more information about setting up your device to synchronize with the Exchange Server , see Chapter 7. • Try to synchronize regularly in order to keep information up-to-date on both your device and your computer . Before you can synchronize , you need to install and set up first the synchronization software on your computer . For more information , see “ Setting Up Windows Mobile Device Center on Windows Vista® ” and “ Setting Up ActiveSync® on Windows® XP ” in this chapter . 114 Synchronizing Information After installing the synchronization software on your computer , connect the device to your computer using the USB sync cable . When the Connect to PC screen appears on your device , touch ActiveSync , and then touch Done . You can also synchronize information with your computer using Bluetooth . See “ Synchronizing via Bluetooth ” later in this chapter . Notes • ActiveSync or Windows Mobile Device Center only synchronizes data on your computer and device . If you have installed a storage card and you want to back up files from the storage card , use Windows Explorer on your computer to copy files from the storage card to your computer . • If you are sending your device for repair or performing a hard reset , data from your device will be lost . It is recommended that you sync your device to your computer to back up your files . To back up files from the storage card to your computer , use Windows Explorer to copy files from the storage card to the computer . 5.2 Setting Up Windows Mobile® Device Center on Windows Vista® Microsoft Windows Mobile® Device Center is the replacement for Microsoft® ActiveSync® on Windows Vista® . Some versions of Windows Vista® come with Windows Mobile Device Center already installed . If Windows Mobile Device Center is not available on your Windows Vista® , you can install it from the Getting Started Disc that came with your device . Setting up synchronization in Windows Mobile Device Center When you connect your device to your computer and start Windows Mobile Device Center for the first time , you are asked to create a Windows Mobile partnership with your device . To create a partnership : 1. Connect your device to your computer . Windows Mobile Device Center configures itself , then opens . Synchronizing Information 115 2. On the license agreement screen , click Accept . 3. On the Windows Mobile Device Center’s Home screen , click Set up your device . Note Choose Connect without setting up your device if you only want to transfer media files , check for updates , and explore your device but not synchronize Outlook information . 4. Select the items you want to synchronize , then click Next . 5. Enter a device name , then click Set Up . When you finish the setup wizard , Windows Mobile Device Center synchronizes your device automatically . Notice that Outlook e-mail messages and other information appear on your device after synchronization . 116 Synchronizing Information Using Windows Mobile Device Center To open Windows Mobile Device Center , click Start > All Programs > Windows Mobile Device Center on your Windows Vista computer . On Windows Mobile Device Center , you can do the following : • Click Mobile Device Settings to change synchronization settings . • When you click Pictures , Music and Video > XX new pictures/video clips are available for import , a wizard guides you to tag and transfer photos from your device to the Photo Gallery on your computer . • Click Pictures , Music and Video > Add media to your device from Windows Media Player to synchronize music and video files using Windows Media® Player . For more information , see “ Using Windows Media® Player Mobile ” in Chapter 11. • Click File Management > Browse the contents of your device to view documents and files on your device . Note See Windows Mobile Device Center Help for more information . Synchronizing Information 117 5.3 Setting Up ActiveSync® on Windows® XP On a Windows® XP computer , you need to use Microsoft ActiveSync® 4.5 or later . If you do not have this software on your computer , you can install it from the Getting Started Disc that came with your device . Setting up synchronization in ActiveSync 1. Connect your device to your computer . The Synchronization Setup Wizard automatically starts and guides you to create a synchronization partnership . Click Next to proceed . 2. To synchronize your device with your computer , clear the Synchronize directly with a server running Microsoft Exchange check box , then click Next . 3. Select the information types that you want to synchronize , then click Next . 4. Select or clear the Allow wireless data connections check box according to your preference . 5. Click Finish . When you finish the wizard , ActiveSync synchronizes your device automatically . Notice that Outlook e-mail messages and other information appear on your device after synchronization . 118 Synchronizing Information 5.4 Synchronizing With Your Computer Connect and synchronize your device with your computer using the USB cable or Bluetooth connection . Starting and stopping synchronization You can manually synchronize either from your device or computer . From your device • Tap Start > Settings , and then touch Sync Data ; or • Tap Start > ActiveSync , and then tap Sync . To end synchronization before it completes , tap Stop . Tip To delete a partnership with one computer completely , disconnect your device from that computer first . In ActiveSync on your device , tap Menu > Options , tap the computer name , then tap Delete . From Windows Mobile Device Center 1. Click Start > All Programs > Windows Mobile Device Center . 2. Click at the lower left of the Windows Mobile Device Center . . To end synchronization before it completes , click From ActiveSync on your computer When you connect your device to your computer , ActiveSync automatically opens on your computer and synchronizes . • To manually start synchronization , click . . • To end synchronization before it completes , click Synchronizing Information 119 Selecting information to synchronize You can select the information types and the amount of information to synchronize for each type either on your device or your computer . Follow the steps below to change synchronization settings on your device . Note Before changing synchronization settings on your device , disconnect it from your computer . 1. In ActiveSync on your device , tap Menu > Options . 2. Select the check box for any items you want to synchronize . If you cannot select a check box , you might have to clear the check box for the same information type elsewhere in the list . 3. To change synchronization settings for an information type , for instance , E-mail , select it and tap Settings . You can then set the download size limit , specify the time period of information to download , and more . Notes • Some information types such as Favorites , Files and Media cannot be selected in ActiveSync Options on your device . You can only select or clear these items from your computer’s Windows Mobile Device Center or ActiveSync . • A computer can have sync partnerships with many different Windows Mobile powered devices , but a device can have sync partnerships with at most two computers . To ensure that your device synchronizes properly with both computers , set up the second computer using the same synchronization settings you used on the first computer . • Outlook e-mail can be synchronized with only one computer . 120 Synchronizing Information Troubleshooting sync connection problem In some cases , when the computer connects to the Internet or a local network , it may disconnect the connection with your device in favor of the Internet or network connection . If this happens , tap Start > Settings , and then tap All Settings . Tap Connections tab > USB to PC , then clear the Enable faster data synchronization check box . This makes your computer utilize a serial USB connection with your device . 5.5 Synchronizing via Bluetooth You can connect and synchronize your device with the computer using Bluetooth . Note To connect and synchronize your device with a computer via Bluetooth , your computer must have a built-in Bluetooth or installed with a Bluetooth adapter or dongle . To synchronize with a computer via Bluetooth 1. Set up Windows Mobile Device Center or ActiveSync on your computer to synchronize through Bluetooth . See the program’s Help for instructions . 2. Make sure that Bluetooth on both your device and the computer are turned on and set to visible mode . See “ Bluetooth Modes ” in Chapter 9 for details . If this is the first time you have connected to this computer via Bluetooth , you must first set up a Bluetooth partnership between your device and the computer . For more information about creating a Bluetooth partnership , see “ Bluetooth Partnerships ” in Chapter 9. 3. On your device , tap Start > ActiveSync . 4. Tap Menu > Connect via Bluetooth . Note To conserve battery power , turn off Bluetooth when not in use . Synchronizing Information 121 5.6 Synchronizing Music and Video If you want to carry your music or other digital media along with you while you travel , set up Windows Media® Player on your computer to synchronize music and video with your device . Other than selecting the Media information type to be synchronized , all media synchronization settings must be set in Windows Media® Player . Before media can be synchronized , you must do the following : • Install Windows Media® Player Version 11 on your computer . ( Windows Media® Player 11 works only in Windows XP or later versions ) . • Connect your device to the computer with a USB cable . If your device is currently connected using Bluetooth , you must end that connection before media can be synchronized . • Set up a sync partnership between your device and your computer’s Windows Media® Player . See “ Using Windows Media® Player Mobile ” in Chapter 11 for details . 122 Synchronizing Information </text>
<text id="TeleHTC_Manual_6_EN.txt">
Chapter 6 Exchanging Messages 6.1 Messaging Messaging is a central location where you can find all types of messaging accounts , which include text messages ( SMS ) and e-mail accounts . To select a messaging account Do one of the following : • Tap Start > All Programs > Messaging . The Account Picker screen then opens and you can select an account . • While you are in a message list of a certain account , for example SMS / MMS , tap Menu > Go To to switch to other messaging accounts . To configure message account settings • Tap Menu > Options on the Account Picker screen ; or • Tap Menu > Tools > Options while you’re in a message list . Account Picker screen 124 Exchanging Messages To automatically add a signature in outgoing messages You can automatically add your name and other information as your signature in outgoing SMS and e-mail messages : Note You need to specify your signature for each type of messaging account . 1. Tap Start > All Programs > Messaging , and then tap Menu > Options . 2. Tap Signatures . 3. Select the desired account . 4. Select the Use signature with this account check box . 5. In the text box , enter your signature . 6. To add the signature when you reply to or forward messages , select the Use when replying and forwarding check box , and then tap OK . To filter the Inbox message list When the SMS/MMS or e-mail Inbox on your device is full of messages , you can filter your Inbox to display only the messages that contain a particular sender or subject you are searching for . To filter your Inbox 1. Tap Start > All Programs > Messaging and then tap a messaging account . 2. Enter the sender name or e-mail subject you want to look for . As you type characters , the message list narrows down to the sequence of characters you have entered . When filtering your e-mail Inbox , for example , entering “ B ” , then “ E ” narrows the list to only the e-mail messages that contain sender names and e-mail subjects that start with “ BE . ” Exchanging Messages 125 6.2 Text Messages Send short text messages ( SMS ) to other mobile phones . If your message is more than 160 characters , it will be sent as two or more separate messages and you will be billed accordingly . Creating and sending a new text message 1. On the Home screen , slide to the Messages tab . 2. Touch the New Message icon ( ) on the upper right side of the screen . 3. To add recipients , enter their mobile phone numbers in the To field , separating the numbers with a semicolon ( ; ) . You can also tap To or tap Menu > Add Recipient to add mobile phone numbers from Contacts . 4. Enter your message . Tips • To choose from preset messages , tap Menu > My Text and tap a desired message . • To check the spelling , tap Menu > Spell Check . 5. When finished , tap Send . Note If you want to know when a text message is received , before sending the message that you are composing , tap Menu > Message Options , then select the Request message delivery notification check box . To always receive a delivery notification , tap Menu > Tools > Options in the text message list , tap SMS / MMS , then select the Request delivery notifications check box . Managing text messages from a contact You can easily read , reply or delete text messages that you received from a certain contact by opening his or her contact details and accessing the Messages tab . 1. On the TouchFLO 3D Home screen , slide to the People tab . 2. Touch All People , and then touch the name of the desired contact . 3. The Contact Details screen then appears . Touch the Messages tab ( ) . 126 Exchanging Messages Lists the exchange of text messages between you and the contact . Enter your reply message here and then touch Send . Touch Menu to forward a text message , delete messages , and more . Managing text messages in the Inbox Text messages that are sent to and received from a contact ( or number ) are grouped as a single thread in your Inbox . Threaded SMS shows your messages to and from a contact in a single conversation thread . To open a thread and view the exchange of text messages 1. In the SMS / MMS Inbox , tap a message thread to open it . Exchanging Messages 127 2. You can tap links in the messages to directly open contact details , access a web site , send e-mail , or call the displayed number . • Tap the sender name to open the Contact Details screen . • If the sender is not in your contacts , tap the mobile phone number to call the number , reply to the sender , or save it as a new contact . Tap a web address to open the link in Opera Mobile . Enter your reply message here . Tap these navigation keys to select a message in the thread . To reply to a text message At the bottom of the screen , type your reply message and then tap Send . To copy a message in the thread to the SIM card 1. In the SMS / MMS Inbox , tap a message thread to open it . 2. Tap the up or down navigation key at the bottom of the on-screen keyboard to select a message in the thread . 3. Tap Menu > Copy to SIM . Notes • You cannot copy a sent message from the thread to the SIM card . • Copying text messages from your device to the SIM card results in duplicate messages in the Inbox when your SIM card is in use . 128 Exchanging Messages To delete a message in the thread 1. In the SMS / MMS Inbox , tap a message thread to open it . 2. Tap the up or down navigation key at the bottom of the on-screen keyboard to select a message in the thread . 3. Tap Menu > Delete . To delete all messages in a thread In the SMS / MMS Inbox , tap and hold a message thread , and then tap Delete . Placing a call to the sender of a text message While reading a text message , you can directly call the sender by pressing the TALK/ SEND button . See “ Making a call from a text message ” in Chapter 2 for details . Exchanging Messages 129 6.3 MMS Sending multimedia messages ( MMS ) to your friends and family is fun and easy . You can include pictures , videos , and audio clips in a multimedia message . Notes • Multimedia messaging is a charged service and has to be provisioned on your mobile phone account . Contact your wireless service provider to have MMS provisioned as part of your calling plan . • Make sure the size of MMS messages that you send is within the limits allowed by your wireless service provider . Changing the MMS settings Check your device to see if it is preconfigured with your wireless service provider’s MMS settings . Add the MMS settings of your wireless service provider if there are no preset MMS settings found on your device . To configure MMS message settings 1. Tap Start > All Programs > Messaging > SMS / MMS . 2. Tap Menu > MMS Options . The Settings screen then appears . 3. In the Preferences tab , choose from the available options according to your needs . 4. Tap the Servers tab and check if your device is preset with MMS server settings . If there are no preset settings , tap New and enter the MMS settings which you obtained from your wireless service provider . Note If your device already has preset MMS settings , it is recommended that you do not change these settings . If you change the preset settings , your device may not be able to send and receive MMS messages . 5. Tap Done . Note If you add several MMS message service providers to the Settings screen , you can choose one as your default provider . Select the provider 's name in the list , then tap Set As Default . 130 Exchanging Messages Creating and sending MMS messages You can compose MMS messages in a combination of slides , where each slide can consist of a photo , video or audio clip , and/or text . To compose an MMS message 1. Tap Start > All Programs > Messaging > SMS / MMS . 2. Tap Menu > New > MMS . 3. When the Choose a MMS screen opens , tap a preset template , or tap Custom to open a blank MMS message . Note If you prefer to start composing from a blank MMS message every time , select the Always choose custom check box . 4. In To , enter the recipient’s phone number or e-mail address directly , or tap To , Cc , or Bcc to choose a phone number or an e-mail address from Contacts . Note You may need to scroll up to see the Cc and Bcc fields . 5. Enter a subject for your message . 6. Tap the Insert icon ( )to insert a photo or video clip . When selecting a photo or video clip , you can : • Tap the photo or video clip to insert it into the MMS message . • Tap • Tap • Tap to take a photo and insert it into the MMS message . to record MMS video and insert it into the MMS message . to quit selection and return to the MMS message . 7. Enter text and insert audio clips by tapping the respective areas . See “ To add text to an MMS message ” and “ To add an audio clip to an MMS message ” for details . 8. To add more slides , tap or tap Menu > Slides > Insert Slide . Repeat steps 5 and 6 to add photos/videos , text , and audio to your slides . 9. Tap Send to send the MMS message . Tip You can also send an MMS message from Pictures & Videos , Album , or the Camera program . Exchanging Messages 131 To add text to an MMS message When you tap Insert text here on your MMS message , an empty screen appears where you can enter your text . You can insert the following types of information : Enter your own text Choose from common words or phrases from the My Text list Include a Favorites link Add an emoticon Insert contact information Insert calendar appointment Tip To edit or delete a phrase on the My Text list , tap and hold a string , and then tap Edit or Delete from the shortcut menu . To add a new phrase , tap New . To add an audio clip to an MMS message You can add one audio clip per slide in your MMS message . 1. Tap Insert audio on your MMS message . By default , the My Documents is shown . Tap My Music or another folder that contains audio files . When navigating folders , tap the down arrow ( ) to return to the upper folder . • Tap to play the audio clip , to pause , or to stop playback . 2. Select an audio file . When selected , you can : • Tap Select to insert it to the MMS message . 132 Exchanging Messages • Tap Note to quit selection and return to your MMS message . To record a new audio clip and add it to your MMS message , tap . The Record popup window then opens . Tap Record to start recording , and Stop to end the recording . Tap Play to listen to the recorded audio clip , then tap Add . The new audio clip is then inserted to the MMS message . Viewing and replying to MMS messages To view an MMS message 1. In the SMS / MMS Inbox , tap the MMS message . 2. In the threaded message , tap the MMS icon ( ) , and then use the playback controls , , and to view the MMS message . 3. Tap Contents to see a list of files included in the message . On the Message Contents screen , you can do the following : • To save a file , select it , and tap Menu > Save . • To save the contents of a text file to the My Text list , tap Menu > Save into My Text . • To associate a photo to one of your contacts , tap Menu > Assign to Contact . To reply to an MMS message 1. In the SMS / MMS Inbox , select the mobile phone number or name of the contact who sent you the MMS message . 2. In the threaded message , tap the MMS message to open and view an MMS message . 3. After viewing the MMS message , tap Menu > Reply > via MMS to reply with an MMS message or tap Menu > Reply > via SMS to reply with a text message . Exchanging Messages 133 To block a phone number from sending you MMS messages If you do not want to receive MMS messages from a particular sender , you can add the sender’s phone number to the MMS Blacklist . 1. When you receive a new MMS message , open and view the message . 2. To avoid receiving multimedia messages from this sender next time , tap Menu > Show > Contact Details . 3. Tap Menu > Save to Blacklist . 4. Tap Done . Tip To unblock a phone number and allow the sender to send you MMS messages , remove the number from the Blacklist . Go to the SMS / MMS Inbox , tap Menu > MMS Options > Blacklist tab , tap and hold the phone number in the Blacklist , and then tap Delete . 6.4 E-mail You can set up the following types of e-mail accounts on your device : • Outlook e-mail that you sync with your computer or the Exchange Server . • E-mail account that you have from an Internet Service Provider ( ISP ) or other e-mail provider . • Web-based e-mail accounts such as Yahoo ! ® Mail Plus , AOL® , and others . • Custom domain e-mail accounts . The e-mail domain name is hosted by a different e-mail provider . For more information , search for “ custom domain e-mail ” in the Help on your device . • Work account that you access using a VPN connection . 134 Exchanging Messages Synchronizing Outlook e-mail with your computer If you have installed the synchronization software on your computer and created a partnership with your device , then your device is ready to send and receive Outlook e-mail . If you have not yet installed the synchronization software nor created a partnership , do so by following the procedures in Chapter 5. Tip To set up your company e-mail account so that you can access Outlook e-mail messages wirelessly , you must set up your device to synchronize via an over-theair connection with your company’s Exchange Server . For more information about synchronizing with your company e-mail server , see Chapter 7. Setting up an Internet e-mail account Use Windows Mobile’s E-mail Setup Wizard to set up a POP3 or IMAP4 e-mail account on your device if you have an e-mail account from an Internet service provider ( ISP ) or other e-mail service provider , or a web-based account such as Yahoo ! Mail Plus or AOL . You can also add a work account that you access using a VPN server connection as a POP3/IMAP4 account . Note You can also set up an Internet e-mail account from the TouchFLO 3D Mail tab using the simplified Mail Setup . See “ Mail ” in Chapter 3 for details . 1. Tap Start > All Programs > Messaging > Setup E-mail . 2. Enter your E-mail address and the Password for your e-mail account and select the Save password option . Tap Next . 3. If e-mail provider settings are found preconfigured on your device , the E-mail Setup wizard shows a successful message . Tap Next . If the settings are not found on your device , select the Try to get e-mail settings automatically from the Internet checkbox to find and download e-mail server settings from the Internet and then tap Next . Note You may be charged when your device connects to the Internet and downloads the e-mail server settings . Exchanging Messages 135 4. Enter Your name and the Account display name and then tap Next . Note If the E-mail Setup wizard was unsuccessful in finding and downloading settings from the Internet , select Internet e-mail from the Your e-mail provider list on the next screen . You will be asked to enter e-mail server settings . See “ To specify e-mail server settings ” for details . 5. In the Automatic Send/Receive list , choose how frequent you want e-mail messages to be automatically sent and downloaded on your device . Note Tap Review all download settings to select download options , set the e-mail format as HTML or plain text , and more . For more information , see “ To customize download and format settings . " 6. Tap Finish . To specify e-mail server settings If Auto Setup is unsuccessful , contact your ISP or e-mail provider for the Incoming mail server and Outgoing mail server settings so you can enter them on your device . Other options that you can select include the following : • Select the Outgoing server requires authentication check box , if required by your provider . • If the outgoing e-mail server requires a different user name and password for sending e-mail , clear the Use the same user name and password for sending e-mail check box . You will be prompted to enter this information . • Tap Advanced Server Settings , then select the Require SSL check boxes if your e-mail provider uses an SSL connection for more secured e-mail . From the Network connection list , select the data connection that you use for connecting to the Internet . 136 Exchanging Messages To customize download and format settings Before you tap Finish when setting up your POP3 or IMAP4 e-mail account , you can tap the Review all download settings link at the bottom of the screen to choose download options , message format , and other settings . Options Automatic Send/Receive Download messages Send/receive when I click Send Description Select a time interval for connecting to the Internet automatically to send and receive messages . Set the number of days of messages that you want to be downloaded to your device . By default , messages are immediately delivered when you tap Send . If you prefer to save outgoing messages to the Outbox folder first , clear the check box . ( In this case , you will need to manually send messages by tapping Menu > Send/Receive ) . This allows your device to data roam when there is a set time interval for connecting to the Internet automatically . Since this may result in higher connection costs , you may want to leave the check box cleared . Choose whether to delete messages from the mail server when you delete them on your device . Select HTML or Plain Text . Select the e-mail download size . If you have large volumes of e-mail , use a lower size or select to download headers only . Use automatic send/ receive schedule when roaming When deleting messages Message format Message download limit Exchanging Messages 137 Creating and sending an e-mail message 1. On the TouchFLO 3D Home screen , slide to the Mail tab . 2. At the right side of the screen , tap an e-mail account you want to use , or slide your finger up or down until you have selected the desired account . 3. Touch the New E-mail icon ( ) . 4. To add recipients , enter their e-mail addresses , separating them with a semicolon ( ; ) . You can also tap To if you want to add e-mail addresses stored in Contacts . 5. Enter a subject and compose your message . After setting up e-mail accounts on your device , you can start sending and receiving e-mail messages . Tips • To choose from preset messages , tap Menu > My Text and tap a desired message . • To check the spelling , tap Menu > Spell Check . 6. To add an attachment to your message , tap Menu > Insert and tap the item you want to attach : Picture , Voice Note , or File . Select the file or picture you want to attach , or record a voice note . 7. When finished composing the message , tap Send . Tips • For more information about entering text and symbols , see Chapter 4. • To set the message priority , tap Menu > Message Options . • If you are working offline , e-mail messages are moved to the Outbox folder and will be sent the next time you connect . 138 Exchanging Messages Viewing and replying to e-mail messages To view an e-mail message 1. On the TouchFLO 3D Home screen , slide to the Mail tab , select the e-mail account , and then tap Inbox . 2. Tap an e-mail to open it . To download a complete e-mail By default , long e-mail messages that you receive contains only the first few kilobytes of the message . When you open an e-mail , it displays only the headers and part of the message . You must download the whole e-mail to view the complete content . To download a complete e-mail message , open the e-mail , and then do one of the following : • Finger-scroll to the end of the message , and tap Get entire message and any attachments ( POP3 e-mail account ) or tap Get the rest of this message ( IMAP4 and Outlook e-mail accounts ) . • Tap Menu > Download Message . Notes • The Fetch Mail feature , which is available for POP3 and IMAP4 Internet e-mail accounts , downloads an entire e-mail without the need for you to perform a full synchronization . This limits the download to just the e-mail message that you want and helps save data cost . Fetch Mail is also available for Outlook E-mail . See “ Instant download through Fetch Mail ” in Chapter 7 for details . • Download may take some time , depending on the speed of your Internet connection , size of the whole e-mail , and whether file attachments are automatically downloaded . Exchanging Messages 139 To download file attachments • POP3 e-mail account : File attachments are automatically downloaded when you download a complete e-mail . • IMAP4 and Outlook e-mail accounts : File attachments appear below the subject of an e-mail message . Tapping an attachment opens the attachment if it has been fully downloaded or marks it for download the next time you send and receive e-mail . You can set automatic download of file attachments . See “ Customizing e-mail settings ” in this chapter for details . To reply to or forward a message 1. On the TouchFLO 3D Home screen , slide to the Mail tab , select the e-mail account , and then tap Inbox . 2. Open the message and tap Menu > Reply , Menu > Reply All , or Menu > Forward . 3. Enter your reply message , and then tap Send . Notes • You can receive and view HTML e-mail messages from any type of e-mail account . The HTML format is retained , without layout shifting or resizing . HTML e-mail support in Outlook Mobile is available only if you are synchronizing your device with Microsoft Exchange Server 2007. • When replying using an Outlook e-mail account , you can customize ActiveSync to exclude addresses , including your own , from being added to the recipient list . Tap Menu > Options in ActiveSync , select the E-mail item , tap Settings , and then tap Advanced . In the My e-mail addresses text box , enter the e-mail addresses that you want to exclude . 140 Exchanging Messages Directly making calls from an e-mail While reading an e-mail , you can directly place a call to the sender , start a conference call , access contact details , and more . • Tap the sender photo or name to open the Contact Details screen . • If the sender is not stored in your contacts , tap the e-mail address to send e-mail or save it as a new contact . • Tap a recipient name to open his or her contact details . • Tap a recipient’s e-mail address to send e-mail or save it as a new contact . Tap this Talk button to call the sender . Tap links in the message body to access a web site , send e-mail , or call the displayed number . Tap the To or Cc button or press TALK/SEND to place a call or start a conference call . See Chapter 2 for details . Note If the sender’s name or e-mail address is shown on the e-mail message with a Search button ( ) and you have an Exchange Server e-mail account set up on your device , you can tap this button to search for the sender from the Company Directory . For more information about finding contacts in the Company Directory , see Chapter 7. Exchanging Messages 141 Synchronizing e-mail messages Synchronizing e-mail messages ensures that new e-mail messages are downloaded to the device Inbox folder , e-mail messages in the Outbox folder are sent , and e-mail messages deleted from the server are removed from your device . The manner in which you synchronize e-mail messages depends on the type of e-mail account you have . To automatically synchronize an Outlook e-mail account 1. Connect your device to your computer through USB or Bluetooth . Otherwise , connect through Wi-Fi , or a data connection if you are synchronizing Outlook e-mail with the Exchange Server . For more information , see Chapter 7. 2. Synchronization automatically begins , and your device sends and receives Outlook e-mail . To manually synchronize your Outlook or Internet e-mail account On the TouchFLO 3D Home screen , slide to the Mail tab , select the e-mail account , and then tap Menu > Send/Receive . Customizing e-mail settings To change the download size and format for Outlook e-mail 1. Disconnect your device from the computer . 2. Tap Start > ActiveSync . 3. Tap Menu > Options , select E-mail , then tap Settings . 4. On the E-mail Sync Options screen : • Under Message format , select HTML or Plain Text . HTML is only available when connected to Microsoft Exchange Server 2007 or later . • Under Download size limit , select the desired e-mail size . 5. Close ActiveSync and reconnect your device to the computer . 142 Exchanging Messages To change the download size and format for Internet e-mail 1. Tap Menu > Options on the Account Picker screen , or tap Menu > Tools > Options while you’re in a message list . 2. Tap your POP3 or IMAP4 Internet e-mail account . 3. Tap Download Size Settings . 4. Under Message format , select HTML or Plain Text . 5. Under Download size limit , select the desired e-mail size . 6. Tap Done . To automatically receive attachments on Outlook e-mail messages 1. Tap Start > ActiveSync . 2. Tap Menu > Options . 3. Tap E-mail > Settings , and then select Include file attachments . To automatically receive attachments on IMAP4 e-mail messages 1. Tap Menu > Options on the Account Picker screen , or tap Menu > Tools > Options while you’re in a message list . 2. Tap the name of your IMAP4 e-mail account . 3. Tap Download Size Settings . 4. In Download attachments : • Select All attachments to always download file attachments ; or • sSelect a file size limit for auto-downloading attachments . 5. Tap Done . To store attachments on the storage card 1. Tap Start > All Programs > Messaging . 2. Tap Menu > Options > Storage tab . 3. Select the When available , use this storage card to store attachments check box . </text>
<text id="TeleHTC_Manual_7_EN.txt">
Chapter 7 Working With Company E-mail and Meeting Appointments 7.1 Synchronizing with the Exchange Server To keep up-to-date with your company e-mail messages and meeting schedules while you’re out of the office , you can connect your device to the Internet through Wi-Fi or a data connection and synchronize with your company’s Exchange Server . Setting up an Exchange Server connection Before you can synchronize or access information on the Exchange Server , you need to set up an Exchange Server connection on your device . You need to get the Exchange Server name ( must be Outlook Web Access server name ) , domain name , user name , and the password that you use at work from your network administrator and enter them on your device . Note You can set up an Outlook e-mail account that synchronizes with the Exchange Server from the TouchFLO 3D Mail tab using Mail Setup . See “ Mail ” in Chapter 3 for details . If you have not synchronized your device with your computer , follow these steps to set up an Exchange Server connection . 1. Tap Start > All Programs > Messaging > Setup E-mail . 2. Enter the E-mail address and Password for the e-mail account and select the Save password option . Tap Next . 144 Working With Company E-mail and Meeting Appointments 3. Clear the Try to get e-mail settings automatically from the Internet option and tap Next . 4. In Your e-mail provider , select Exchange server and tap Next . 5. Tap Next again . 6. Select the Attempt to detect Exchange Server Settings automatically option and tap Next . 7. Enter the Domain name and tap Next . 8. In Server address , enter the Exchange Server address and tap Next . 9. Select the items that you want to sync with the Exchange Server . Tips • To change synchronization settings of an information item , for example , E-mail , select the item , then tap Settings . • To change the rules for resolving synchronization conflicts , tap Menu > Advanced . • If you synchronized e-mail messages with your computer before , open ActiveSync on your device , then tap Menu > Add Server Source to set up an Exchange Server connection . When prompted to select information types for synchronization , you must first clear the E-mail check box under the Windows PC item before you can select E-mail under Exchange Server . • To change Exchange Server settings , open ActiveSync on your device , and then tap Menu > Configure Server . 10. Tap Finish . Notes Starting synchronization Before you start synchronizing with the Exchange Server , make sure your device has been set up with a Wi-Fi or data connection to the Internet so that you can synchronize over the air . For more information about connections , see Chapter 8. After you finish setting up an Exchange Server connection , your device automatically starts synchronization . Working With Company E-mail and Meeting Appointments 145 To manually start synchronization , tap Start > Settings , and then touch Sync Data . Note If you connect your device to your office computer via a USB or Bluetooth connection , you can use this connection to the computer to “ pass through ” to the network and download Outlook e-mail messages and other information to your device . 7.2 Working With Company E-mail Messages Your device gives you instant access to your company e-mail messages and lets you manage your messages easier . Direct Push , Fetch Mail , Remote e-mail search , and e-mail flags are just some of the tools you can use to manage your e-mail messages . Note Some messaging features depend on the Microsoft Exchange Server version used in your company . Check with your network administrator for the availability of these features . Automatic synchronization through Direct Push Direct Push technology ( push e-mail feature ) enables you to receive new e-mail messages on your device as soon as they arrive in your Inbox on the Exchange Server . Items such as contacts , calendar and tasks are also immediately updated onto your device when these items have been changed or new entries have been added on the Exchange Server . To make Direct Push work , you need to have a Wi-Fi or data connection on your device . You need to perform a full synchronization between your device and the Exchange Server before Direct Push can be enabled . Requirement The Direct Push feature works for your device only if your company is using Microsoft Exchange Server 2003 Service Pack 2 ( SP2 ) with Exchange ActiveSync or later . 146 Working With Company E-mail and Meeting Appointments To turn on Direct Push in Comm Manager 1. Tap Start > Settings , and then touch Communications . Tip You can also tap Start > All Programs > Comm Manager . 2. On the Comm Manager screen , touch the OFF/ON slider at the right side of the Microsoft Direct Push item . To turn on Direct Push in ActiveSync 1. Tap Start > ActiveSync and then tap Menu > Schedule . 2. Select As items arrive in the Peak times and Off-peak times boxes . Note When Direct Push is off , you need to manually retrieve your e-mail messages . Scheduled synchronization If you do not want to use Direct Push , you can set a regular schedule for synchronizing Outlook e-mail and information . 1. In ActiveSync on your device , tap Menu > Schedule . 2. Select from the available options to set the synchronization schedule . Tip You can select a shorter interval in the Peak times box and a longer interval in the Off-peak times box , so that your e-mail messages are synchronized more frequently when you are working . To set the days and hours that make up your peak and off-peak times , tap the peak times link at the bottom of the screen . Instant download through Fetch Mail The Fetch Mail feature downloads an entire e-mail immediately without the need for you to perform a full Send/Receive action . This limits the download to just the e-mail message that you want and helps save data cost . Requirement Fetch Mail works for your device only if your company is using Microsoft Exchange Server 2007 or later . 1. Tap Start > All Programs > Messaging > Outlook E-mail . 2. Open an e-mail message . Working With Company E-mail and Meeting Appointments 147 3. By default , only the first few words of the message are shown . To download the whole e-mail , finger-scroll to the end of the message , then tap Get the rest of this message . 4. Wait for the remainder of the message body to download . Notes • For information about changing e-mail sync options such as setting the download size for e-mail , see " Customizing e-mail settings " in Chapter 6. • When you receive an e-mail that contains a link to a document such as a PDF or Microsoft Office document located on SharePoint or an internal file server , you can tap the link to view the document on your device . You can view the document only if you have a Microsoft Outlook account that synchronizes with Microsoft Exchange Server 2007 or later . Exchange Server must also be set up to allow access to SharePoint document libraries or internal file servers . Searching for e-mail messages on the Exchange Server You can access e-mail messages that are not available on your device by searching your Microsoft Exchange Server mailbox . The search results are downloaded and displayed in a Search Results folder . Requirement Your company must be using Microsoft Exchange Server 2007 or later . 1. Tap Start > All Programs > Messaging > Outlook E-mail . 2. Tap Menu > Tools > Search Server . 3. In the Look for text box , enter the search keyword . 4. Choose the date range of messages to search from . 5. In the Look in list , specify whether to search in the Inbox , Sent Items , or All Folders , and then tap Search . Tip To clear the search results and return to the message list , tap Menu > Clear Results . 148 Working With Company E-mail and Meeting Appointments Flagging your messages Flags serve as a reminder for you to follow-up on important issues or requests contained in e-mail messages . Flagging messages , which has been a useful feature on desktop Outlook E-mail , can also be done in Outlook Mobile on your device . You can flag received e-mail messages on your device . Requirement Flags are enabled only if e-mail messages are synchronized with Microsoft Exchange Server 2007 or later . Flags are disabled or hidden if e-mail messages are synchronized with earlier versions of Microsoft Exchange Server . To flag or unflag a message 1. Tap Start > All Programs > Messaging > Outlook E-mail . 2. Open a message . 3. Tap Menu > Follow Up and select one of the following options : • Set Flag Mark the message with a red flag to remind yourself to follow it up . • Complete Flag Mark the message with a check mark to indicate that the issue or request in the e-mail is already completed . • Clear Flag Remove the flag to unmark the message . Note E-mail message reminders are displayed on your device if the messages are flagged with reminders and synchronized from the Exchange Server . Working With Company E-mail and Meeting Appointments 149 Out-of-office auto-reply Outlook Mobile allows you to retrieve and change your out-of-office status . Just like desktop Outlook , Outlook Mobile automatically sends an auto-reply message when you’re not available . To send out-of-office auto-reply messages 1. Tap Start > All Programs > Messaging > Outlook E-mail . 2. Tap Menu > Tools > Out of Office . 3. In the I am currently list , select Out of the Office . 4. Enter your auto-reply message , and then tap Done . 7.3 Managing Meeting Requests When you schedule and send meeting requests from your device , you can invite attendees to your meeting and check their availability . When you receive a meeting request , you can reply by accepting or declining the request . The meeting request also clearly indicates whether or not there are conflicting or adjacent meetings . Requirement Your company must be using Microsoft Exchange Server 2007 or later . To reply to a meeting request 1. When you receive a meeting request e-mail , a notification is displayed on your device . Open the e-mail . 2. Tap Accept to reply and accept the meeting request , or tap Menu > Decline if you cannot attend the meeting . 150 Working With Company E-mail and Meeting Appointments Tips • Before responding , you can check your availability during the time of the requested meeting by tapping View your calendar . • If the time of the meeting conflicts with your other appointments , a “ Scheduling Conflict ” status appears on top of the e-mail . 3. Choose whether or not to edit your response e-mail before sending , then tap OK . If you accept the meeting request , it is automatically added as an appointment in Calendar on your device . 7.4 Finding Contacts in the Company Directory In addition to having contacts on your device , you can access contact information from your organization’s Company Directory . By having over-the-air access to the Company Directory , you can easily send e-mail messages and meeting requests to anyone in your company . Requirement Access to the Company Directory is available only if your organization is running Microsoft Exchange Server 2003 SP2 or higher , and you have completed your first synchronization with the Exchange Server . When browsing Contacts , composing e-mail , or creating a meeting request 1. Synchronize with the Exchange Server . 2. Do any of the following : • While browsing through your contacts on the Contacts or Phone screen , tap Menu > Company Directory . • In a new e-mail message , tap the To box ( or tap Menu > Add Recipient ) , and then tap Company Directory on the top of the list . • When creating a meeting request and selecting required and optional attendees in Calendar , tap Company Directory . Working With Company E-mail and Meeting Appointments 151 3. Enter a partial or full contact name and tap Search . In the search results list , tap a contact to select it . 4. You can save a contact from the Company Directory to your device by selecting the contact , and then tapping Menu > Save to Contacts . Note You can search for the following information as long as that information is included in the Company Directory : First name , Last name , E-mail name , Display name , E-mail address , or Office location . ? When viewing a received Outlook e-mail message 1. Open a received Outlook e-mail message . 2. If a Search button ( ) appears to the right of the sender name in the e-mail message , tap this button to search for the sender in the Company Directory . 3. If the sender is found , the contact details will be displayed . You can then choose to save the sender to your contacts , call the sender , and more . 152 Working With Company E-mail and Meeting Appointments </text>
<text id="TeleHTC_Manual_8_EN.txt">
Chapter 8 Internet 8.1 Ways of Connecting to the Internet Your device’s networking capabilities allow you to access the Internet or your corporate network through Wi-Fi , GPRS/3G ( or EDGE when available ) , or dial-up . You can also add and set up a VPN or proxy connection . Wi-Fi Note Wi-Fi provides wireless Internet access over distances of up to 100 meters ( 300 feet ) . To use Wi-Fi on your device , you need access to a wireless access point or “ hotspot ” . The availability and range of your device’s Wi-Fi signal depends on the number , infrastructure , and other objects through which the signal passes . To turn Wi-Fi on and connect to a Wi-Fi network 1. Tap Start > Settings , and then tap Communications . 2. Tap Wi-Fi . Detected wireless networks are displayed on the screen . 3. Tap the desired Wi-Fi network . • If you selected an open ( unsecured ) network , you are automatically connected to the network . • If you selected a secured network , enter the security key and then tap Done . You are then connected to the network . 154 Internet Indicates that your device is connected to this Wi-Fi network Indicates a secured Wi-Fi network . Signal strength Network name ( SSID ) 4. Tap Back to return to the Communications screen . Next time you use your device to detect Wi-Fi networks , you will not be prompted to enter the network key of the previously accessed Wi-Fi network ( unless you perform a hard reset which will erase custom settings on your device ) . Notes • Wi-Fi networks are self-discoverable , which means no additional steps are required for your device to connect to a Wi-Fi network . It may be necessary to provide a username and password for certain closed wireless networks . • To turn off Wi-Fi , on the Communications screen , tap the OFF/ON slider at the right side of the Wi-Fi item . Internet 155 To check Wi-Fi network status Aside from the Wi-Fi status icon on the title bar , you can check the current Wi-Fi connection status from any of the following screens of your device : • Wireless LAN screen Tap Advanced on the Wi-Fi screen . On the Main tab , you will see the Wi-Fi network that your device is currently connected to . The configuration and signal quality of the Wi-Fi network are also shown . • Configure Wireless Networks screen Tap Start > Settings > All Settings > Connections tab > Wi-Fi and then tap the Wireless Networks button . This screen displays all available Wi-Fi networks in range . To connect to a Wi-Fi network in the list , tap and hold on the desired network , and then tap Connect . Tap a Wi-Fi network in the list to view or change its connection settings . You can also add new Wi-Fi networks , if available , by tapping Add New . 156 Internet To save battery power while connected to a Wi-Fi network Using Wi-Fi quickly consumes battery power . Turn off Wi-Fi when not in use . You can also enable power saving settings while using Wi-Fi . 1. Tap Start > Settings , and then tap Menu > Wireless Networks > Power Mode tab . 2. Move the Power Save Mode slider to a position that optimizes performance with the least power consumption . For example , move the slider to the left ( Best Performance ) to have the optimal wireless network performance ; move to the right ( Best Battery ) to obtain the maximum battery usage . GPRS/3G Use GPRS/3G ( or EDGE , if available ) to connect to the Internet and to send and receive email on your device . You will need a data plan to use your wireless service provider’s GPRS/3G network . Check with your wireless service provider to find out about GPRS/3G rates . If you completed the Connection Setup process for auto-configuring the data connection the first time you turned on your device , your device is ready to use your wireless service provider’s GPRS/3G services . Do not change the connection settings as this may cause services to stop working . If you need to add another GPRS/3G connection on your device , contact your wireless service provider . Note If you did not complete the auto-configuration process before , follow the instructions in “ To manually select the network operator to use for data connections ” in Chapter 13 to configure the data connection for your device . Internet 157 Dial-up To set up a dial-up connection to your Internet Service Provider ( ISP ) on your device , you need the same settings that you normally use when you dial up from your computer . This includes the ISP server phone number , your user name and password . 1. Tap Start > Settings , and then tap All Settings . 2. On the Connections tab , tap Connections . 3. Tap Add a new modem connection . 4. In the Select a modem list , select Cellular Line , then tap Next . 5. Enter the ISP server phone number , then tap Next . 6. Enter your user name , password , and any other information required by your ISP , then tap Finish . Starting a data connection After setting up a data connection such as GPRS/3G or ISP dial-up on your device , you can now connect your device to the Internet . The connection is automatically started when you begin using a program that accesses the Internet such as Opera Mobile . To manually start a data connection If you have set up multiple types of data connections on your device , you can manually start a connection . 1. Tap Start > Settings , and then tap All Settings . 2. On the Connections tab , tap Connections . 3. Tap Manage existing connections . 4. Tap and hold the name of the desired connection , and then tap Connect . To disconnect active data connections 1. On the Home screen , slide to the Settings tab , and then tap Communications . 2. Tap the OFF/ON slider at the right side of the Data Connection item . 158 Internet 8.2 Using Opera Mobile™ Opera Mobile™ is a full-featured Internet browser , optimized for use on your device . To open Opera Mobile and go to a website 1. On the Home screen , slide to the Internet tab and then tap Launch Browser . 2. On the Opera Mobile screen , tap the address bar . Note If the address bar is hidden , tap at the bottom-right corner of the screen . 3. Enter the URL address and tap . The browser screen 1 8 2 3 1 2 4 5 6 7 9 Refresh the web page being viewed . Enter the URL of the web site here . Internet 159 3 4 5 6 7 8 9 Return to the previous web page viewed . Go to the Bookmarks screen where you can add , edit , or send bookmarks . Add a new browsing tab or switch to another browsing tab . Go to the home page . Open a list where you can change Opera Mobile settings . See “ Opera Mobile menu ” in this chapter for details . Close the current tab . This is enabled only if you have more than one tab opened . When browsing the web , Opera Mobile automatically switches to full screen mode . Tap to show the address and Menu bars again . Opera Mobile menu On the menu bar , tap to open the menu . Open the Settings screen where you can set your home page , change display settings , set privacy settings , and more . View items being downloaded , and resume or stop current downloads . View information about the web page you are browsing . See web pages that you have viewed . Manage and view web pages that you have saved . Open the Opera Mobile help file . Close Opera Mobile completely . Note For more information about using Opera Mobile , go to : http://www.opera.com/products/mobile/. 160 Internet Navigating web pages To pan on the web page While browsing web pages , use finger gestures to pan on the web page . Tip Touch and hold an empty area on a web page to open a shortcut menu that lets you go back to the previous page , reload the page , add the page as a Favorite , and more . You can also tap and hold a link or image on a web page to open a menu with different options . To zoom in and out on web pages While viewing a web page in full screen , slide to the right of the zoom bar to zoom in on the web page . To zoom out , slide your finger to the left . Tip You can also tap the screen twice to zoom in . To zoom out , tap the screen twice again . Zooming in Zooming out Internet 161 To change the screen orientation Change the screen orientation by simply turning your device sideways . 162 Internet 8.3 Using YouTube™ YouTube™ lets you browse , search , and watch Internet videos that are posted in YouTube . Note You need an active data or Wi-Fi connection to use YouTube . If you are using a GPRS/3G connection , watching Internet videos may significantly increase your data connection costs . To open YouTube On the Home screen , slide to the Internet tab , and then tap YouTube . Open the Program Guide . Displays the current program channel being viewed . Set the quality of downloaded videos and site ( country ) preference . Close YouTube . Filter the list by type of video ( Featured , Most Viewed , Top Favorited , or Top Rated ) and by the time period when videos were uploaded to the YouTube server . Displays the available videos for the selected program channel . Tap a video to watch it . Tap to view details about the video . Switch between the YouTube screens . Searching videos 1. On the YouTube screen , tap . 2. On the Search screen , enter the video information , and then tap Search . Internet 163 YouTube searches for the video , and then displays all related videos on the screen . 3. Tap on a video to watch it . See “ Watching videos ” for details . Using the Program Guide The Program Guide categorizes videos into channels so you can browse and watch related videos available on YouTube . You can also add your favorite video channel in the Program Guide . To add a new channel 1. Search the channel or video you want to add to the Program Guide . See “ Searching videos ” for details . 2. In the search results list , tap at the right side of the video or channel to open the details screen . 3. Tap , and then tap OK on the confirmation screen . The channel you just subscribed to is shown when you tap Program Guide . Tip You can also add a search information as a program channel . To change the program channel 1. On the Videos screen , tap Program Guide at the top of the screen . 2. On the Program Guide , select a channel . 164 Internet Tip You can scroll down to view more channels . The video list refreshes to display the available videos for the selected channel . To delete a program channel You can only delete channels that you have added to the Program Guide . 1. Tap Program Guide . 2. Scroll down to the channel that you want to delete , and then tap 3. On the confirmation screen , tap Yes . . Watching videos Tap a video on any YouTube screen , program guide channel , or search results list to launch the YouTube Video Player . Drag to go forward or backward in the video . Download progress Go back to the beginning of the video . Buffered video Depending on the quality of downloaded videos you selected , tap to view the video in its actual size , in expanded size , or in full screen . Play/pause the video . Stop the video playback . Tip To adjust the volume , press the VOLUME UP and VOLUME DOWN buttons on the left panel of the device . Internet 165 When you tap Stop ( the following options . ) or finish watching the entire video , you can select from Go back to the previous page of related videos . Send the link of the previously watched video via e-mail , or to send the video thumbnail via MMS . Go to the next page of related videos . If no action is taken , the next page is automatically displayed after 10 seconds . View information about the video you just watched . Add the video to your Bookmarks . Replay the video . Bookmarks You can save your favorite videos in Bookmarks for quick access . To save a video in Bookmarks After watching a video , tap . You can also tap on any video that you want to add to Bookmarks and then tap on the video details screen . To watch videos in Bookmarks On the YouTube screen , tap . Tap a video to watch it . 166 Internet To delete a video from Bookmarks 1. On the Bookmarks screen , tap Edit . 2. Tap on the video you want to remove . 3. On the confirmation screen , tap Yes . 4. Tap Done . History Note View recently watched videos on the History screen . On the YouTube screen , tap and then tap a video to watch it . To clear the History list , tap Clear . 8.4 Using Streaming Media Streaming Media lets you stream live broadcasts or on-demand media content from the web . The media is sent in a continuous stream to your device and is played as it arrives , along with the audio . The Streaming Media program allows you to play 3GP and MPEG-4 files . It also supports playback of SDP ( Session Description Protocol ) files . To access streaming content via Opera Mobile In Opera Mobile , you can open a web page containing RTSP ( Real Time Streaming Protocol ) links to streaming media content then play the content in the Streaming Media program . 1. On the Home screen , slide to the Internet tab and tap Launch Browser . 2. In the address bar , enter the URL address of the web page that contains the RTSP link to the desired *.3gp , * . mp4 , or * . sdp file . 3. On the web page , tap the RTSP link . Internet 167 4. Streaming Media then automatically opens and starts playing the file . During playback , use the slider and button controls to play/pause , switch to full screen , replay , and fast forward . Tap to toggle between playing or pausing the video playback . Play video from the beginning . Switch to full screen mode . In full screen mode , tap to switch back . Drag the slider to go backward or forward on the video . View the video in its actual size , in expanded size , or in full screen . Stop playback . To stream media files directly on the Streaming Media Player Streaming Media only supports RTSP links when you stream *.3gp and * . mp4 files directly on the program . 1. Tap Start > All Programs > Streaming Media . 2. Tap Menu > Connect . 3. Enter the complete RTSP link , and then tap Connect . Streaming Media starts playing the file . 4. During playback , use the slider and playback control buttons to play/pause , switch to full screen , replay , and fast forward . 168 Internet To view streaming video information While streaming a video clip , tap Menu > Properties to view the video properties such as the video link or location , duration , and bit rate . To configure streaming video connection settings Tap Menu > Options to configure the Streaming Media settings . From this screen , you can set the media buffer , select the connection to use , and set all streaming videos to play in full screen . 8.5 Using Windows Live™ Windows Live™ helps you quickly find information using Windows Live™ Search , access and synchronize your Windows Live™ Mail e-mails and contacts , and send instant messages using Windows Live™ Messenger . To set up Windows Live™ for the first time 1. Tap Start > All Programs > Windows Live , and then tap Sign in to Windows Live . 2. Tap the links to read the Windows Live™ Terms of Use and the Microsoft Online Privacy Statement . After reviewing them , tap Accept . 3. Enter your Windows Live™ Mail or Hotmail address and password , select the Save password checkbox , and then tap Next . 4. Tap Next . 5. Choose what information you want to sync online with your device . If you select Store Windows Live contacts in your mobile phone’s contact list , your Windows Live™ contacts will be added to the contact list and to Windows Live™ Messenger on your device . Internet 169 If you select Sync e-mail , your Windows Live™ Mail or Hotmail inbox messages will be downloaded to your device . 6. Tap Next . 7. After synchronization is complete , tap Done . The Windows Live™ screen Search bar . Enter the information you want to search , then tap . Switch between the Windows Live™ Messenger , Windows Live™ Mail , and Sync status screens . Change your display name , picture , and personal message . Adjust Windows Live™ settings . Using Windows Live™ Messenger With this mobile version of Windows Live™ Messenger , you can send and receive instant messages . To sign in to Windows Live™ Messenger and start a conversation 1. Tap Messenger on the Windows Live™ screen . 2. Tap Sign in on the Messenger screen . Signing in may take several minutes , depending on your connection speed . 170 Internet 3. In the contact list , select an online contact , and then tap Send IM to open the message screen . 4. On the message screen , enter your message in the text field , then tap the Enter key on the on-screen keyboard to send the message . You can also do any of the following on the message screen : • To add an emoticon , tap Menu > Add emoticon , then tap an emoticon on the screen . The emoticon is attached to your message . To send a file , tap Menu > Send , select the type of file ( picture , voice clip , or any file ) , and then locate the file you want to send . To invite one or more contacts to the conversation , tap Menu > Options > Add participant . To send a voice message , tap Voice clip on the message screen , then start talking . When you have finished recording , tap Send . • • • 5. To end the conversation with the current contact , tap Menu > End conversation . 6. To sign out , tap Menu > Sign Out . To add a Windows Live™ contact You can add new Windows Live™ contacts in Windows Live™ Messenger . 1. Tap Menu > Add new contact . 2. Enter the e-mail address of the contact , and then tap OK . Internet 171 8.6 Using RSS Hub RSS Hub is an RSS reader that keeps you up-to-date with the latest news from the Internet . It monitors RSS feeds from your favorite news sites , blogs and more , and downloads the most current updates and podcasts . For more information about RSS Hub , tap Start > All Programs > Help , and then tap Help for Added Programs > RSS Hub . Subscribing to and organizing news channels To subscribe to news channels 1. Tap Start > All Programs > RSS Hub , and then tap Continue . 2. In the New Channel Wizard screen , select the Choose from a list of known Channels option , and then tap Next . A list of RSS channels is displayed . Note If the RSS channel you want to subscribe to is not in the list of known channels , tap Back , then select another option on the New Channel Wizard screen . You must subscribe to news channels before you can receive RSS feeds . Tap to load pre-selected RSS channels . 172 Internet 3. Select the checkboxes of the RSS channels you want to subscribe to , then tap Finish . Category Channels Tip Channels are grouped by categories . If you want to select all channels in a category , select the category check box . 4. The channel list appears . Tap Refresh to update the channels . Internet 173 Select the channel category to display Channel is updated . Tap to view the headlines . Channel list Headline count Update the channels Cancel channel updating To add new channels 1. In the channel list , tap Menu > Channel > New to open the New Channel Wizard screen . 2. Select an option , and then follow screen instructions to add new channels . To filter the channels to display In the channel list , tap Menu > View , and then select Updated to display only those channels with unread items , or All to display all subscribed channels . 174 Internet Using the headline list Tap a channel in the channel list to display the headline list . Tap a headline to open the news summary screen . Play back the podcast or view the image . New or unread item Item has been read Podcast or image attachment is downloading . Download the podcast or image attachment . The item contains a keyword . Return to the channel list New or unread items display in bold and are marked with a blue newspaper icon . Items that have been read are marked with a gray newspaper icon . Internet 175 Viewing the news summary Tap a headline in the headline list to display the news summary . Channel name Headline and read status News summary Open the complete article in Opera Mobile . See “ Using Opera Mobile ” in this chapter for details . Return to the headline list Podcast or image attachment . Tap the link to download the file . Tap Menu to change the way that text is displayed , save a podcast , send a link to the article via e-mail , and more . To download , play , or save podcasts 1. On the news summary screen tap the Download audio/Download video link or the audio/video podcast icon . Tip To cancel the file download , tap Cancel download below the audio/video file icon . 2. After downloading the file , do one of the following : • Tap Play audio/Play video or the audio/video file icon to play back the file . • Tap Menu > Podcast > Save to save a copy of the file to the device’s main memory or storage card . 176 Internet To send the a link to the article via e-mail 1. In the news summary screen , tap Menu > Send Link via Email . 2. Messaging opens and displays the Account Picker screen . Tap the e-mail account that you want to use . A new e-mail message is then created with the link . 3. Specify the e-mail recipients , and then tap Send . Note For more information on how to compose e-mails , see “ Creating and sending an e-mail message ” in Chapter 6. To view the next or previous news summary In the news summary screen , tap Menu > Next or Menu > Previous . 8.7 Using Your Device as a Modem ( Internet Sharing ) Internet Sharing connects your desktop or notebook computer to the Internet by using your device’s data connection such as GPRS/3G . You can connect via USB or Bluetooth . Before you proceed • Make sure your device has a SIM card installed , and your device has a GPRS/3G or dial-up modem connection . If your device has not been set up with a data connection yet , tap Menu > Connection Settings on the Internet Sharing screen . For more information about setting up these connections , see “ GPRS/3G ” and “ Dial-up ” in this chapter . To set up your device as a USB modem , you must first install Windows Mobile Device Center or Microsoft ActiveSync version 4.5 or later on the computer . To use a Bluetooth connection , make sure your computer has built-in Bluetooth capability . If your computer does not have Bluetooth , you can connect and use a Bluetooth adapter or dongle . • • Internet 177 Setting up your device as a USB modem 1. Connect the device to your desktop or notebook computer using the USB sync cable . 2. When the Connect to PC screen appears , select Internet Sharing , then tap Done . 3. In the Network Connection list , select the name of the connection that your device uses to connect to the Internet . 4. Tap Connect . Using your device as a Bluetooth modem To use your device as a Bluetooth modem for your computer , set up a Bluetooth Personal Area Network ( PAN ) between your device and your computer . To set up Bluetooth PAN on your device 1. On your device , turn on Bluetooth and set it to visible mode . For instructions , see “ To turn Bluetooth on and make your device visible ” in Chapter 9. 2. Initiate a Bluetooth partnership from your device . For instructions , see “ To create a Bluetooth partnership ” in Chapter 9. 3. Tap Start > All Programs > Internet Sharing . 4. Select Bluetooth PAN as the PC Connection . 5. From the Network Connection list , select the name of the connection that your device uses to connect to the Internet , and then tap Connect . 178 Internet 6. Set up Bluetooth PAN on your computer . For instructions , see “ To set up Bluetooth PAN on your computer ” . 7. On the Internet Sharing screen on your device , check whether a connected status message is displayed , which indicates that your computer has been successfully connected to the Internet using your device as a Bluetooth modem . To set up Bluetooth PAN on your computer For Windows Vista : 1. Click Start > Control Panel > Network and Internet > Network and Sharing Center . 2. Click Manage network connections and then under Personal Area Network , double-click Bluetooth Network Connection . 3. In the Bluetooth Personal Area Network Devices dialog box , select your device , and click Connect . For Windows XP : 1. Tap Start > Control Panel > Network Connections . 2. Under Personal Area Network , click the Bluetooth Network Connection icon . 3. Under Network Tasks , click View Bluetooth network devices . 4. In the Bluetooth Personal Area Network Devices dialog box , select your device , and click Connect . Note If the Bluetooth adapter or dongle on your computer was installed using a third-party driver , open the Bluetooth software that came with the Bluetooth adapter/dongle to connect your computer and device via Bluetooth . Refer to the Bluetooth adapter/dongle documentation for more information . Ending the Internet connection On the Internet Sharing screen , tap Disconnect . </text>
<text id="TeleHTC_Manual_9_EN.txt">
Chapter 9 Bluetooth 9.1 Bluetooth Modes Bluetooth is a short-range wireless communications technology . Devices with Bluetooth capabilities can exchange information over a distance of about eight meters ( 26 feet ) without requiring a physical connection . Bluetooth on your device operates in three different modes : • On . Bluetooth is turned on . Your device can detect other Bluetooth-enabled devices , but not vice versa . • Visible . Bluetooth is turned on , and all other Bluetooth-enabled devices can detect your device . • Off . Bluetooth is turned off . In this mode , you can neither send nor receive information using Bluetooth . Note Turn off Bluetooth when not in use to conserve battery power , or in places where using a wireless device is prohibited , such as on board an aircraft and in hospitals . To turn Bluetooth on and make your device visible 1. Tap Start > Settings > Communications and then tap Bluetooth . Tip You can also tap Start > Settings > All Settings > Connections tab and then tap Bluetooth . 2. When prompted to turn on Bluetooth , tap Yes . 3. Tap the Settings tab ( ) , and then tap Not Discoverable . 180 Bluetooth 4. Tap the drop-down menu and then select Always Visible . Note If you select Visible for 60 seconds , Bluetooth visibility will turn off automatically when the time elapses and your device has not yet connected to another Bluetooth device . 5. Tap Done . The icon then appears in the title bar to indicate that the device is in visible mode . Tip To easily switch Bluetooth off or back on , tap Start > Settings > Communications to open the Comm Manager and then tap Bluetooth’s OFF/ON slider . Your device remembers whether visible mode was previously enabled or disabled . If you did not disable visible mode , switching Bluetooth on in the Comm Manager also puts your device in visible mode automatically . For more information about using the Comm Manager , see Chapter 13. 9.2 Bluetooth Partnerships A Bluetooth partnership is a relationship that you create between your device and another Bluetooth-enabled device in order to exchange information in a secure manner . To create a Bluetooth partnership 1. Tap Start > Settings > Communications and then tap Bluetooth . 2. On the Settings tab ( ) , tap Add a device . 3. Tap a Bluetooth device to connect with . 4. Specify a passcode , which can be 1 up to 16 characters , to establish a secure connection , and then tap OK . Note Your device uses Bluetooth 2.1 with Secure Simple Pairing feature . If the other Bluetooth device you are pairing with also supports the same feature , the passcode will be automatically created and displayed on both devices . Both you and other party simply need to verify that the passcode is the same and tap Yes to establish the partnership . Bluetooth 181 5. After the receiving party accepts the partnership , the Bluetooth device name is shown on the screen , including all Bluetooth services that you can use with it . Select the check boxes of the Bluetooth services you want to use , and then tap Done . 6. If you selected to use the Bluetooth Serial Port service of the paired device , select a local serial port to assign for the paired device , and then tap Continue . The connected Bluetooth device now appears in the Devices tab ( Tip Tap Properties to change the paired device name . Tap Menu > Update to update the list of services that you can use with the paired device . ) . Creating a Bluetooth partnership between two devices is a one-time process . Once a partnership is created , the devices can recognize the partnership and exchange information without entering a passcode again . To accept a Bluetooth partnership 1. Ensure that Bluetooth is turned on and in visible mode . 2. When prompted , enter or accept the passcode ( the same passcode from the device requesting the partnership ) to establish a secure connection . 3. Tap OK . The paired device now appears in the Devices tab ( now exchange information with the paired device . Tip ) . You can To delete a Bluetooth partnership , select the device’s name on the Devices tab , then tap Menu > Delete . When prompted to confirm , tap Yes . 182 Bluetooth 9.3 Connecting a Bluetooth Hands-free or Stereo Headset For hands-free phone conversations , you can use a Bluetooth hands-free headset such as a car kit with your device . Your device also supports A2DP ( Advanced Audio Distribution Profile ) which allows you to use a Bluetooth stereo headset for handsfree phone conversations and for listening to stereo music . To connect a Bluetooth hands-free or stereo headset 1. Make sure that both your device and the Bluetooth headset are turned on and within close range , and that the headset is visible . Refer to the manufacturer’s documentation to find out how to set the headset in visible mode . 2. Tap Start > Settings > Communications and then tap Bluetooth . 3. On the Settings tab ( ) , tap Add a device . 4. Select the hands-free or stereo headset device in the list , then tap Select . Your device will automatically with the Bluetooth headset . Note Your device will automatically try one of the preconfigured passcodes ( 0000 , 8888 ) to pair with the Bluetooth headset . If this fails , you have to manually enter the passcode delivered with your headset . 5. When connected , the hands-free or stereo headset device is shown on the screen , including the Bluetooth services ( Hands-free and Stereo Audio ) that you can use with it . Make sure these services are selected , and then tap Continue . The paired headset now appears in the Devices tab ( ) . Bluetooth 183 The double arrowhead that is displayed to the right of a service indicates that the service is connected with your headset . If you turn off your headset , the double arrowhead disappears to indicate that the service has been disconnected . Next time you turn on and use your headset again , you need to manually reconnect each service . Tap a service and then tap Connect . 9.4 Sending and Receiving Information Using Bluetooth You can send the following types of information from your device to your computer or to another Bluetooth-enabled device : Outlook e-mail , contacts , tasks , notes , calendar items , audio files , ring tones , Images , and videos . Note If your computer does not have built-in Bluetooth capability , you need to connect and use a Bluetooth adapter or dongle on your computer . To send information from your device to a computer 1. Turn on Bluetooth on your computer and set to visible mode . Note If the Bluetooth adapter or dongle on your computer was installed using a thirdparty provided driver , open the Bluetooth software that came with the Bluetooth adapter/dongle and enable the adapter/dongle to be discovered by other devices . Refer to the Bluetooth adapter’s documentation for more information . 184 Bluetooth If your computer is installed with Windows XP SP2 or later version and your computer’s Bluetooth adapter is supported by your Windows version , do the following steps : a. On your computer , open Bluetooth Devices from the Control Panel , then click the Options tab on the Bluetooth Devices window . b. For Windows Vista , select Allow Bluetooth devices to find this computer . For Windows XP , select Turn discovery on and Allow Bluetooth devices to connect to this computer . c. Create a Bluetooth partnership between your device and computer . For instructions , see “ To create a Bluetooth partnership ” . d. In the Options tab of Bluetooth Devices , select Show the Bluetooth icon in the notification area . e. To enable your computer to receive information via Bluetooth , right-click the Bluetooth icon in the notification area at the bottom-right corner of your computer screen and select Receive a File . You are now ready to send/receive . 2. Turn on Bluetooth on your device and make your device visible . For instructions , see “ To turn Bluetooth on and make your device visible ” . 3. Create a Bluetooth partnership . For instructions , see “ To create a Bluetooth partnership ” . 4. Tap the Accessories tab ( then tap BT Send Object . ) , and Tap the left or right arrow to change to the type of information you want to send . 5. Select the type of information and then select the check boxes of items you want to send . 6. Tap Send . 7. Select the Bluetooth device to which you want to send the items , then tap Select . Bluetooth 185 8. If you sent Outlook E-mail messages , calendar items , tasks , or contacts to your computer and they are not automatically added to Outlook , select File > Import and Export in Outlook to import them . To send information to a Bluetooth-enabled device such as another Windows Mobile-powered device , follow steps 2 to 7 in the above procedure . Tip The default folder on your computer where sent items are stored may be C : \Documents and Settings\your_username\My Documents\Bluetooth Exchange Folder in Windows XP or C : \Users\your_username\My Documents\Bluetooth Exchange Folder in Windows Vista . To send a file to another Bluetooth-enabled device 1. Tap Start > All Programs > File Explorer . 2. Navigate to the folder that contains the file you want to send . 3. Tap and hold the desired file , and then tap Send via Bluetooth . 4. Select the name of the Bluetooth device , and then tap Select . To receive information from another Bluetooth-enabled device 1. When you receive information such as calendar items , tasks , or contacts sent from another Bluetooth-enabled device , tap Accept . 2. After your device has finished saving the information , tap Done . To change the folder for saving received files Files that you receive from another Bluetooth-enabled device are saved in \My Documents on your device . You can change the destination folder for saving received files : 1. Tap Start > Settings > Communications and then tap Bluetooth . 2. On the Settings tab ( 4. Tap Search ( ) . ) , tap Advanced . 3. Scroll down and then tap File Transfer . 186 Bluetooth 5. Select the new destination folder , and then tap Select . Tip To save received files on your storage card when it is inserted on your device , select Save files to storage card when present . Files will be saved on the root folder of your storage card . 6. Tap Done . 9.5 Printing via Bluetooth Connect your device to a Bluetooth printer to print your pictures . Note Before you start printing , make sure to turn on the Bluetooth printer and turn on Bluetooth on your device . For instructions , see “ To turn Bluetooth on and make your device visible ” earlier in this chapter . To print a picture 1. Tap Start > Settings > Communications and then tap Bluetooth . 2. Tap the Accessories tab ( ) , and then tap Print Images . Your device then searches for pictures that are stored on your device and storage card . 3. Tap each picture that you want to select for printing . To select all pictures , tap Menu > Select All . Tip To clear a selected picture , tap that picture again . 4. After you have finished selecting pictures , tap Next . 5. Select the name of the Bluetooth printer , and then tap Select . 6. Select the Print Layout to use , and then tap Print . Bluetooth 187 9.6 Connecting to Car Kit Phones Bluetooth car kit phones that support the SIM Access Profile ( SAP ) can connect to your device and access its SIM card via Bluetooth . Once a SAP connection has been established , you can download device and/or SIM contacts from your device to the car kit phone , and use the car kit phone to answer and make calls . 1. Tap Start > Settings > Communications and then tap Bluetooth . 2. Turn Bluetooth on and set your device to visible mode . For instructions , see “ To turn Bluetooth on and make your device visible ” earlier in this chapter . 3. On the Settings tab ( ) , tap Advanced . 4. Scroll down and tap SIM Access . 5. Select the Enable SIM Access Profile ( SAP ) check box , and then tap Done . 6. Connect the car kit phone to your device via Bluetooth . For instructions , refer to your car kit phone’s manual . 7. If this is the first time you are pairing the car kit phone with your device , enter the car kit phone’s passcode on your device . 8. A pop-up message should appear on your device saying that a connection has been established between your device and car kit phone . Tap OK . Note You are not able to make and receive calls , send and receive messages , or perform related activities on your device when the SIM Access Profile connection is active . You’ll be able to make or receive calls from the car kit phone during this time . After the connection is disconnected , you will be able to use your device as before . 188 Bluetooth </text>
<text id="TeliApple_iPhone4_EN.txt">
﻿iPhone 4 Important Product Information Guide This Important Product Information Guide contains safety and handling , regulatory , software license , and warranty information for iPhone . Look for recycling , disposal , and other environmental information in the iPhone User Guide at : support . apple . com/manuals/iphone To avoid injury , read all operating instructions and the following safety information before using iPhone . For detailed operating instructions , read the iPhone User Guide on your iPhone by visiting help . apple . com/iphone or using the iPhone User Guide bookmark in Safari . For downloadable versions of the latest iPhone User Guide and this Important Product Information Guide , visit : support . apple . com/manuals/iphone Important Safety and Handling Information WARNING : Failure to follow these safety instructions could result in fire , electric shock , or other injury or damage to iPhone or other property . Carrying and Handling iPhone iPhone contains sensitive components . Do not drop , disassemble , open , crush , bend , deform , puncture , shred , microwave , incinerate , paint , or insert foreign objects into iPhone . Do not use iPhone if it has been damaged—for example , if iPhone is cracked , punctured , or damaged by water . The front and back covers of iPhone are made of glass . This glass could break if iPhone is dropped on a hard surface or receives a substantial impact or is crushed , bent , or deformed . If the glass chips or cracks , do not touch or attempt to remove the broken glass . Stop using iPhone until the glass is replaced by Apple or an Apple Authorized Service Provider . Glass cracked due to misuse or abuse is not covered under the warranty . If you are concerned about scratching or abrasion , you can use one of the many cases sold separately . Keeping the Outside of iPhone Clean Clean iPhone immediately if it comes into contact with any contaminants that may cause stains , such as ink , dyes , makeup , dirt , food , oils , and lotions . To clean iPhone , unplug all cables and turn off iPhone ( press and hold the Sleep/Wake button , and then slide the onscreen slider ) . Then use a soft , slightly damp , lint-free cloth . Avoid getting moisture in openings . Don’t use window cleaners , household cleaners , aerosol sprays , solvents , alcohol , ammonia , or abrasives to clean iPhone . The front and back glass surfaces have an oleophobic coating . To remove fingerprints , simply wipe these surfaces with a soft , lint-free cloth . The ability of this coating to repel oil will diminish over time with normal usage , and rubbing the screen with an abrasive material will further diminish its effect and may scratch the glass . Avoiding Water and Wet Locations Do not use iPhone in rain , or near washbasins or other wet locations . Take care not to spill any food or liquid on iPhone . In case iPhone gets wet , unplug all cables , turn off iPhone ( press and hold the Sleep/Wake button , and then slide the onscreen slider ) before cleaning , and allow it to dry thoroughly before turning it on again . Do not attempt to dry iPhone with an external heat source , such as a microwave oven or hair dryer . Damage to iPhone caused by contact with liquid is not covered under the warranty . Repairing or Modifying iPhone Never attempt to repair or modify iPhone yourself . iPhone does not contain any user-serviceable parts , except for the SIM card and SIM tray . Disassembling iPhone , including the removal of external screws and back cover , may cause damage that is not covered under the warranty . Service should only be provided by Apple or an Apple Authorized Service Provider . If you have questions , contact Apple or an Apple Authorized Service Provider . For service information , go to : www . apple . com/support/iphone/service/faq Battery Replacement Do not attempt to replace the rechargeable battery in iPhone yourself . The battery may only be replaced by Apple or an Apple Authorized Service Provider . For more information about battery replacement service , go to : www . apple . com/support/iphone/service/battery Charging iPhone To charge iPhone , only use the Apple Dock Connector to USB Cable with an Apple USB Power Adapter or a high-power USB port on another device that is compliant with the USB 2.0 or 1.1 standard , another Apple-branded product or accessory designed to work with iPhone , or a third-party accessory certified to use the Apple “ Works with iPhone ” or “ Made for iPhone ” logo . Read all safety instructions for any products and accessories before using with iPhone . Apple is not responsible for the operation of , or any damage caused by , third-party accessories or their compliance with safety and regulatory standards . When you use the Apple USB Power Adapter to charge iPhone , make sure that the power adapter is fully assembled before you plug it into a power outlet . Then insert the Apple USB Power Adapter firmly into the power outlet . Do not connect or disconnect the Apple USB Power Adapter with wet hands . The Apple USB Power Adapter may become warm during normal use . Always allow adequate ventilation around the Apple USB Power Adapter and use care when handling . Unplug the Apple USB Power Adapter if any of the following conditions exist : The power cord or plug has become frayed or damaged . The adapter is exposed to rain , liquid , or excessive moisture . The adapter case has become damaged . You suspect the adapter needs service or repair . You want to clean the adapter . Avoiding Hearing Damage Permanent hearing loss may occur if the receiver , earbuds , headphones , speakerphone , or earpieces are used at high volume . Set the volume to a safe level . You can adapt over time to a higher volume of sound that may sound normal but can be damaging to your hearing . If you experience ringing in your ears or muffled speech , stop listening and have your hearing checked . The louder the volume , the less time is required before your hearing could be affected . Hearing experts suggest that to protect your hearing : Limit the amount of time you use the receiver , earbuds , headphones , speakerphone , or earpieces at high volume . Avoid turning up the volume to block out noisy surroundings . Turn the volume down if you can’t hear people speaking near you . For information about how to set a maximum volume limit on iPhone , see the iPhone User Guide . Emergency Calls You should not rely on wireless devices for essential communications , such as medical emergencies . Use of iPhone to call emergency services may not work in all locations or all operating conditions . Emergency numbers and services vary by region , and sometimes an emergency call cannot be placed due to network availability or environmental interference . Some cellular networks may not accept an emergency call from iPhone if it does not have a SIM , if the SIM is PIN-locked , or if you have not activated your iPhone . Driving and Riding Safely Use of iPhone alone or with headphones ( even if used only in one ear ) while driving a vehicle or riding a bicycle is not recommended and is illegal in some areas . Check and obey the laws and regulations on the use of mobile devices like iPhone in the areas where you drive or ride . Be careful and attentive while driving or riding a bicycle . If you decide to use iPhone while driving , keep in mind the following guidelines : 1 Give full attention to driving or riding and to the road . Using a mobile device while driving or riding may be distracting . If you find it disruptive or distracting while operating any type of vehicle , riding a bicycle , or performing any activity that requires your full attention , pull off the road and park before making or answering a call . Get to know iPhone and its features such as Voice Control , Favorites , Recents , and Speaker . These features help you to place your call without taking your attention off the road . See the iPhone User Guide for more information . Use a hands-free device . Take advantage of one of the many compatible hands-free accessories available for use with iPhone . Use of a hands-free device may be required in some areas . Position iPhone within easy reach . Keep your eyes on the road . If you get an incoming call at an inconvenient time , let your voicemail answer it for you . Try to plan calls when your car will be stationary . Assess the traffic before dialing , or place calls when you are not moving or before pulling into traffic . Let the person you are speaking with know you are driving . If necessary , suspend the call in heavy traffic or hazardous weather conditions . Driving in rain , sleet , snow , ice , fog , and even heavy traffic can be hazardous . Do not text , email , take notes , look up phone numbers , or perform any other activities that require your attention while driving . Composing or reading texts and emails , jotting down a to-do list , or flipping through your address book takes attention away from your primary responsibility , driving safely . Do not engage in stressful or emotional conversations that may be distracting . Make people you are talking with aware you are driving and suspend conversations that have the potential to divert your attention from the road . Navigating Safely Do not rely on iPhone applications that provide maps , digital compass headings , orientation information , directions , or location-based navigation to determine precise locations , proximity , orientation , distance , or direction . These applications should only be used for basic navigation assistance . Maps , directions , and location-based applications depend on data services . These data services are subject to change and may not be available in all geographic areas , resulting in maps , digital compass headings , directions or location-based information that may be unavailable , inaccurate , or incomplete . iPhone contains an internal digital compass located in the upper-right corner of iPhone . The accuracy of digital compass headings may be negatively affected by magnetic or other environmental interference , including interference caused by the close proximity of the magnets contained in the iPhone earbuds . Never rely solely on the digital compass for determining direction . Compare the information provided on iPhone to your surroundings and defer to posted signs to resolve any discrepancies . Do not use location-based applications while performing activities that require your full attention . For important information about driving safety , see the “ Driving and Riding Safely ” section . Always comply with posted signs and the laws and regulations in the areas where you are using iPhone . For Vehicles Equipped with an Air Bag An air bag inflates with great force . Do not store iPhone or any of its accessories in the area over the air bag or in the air bag deployment area . Seizures , Blackouts , and Eyestrain A small percentage of people may be susceptible to blackouts or seizures ( even if they have never had one before ) when exposed to flashing lights or light patterns such as when playing games or watching video . If you have experienced seizures or blackouts or have a family history of such occurrences , you should consult a physician before playing games ( if available ) or watching videos on your iPhone . Discontinue use of iPhone and consult a physician if you experience headaches , blackouts , seizures , convulsion , eye or muscle twitching , loss of awareness , involuntary movement , or disorientation . To reduce risk of headaches , blackouts , seizures , and eyestrain , avoid prolonged use , hold iPhone some distance from your eyes , use iPhone in a well-lit room , and take frequent breaks . Choking Hazards iPhone contains small parts , which may present a choking hazard to small children . Keep iPhone and its accessories away from small children . Repetitive Motion When you perform repetitive activities such as typing or playing games on iPhone , you may experience occasional discomfort in your hands , arms , shoulders , neck , or other parts of your body . Take frequent breaks and if you have discomfort during or after such use , stop use and see a physician . Potentially Explosive Atmospheres Turn off iPhone ( press and hold the Sleep/Wake button , and then slide the onscreen slider ) when in any area with a potentially explosive atmosphere . Do not charge iPhone , and obey all signs and instructions . Sparks in such areas could cause an explosion or fire , resulting in serious injury or even death . Areas with a potentially explosive atmosphere are often , but not always , marked clearly . Potential areas may include : fueling areas ( such as gas stations ) ; below deck on boats ; fuel or chemical transfer or storage facilities ; vehicles using liquefied petroleum gas ( such as propane or butane ) ; areas where the air contains chemicals or particles ( such as grain , dust , or metal powders ) ; and any other area where you would normally be advised to turn off your vehicle engine . Using Connectors and Ports Never force a connector into a port . Check for obstructions on the port . If the connector and port don’t join with reasonable ease , they probably don’t match . Make sure that the connector matches the port and that you have positioned the connector correctly in relation to the port . Accessories and Wireless Performance Not all iPod accessories are fully compatible with iPhone . Turning on Airplane Mode on iPhone may eliminate audio interference between iPhone and an accessory . While Airplane mode is on , you cannot make or receive calls or use features that require wireless communication . Under some conditions , certain accessories may affect iPhone wireless performance . Reorienting or relocating iPhone and the connected accessory may improve wireless performance . Keeping iPhone Within Acceptable Temperatures iPhone is designed to be operated in temperatures between 0º and 35º C ( 32º to 95º F ) and stored in temperatures between -20º and 45º C ( -4º to 113º F ) . Low- or high-temperature conditions might temporarily shorten battery life or cause iPhone to temporarily stop working properly . Leaving iPhone in a parked vehicle or in direct sunlight can cause iPhone to exceed these storage or operating temperature ranges . Avoid dramatic changes in temperature or humidity when using iPhone as condensation may form on or within iPhone . When you’re using iPhone or charging the battery , it is normal for iPhone to get warm . The exterior of iPhone functions as a cooling surface that transfers heat from inside the unit to the cooler air outside . Exposure to Radio Frequency Energy iPhone contains radio transmitters and receivers . When on , iPhone receives and sends out radio frequency ( RF ) energy through its antennas . The iPhone cellular antenna is located at the bottom edge of iPhone , to the left of the Home button . The Wi-Fi and Bluetooth® antenna is located at the top edge of iPhone , to the right of the headset jack . For optimal mobile device performance and to be sure that human exposure to RF energy does not exceed the FCC , IC , and European Union guidelines , always follow these instructions and precautions : When on a call using the built-in audio receiver in iPhone , hold iPhone with the dock connector pointed down toward your shoulder to increase separation from the antenna . When using iPhone near your body for voice calls or for wireless data transmission over a cellular network , keep iPhone at least 15 mm ( 5/8 inch ) away from the body , and only use carrying cases , belt clips , or holders that do not have metal parts and that maintain at least 15 mm ( 5/8 inch ) separation between iPhone and the body . iPhone is designed and manufactured to comply with the limits for exposure to RF energy set by the Federal Communications Commission ( FCC ) of the United States , Industry Canada ( IC ) of Canada , and regulating entities of Japan , the European Union , and other countries . The exposure standard employs a unit of measurement known as the specific absorption rate , or SAR . The SAR limit applicable to iPhone set by the FCC is 1.6 watts per kilogram ( W/kg ) , 1.6 W/kg by Industry Canada , and 2.0 W/kg by the Council of the European Union . Tests for SAR are conducted using standard operating positions ( i. e. , at the ear and worn on the body ) specified by these agencies , with iPhone transmitting at its highest certified power level in all tested frequency bands . Although SAR is determined at the highest certified power level in each frequency band , the actual SAR level of iPhone while in operation can be well below the maximum value because iPhone adjusts its cellular transmitting power based in part on proximity to the wireless network . In general , the closer you are to a cellular base station , the lower the cellular transmitting power level . iPhone has been tested , and meets the FCC , IC , and European Union RF exposure guidelines for cellular , Wi-Fi , and Bluetooth operation . </text>
<text id="TelsGoog_Answer_0545_EN.txt">
As you type in the search box on Google Web Search , Google 's autocomplete algorithm offers searches that might be similar to the one you 're typing . Start to type [ new york ] -- even just [ new y ] -- and you 'll be able to pick searches for New York City , New York Times , and New York University ( to name just a few ) . Why it 's helpful Rest your fingers . The algorithm predicts search queries in real-time , so typing [ golden gate b ] and then clicking 'golden gate bridge ' is faster and easier than typing it out . Catch a mistake . Did you mean : Melbourne Australia ? Start searching for [ melborn ] and Google 's algorithm will present more common spellings for what you might be trying to find . Repeat a favorite search . If you 're signed in to your Google Account and have Web History enabled , the algorithm may show some predicted queries based on searches that you 've done in the past . Data that you send to Google is protected by Google 's privacy policy . Find other useful information . Even if you 've disabled Google Instant , there are some features in autocomplete to connect you immediately with the information you 're looking for . For example , if you type [ weather brus ] you may see the current weather in Brussels , Belgium , described right in the list of search terms . This also works for flight status , local time zones , area codes , package tracking , certain answers , definitions , calculations , plus currency and unit conversions . How autocomplete works As you type , Google 's algorithm predicts and displays search queries based on other users ' search activities . In addition , if you 're signed in to your Google Account and have Web History enabled , you may see search queries from relevant searches that you 've done in the past . All of the predicted queries that are shown in the drop-down list have been typed previously by Google users . For certain queries , Google will show separate predictions for just the last few words . Below the word that you 're typing in the search box , you 'll see a smaller drop-down list containing predictions based only on the last words of your query . While each prediction shown in the drop-down list has been typed before by Google users , the combination of your primary text along with the completion may be unique . Predicted queries are algorithmically determined based on a number of purely objective factors ( including popularity of search terms ) without human intervention . The autocomplete data is updated frequently to offer fresh and rising search queries . Does Google exclude any users ' searches from autocomplete ? The search queries that you see as part of autocomplete are a reflection of the search activity of all web users . Just like the web , the search queries presented may include silly or strange or surprising terms and phrases . While we always strive to neutrally and objectively reflect the diversity of content on the web ( some good , some objectionable ) , we also apply a narrow set of removal policies for pornography , violence , hate speech , and terms that are frequently used to find content that infringes copyrights . Why do some of the searches seem so strange ? In some cases , there may be a search term that seems surprising to you , but after doing some searching on the web , you may discover that it 's a popular phrase online for some reason that you did n't anticipate . Queries in autocomplete are algorithmically determined based on a number of objective factors ( including search term popularity ) without manual intervention . Why do n't I see any predictions for a particular topic ? If no predicted searches appear for a particular word or topic , it 's likely due to one of the following reasons : The search term is not popular enough . Queries that are n't popular are less likely to be useful in autocomplete . A minimum algorithmic threshold for popularity helps us fight spam and improves the likelihood that the search queries you do see are relevant to your search . We also make regionally appropriate adjustments to autocomplete , so the predicted queries that you see on Google Australia ( google . com . au ) or Google France ( google . fr ) may be different from those you see on Google . com . The search term is too fresh . It can take some time for newly popular search terms to consistently appear in autocomplete . While you 'll usually be able to discover new queries within an hour , it can sometimes take a few days to a few weeks for recently popular search queries to start appearing in autocomplete . The search term violates our autocomplete policies . We aim to provide you with relevant search queries , but we exclude a narrow class of search queries related to pornography , violence , hate speech , and copyright infringement . The search term was mistaken for a policy violation . Our policy review process is neither perfect nor instantaneous . There might be occasions where the system aims to exclude a query in one language that would be perfectly fine in another language . For example , we might inadvertently exclude a compound word because it includes a translation of a bad word from another language . Control personalized predictions If you do n't want to see search queries based on your web history , you can control how personalized autocomplete works . Here are your options : Sign out of your Google Account while you search on Google . If you are n't signed in to a Google Account , your search experience may be customized based on past search information linked to a cookie on your browser . Learn how to turn off these customizations . Remove particular searches from your Web History at www . google . com/history or by clicking the " Remove " links that appear beside personalized predictions . Remove Web History from your Google Account . Ask a question or report a problem with autocomplete If you see a problem with the predictions in autocomplete , it 's probably caused by one of the scenarios described above and we are already working to address it . If you have feedback or questions about autocomplete , you can post them in the Google Web Search Help Forum . </text>
<text id="TelsGoog_Answer_0a46_EN.txt">
Use Google Realtime Search to find relevant real-time updates from online services including Twitter , FriendFeed , Facebook , MySpace , indenti . ca , TwitArmy , and Jaiku . Search for only this kind of content by visiting google . com/realtime . You can also search for real-time updates by clicking the Realtime link ( sometimes found under the " More " menu ) on the side of any search results page . In this Realtime view , you 'll see recent posts that are relevant to your search . Tweets and other short-form updates create an ongoing commentary that can provide valuable insights into what 's happened and how people have reacted . Here are a few cool features and options within the Realtime view : Top Links The Top Links section features the most cited links for your search , helping you find the most relevant content that was shared through these real-time updates . You might find content like a new video that 's gone viral or the latest news story that was commonly shared . Conversations Use the Full conversation option to see the back and forth dialog of a Twitter conversation . The Full conversation snippet will automatically appear next to tweets that have @replies associated with them . Tweets are organized from oldest to newest and are indented so you can quickly see how the conversation developed . The Full conversation option is currently available only in certain languages . Replay Use Google to search and explore the archive of past Twitter content . By replaying tweets , you can explore any topic that people have discussed on Twitter . For example , see what people were saying about a certain news event , how opinions of a celebrity changed over time , or what event made your favorite bookstore so crowded last weekend . Once you 're in the Realtime view , make sure that the Latest option is selected in the side panel ( it will be selected by default ) . You 'll see a chart on the right side of the page that shows how the relative volume of tweets about your search have changed over time . Click any point in the chart to see a replay of what people were saying publicly on Twitter about a given topic at that given time . Note that we currently show this historical view only for Twitter content . Filter your real-time results -- Sort by date : When you search for real-time updates , you 'll see the Latest view by default . This option shows content ordered by date and time , so you 'll see the most recent updates listed first . If you want to see results ranked by their relevance to your search terms and not by date , click the Any time link in the left panel . Results in this view are ranked based on algorithms to determine the most relevant updates regardless of when they were written . -- Sort by images : If you want to see only results that include image thumbnails , click the Updates with images link in the left panel . -- Sort by location : Use geographic location to help find the most relevant real-time results . When available , the location is shown next to the timestamp for each update . This location can be the location set by the user in their profile or a location extracted from explicit latitude and longitude attached to an update . In the Realtime view , you can use the filtering option in the side panel to see results from Anywhere , Nearby , or a Custom location that you define . If you choose Nearby , you 'll see content that 's customized to your location . The geographic location filter is currently available only in certain languages . </text>
<text id="TelsGoog_Answer_0bcf_EN.txt">
As you start to type your search terms , Google Instant automatically shows results for a popular search that begins with those letters . If you do n't see the results you want , just keep typing and the results will dynamically update . Connect to the information you need faster , even before you finish typing your search ! How it works The basics of Google search are the same , including how results are ranked and how Google determines relevant results . What has changed is the path you can take to get to relevant results . Here 's what happens when you search : Start to type . As you type a search on Google , the homepage automatically starts displaying your search results -- no need to press Enter . A list of predicted queries is generated using the autocomplete algorithm . These predictions are displayed in a drop-down menu below the search box . See results . The algorithm tries to predict what the rest of your query might be based on popular queries typed by other users . The first prediction is shown in light grey in the search box , and the search results you see instantly will be for that predicted search . If instead you want to see results for only the text you 've typed , just press Enter or click the Search button . Type more , see more . If you continue to type , Google dynamically updates the search results to match the first prediction for what you 've typed . Refine your search . Do n't find the information or website you want ? It 's easy to refine your search after seeing what results appear . Here are some options : If you see what you 're looking for in the list of predicted queries , click the query to see relevant results . Use your keyboard 's down arrow key to scroll through the list of predicted queries , and see results appear for each query you pause over . Continue typing your query until the results show what you 're looking for . As always , you 're still able to type your full query and press Enter or click the Search button . Why do n't I see results appear as I type ? You wo n't see results appear as you type if any of the following is true : you search from a page that 's not the Google homepage or a search results page you search from your iGoogle page rather than the classic homepage you search using Google SSL you use an Internet browser that 's not one of these supported browsers : Firefox 3 and later versions , Safari 5 for Mac and later versions , Internet Explorer 8 , and Google Chrome 5 and later versions you previously disabled autocomplete you previously opted out of Google Instant you use a Google domain or interface language that does not yet support Google Instant In addition , users on particularly slow Internet connections wo n't see dynamic results since we want to make sure that your search experience is as fast as possible . Learn more about this and similar issues . Lastly , certain types of search queries that may be inappropriate will not trigger results to appear automatically . In these situations , you 'll see a message asking you to click Enter to perform the search . The benefits Get all the benefits of autocomplete and more : Save time -- Get relevant search results while you type so you spend less time searching and can go right to the web content you want . Type less -- Dynamically generated results let you stop typing as soon as you see what you need . We estimate that this will reduce the average number of keystrokes by 9 per search . Search smarter -- Like a conversation with the search engine , get instant feedback on whether your search terms return the type of results you want . If not , just add another word or two to see if the results are closer to what you 're looking for . Learn how to get the most out of Google Instant Can I opt out ? If you do n't want to see results as you type , you can opt out by accessing your search settings under the gear icon on any search results page . When you opt out , we 'll save that preference on a cookie , so you 'll stayed opted out until the cookie is cleared . Note that the preference will only apply to that particular computer and Internet browser , and it is not tied to your Google Account . If you 're concerned about seeing inappropriate content , you can enable SafeSearch at the " strict filtering " level to help avoid sites that contain pornography , explicit sexual content , profanity , and types of hate content . </text>
<text id="TelsGoog_Answer_1851_EN.txt">
If you want to filter and customize the search results you see , use the options along the side of the results page . For example , you can choose to just see blogs updated within the last 24 hours or photos of a certain size . How to use search options and tools On the side of your search results page , click a filtering option to customize the search results page you 're looking at . We 'll automatically show you the tools and filtering options that are most relevant to your search . To see more , click More and More search tools to see all the available filters and views you can apply to that search . Since your options will vary based on the search and the filters you 've already used , you wo n't see all the options all the time . Try clicking on two or more options to form a more complex , more focused filter . To go back to standard unfiltered Google results , click Reset tools at the bottom of the panel . Filter results by type of content The top group of options will filter results by the type of web content you 'll see . Everything : By default , your Google search will show unfiltered results that can include all the types of content below . Images : See only results from Google Images . News : See only results from Google News . Books : See only results from Google Books including reviews , excerpts , and where you can buy the book . Videos : See only video results using Google 's Video Search . Blogs : See only results from Google Blog Search . Places : See only results from Google Place Pages . Shopping : See only results from Google Product Search . ( With this option , you 'll see results within the Product Search site rather than in a Google search results page . ) Realtime : See only real-time updates from micro-blogs like Twitter , FriendFeed , Jaiku and others . Learn more about Google real-time search Discussions : See what people are saying in discussion groups , forums , and question-and-answer sites . Recipes : See only results for recipes . Customize and filter these results to show recipes with your ideal ingredients , cook time and calorie count . This feature is currently not available in all languages . Learn more about Recipe View You wo n't always see all of these options , so click More below your list to see all the available types for that particular search . Customize your results by location The location used to customize your results is clearly indicated on the left side of your results page . Our location detection technology will automatically set a location for you , but you can easily specify an alternate location . Filter results by other criteria Based on your search and the Google property you 've selected , you 'll see a customized list of filtering tools . We 'll automatically show you the tools that seem most relevant to your search , so you wo n't always see all of these tools . Here are a few tools that you might see : Publish date Limit results according to when they were published on the Web . Google tries to estimate the publication date for a page by using information such as the date when Google first indexed the page . See the options Any time : By default , your search results will not be filtered by date . Latest : Sometimes the top results that show up are a little dated , although they 're still relevant . The Latest option shows you results that are both relevant and fresh . Google automatically optimizes the time period used for your filter to make sure that the most relevant and recent results are included . ( This option is only available when Everything is selected in the first group of options . ) Past 24 hours / Past week / Past month / Past year : Use these pre-defined ranges of times to find webpages . For instance , the Past 24 hours option will help you find information about current events . Custom range : This option lets you define your own date range . Enter the dates you want to use in the format mm/dd/yyyy , then click Search . This option works best for pages published after 2001 ; to find historical mentions of dates , try using the Timeline tool . Personalization Limit the results to content that is more personalized to you . For example , see content from your friends ( Social ) or content from a geographical area ( Nearby ) . See the options Social : If you 're signed in to Google , see only social search results . You 'll see publicly-accessible content from people in your social circle that is relevant to your search . The idea is that content from your friends and social contacts is often more relevant to you than content from strangers . Nearby : Only see results that might be especially relevant for your preferred location indicated on the side of your results page . You can easily specify your preferred location . Web History : Limit the results to pages you have or have not already visited . If you 're signed in to your Google Account and have Web History enabled , you can use this tool to restrict your results to pages you either have , or have n't , visited in the past while Web History was enabled . Want to find something new ? Try Not yet visited . Need to remember a helpful site from last month ? Visited pages will focus your search . Display options This section lets you change the way results are displayed . The default Standard view shows you regular Google results , where each result is composed of the page title and a few lines of text ( also known as the " snippet " ) . See the options Sites with images : See image thumbnails from the page alongside the snippet for each result . They can help you quickly identify whether the page is relevant to your search term . For example , if you see an image of a furry little critter when you search for [ mouse ] , you can probably deduce that the page is n't talking about computer equipment . Translated foreign pages : Sometimes , the best results for your search are written in another language . Based on your search term , Translated foreign pages automatically chooses the best language ( or languages ) to search in , translates your search , and then translates the results back to the language you prefer to read . Our automatic language selection is n't perfect , of course , so if you 'd like to search specific languages , select them in the panel above the results . Timeline : See results along a timeline , which is especially useful if you 're researching information about a historical person or event . Click any section in the timeline to zoom in on that time period . To change the time range , click Search other dates above the timeline to enter new start and end dates . Alternatively , click the date links below the timeline to see results that mention that particular year , month , or day . Reading level : You can limit your search results to a specific reading level ( Basic , Intermediate , or Advanced ) . Learn more about the Reading level tool . Content type options When you select a specific type of content like Videos or Realtime , you 'll often see a set of tools that are unique to that selection . For example , if you select Images , you can filter image results by size , type , and color . Learn more about the search tools specific to Google Images . See definitions for your search term using Dictionary . You can also find synonyms , images , usage examples , and learn if the term is a word in other languages . Discover more results If you 're ever unsure about the precise terms you should use for your search , start out with a broader search term , then use these tools to discover alternative search terms . The Something different option lets you find parallel searches that you might find interesting . See the options Related searches : See related searches at the top of the results page . They 'll stay there , even as you scroll up and down , so you can easily compare and contrast results for different related searches . Wonder wheel : This option visually presents connections between related searches and your search term as an interactive diagram . Click the different nodes in the diagram to see how searches can branch out . Something different : The bottom set of links on the side of the search results page includes alternative queries to help you discover webpages that are indirectly related to your search . Learn more about the " Something different " links We hope these options help you explore and interact with your search results in useful ways . As we develop new ways to help you search , you 'll see new or changed options appear . </text>
<text id="TelsGoog_Answer_1b37_EN.txt">
There are several reasons why you may not see dynamic results from Google Instant . Connection speed If you 're searching from a particularly slow Internet connection , you wo n't see results as you type because we do n't want to slow down your search experience . Similarly , if we have historical evidence that the network you 're on tends to be slow , we 'll show you the normal search experience to prevent any possible speed issues . If you 'd prefer to see results as you type anyway , or if you do n't think your connection speed is an issue , you can opt in to seeing dynamic results whenever you 'd like . Just click the Instant link next to the search box , or visit your Preferences page . In addition , if we later identify that your connection becomes stronger , you might start to once again see results as you type . Availability and other issues It 's possible that unexpected issues prevent you from seeing results as you type . For instance , requests from your connection might fail , you might have proxy issues , or your Internet connection could drop mid-search . Try pressing Enter or clicking the " Search " button to see results . If you 're redirected to an error page or other results page , try refreshing the page or going back to the Google homepage . Certain queries If you 're used to seeing results as you type , note that certain types of search queries that could be inappropriate will not trigger automatic results . In these situations , you 'll see a message asking you to click Enter to perform the search . Your preferences and search behavior In addition , you wo n't see results appear as you type if any of the following is true : you search from a page that 's not the Google homepage or a search results page you search from your iGoogle page rather than the classic homepage you search using Google SSL you use an Internet browser that 's not one of these supported browsers : Firefox 3 and later versions , Safari 5 for Mac and later versions , Internet Explorer 8 , and Google Chrome 5 and later versions you search a Google property ( linked to in the side panel ) that does not yet support Google Instant you previously disabled autocomplete you previously opted out of Google Instant you use a Google domain or interface language that does not yet support Google Instant </text>
<text id="TelsGoog_Answer_2feb_EN.txt">
We want our users to feel safe when they search the web , and we 're continuously working to identify dangerous sites and increase protection for our users . This warning message appears with search results we 've identified as sites that may install malicious software on your computer : If you click the title of the result , you 'll be shown the following warning rather than being taken immediately to the webpage in question : You can choose to continue to the site at your own risk by copying and pasting the web address directly in the address bar , then pressing Enter on your keyboard . However , be aware that malicious software is often installed without your knowledge or permission when you visit these sites , and can include programs that delete data on your computer , steal personal information such as passwords and credit card numbers , or alter your search results . For more information on these types of sites , please visit StopBadware . org If one of these sites downloads malicious software onto your computer , please read our additional information about reporting these sites and removing the software from your system . If you 're the administrator of a site we 've identified with this warning message , please visit the instructions found in our Webmaster Help Center to resolve the problem . Note that in some cases , third parties can add malicious code to legitimate sites , which would cause us to show the warning message . </text>
<text id="TelsGoog_Answer_3024_EN.txt">
It takes less than a minute to create your own iGoogle homepage , and after that , there are lots of ways to personalize it and really make it your own . 1. Create your page On the Google homepage , click the gear icon and select iGoogle . If this is the first time you 're using iGoogle , you 'll see the setup wizard called " Create your own homepage in under 30 seconds . " Choose some interests , a theme , and a location to get started ( you can add more later ) . Click See your page to create your iGoogle homepage . Use the gear icon to switch between your new iGoogle page and the standard Google homepage called " Classic Home . " You can choose whether or not to sign in to a Google Account when using iGoogle . Learn about the benefits of signing in , including increased privacy and more flexibility in where you can access your iGoogle page . 2. Add more gadgets to your page Gadgets let you use tools , read info , and play games from all across the Web . Here 's how to add a gadget to your page : Click Add gadgets on the right side of the iGoogle page . Gadgets are organized into categories on the left , or you can search on the right . Once you find a gadget you 'd like to add , click Add it now . Click Back to iGoogle home at the upper left side of the page to get back to your page . You can arrange gadgets by dragging and dropping them on the page ( or between tabs ) . Edit your gadgets ' settings by clicking the down-arrow in the title bar and choosing Edit settings . 3. Organize your gadgets into tabs All iGoogle pages start out with a Home tab on the left side of the page . If you have n't added any new tabs , all your gadgets will appear on your Home tab . To add a new tab , follow these steps . Click the downward arrow to the right of your Home tab Select Add a tab . Name the new tab . As you type , you 'll see suggestions for naming your tab , based on names that other users have chosen . Keep the 'I 'm feeling lucky ' box selected , and we 'll automatically add gadgets based on the name of your tab . Click OK . Finally , if you like , you can add a theme to each of your tabs . Watch a video about personalizing your iGoogle page . </text>
<text id="TelsGoog_Answer_4b5b_EN.txt">
Tabs let you organize gadgets into groups Tabs appear in the left navigation and let you organize your homepage into different groups of gadgets . For example , you could have a tab for work and a tab for play ( and , yes , the YouTube gadget belongs in 'Play ' ) . Add a tab ... All iGoogle pages start out with a single tab called 'Home , ' but it 's easy to add more . Click the down arrow next to 'Home . ' Click Add a tab . Name the new tab . What 's in a name ? Leave the 'I 'm feeling lucky ' box checked , and we 'll start your new tab off with a few gadgets based on the name you choose . ( Do n't want any help ? Uncheck the box . ) Click OK . ... and put gadgets on it Check the 'I 'm feeling lucky ' box when you name your new tab if you want us to pre-select a few gadgets for you . Add gadgets from the gadget directory ( learn how ) . Drag gadgets from the tab they 're on to the tab you want them to be on . Customize your tabs Tabs can also appear in any order you like , and each tab can have its own name , background , and layout style . For instance , you could make a tab named 'Jenny ' with three columns of gadgets on a classic background , or a tab called 'Games ' with two medium-sized columns and the 'Theme of the day , ' or ... well , we could go on and on ... and we do , on the iGoogle Preferences page . Click the link or follow these steps to get there : Click the name of the tab you want to edit . Click the down arrow next to the name . Click Edit this tab . Be sure to Save any changes you make on the Preferences page . Share a tab with a friend Think you 've made the perfect tab ? You can send it to others . Click the tab you want to share . Click the down arrow next to the name . Click Share this tab . Check the boxes for the gadgets you 'd like to send , enter your friend 's email address , and write a message . If you check the 'Send my settings for these gadgets ' box , the gadgets will appear to your friend much as they appear to you . But sharing works a little differently for every gadget , so be careful when sharing tabs or gadgets that include personal info . Click Send . Delete a tab Click the tab you want to delete . Click the down arrow next to its name . Click Delete this tab . Confirm by clicking Delete this tab again . ( Remember : deleting a tab deletes all the gadgets on it . Keep a gadget by dragging it to another tab . ) </text>
<text id="TelsGoog_Answer_596f_EN.txt">
When you use Google to search , we try to provide the best possible results . To do that , we sometimes customize your search results based on one or more factors . Click View customizations , which may appear at the bottom of the search results page or to the right of the search box , to see what type of information was used to customize your results . ( To protect your privacy , this information becomes unavailable after a brief period of time . Learn more about Google 's privacy policy ) Types of customizations Search history Sometimes , we customize your search results based on your past search activity on Google , such as searches you 've done or results you 've clicked . If you 're signed in to your Google Account and have Web History enabled , these customizations are based on your Web History . If you 're signed in and do n't have Web History enabled , no search history customizations will be made . ( Using Web History , you can control exactly what searches are stored and used to personalize your results . Learn about using Web History ) If you are n't signed in to a Google Account , your search results may be customized based on past search information linked to your browser using a cookie . Because many people might be searching on one computer , Google does n't show a list of previous search activity on this computer . Learn how to turn off these customizations Location We try to use information about your location to customize your search results if there 's a reason to believe it 'll be helpful ( for example , if you search for a restaurant chain , you may want to find the one near you ) . That customization may rely on a default location that you 've previously specified ( for example , in Google Maps ) or an approximate location based on your IP address . Learn more about location </text>
<text id="TelsGoog_Answer_5b4c_EN.txt">
The Basic search help article covers all the most common issues , but sometimes you need a little bit more power . This document will highlight the more advanced features of Google Web Search . Have in mind though that even very advanced searchers , such as the members of the search group at Google , use these features less than 5 % of the time . Basic simple search is often enough . As always , we use square brackets [ ] to denote queries , so [ to be or not to be ] is an example of a query ; [ to be ] or [ not to be ] are two examples of queries . Phrase search ( " " ) By putting double quotes around a set of words , you are telling Google to consider the exact words in that exact order without any change . Google already uses the order and the fact that the words are together as a very strong signal and will stray from it only for a good reason , so quotes are usually unnecessary . By insisting on phrase search you might be missing good results accidentally . For example , a search for [ " Alexander Bell " ] ( with quotes ) will miss the pages that refer to Alexander G. Bell . Search within a specific website ( site : ) Google allows you to specify that your search results must come from a given website . For example , the query [ iraq site : nytimes . com ] will return pages about Iraq but only from nytimes . com . The simpler queries [ iraq nytimes . com ] or [ iraq New York Times ] will usually be just as good , though they might return results from other sites that mention the New York Times . You can also specify a whole class of sites , for example [ iraq site : . gov ] will return results only from a . gov domain and [ iraq site : . iq ] will return results only from Iraqi sites . Terms you want to exclude ( - ) Attaching a minus sign immediately before a word indicates that you do not want pages that contain this word to appear in your results . The minus sign should appear immediately before the word and should be preceded with a space . For example , in the query [ anti-virus software ] , the minus sign is used as a hyphen and will not be interpreted as an exclusion symbol ; whereas the query [ anti-virus -software ] will search for the words 'anti-virus ' but exclude references to software . You can exclude as many words as you want by using the - sign in front of all of them , for example [ jaguar -cars -football -os ] . The - sign can be used to exclude more than just words . For example , place a hyphen before the 'site : ' operator ( without a space ) to exclude a specific site from your search results . Fill in the blanks ( * ) The * , or wildcard , is a little-known feature that can be very powerful . If you include * within a query , it tells Google to try to treat the star as a placeholder for any unknown term(s ) and then find the best matches . For example , the search [ Google * ] will give you results about many of Google 's products ( go to next page and next page -- we have many products ) . The query [ Obama voted * on the * bill ] will give you stories about different votes on different bills . Note that the * operator works only on whole words , not parts of words . Search exactly as is ( + ) Google employs synonyms automatically , so that it finds pages that mention , for example , childcare for the query [ child care ] ( with a space ) , or California history for the query [ ca history ] . But sometimes Google helps out a little too much and gives you a synonym when you do n't really want it . By attaching a + immediately before a word ( remember , do n't add a space after the + ) , you are telling Google to match that word precisely as you typed it . Putting double quotes around a single word will do the same thing . The OR operator Google 's default behavior is to consider all the words in a search . If you want to specifically allow either one of several words , you can use the OR operator ( note that you have to type 'OR ' in ALL CAPS ) . For example , [ San Francisco Giants 2004 OR 2005 ] will give you results about either one of these years , whereas [ San Francisco Giants 2004 2005 ] ( without the OR ) will show pages that include both years on the same page . The symbol | can be substituted for OR . ( The AND operator , by the way , is the default , so it is not needed . ) Exceptions Search is rarely absolute . Search engines use a variety of techniques to imitate how people think and to approximate their behavior . As a result , most rules have exceptions . For example , the query [ for better or for worse ] will not be interpreted by Google as an OR query , but as a phrase that matches a ( very popular ) comic strip . Google will show calculator results for the query [ 34 * 87 ] rather than use the 'Fill in the blanks ' operator . Both cases follow the obvious intent of the query . Here is a list of exceptions to some of the rules and guidelines that were mentioned in this and the Basic Search Help article : Exceptions to 'Every word matters ' Words that are commonly used , like 'the , ' 'a , ' and 'for , ' are usually ignored ( these are called stop words ) . But there are even exceptions to this exception . The search [ the who ] likely refers to the band ; the query [ who ] probably refers to the World Health Organization -- Google will not ignore the word 'the ' in the first query . Synonyms might replace some words in your original query . ( Adding + before a word disables synonyms . ) A particular word might not appear on a page in your results if there is sufficient other evidence that the page is relevant . The evidence might come from language analysis that Google has done or many other sources . For example , the query [ overhead view of the bellagio pool ] will give you nice overhead pictures from pages that do not include the word 'overhead . ' Punctuation that is not ignored Punctuation in popular terms that have particular meanings , like [ C++ ] or [ C# ] ( both are names of programming languages ) , are not ignored . The dollar sign ( $ ) is used to indicate prices . [ nikon 400 ] and [ nikon $400 ] will give different results . The hyphen - is sometimes used as a signal that the two words around it are very strongly connected . ( Unless there is no space after the - and a space before it , in which case it is a negative sign . ) The underscore symbol _ is not ignored when it connects two words , e. g. [ quick_sort ] . </text>
<text id="TelsGoog_Answer_70d7_EN.txt">
Welcome to the Help Center ! Take a minute to learn about the resources at your disposal , so you can get to the information you need as quickly as possible . To add some fun , Matt from the Google team also created a musical tour of the Help Center that you can watch : Search for your answer . Type your question in the search box at the top of the Help Center , then click the Search Help button to see relevant articles and forum discussions . Browse recommended and popular articles . . You can find these articles on the right side of the page . These recommendations are based on your Help Center searches and articles that many other people have viewed . Check out key help resources . We 've also called out some special help resources -- such as comprehensive guides , video tutorials , and lists of known product issues -- on the right side of the page . Use links on the left to navigate . Links to various topics of the Help Center are listed on the left , to help you quickly get to different sections in the site . You can also click the top Help articles link to go to the Help Center homepage . Ask questions in the Help Forum . Some Help Centers have a Help Forum section where you can share tips and ask other users questions about the product . Need more help ? Find out how to contact us . Click the Contacting us link at the bottom of the page to learn about options available for contacting the Google team . </text>
<text id="TelsGoog_Answer_770f_EN.txt">
Google will always provide the results that we believe are most relevant to your search . Location is one of a number of factors that we use to provide these relevant results . For example , if you search for a restaurant chain , you may want to find one near you . When searching for movie showtimes , you may want listings in your area . Such search results are made possible by location-based customization . The location used to customize your results is clearly indicated on the left side of your results page . Our location detection technology will automatically set a location for you , or you can easily specify an alternate location . Automatically detected location To provide you with the most relevant results , Google attempts to automatically detect your location and customize results based on that detected location . A location that 's labeled " Auto-detected " is chosen based on the following factors : Your IP address . Google Toolbar 's My Location feature . If you have Google Toolbar installed and have the My Location feature enabled , your approximate location ( if detected ) will be used to customize your search results . If you do n't want Toolbar to attempt to determine your approximate location , you can turn off My Location See the wrong location ? We 're continuing to improve our location detection technology , and the automatically detected location may be less accurate in certain areas . If you notice an incorrect location , please set your location manually by following the instructions below . If you 're being redirected to a Google domain that does n't match the country you 're in ( for example , Google . com . au instead of Google . com ) , please let us know ; we may be incorrectly detecting your IP address . Do n't see a location ? Sometimes we wo n't show any location if we ca n't accurately determine one for you . We 're working hard to improve our location detection technology . Also , the location setting will not always be available depending on your language and region . We are working to make the location setting more widely available . In the meantime , if you do n't have any location shown , it 's easy to set a location yourself by following the instructions below . Specify your preferred location If you 'd like to change your location , click Change Location and enter a street address , zip code , city and state , or country in the box that appears . Click Set to save your location setting . You can only specify a location within the country of your current Google domain . For instance , it 's not possible to set a U. S. address on www . google . es , the Google domain for Spain . If you 'd like to see results for a region outside of your Google domain , please specify the location in the search query ( like [ bicycle repair paris ] ) or visit a different Google local domain instead . If you don’t already have a location set , enter a location in the box next to " Search near , " then click Set . Your manually set location will be saved in a browser cookie on your specific computer and internet browser only . When you use the same computer and browser , this manually set location will be used to customize your search results instead of the automatically detected location . If your location preference doesn’t remain saved on the browser or computer where you set it , please check your browser settings . To clear your manually set location , click on the auto-detected location . This will clear the location setting saved in your browser cookie , and your results will be customized based on the automatically detected location . Can I turn off location-based customization ? The customization of search results based on location is an important component of a consistent , high-quality search experience . Therefore , we have n't provided a way to turn off location customization , although we 've made it easy for you to set your own location or to customize using a general location as broad as the country that matches your local domain . If you find that your results for a particular search are more local than what you 're looking for , you can set your location to a broader geographical area ( such as a country instead of a city , zip code , or street address ) . Please note that this will greatly reduce the amount of locally relevant results that you’ll see . What information about location does Google store ? Google has many services that collect or use location data , including Google Maps , Latitude , Toolbar , and others . If you have questions about our privacy policy , please refer to our privacy center . </text>
<text id="TelsGoog_Answer_91e4_EN.txt">
Some people have reported difficulty saving settings on the Google Preferences page , such as the following : The level of SafeSearch filtering The language used to display Google and your search results The way your search results are displayed Issues with your search settings are likely caused by problems with your browser cookies . Cookies are small files on your computer that contain information about your settings for specific websites . Try the following actions to clean up your cookies . After each step , see if the problem 's been resolved . Confirm that cookies are enabled on your browser . If your browser does n't allow cookies to be stored , your preferences ca n't be retrieved properly when you visit Google . See browser-specific instructions for enabling cookies . After confirming that cookies are enabled , verify your search settings on the Google Preferences page . Check settings on your computer . Many types of software can hamper your browser 's ability to save your cookies and remember your settings . If you use any of the following kinds of programs , you may want to inspect how they handle cookies : Firewall , proxy , or anti-virus programs are often configured to delete cookies on a regular basis . Internet filtering software , such as programs designed to restrict underage access to adult sites , may be responsible for overriding your SafeSearch preferences . Browser modes designed for private browsing ( like incognito mode on Google Chrome ) might not allow your browser to store your settings in cookies . Try disabling this browsing mode . Clear your browser cache and cookies . This step removes your settings for all websites , but also ensures that corrupted browser files are deleted . See browser-specific instructions for deleting these files . After removing these files , go back to the Google Preferences page to reset your preferences . If you continue to experience issues , visit the Web Search Help Forum . </text>
<text id="TelsGoog_Answer_94d0_EN.txt">
In a nutshell Most gadgets are created by third parties . Contact info is usually located on the gadget 's homepage . The simplest step may be to remove the gadget from your homepage . Learn how . Non-Google gadgets Most of the gadgets for your iGoogle page are created and maintained by third-party developers . If you have questions or concerns about the functionality or content of a particular gadget , your best bet is to try to contact the gadget creator directly . Click the down arrow in the top corner of the gadget . Click About this gadget . Do n't have the gadget on your page anymore ? Search for it in the gadget directory and click its name ( do n't click 'Add it now ' ) . The author of the gadget is listed to the right of the gadget . Click the author name to see more details . On the following page , click the Contact link beneath the author 's name . Google gadgets For problems with gadgets related to a specific Google product , such as the Gmail gadget or Google Calendar gadget , the best first step is to try the Google service on its main site ( for instance , if your Gmail gadget is n't working right , try visiting mail . google . com to make sure Gmail is still working ) . If it 's just the gadget , let us know by posting in the Web Search Help Forum . Copyright concerns If you are a copyright holder and want to request removal of material that you believe infringes your copyright , see our DMCA notification instructions . Policy concerns If you want to report a gadget that 's violating our Program Policy , contact us . Note that we 'll only take action on your report if the gadget violates our policies , so review the the Program Policy first . Report gadgets that break iGoogle or violate other program policies </text>
<text id="TelsGoog_Answer_a67e_EN.txt">
Common symptoms of malware If you 're seeing suspicious pop-ups , unwanted toolbars , redirects , strange Google search results , or other unexpected behavior on your computer , you may have been tricked into installing malicious software ( also known as 'malware ' ) on your computer . In this article , we 've provided some recommendations on how you can prevent and remove malware . ( Note that Google is n't affiliated with any of the programs we suggest in this article , and we 're unable to vouch for their effectiveness . Our users have told us they often work . ) If clicking a Google search result has redirected you to a suspicious site , please report the suspicious site before trying the anti-spyware software below . This will help us investigate malware activity and hopefully help prevent it in the future . First , use anti-spyware software to detect and remove malware from your computer The following programs can remove the most common malware . You may need to try more than one to catch every instance of malware on your computer . Make sure to use the latest versions of these programs . Malwarebytes ' Anti-Malware Spyware Doctor with Anti-Virus , which is available as a part of Google Pack MacScan ( Mac ) Check to see if the issue has been resolved . Still having trouble ? Try these more advanced techniques READ THIS FIRST : These techniques involve some advanced steps , like reviewing and analyzing logs produced by your computer . If you 're not sure how to take these steps properly , you may want to consult a technician . Deleting legitimate lines in your HijackThis log can have serious repercussions for your computer . Use a bootable anti-virus rescue CD to scan your computer If the malware is preventing your computer from starting properly , you may want to use a bootable anti-virus CD to scan and clean your files . This method of scanning your computer helps detect malware that may be deeply embedded within your system files . Such malware may go undetected when using normal anti-virus detection methods . Use HijackThis to detect changed settings ( Windows only ) Many people have used HijackThis , an advanced anti-spyware application , to find settings on their computers that may have been changed by malware . HijackThis will create a log of files and settings that you should then analyze , to determine if they have been affected by malware . Here are some support forums where you can post your HijackThis log and receive technical assistance . Google is n't affiliated with these forums , and we ca n't make any promises about the quality of the advice they might provide . After using HijackThis , run anti-spyware programs again , such as the ones listed above , to see if additional malware shows up . Turn off System Restore and scan again ( Windows only ) System Restore is a Windows backup feature ; it periodically backs up files on your computer in case you need to revert to an earlier version of your operating system at a later point . If the malware was inadvertently included in a system restore point , you 'll need to disable System Restore , before anti-spyware programs can remove the malware . Here 's how : Clear your browser 's cache . See instructions Disable the System Restore functionality on your computer ( administrative rights required ) . Go to the Start menu . Select Control Panel . Double-click System . Click the System Restore tab . Select the 'Turn off System Restore ' checkbox . Restart your computer . Run anti-spyware programs again to see if additional malware shows up . Once you 're done checking your system files for malware , remember to re-enable System Restore . If you continue to experience symptoms of malware at this point , consult a technician for additional help . Practice safe browsing to avoid malware To prevent malware from infiltrating your computer in the future , follow these general best practices : Upgrade your computer to use the latest operating systems and software . Turn on automatic updates for your operating system . Turn on automatic updates for your programs . Regularly check for updates for programs that do n't have automatic update functionality , such as Adobe Flash . Do n't click on links you do n't know the destination of . Do n't download email attachments from anyone you do n't know . Sign in to user accounts with limited permissions on your computer . This lessens the ability of malware to make system-wide changes to your computer . Install a firewall and antivirus software , ensuring automatic updates are enabled . If you use an email program on your computer to send and receive messages , install spam filtering software . Many email programs also come with built-in spam filters . Report malware If you feel you were deceived when you installed a program that creates popups or modifies your browser , you may want to file a complaint at StopBadware . org . Additionally , you may want to contact the Federal Trade Commission ( FTC ) , which handles complaints about deceptive or unfair business practices in the U. S. To file a complaint , do one of the following : Visit https://www.ftccomplaintassistant.gov/ Call 1-877-FTC-HELP Write to : Federal Trade Commission , CRC-240 , Washington , D. C. 20580 If your complaint is against a company that 's outside the United States , visit http://www.econsumer.gov </text>
<text id="UnitGass_Resolution_62250_EN.txt">
Resolution adopted by the General Assembly [ on the report of the Fifth Committee ( A/62/600/Add.1 ) ] Support account for peacekeeping operations The General Assembly , Recalling its resolutions 45/258 of 3 May 1991 , 47/218 A of 23 December 1992 , 48/226 A of 23 December 1993 , 55/238 of 23 December 2000 , 56/241 of 24 December 2001 , 56/293 of 27 June 2002 , 57/318 of 18 June 2003 , 58/298 of 18 June 2004 , 59/301 of 22 June 2005 , 60/268 of 30 June 2006 , 61/245 and 61/246 of 22 December 2006 , 61/256 of 15 March 2007 and 61/279 of 29 June 2007 , its decisions 48/489 of 8 July 1994 , 49/469 of 23 December 1994 and 50/473 of 23 December 1995 and its other relevant resolutions , Having considered the reports of the Secretary-General on the financing of the support account for peacekeeping operations and on the comprehensive analysis of the Office of Military Affairs of the Department of Peacekeeping Operations , the preliminary report of the Secretary-General on the status of implementation of General Assembly resolution 61/279 on strengthening the capacity of the United Nations to manage and sustain peacekeeping operations , the report of the Independent Audit Advisory Committee on the proposed budget for the Office of Internal Oversight Services under the support account for peacekeeping operations for the period from 1 July 2008 to 30 June 2009 and the related report of the Advisory Committee on Administrative and Budgetary Questions , Recognizing the importance of the ability of the United Nations to respond and deploy rapidly to a peacekeeping operation upon adoption of a relevant resolution of the Security Council , within thirty days for traditional peacekeeping operations and ninety days for complex peacekeeping operations , Recognizing also the need for adequate support during all phases of peacekeeping operations , including the liquidation and termination phases , Mindful that the level of the support account should broadly correspond to the mandate , number , size and complexity of peacekeeping missions , Takes note of the reports of the Secretary-General on the financing of the support account for peacekeeping operations1 and on the comprehensive analysis of the Office of Military Affairs of the Department of Peacekeeping Operations,2 the preliminary report of the Secretary-General on the status of implementation of General Assembly resolution 61/279 on strengthening the capacity of the United Nations to manage and sustain peacekeeping operations3 and the report of the Independent Audit Advisory Committee on the proposed budget for the Office of Internal Oversight Services under the support account for peacekeeping operations for the period from 1 July 2008 to 30 June 2009 ; 4 Reaffirms its role with regard to the structure of the Secretariat , and stresses that proposals that amend the overall departmental structure , as well as the format of the budgets of the Organization and the biennial programme plan , are subject to review and approval by the General Assembly ; Also reaffirms its role in carrying out a thorough analysis and approval of human and financial resources and policies with a view to ensuring the full , effective and efficient implementation of all mandated programmes and activities and the implementation of policies in this regard ; Further reaffirms that the Fifth Committee is the appropriate Main Committee of the General Assembly entrusted with responsibility for administrative and budgetary matters ; Reaffirms rule 153 of its rules of procedure ; Emphasizes that ongoing management reforms must be fully taken into account when presenting additional proposals for reform ; Reaffirms that the support account funds shall be used for the sole purpose of financing human resources and non-human resource requirements for backstopping and supporting peacekeeping operations at Headquarters , and that any changes in this limitation require the prior approval of the General Assembly ; Also reaffirms the need for adequate funding for the backstopping of peacekeeping operations , as well as the need for justification for that funding in support account budget submissions ; Recalls the role of the Secretary-General as the Chief Administrative Officer of the Organization , in accordance with the provisions of Article 97 of the Charter of the United Nations ; Reiterates that the delegation of authority on the part of the Secretary-General should be in order to facilitate the better management of the Organization , but stresses that the overall responsibility for management of the Organization rests with the Secretary-General as the Chief Administrative Officer ; Affirms the need for the Secretary-General to ensure that the delegation of authority to the Department of Peacekeeping Operations , the Department of Field Support and field missions is in strict compliance with relevant resolutions and decisions , as well as relevant rules and procedures of the General Assembly on this matter ; Stresses that heads of departments report to and are accountable to the Secretary-General ; Notes the unique nature of the reporting line from the head of the Department of Field Support to the Under-Secretary-General for Peacekeeping Operations , and decides that having one head of department ( Department of Field Support ) report to and take direction from another head of department ( Department of Peacekeeping Operations ) shall not set a precedent in the Secretariat ; Requests the Secretary-General to address systemic issues that hamper good management of the Organization , including by improving work processes and procedures , and in that context stresses that structural change is no substitute for managerial improvement ; Reiterates the importance of strengthened accountability in the Organization and of ensuring greater accountability of the Secretary-General to Member States , inter alia , for the effective and efficient implementation of legislative mandates and the use of human and financial resources ; Recalls its request to the Secretary-General to specifically define accountability , as well as clear accountability mechanisms , including to the General Assembly , and to propose clear parameters for its application and the instruments for its rigorous enforcement , without exception , at all levels , to ensure effective and efficient operations and management of resources in the Organization ; Emphasizes the importance of preserving the unity of command in missions at all levels , as well as a coherence in policy and strategy and clear command structures in the field and up to and including Headquarters ; Requests the Secretary-General to ensure a clear chain of command , accountability , coordination and maintenance of an adequate system of checks and balances ; Emphasizes the importance of interaction and coordination with troop-contributing countries ; Also emphasizes the need to ensure the safety and security of United Nations personnel ; Urges the Secretary-General , within the framework established in its resolutions 52/12 B of 19 December 1997 and 52/220 of 22 December 1997 , to define explicitly the role and duties of the Deputy Secretary-General in the reform set out in its resolution 61/279 , including in relation to the Department of Peacekeeping Operations , the Department of Field Support , the Department of Political Affairs and the Department of Management ; Recalls section I , paragraph 6 , of its resolution 55/238 , paragraph 11 of its resolution 56/241 and paragraph 19 of its resolution 61/279 , and requests the Secretary-General to ensure the proper representation of troop-contributing countries in the Department of Peacekeeping Operations and the Department of Field Support , taking into account their contribution to United Nations peacekeeping ; Reiterates that the Secretary-General , in employing staff , shall ensure the highest standards of efficiency , competence and integrity as the paramount consideration , with due regard for the principle of equitable geographical distribution , in accordance with Article 101 , paragraph 3 , of the Charter and relevant resolutions of the General Assembly ; Reaffirms paragraph 67 of its resolution 61/279 , and requests the Secretary-General to include detailed information on mechanisms in place and measures taken to address the management challenges which the new organizational structure of the Department of Peacekeeping Operations/Department of Field Support poses , and the improvement that the new structure has brought in ensuring efficiency and effectiveness in the support for peacekeeping operations and special political missions , as well as to coordination with the Department of Political Affairs , in the context of the comprehensive report to be submitted at the second part of its resumed sixty-third session ; Notes with concern the late submission of the budgets of some peacekeeping operations , which puts considerable strain on the work of the General Assembly and the Advisory Committee on Administrative and Budgetary Questions , and , while recognizing the challenges faced in preparing the budget proposals and related reports on peacekeeping and special factors affecting some missions , requests the Secretary-General to intensify his efforts to improve the quality and timely issuance of peacekeeping documents ; Reiterates its request in paragraph 13 of its resolution 60/268 and paragraph 32 of its resolution 61/279 , and urges the Secretary-General to submit the comprehensive report on the evolution of the support account at the second part of its resumed sixty-third session within the context of his next budget proposal for the support account ; Notes that the application of an accurate vacancy rate is good budgetary practice and essential for the appropriate assessment on Member States ; Requests the Secretary-General , when submitting his budget proposals , to include details of the full annual cost of posts for the subsequent budget ; Takes note of paragraph 48 of the report of the Advisory Committee on Administrative and Budgetary Questions ; 5 Stresses the importance of complementarity of efforts and avoiding duplication between integrated operational teams and substantive components of the Secretariat , and requests the Secretary-General to report thereon , and to provide a clear definition of the roles and responsibilities of the integrated operational teams , in the comprehensive report to be submitted to the General Assembly at the second part of its resumed sixty-third session ; Affirms the importance of ensuring that the information and communications technology operations and requirements relating to peacekeeping are fully addressed and properly managed , taking into account the principle of unity of command ; Reaffirms the need for effective and efficient administration and financial management of peacekeeping operations , and urges the Secretary-General to continue to identify measures to increase the productivity and efficiency of the support account ; Requests the Secretary-General to ensure the full implementation of the relevant provisions of General Assembly resolutions 59/296 of 22 June 2005 , 60/266 of 30 June 2006 and 61/276 of 29 June 2007 and other relevant resolutions ; Endorses the conclusions and recommendations contained in the report of the Advisory Committee on Administrative and Budgetary Questions,5 subject to the provisions of the present resolution ; Takes note of paragraphs 81 to 87 of the report of the Advisory Committee on Administrative and Budgetary Questions,5 and decides to establish the following posts in the current structure of the Office of Military Affairs : ( a ) One D-1 , two P-5 , ten P-4 and four P-3 posts in the Office of the Military Adviser and one P-4 post for a civilian officer ; ( b ) Three P-4 posts and two P-3 posts in the Force Generation Service ; ( c ) Twelve P-4 posts in the Military Planning Service ; ( d ) Four P-4 posts in the Current Military Operations Service ; ( e ) One P-4 and three P-3 posts to be assigned to the Logistics Support Division of the Department of Field Support ; ( f ) One P-4 and one P-3 to be assigned to the Information and Communications Technology Division of the Department of Field Support ; Requests the Secretary-General to submit for its consideration at its sixty-fourth session a comprehensive report on the implementation of the strengthening of the Office of Military Affairs and its impact on the organization and capacities of the Office ; Requests the Special Committee on Peacekeeping Operations to consider the report referred to in paragraph 36 above at its 2010 substantive session ; Decides to approve the following posts : ( a ) One P-5 post for a Security Focal Point in the Situation Centre , Department of Peacekeeping Operations ; ( b ) Two P-4 posts for a Policy Adviser and a Policy Development Officer in the Police Division , Department of Peacekeeping Operations ; ( c ) One P-3 post for a Programme Officer in the Risk Management Unit of the Office of the Under-Secretary-General for Field Support ; ( d ) One P-3 post for a Finance and Budget Officer in the Budget and Performance Reporting Service of the Field Budget and Finance Division , Department of Field Support ; ( e ) One D-2 post for the Director of the Information and Communications Technology Division , Department of Field Support ; ( f ) One General Service ( Other level ) post for a Human Resources Assistant ( Roster Development ) in the Office of Human Resources Management ; Decides not to approve the following posts : ( a ) One D-1 post for a Principal Officer and one General Service ( Other level ) post for an Administrative Assistant in the Asia and Middle East Division , Department of Peacekeeping Operations ; ( b ) One P-3 post in the Engineering Section of the Logistics Support Division , Department of Field Support ; ( c ) One P-4 post in the Property Management Section of the Logistics Support Division , Department of Field Support ; ( d ) One P-4 post for a Technical Information Operations Support Officer , Department of Field Support ; ( e ) One P-4 post for a Management Analyst Officer in the Management Support Service of the Office of the Under-Secretary-General for Management ; ( f ) One General Service ( Other level ) Finance Assistant ( Health and Life Insurance Section ) in the Accounts Division , Department of Management ; ( g ) One P-4 and one P-3 post for Procurement Officers in the Procurement Division , Department of Management ; ( h ) One P-4 Legal Officer in the Office of the Legal Counsel , Office of Legal Affairs ; Decides to convert one P-5 and one General Service general temporary assistance position in the Conduct and Discipline Unit to posts ; Also decides to approve the following positions as general temporary assistance : ( a ) One P-4 Human Resources Officer ( Outreach and Strategic Staffing Section ) in the Office of Human Resources Management , Department of Management ; ( b ) One P-3 Finance Officer in the Treasury Division , Department of Management ; Takes note of paragraph 130 of the report of the Advisory Committee on Administrative and Budgetary Questions,5 and decides to continue the four P-3 positions in the Peacekeeping Financing Division , Department of Management ; Decides to reduce the non-post resources by 1,899,100 United States dollars , and requests the Secretary-General to consider applying the reduction , inter alia , to the consultancy requirements referred to in paragraphs 297 and 354 of the report of the Secretary-General on the budget for the support account for peacekeeping operations for the period from 1 July 2008 to 30 June 2009 ; Also decides to maintain , for the financial period from 1 July 2008 to 30 June 2009 , the funding mechanism for the support account used in the current period , from 1 July 2007 to 30 June 2008 , as approved in paragraph 3 of its resolution 50/221 B of 7 June 1996 ; Financial performance report for the period from 1 July 2006 to 30 June 2007 Takes note of the report of the Secretary-General on the financial performance of the support account for peacekeeping operations for the period from 1 July 2006 to 30 June 2007 ; Decides not to transfer the amount of 2,014,000 dollars included in the amount of 7,097,000 dollars , previously authorized in its resolution 61/279 , representing the excess of the authorized level of the Peacekeeping Reserve Fund utilized to finance the requirements of the support account in respect of the period from 1 July 2007 to 30 June 2008 ; Decides to apply the total amount of 13,790,000 dollars , comprising the unencumbered balance of 5,491,600 dollars and other income of 1,759,000 dollars in respect of the financial period ended 30 June 2007 , the support account fund balance in respect of financial periods ended 30 June 1997 , 30 June 1998 , 30 June 1999 and 30 June 2000 in the total amount of 2,138,000 dollars , and the excess of the authorized level of the Peacekeeping Reserve Fund in respect of the financial period ended 30 June 2007 in the amount of 4,401,400 dollars , to the support account requirements for the period from 1 July 2006 to 30 June 2007 ; Also decides to apply the excess of the authorized level of the Peacekeeping Reserve Fund in respect of the financial period ended 30 June 2007 in the amount of 2,014,000 dollars to the support account requirements for the period from 1 July 2007 to 30 June 2008 ; Budget estimates for the financial period from 1 July 2008 to 30 June 2009 Approves the support account requirements in the amount of 273,922,800 dollars for the financial period from 1 July 2008 to 30 June 2009 , including 1,122 continuing and 98 new temporary posts and their related post and non-post requirements ; Financing of the budget estimates Decides that the requirements for the support account for peacekeeping operations for the financial period from 1 July 2008 to 30 June 2009 shall be financed as follows : ( a ) The amount of 469,600 dollars , representing the balance remaining of the excess of the authorized level of the Peacekeeping Reserve Fund in respect of the financial period ended 30 June 2007 , to be applied to the resources required for the financial period from 1 July 2008 to 30 June 2009 ; ( b ) The balance of 273,453,200 dollars to be prorated among the budgets of the active peacekeeping operations for the financial period from 1 July 2008 to 30 June 2009 ; ( c ) The estimated staff assessment income of 26,274,600 dollars , comprising the amount of 26,221,200 dollars for the financial period from 1 July 2008 to 30 June 2009 and the increase of 53,400 dollars in respect of the financial period ended 30 June 2007 , to be offset against the balance referred to in subparagraph ( b ) above , to be prorated among the budgets of the individual active peacekeeping operations . 109th plenary meeting 20 June 2008 </text>
<text id="UnitUnat_Charter_EN.txt">
﻿ Charter of the United Nations -------------------------------------------------------------------------------- INTRODUCTORY NOTE The Charter of the United Nations was signed on 26 June 1945 , in San Francisco , at the conclusion of the United Nations Conference on International Organisation , and came into force on 24 October 1945. The Statute of the International Court of Justice is an integral part of the Charter . Amendments to Articles 23 , 27 and 61 of the Charter were adopted by the General Assembly on 17 December 1963 and came into force on 31 August 1965. A further amendment to Article 61 was adopted by the General Assembly on 20 December 1971 , and came into force on 24 September 1973. An amendment to Article 109 , adopted by the General Assembly on 20 December 1965 , came into force on 12 June 1968. The amended Article 27 provides that decisions of the Security Council on procedural matters shall be made by an affirmative vote of nine members ( formerly seven ) and on all other matters by an affirmative vote of nine members ( formerly seven ) , including the concurring votes of the five permanent members of the Security Council . The amendment to Article 61 , which entered into force on 31 August 1965 , enlarged the membership of the Economic and Social Council from eighteen to twenty-seven . The subsequent amendment to that Article , which entered into force on 24 September 1973 , further increased the membership of the Council from twenty-seven to fifty-four . The amendment to Article 109 , which relates to the first paragraph of that Article , provides that a General Conference of Member States for the purpose of reviewing the Charter may be held at a date and place to be fixed by a two-thirds vote of the members of the General Assembly and by a vote of any nine members ( formerly seven ) of the Security Council . Paragraph 3 of Article 109 , which deals with the consideration of a possible review conference during the tenth regular session of the General Assembly , has been retained in its original form in its reference to a “ vote , of any seven members of the Security Council ” , the paragraph having been acted upon in 1955 by the General Assembly , at its tenth regular session , and by the Security Council . PREAMBLE TO THE CHARTER OF THE UNITED NATIONS WE THE PEOPLES OF THE UNITED NATIONS , DETERMINED to save succeeding generations from the scourge of war , which twice in our lifetime has brought untold sorrow to mankind , and to reaffirm faith in fundamental human rights , in the dignity and worth of the human person , in the equal rights of men and women and of nations large and small , and to establish conditions under which justice and respect for the obligations arising from treaties and other sources of international law can be maintained , and to promote social progress and better standards of life in larger freedom , AND FOR THESE ENDS to practice tolerance and live together in peace with one another as good neighbours , and to unite our strength to maintain international peace and security , and to ensure , by the acceptance of principles and the institution of methods , that armed force shall not be used , save in the common interest , and to employ international machinery for the promotion of the economic and social advancement of all peoples , HAVE RESOLED TO COMBINE OUR EFFORTS TO ACCOMPLISH THESE AIMS Accordingly , our respective Governments , through representatives assembled in the city of San Francisco , who have exhibited their full powers found to be in good and due form , have agreed to the present Charter of the United Nations and do hereby establish an international organization to be known as the United Nations . CHAPTER I PURPOSES AND PRINCIPLES Article 1 The Purposes of the United Nations are : 1. To maintain international peace and security , and to that end : to take effective collective measures for the prevention and removal of threats to the peace , and for the suppression of acts of aggression or other breaches of the peace , and to bring about by peaceful means , and in conformity with the principles of justice and international law , adjustment or settlement of international disputes or situations which might lead to a breach of the peace ; 2. To develop friendly relations among nations based on respect for the principle of equal rights and self-determination of peoples , and to take other appropriate measures to strengthen universal peace ; 3. To achieve international co-operation in solving international problems of an economic , social , cultural , or humanitarian character , and in promoting and encouraging respect for human rights and for fundamental freedoms for all without distinction as to race , sex , language , or religion ; and 4. To be a centre for harmonizing the actions of nations in the attainment of these common ends . Article 2 The Organization and its Members , in pursuit of the Purposes stated in Article 1 , shall act in accordance with the following Principles . 1. The Organization is based on the principle of the sovereign equality of all its Members . 2. All Members , in order to ensure to all of them the rights and benefits resulting from membership , shall fulfil in good faith the obligations assumed by them in accordance with the present Charter . 3. All Members shall settle their international disputes by peaceful means in such a manner that international peace and security , and . justice , are not endangered . 4. All Members shall refrain in their international relations from the threat or use of force against the territorial integrity or political independence of any state , or in any other manner inconsistent with the Purposes of the United Nations . 5. All Members shall give the United Nations every assistance in any action it takes in accordance with the present Charter , and shall refrain from giving assistance to any state against which the United Nations is taking preventive or enforcement action . 6. The Organization shall ensure that states which are not Members of the United Nations act in accordance with these Principles so far as may be necessary for the maintenance of international peace and security . 7. Nothing contained in the present Charter shall authorize the United Nations to intervene in matters which are essentially within the domestic jurisdiction of any state or shall require the Members to submit such matters to settlement under the present Charter ; but this principle shall not prejudice the application of enforcement measures under Chapter VII . CHAPTER II MEMBERSHIP Article 3 The original Members of the United Nations shall be the states which , having participated in the United Nations Conference on International Organization at San Francisco , or having previously signed the Declaration by United Nations of 1 January 1942 , sign the present Charter and ratify it in accordance with Article 110. Article 4 1. Membership in the United Nations is open to a other peace-loving states which accept the obligations contained in the present Charter and , in the judgment of the Organization , are able and willing to carry out these obligations . 2. The admission of any such state to membership in the Nations will be effected by a decision of the General Assembly upon the recommendation of the Security Council . Article 5 A Member of the United Nations against which preventive or enforcement action has been taken by the Security Council may be suspended from the exercise of the rights and privileges of membership by the General Assembly upon the recommendation of the Security Council . The exercise of these rights and privileges may be restored by the Security Council . Article 6 A Member of the United Nations which has persistently violated the Principles contained in the present Charter may be ' expelled from the Organization by the General Assembly upon the recommendation of the Security Council . CHAPTER III ORGANS Article 7 1. There are established as the principal organs of the United Nations : a General Assembly , a Security Council , an Economic and Social Council , a Trusteeship Council , an International Court of Justice , and a Secretariat . 2. Such subsidiary organs as may be found necessary may be established in accordance with the present Charter . Article 8 The United Nations shall place no restrictions on the eligibility of men and women to participate in any capacity and under conditions of equality in its principal and subsidiary organs . CHAPTER IV THE GENERAL ASSEMBLY Composition Article 9 1. The General Assembly shall consist of all the Members of the United Nations . 2. Each Member shall have not more than five representatives in the General Assembly . Functions and Powers Article 10 The General Assembly may discuss any questions or any matters within the scope of the present Charter or relating to the powers and functions of any organs provided for in the present Charter , and , except as provided in Article 12 , may make recommendations to the Members of the United Nations or to the Security Council or to both on any such questions or matters . Article 11 1. The General Assembly may consider the general principles of co-operation in the maintenance of international peace and security , including the principles governing disarmament and the regulation of armaments , and may make recommendations with regard to such principles to the Members or to the Security Council or to both . 2. The General Assembly may discuss any questions relating to the maintenance of international peace and security brought before it by any Member of the United Nations , or by the Security Council , or by a state which is not a Member of the United Nations in accordance with Article 35 , paragraph 2 , and , except as provided in Article 12 , may make recommendations with regard to any such questions to the state or states concerned or to the Security Council or to both . Any such question on which action is necessary shall be referred to the Security Council by the General Assembly either before or after discussion . 3. The General Assembly may call the attention of the Security Council to situations which are likely to endanger international peace and security . 4. The powers of the General Assembly set forth in this Article shall not limit the general scope of Article 10. Article 12 1. While the Security Council is exercising in respect of any dispute or situation the functions assigned to it in the present Charter , the General Assembly shall not make any recommendation with regard to that dispute or situation unless the Security Council so requests . 2. The Secretary-General , with the consent of the Security Council , shall notify the General Assembly at each session of any matters relative to the maintenance of international peace and security which are being dealt with by the Security Council and similarly notify the General Assembly , or the Members of the United Nations if the General Assembly is not in session , immediately the Security Council ceases to deal with such matters . Article 13 1. The General Assembly shall initiate studies and make recommendations for the purpose of : a. promoting international co-operation in the political field and encouraging the progressive development of international law and its codification ; b. promoting international co-operation in the economic , social , cultural , educational , and health fields , an assisting in the realization of human rights and fundamental freedoms for all without distinction as to race , sex , language , or religion . 2. The further responsibilities , functions and powers of the General with respect to matters mentioned in paragraph ) above are set forth in Chapters IX and X. Article 14 Subject to the provisions of Article 12 , the General Assembly may recommend measures for the peaceful adjustment of any situation , regardless of origin , which it deems likely to impair the general welfare or friendly relations among nations , including situations resulting from a violation of the provisions of the present Charter setting forth the Purposes and Principles of the United Nations . Article 15 1. The General Assembly shall receive and consider annual and special reports from the Security Council ; these reports shall include an account of the measures that the Security Council has decided upon or taken to maintain international peace and security . 2. The General Assembly shall receive and consider reports from the other organs of the United Nations . Article 16 The General Assembly shall perform such functions with respect to the international trusteeship system as are assigned to it under Chapters XII and XIII , including the approval of the trusteeship agreements for areas not designated as strategic . Article 17 1. The Genera Assembly shall consider and approve the budget of the Organization . 2. The expenses of the Organization shall be borne by the Members as apportioned by the General Assembly . 3. The Assembly shall consider and approve any financial and budgetary arrangements with specialize agencies referred to in Article 57 and shall examine the administrative budgets of such specialized agencies with a view to making recommendations to the agencies concerned . Voting Article 18 1. Each member of the General Assembly shall have one vote . 2. Decisions of the General Assembly on important questions shall be made by a two-thirds majority of the members present and voting . These questions shall include : recommendations with respect to the maintenance of international peace and security , the election of the non-permanent members of the Security Council , the election of the members of the Economic and Social Council , the election of members of the Trusteeship Council in accordance with paragraph 1 of Article 86 , the admission of new Members to the United Nations , the suspension of the rights and privileges of membership , the expulsion of Members , questions relating to the operation of the trusteeship system , and budgetary questions . 3. Decisions on other questions , including the determination of additional categories of questions to be decided by a two-thirds majority , shall be made by a majority of the members present and voting . Article 19 A Member of the United Nations which is in arrears in the payment of its financial contributions to the Organization shall have no vote in the General Assembly if the amount of its arrears equals or exceeds the amount of the contributions due from it for the preceding two full years . The General Assembly may , nevertheless , permit such a Member to vote if it is satisfied that the failure to pay is due to conditions beyond the of the Member . Procedure Article 20 The General Assembly shall meet in regular annual sessions and in such special sessions as occasion may require . Special sessions shall be convoked by the Secretary-General at the request of the Security Council or of a majority of the Members of the United Nations . Article 21 The General Assembly shall adopt its own rules of procedure . It shall elect its President for each session . Article 22 The General Assembly may establish such subsidiary organs as it deems necessary for the performance of its functions . CHAPTER V THE SECURITY COUNCIL Composition Article 23 1. The Security Council shall consist of fifteen Members of the United Nations . The Republic of China , France , the Union of Soviet Socialist , the United Kingdom of Great Britain and Northern Ireland , and the United States of America shall be permanent members of the Security Council . The General Assembly shall elect ten other Members of the United Nations to be non-permanent members of the Security Council , due regard being specially paid , in the first instance to the contribution of Members of the United Nations to the maintenance of international peace and security and to the other purposes of the Organization , and also to equitable geographical distribution . 2. The non-permanent members of the Security Council shall be elected for a term of two years . In the first election of the non-permanent members after the increase of the membership of the Security Council from eleven to fifteen , two of the four additional members shall be chosen for a term of one year . A retiring member shall not be eligible for immediate re-election . 3. Each member of the Security Council shall have one representative . Functions and Powers Article 24 1. In order to ensure prompt and effective action by the United Nations , its Members confer on the Security Council primary responsibility for the maintenance of international peace and security , and agree that in carrying out its duties under this responsibility the Security Council acts on their behalf . 2. In discharging these duties the Security Council shall act in accordance with the Purposes and Principles of the United Nations . The specific powers granted to the Security Council for the discharge of these duties are laid down in Chapters VI , VII , VIII , and XII . 3. The Security Council shall submit annual and , when necessary , special reports to the General Assembly for its consideration . Article 25 The Members of the United Nations agree to accept and carry out the decisions of the Security Council in accordance with the present Charter . Article 26 In order to promote the establishment and maintenance of international peace and security with the least diversion for armaments of the world 's human and economic resources , the Security Council shall be responsible for formulating , with the assistance of the Military Staff Committee referred to in Article 47 , plans to be submitted to the Members of the United-Nations for the establishment of a system for the regulation of armaments . Voting Article 27 1. Each member of the Security Council shall have one vote . 2. Decisions of the Security Council on procedural matters shall be made by an affirmative vote of nine members . 3. Decisions of the Security Council on all other matters shall be made by an affirmative vote of nine members including the concurring votes of the permanent members ; provided that , in decisions under Chapter VI , and under paragraph 3 of Article 52 , a party to a dispute shall abstain from voting . Procedure Article 28 1. The Security Council shall be so organized as to be able to function continuously . Each member of the Security Council shall for this purpose be represented at times at the seat of the Organization . 2. The Security Council shall hold meetings at which each of its members may , if it so desires , be represented by a member of the government or by some other specially designated representative . 3. The Security Council may hold meetings at such places other than the seat of the Organization as in its judgment will best facilitate its work . Article 29 The Security Council may establish such subsidiary organs as it deems necessary for the performance of its functions . Article 30 The Security Council shall adopt its own rules of procedure , including the method of selecting its President . Article 31 Any Member of the United Nations which is not a member of the Security Council may participate , without vote , in the discussion of any question brought before the Security Council whenever the latter considers that the interests of that Member are specially affected . Article 32 Any Member of the United Nations which is not a member of the Security Council or any state which is not a Member of the United Nations , if it is a party to a dispute under consideration by the Security Council , shall be invited to participate , without vote , in the discussion relating to the dispute . The Security Council shall any down such conditions as it deems just for the participation of a state which is not a Member of the United Nations . CHAPTER VI PACIFIC SETTLEMENT OF DISPUTES Article 33 1. The parties to any dispute , the continuance of which is likely to endanger the maintenance of international peace and security , shall , first of a , seek a solution by negotiation , enquiry , mediation , conciliation , arbitration , judicial settlement , resort to regional agencies or arrangements , or other peaceful means of their own choice . 2. The Security Council shall , when it deems necessary , call upon the parties to settle their dispute by such means . Article 34 The Security Council may investigate any dispute , or any situation which might lead to international friction or give rise to a dispute , in order to determine whether the continuance of the dispute or situation is likely to endanger the maintenance of international peace and security . Article 35 l. Any Member of the United Nations may bring any dispute , ~r any situation of the nature referred to in Article 34 , to the attention of the Security Council or of the General Assembly . 2. A state which is not a Member of the United Nations may bring to the attention of the Security Council or of the General Assembly any dispute to which it is a party if it accepts in advance , for the purposes of the dispute , the obligations of pacific settlement provided in the present Charter . 3. The proceedings of the General Assembly in respect of matters brought to its attention under this Article will be subject to the provisions of Articles 11 and 12. Article 36 1. The Security Council may , at any stage of a dispute of the nature referred to in Article 33 or of a situation of like nature , recommend appropriate procedures or methods of adjustment . 2. The Security Council should take into consideration any procedures for the settlement of the dispute which have already been adopted by the parties . 3. In making recommendations under this Article the Security Council should also take into consideration that legal disputes should as a general rule be referred by the parties to the International Court of Justice in accordance with the provisions of the Statute of the Court . Article 37 1. Should the parties to a dispute of the nature referred to in Article 33 fail to settle it by the means indicated in that Article , they shall refer it to the Security Council . 2. If the Security Council deems that the continuance of the dispute is in fact likely to endanger the maintenance of international peace and security , it shall decide whether to take action under Article 36 or to recommend such terms of settlement as it may consider appropriate . Article 38 Without prejudice to the provisions of Articles 33 to 37 , the Security Council may , if all the parties to any dispute so request , make recommendations to the parties with a view to a pacific settlement of the dispute . CHAPTER VII ACTION WITH RESPECT TO THREATS TO THE PEACE , BREACHES OF THE PEACE , AND ACTS OF AGGRESSION Article 39 The Security Council shall determine the existence of any threat to the peace , breach of the peace , or act of aggression and shall make recommendations , or decide what measures shall be taken in accordance with Articles 4 and 42 , to maintain or restore international peace and security . Article 40 In order to prevent an aggravation of the situation , the Security Council may , before making the recommendations or deciding upon the measures provided for in Article 39 , call upon the parties concerned to comply with such provisional measures as it deems necessary or desirable . Such provisional measures shall be without prejudice to the rights , claims , or position of the parties concerned . The Security Council shall duly take account of failure to comply with such provisional measures . Article 41 The Security Council may decide what measures not involving the use of armed force are to be employed to give effect to its decisions , and it may call upon the Members of the United Nations to apply such measures . These may include complete or partial interruption of economic relations and of rail , sea , air , postal , telegraphic , radio , and other means of communication , and the severance of diplomatic relations . Article 42 Should the Security Council consider that measures provided for in Article 41 would be inadequate or have proved to be inadequate , it may take such action by air , sea , or land forces as may be necessary to maintain or restore international peace and security . Such action may include demonstrations , blockade , and other operations by air , sea , or land forces of Members of the United Nations . Article 43 1. All Members of the United Nations , in order to contribute to the maintenance of international peace and security , undertake to make available to the Security Council , on its and in accordance with a special agreement or agreements , armed forces , assistance , and facilities , including rights of passage , necessary for the purpose of maintaining international peace and security . 2. Such agreement or agreements shall govern the numbers and types of forces , their degree of readiness and general location , and the nature of the facilities and assistance to be provided . 3. The agreement or agreements shall be negotiated as soon as possible on the initiative of the Security Council . They shall be concluded between the Security Council and Members or between the Security Council and groups of Members and shall be subject to ratification by the signatory states in accordance with their respective constitutional processes . Article 44 When Security Council has decided to use force it shall , before calling upon a Member not represented on it to provide armed forces in fulfilment of the obligations assumed under Article 43 , invite that Member , if the Member so desires , to participate in the decisions of the Security Council concerning the employment of contingents of that Member 's armed forces . Article 45 In order to enable the Nations to take urgent military measures , Members shall hold immediately available national air-force contingents for combined international enforcement action . The strength and degree of readiness of these contingents and plans for their combined action shall be determined , within the limits laid down in the special agreement or agreements referred to in Article 43 , by the Security Council with the assistance of the Military Committee . Article 46 Plans for the application of armed force shall be made by the Security Council with the assistance of the Military Staff Committee . Article 47 1. There shall be established a Military Staff Committee to advise and assist the Security Council on questions relating to the Security Council 's military requirements for the maintenance of international peace and security , the employment and command of forces placed at its disposal , the regulation of armaments , and possible disarmament . 2. The Military Staff Committee consist of the Chiefs of Staff of the permanent members of the Security Council or their representatives . Any Member of the United Nations not permanently represented on the Committee shall be invited by the Committee to be associated with it when the efficient discharge of the Committee 's responsibilities requires the participation of that Member its work . 3. The Military Staff Committee be responsible under the Security Council for the strategic direction of any armed forces paced at the disposal of the Security Council . Questions relating to the command of such forces shall be worked out subsequently . 4. The Military Staff Committee , with the authorization of the security Council and after consultation with appropriate regional agencies , may establish sub-committees . Article 48 1. The action required to carry out the decisions of the Security Council for the maintenance of international peace and security shall be taken by all the Members of the United Nations or by some of them , as the Security Council may determine . 2. Such decisions shall be carried out by the Members of the United Nations directly and through their action in the appropriate international agencies of which they are members . Article 49 The Members of the United Nations shall join in affording mutual assistance in carrying out the measures decided upon by the Security Council . Article 50 If preventive or enforcement measures against any state are taken by the Security Council , any other state , whether a Member of the United Nations or not , which finds itself confronted with special economic problems arising from the carrying out of those measures shall have the right to consult the Security Council with regard to a solution of those problems . Article 51 Nothing in the present Charter shall impair the inherent right of individual or collective self-defence if an armed attack occurs against a Member of the United Nations , until the Security Council has taken measures necessary to maintain international peace and security . Measures taken by Members in the exercise of this right of self-defence shall be immediately reported to the Security Council and shall not in any way affect the authority and responsibility of the Security Council under the present Charter to take at any time such action as it deems necessary in order to maintain or restore international peace and security . CHAPTER VIII REGIONAL ARRANGEMENTS Article 52 1. Nothing in the present Charter the existence of regional arrangements or agencies for dealing with such matters relating to the maintenance of international peace and security as are appropriate fur regional action , provided that such arrangements or agencies and their activities are consistent with the Purposes and Principles of the United Nations . 2. The Members of the United Nations entering into such arrangements or constituting such agencies shall make every effort to achieve pacific settlement of local disputes through such regional arrangements or by such regional agencies before referring them to the Security Council . 3. The Security Council shall encourage the development of pacific settlement of local disputes through such regional arrangements or by such regional agencies either on the initiative of the states concerned or by reference from the Security Council . 4. This Article in no way the application of Articles 34 and 35. Article 53 1. The Security Council shall , where appropriate , utilize such regional arrangements or agencies for enforcement action under its authority . But no enforcement action shall be taken under regional arrangements or by regional agencies without the authorization of the Security Council , with the exception of measures against any enemy state , as defined in paragraph 2 of this Article , provided for pursuant to Article 107 or in regional arrangements directed against renewal of aggressive policy on the part of any such state , until such time as the Organization may , on request of the Governments concerned , be charged with the responsibility for preventing further aggression by such a state . 2. The term enemy state as used in paragraph 1 of this Article applies to any state which during the Second World War has been an enemy of any signatory of the present Charter . Article 54 The Security Council shall at all times be kept fully informed of activities undertaken or in contemplation under regional arrangements or by regional agencies for the maintenance of international peace and security . CHAPTER IX INTERNATIONAL ECONOMIC AND SOCIAL CO-OPERATION Article 55 With a view to the creation of conditions of stability and well-being which are necessary for peaceful and friendly relations among nations based on respect for the principle of equal rights and self-determination of peoples , the United Nations shall promote : a. higher standards of living , fu employment , and conditions of economic and social progress and development ; b. solutions of international economic , social , health , and related problems ; and international cultural and educational cooperation ; and c. universal respect for , and observance of , human rights and fundamental freedoms for all without distinction as to race , sex , language , or religion . Article 56 All Members pledge themselves to take joint and separate action in co-operation with the Organization for the achievement of the purposes set forth in Article 55. Article 57 1. The various specialized agencies , established by intergovernmental agreement and having wide international responsibilities , as defined in their basic instruments , in economic , social , cultural , educational , health , and related fields , shall be brought into relationship with the United Nations in accordance with the provisions of Article 63. 2. Such agencies thus brought into relationship with the United Nations are hereinafter referred to as specialized agencies . Article 58 The Organization shall make recommendations for the co-ordination of the policies and activities of the specialized agencies . Article 59 The Organization shall , where appropriate , initiate negotiations among the states concerned for the creation of any new specialized agencies required for the accomplishment of the purposes set forth in Article 55. Article 60 Responsibility for the discharge of the functions of the Organization set forth in this Chapter shall be vested in the General Assembly and , under the authority of the General Assembly , in the Economic and Social Council , which shall have for this purpose the powers set forth in Chapter X. CHAPTER X THE ECONOMIC AND SOCIAL COUNCIL Composition Article 61 1. The Economic and Social Council shall consist of fifty-four Members of the United Nations elected by the General Assembly . 2. Subject to the provisions of paragraph 3 , eighteen members of the Economic and Social Council shall be elected each year for a term of three years . A retiring member shall be eligible for immediate re-election . 3. At the first election after the increase in the membership of the Economic and Social Council from twenty-seven to fifty-four members , in addition to the members elected in place of the nine members whose term of office expires at the end of that year , twenty-seven additional members shall be elected . Of these twenty-seven additional members , the term of office of nine members so elected shall expire at the end of one year , and of nine other members at the end of two years , in accordance with arrangements made by the General Assembly . 4. Each member of the Economic and Social Council shall have one representative . Functions and Powers Article 62 1. The Economic and Social Council may make or initiate studies and reports with respect to international economic , social , cultural , educational , health , and related matters and may make recommendations with respect to any such matters to the General Assembly , to the Members of the United Nations , and to the specialized agencies concerned . 2. It may make recommendations for the purpose of promoting respect for , and observance of , human rights and fundamental freedoms for all . 3. It may prepare draft conventions for submission to the General Assembly , with respect to matters falling within its competence . 4. It may call , in accordance with the rules prescribed by the United Nations , international conferences on matters falling within its competence . Article 63 1. The Economic and Social Council may enter into agreements with any of the agencies referred to in Article 57 , defining the terms on which the agency concerned shall be brought into relationship with the United Nations . Such agreements shall be subject to approval by the General Assembly . 2. It may co-ordinate the activities of the specialized agencies through consultation with and recommendations to such agencies and through recommendations to the General Assembly and to the Members of the United Nations . Article 64 1. The Economic and Social Council may take appropriate steps to obtain regular reports from the specialized agencies . may make arrangements with the Members of the United Nations and with the specialized agencies to obtain reports on the steps taken to give effect to its own recommendations and to recommendations on matters falling within its competence made by the General Assembly . 2. It may communicate its observations on these reports to the General Assembly . Article 65 The Economic and Social Council may furnish information to the Security Council and shall assist the Security Council upon its request . Article 66 1. The Economic and Social Council shall perform such functions as fall within its competence in connexion with the carrying out of the recommendations of the General Assembly . 2. It may , with the approval of the General Assembly , perform services at the request of Members of the United Nations and at the request of specialized agencies . 3. It shall perform such other functions as are specified elsewhere in the present Charter or as may be assigned to it by the General Assembly . Voting Article 67 1. Each member of the Economic and Social Council shall have one vote . 2. Decisions of the Economic and Social Council shall be made by a majority of the members present and voting . Procedure Article 68 The Economic and Social Council shall set up commissions in economic and social fields and for the promotion of human rights , and such other commissions as may for the performance of its functions . Article 69 The Economic and Social Council shall invite any Member of the United Nations to participate , without vote , in its deliberations on any matter of particular concern to that Member . Article 70 The Economic and Social Council may make arrangements for representatives of the specialized agencies to participate , without vote , in its deliberations and in those of the commissions established by it , and for its representatives to participate in the deliberations of the specialized agencies . Article 71 The Economic and Social Council may make suitable arrangements for consultation with non-governmental organizations which are concerned with matters within its competence . Such arrangements may be made with international organizations and , where appropriate , with national organizations after consultation with the Member of the United Nations concerned . Article 72 1. The Economic and Social Council shall adopt its own rules of procedure , including the method of selecting its President . 2. The Economic and Social Council shall meet as required in accordance with its rules , which shall include provision for the convening of meetings on the request of a majority of its members . CHAPTER XI DECLARATION REGARDING NON-SELF-GOVERNING TERRITORIES Article 73 Members of the United Nations which have or assume responsibilities for the administration of territories whose peoples have not yet attained a full measure of self-government recognize the principle that the interests of the inhabitants of these territories are paramount , and accept as a sacred trust the obligation to promote to the utmost , within the system of international peace and security established by the present Charter , the well-being of the inhabitants of these territories , and , to this end : a. to ensure , with due respect for the culture of the peoples concerned , their political , economic , social , and educational advancement , their just treatment , and their protection against abuses ; b. to develop self-government , to take due account of the political aspirations of the peoples , and to assist them in the progressive development of their free political institutions , according to the particular circumstances of each territory and its peoples and their varying stages of advancement ; c. to further international peace and security ; d. to promote constructive measures of development , to encourage research , and to co-operate with one another and , when and where appropriate , with specialized international bodies with a view to the practical achievement of the social , economic , and scientific purposes set forth in this Article ; and e. to transmit regularly to the Secretary-General for information purposes , subject to such limitation as security and constitutional considerations may require , statistical and other information of a technical nature relating to economic , social , and educational conditions in the territories for which they are respectively responsible other than those territories to which Chapters XII and XIII apply . Article 74 Members of the United Nations also agree that their policy in respect of the territories to which this Chapter applies , no less than in respect of their metropolitan areas , must be based on the general principle of good-neigh-bourliness , due account being taken of the interests and well-being of the rest of the world , in social , economic , and commercial matters . CHAPTER XII INTERNATIONAL TRUSTEESHIP SYSTEM Article 75 The United Nations shall establish under its authority an international trusteeship system for the administration and supervision of such territories as may be placed thereunder by subsequent individual agreements . These territories are hereinafter referred to as trust territories . Article 76 The basic objectives of the trusteeship system , in accordance with the Purposes of the United Nations laid down in Article 1 of the present Charter , shall be : a. to further international peace and security ; b. to promote the political , economic , social , and educational advancement of the inhabitants of the trust territories , and their progressive development towards self-government or independence as may be appropriate to the particular circumstances of each territory and its peoples and the freely expressed wishes of the peoples concerned , and as may be provided by the terms of each trusteeship agreement ; c. to encourage respect for human rights and for fundamental freedoms for all without distinction as to race , sex , language , or religion , and to encourage recognition of the interdependence of the peoples of the world ; and d. to ensure equal treatment in social , economic , and commercial matters for all Members of the United Nations and their , and also equal treatment for the latter in the administration of justice , without prejudice to the attainment of the foregoing objectives and subject to the provisions of Article 80. Article 77 1. The trusteeship system shall apply to such territories in the following categories as may be placed thereunder by means of trusteeship agreements : a. territories now held under mandate ; b. territories which may be detached from enemy states as a result of the Second World War ; and c. territories voluntarily placed under the system by states responsible for their administration . 2. It will be a matter for subsequent agreement as to which territories in the foregoing categories will be brought under the trusteeship system and upon what terms . Article 78 The trusteeship system shall not apply to territories which have become Members of the United Nations , relationship among which shall be based on respect for the principle of sovereign equality . Article 79 The terms of trusteeship for each territory to be placed under the trusteeship system , including any alteration or amendment , shall be agreed upon by the states directly concerned , including the mandatory power in the case of territories held under mandate by a Member of the United Nations , and shall be approved as provided for in Articles 83 and 85. Article 80 1. Except as may be agreed upon in individual trusteeship agreements , made under Articles 77 , 79 , and 81 , placing each territory under the trusteeship system , and until such agreements have been concluded , nothing in this Chapter shall be construed in or of itself to alter in any manner the rights whatsoever of any states or any peoples or the terms of existing international instruments to which Members of the United Nations may respectively be parties . 2. Paragraph 1 of this Article shall not be interpreted as giving grounds for delay or postponement of the negotiation and conclusion of agreements for placing mandated and other territories under the trusteeship system as provided for in Article 77. Article 81 The trusteeship agreement shall in each case include the terms under which the trust territory will be administered and designate the authority which will exercise the administration of the trust territory . Such authority , hereinafter called the administering authority , may be one or more states or the Organization itself . Article 82 There may be designated , in any trusteeship agreement , a strategic area or areas which may include part or all of the trust territory to which the agreement applies , without prejudice to any special agreement or agreements made under Article 43. Article 83 1. All functions of the United Nations relating to strategic areas , including the approval of the terms of the trusteeship agreements and of their alteration or amendment , shall be exercised by the Security Council . 2. he basic objectives set forth in Article 76 shall be applicable to the people of each strategic area . 43 3. The Security Council shall , subject to the provisions of the trusteeship agreements and without prejudice to security considerations , avail itself of the assistance of the Trusteeship Council to perform those functions of the United Nations under the trusteeship system relating to political , economic , social , and educational matters in the strategic areas . Article 84 It shall be the duty of the administering authority to ensure that the trust territory shall play its part in the maintenance of international peace and security . To this end the administering authority may make use of volunteer forces , facilities , and assistance from the trust territory in carrying out the obligations towards the Security Council undertaken in this regard by the administering authority , as well as for local defence and the maintenance of law and order within the trust territory . Article 85 1. The functions of the United Nations with regard to trusteeship agreements for all areas not designated as strategic , including the approval of the terms of the trusteeship agreements and of their alteration or amendment , shall be exercised by the General Assembly . 2. The Trusteeship Council , operating under the authority of the General Assembly , shall assist the General Assembly in carrying out these functions . CHAPTER XIII THE TRUSTEESHIP COUNCIL Composition Article 86 1. The Trusteeship Council shall consist of the following Members of the United Nations : a. those Members administering trust territories ; b. such of those Members mentioned by name in Article 23 as are not administering trust territories ; and c. as many other Members elected for three-year terms by the General Assembly as may be necessary to ensure that the total number of members of the Trusteeship Council is equally divided between those Members of the United Nations which administer trust territories and those which do not . 2. Each member of the Trusteeship Council shall designate one specially qualified person to represent it therein . Functions and Powers Article 87 The General Assembly and , under its authority , the Trusteeship Council , in carrying out their functions , may : a. consider reports submitted by the administering authority ; b. accept petitions and examine them in consultation with the administering authority ; c. provide for periodic visits to the respective trust territories at times agreed upon with the administering authority ; and d. take these and other actions in conformity with the terms of the trusteeship agreements . Article 88 The Trusteeship Council shall formulate a questionnaire on the political , economic , social , and educational advancement of the inhabitants of each trust territory , and the administering authority for each trust territory within the competence of the General Assembly shall make an annual report to the General Assembly upon the basis of such questionnaire . Voting Article 89 1. Each member of the Trusteeship Council shall have one vote . 2. Decisions of the Trusteeship Council shall be made by a majority of the members present and voting . Procedure Article 90 1. The Trusteeship Council shall adopt its own rules of procedure , including the method of selecting its President . 2. The Trusteeship Council shall meet as required in accordance with its rules , which shall include provision for the convening of meetings on the request of a majority of its members . Article 91 The Trusteeship Council shall , when appropriate , avail itself of the assistance of the Economic and Social Council and of the specialized agencies in regard to matters with which they are respectively concerned . CHAPTER XIV THE INTERNATIONAL COURT OF JUSTICE Article 92 The International Court of Justice shall be the principal judicial organ of the United Nations . It shall function in accordance with the annexed Statute , which is based upon the Statute of the Permanent Court of International Justice and forms an integral part of the present Charter . Article 93 1. All Members of the United Nations are facto parties to the Statute of the International Court of Justice . 2. A state which is not ~ of the United Nations may become a party to the Statute of the International Court of Justice on to be determined in each case by the General Assembly upon the recommendation of the Security Council . Article 94 1. Each Member of the United Nations undertakes to comply with the decision of the International Court of Justice in any case to which it is a party . 2. If any party to a case fails to perform the obligations incumbent upon it under a judgment rendered by the Court , the other party may have recourse to the Security Council , which may , if it deems necessary , make recommendations or decide upon measures to be taken to give to the judgment . Article 95 Nothing in the present Charter shall prevent Members of the United Nations from entrusting the solution of their differences to other tribunals by virtue of agreements already in existence or which may be concluded in the future . Article 96 1. The General Assembly or the Security Council may request the International Court of Justice to give an advisory opinion on any legal question . 2. Other organs of the United Nations and specialized agencies , which may at any time be so authorized by the General Assembly , may also request advisory opinions of the Court on legal questions arising within the scope of their activities . CHAPTER XV THE SECRETARIAT Article 97 The Secretariat shall comprise a Secretary-General and such staff as the Organization may require . The Secretary-General shall be appointed by the General Assembly upon the recommendation of the Security Council . He shall be the chief administrative officer of the Organization . Article 98 The Secretary-General shall act in that capacity in all meetings of the General Assembly , of the Security Council , of the Economic and Social Council , and of the Trusteeship Council , and shall perform such other functions as are entrusted to him by these organs . The Secretary-General shall make an annual report to the General Assembly on the work of the Organization . Article 99 The Secretary-General may bring to the attention of the Security Council any matter which in his opinion may threaten the maintenance of international peace and security . Article 100 1. In the performance of their duties the Secretary-General and the staff shall not seek or receive instructions from any government or from any other authority externa to the Organization . They shall refrain from any action which might on their position as international officials responsible only to the Organization . 2. Each Member of the United Nations undertakes to respect the exclusively international character of the responsibilities of the Secretary-General and the staff and not to seek to influence them in the discharge of their responsibilities . Article 101 1. The staff shall be appointed by the Secretary-General under regulations established by the General Assembly . 2. Appropriate staffs shall be permanently assigned to the Economic and Social Council , the Trusteeship Council , and , as required , to other organs of the United Nations . These staffs shall form a part of the Secretariat . 3. The paramount consideration in the employment of the staff and in the determination of the conditions of service shall be the necessity of securing the highest standards of efficiency , competence , and integrity . Due regard shall be paid to the importance of recruiting the staff on as wide a geographical basis as possible . CHAPTER XVI MISCELLANEOUS PROVISIONS Article 102 1. Every treaty and every international agreement entered into by any Member of the United Nations after the present Charter comes into force shall as soon as possible be registered with the Secretariat and published by it . 2. No party to any such treaty or international agreement which has not been registered in accordance with the provisions of paragraph I of this Article may invoke that treaty or agreement before any organ of the United Nations . Article 103 In the event of a conflict between the obligations of the Members of the United Nations under the present Charter and their obligations under any other international agreement , their obligations under the present Charter shall prevail . Article 104 The Organization shall enjoy in the territory of each of its Members such legal capacity as may be necessary for the exercise of its functions and the fulfilment of its purposes . Article 105 1. The Organization shall enjoy in the territory of each of its Members such privileges and immunities as are necessary for the fulfilment of its purposes . 2. Representatives of the Members of the United Nations and officials of the Organization shall similarly enjoy such privileges and immunities as are necessary for the independent exercise of their functions in connexion with the Organization . 3. The General Assembly may make recommendations with a view to determining the details of the application of paragraphs 1 and 2 of this Article or may propose conventions to the Members of the United Nations for this purpose . CHAPTER XVII TRANSITIONAL SECURITY ARRANGEMENTS Article 106 Pending the coming into force of such special agreements referred to in Article 43 as in the opinion of the Security Council enable it to begin the exercise of its responsibilities under Article 42 , the parties to the Four-Nation Declaration , signed at Moscow , 30 October 1943 , and France , shall , in accordance with the provisions of paragraph 5 of that Declaration , consult with one another and as occasion requires with other Members of the United Nations with a view to such joint action on behalf of the Organization as may be necessary for the purpose of maintaining international peace and security . Article 107 Nothing in the present Charter shall invalidate or preclude action , in relation to any state which during the Second World War has been an enemy of any signatory to the present Charter , taken or authorized as a result of that war by the Governments having responsibility for such action . CHAPTER XVIII AMENDMENTS Article 108 Amendments to the present Charter shall come into force for all Members of the United Nations when they have been adopted by a vote of two thirds of the members of the General Assembly and ratified in accordance with their respective constitutional processes by two thirds of the Members of the United Nations , including all the permanent members of the Security Council . Article 109 1. A General Conference of the Members of the United Nations for the purpose of reviewing the present Charter may be held at a date and place to be fixed by a two-thirds vote of the members of the General Assembly and by a vote of any nine members of the Security Council . Each Member of the United Nations shall have one vote in the conference . 2. Any alteration of the present Charter recommended by a two-thirds vote of the conference shall take effect when ratified in accordance with their respective constitutional processes by two thirds of the Members of the United Nations including the permanent members of the Security Council . 3. If such a conference has not been held before the tenth annual session of the General Assembly following the coming into force of the present Charter , the proposal to call such a conference shall be placed on the agenda of that session of the General Assembly , and the conference shall be held if so decided by a majority vote of the members of the General Assembly and by a vote of any seven members of the Security Council . CHAPTER XIX RATIFICATION AND SIGNATURE Article 110 1. The present Charter shall be ratified by the signatory states in accordance with their respective constitutional processes . 2. The shall be deposited with the Government of the Unite States of America , which shall notify a the signatory states of each deposit as well as the Secretary-General of the Organization when he has been appointed . 3. The present Charter shall come into force upon the deposit of by the Republic of China , France , the Union of Soviet Socialist , the United Kingdom of Great Britain and Northern Ireland , and the United States of America , and by a majority of the other signatory states . A protocol of the deposited shall thereupon be drawn up by the Government of the United States of America which shall communicate copies thereof to all the signatory states . 4. The states signatory to the present Charter which ratify it after it has come into force will become original Members of the United Nations on the date of the deposit of their respective ratifications . Article 111 The present Charter , of which the Chinese , French , Russian , English , and Spanish texts are equally authentic , shall remain deposited in the archives of the Government of the United States of America . Duly certified copies thereof shall be transmitted by that Government to the Governments of the other signatory states . IN FAITH WHEREOF the representatives of the Governments of the United Nations have signed the present Charter . DONE at the city of San Francisco the twenty-sixth day of June , one thousand nine hundred and forty-five . </text>
<text id="UnitUnat_HumanRights_EN.txt">
﻿ The Universal Declaration of Human Rights On December 10 , 1948 the General Assembly of the United Nations adopted and proclaimed the Universal Declaration of Human Rights the full text of which appears in the following pages . Following this historic act the Assembly called upon all Member countries to publicize the text of the Declaration and " to cause it to be disseminated , displayed , read and expounded principally in schools and other educational institutions , without distinction based on the political status of countries or territories . " PREAMBLE Whereas recognition of the inherent dignity and of the equal and inalienable rights of all members of the human family is the foundation of freedom , justice and peace in the world , Whereas disregard and contempt for human rights have resulted in barbarous acts which have outraged the conscience of mankind , and the advent of a world in which human beings shall enjoy freedom of speech and belief and freedom from fear and want has been proclaimed as the highest aspiration of the common people , Whereas it is essential , if man is not to be compelled to have recourse , as a last resort , to rebellion against tyranny and oppression , that human rights should be protected by the rule of law , Whereas it is essential to promote the development of friendly relations between nations , Whereas the peoples of the United Nations have in the Charter reaffirmed their faith in fundamental human rights , in the dignity and worth of the human person and in the equal rights of men and women and have determined to promote social progress and better standards of life in larger freedom , Whereas Member States have pledged themselves to achieve , in co-operation with the United Nations , the promotion of universal respect for and observance of human rights and fundamental freedoms , Whereas a common understanding of these rights and freedoms is of the greatest importance for the full realization of this pledge , Now , Therefore THE GENERAL ASSEMBLY proclaims THIS UNIVERSAL DECLARATION OF HUMAN RIGHTS as a common standard of achievement for all peoples and all nations , to the end that every individual and every organ of society , keeping this Declaration constantly in mind , shall strive by teaching and education to promote respect for these rights and freedoms and by progressive measures , national and international , to secure their universal and effective recognition and observance , both among the peoples of Member States themselves and among the peoples of territories under their jurisdiction . Article 1. All human beings are born free and equal in dignity and rights . They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood . Article 2. Everyone is entitled to all the rights and freedoms set forth in this Declaration , without distinction of any kind , such as race , colour , sex , language , religion , political or other opinion , national or social origin , property , birth or other status . Furthermore , no distinction shall be made on the basis of the political , jurisdictional or international status of the country or territory to which a person belongs , whether it be independent , trust , non-self-governing or under any other limitation of sovereignty . Article 3. Everyone has the right to life , liberty and security of person . Article 4. No one shall be held in slavery or servitude ; slavery and the slave trade shall be prohibited in all their forms . Article 5. No one shall be subjected to torture or to cruel , inhuman or degrading treatment or punishment . Article 6. Everyone has the right to recognition everywhere as a person before the law . Article 7. All are equal before the law and are entitled without any discrimination to equal protection of the law . All are entitled to equal protection against any discrimination in violation of this Declaration and against any incitement to such discrimination . Article 8. Everyone has the right to an effective remedy by the competent national tribunals for acts violating the fundamental rights granted him by the constitution or by law . Article 9. No one shall be subjected to arbitrary arrest , detention or exile . Article 10. Everyone is entitled in full equality to a fair and public hearing by an independent and impartial tribunal , in the determination of his rights and obligations and of any criminal charge against him . Article 11. ( 1 ) Everyone charged with a penal offence has the right to be presumed innocent until proved guilty according to law in a public trial at which he has had all the guarantees necessary for his defence . ( 2 ) No one shall be held guilty of any penal offence on account of any act or omission which did not constitute a penal offence , under national or international law , at the time when it was committed . Nor shall a heavier penalty be imposed than the one that was applicable at the time the penal offence was committed . Article 12. No one shall be subjected to arbitrary interference with his privacy , family , home or correspondence , nor to attacks upon his honour and reputation . Everyone has the right to the protection of the law against such interference or attacks . Article 13. ( 1 ) Everyone has the right to freedom of movement and residence within the borders of each state . ( 2 ) Everyone has the right to leave any country , including his own , and to return to his country . Article 14. ( 1 ) Everyone has the right to seek and to enjoy in other countries asylum from persecution . ( 2 ) This right may not be invoked in the case of prosecutions genuinely arising from non-political crimes or from acts contrary to the purposes and principles of the United Nations . Article 15. ( 1 ) Everyone has the right to a nationality . ( 2 ) No one shall be arbitrarily deprived of his nationality nor denied the right to change his nationality . Article 16. ( 1 ) Men and women of full age , without any limitation due to race , nationality or religion , have the right to marry and to found a family . They are entitled to equal rights as to marriage , during marriage and at its dissolution . ( 2 ) Marriage shall be entered into only with the free and full consent of the intending spouses . ( 3 ) The family is the natural and fundamental group unit of society and is entitled to protection by society and the State . Article 17. ( 1 ) Everyone has the right to own property alone as well as in association with others . ( 2 ) No one shall be arbitrarily deprived of his property . Article 18. Everyone has the right to freedom of thought , conscience and religion ; this right includes freedom to change his religion or belief , and freedom , either alone or in community with others and in public or private , to manifest his religion or belief in teaching , practice , worship and observance . Article 19. Everyone has the right to freedom of opinion and expression ; this right includes freedom to hold opinions without interference and to seek , receive and impart information and ideas through any media and regardless of frontiers . Article 20. ( 1 ) Everyone has the right to freedom of peaceful assembly and association . ( 2 ) No one may be compelled to belong to an association . Article 21. ( 1 ) Everyone has the right to take part in the government of his country , directly or through freely chosen representatives . ( 2 ) Everyone has the right of equal access to public service in his country . ( 3 ) The will of the people shall be the basis of the authority of government ; this will shall be expressed in periodic and genuine elections which shall be by universal and equal suffrage and shall be held by secret vote or by equivalent free voting procedures . Article 22. Everyone , as a member of society , has the right to social security and is entitled to realization , through national effort and international co-operation and in accordance with the organization and resources of each State , of the economic , social and cultural rights indispensable for his dignity and the free development of his personality . Article 23. ( 1 ) Everyone has the right to work , to free choice of employment , to just and favourable conditions of work and to protection against unemployment . ( 2 ) Everyone , without any discrimination , has the right to equal pay for equal work . ( 3 ) Everyone who works has the right to just and favourable remuneration ensuring for himself and his family an existence worthy of human dignity , and supplemented , if necessary , by other means of social protection . ( 4 ) Everyone has the right to form and to join trade unions for the protection of his interests . Article 24. Everyone has the right to rest and leisure , including reasonable limitation of working hours and periodic holidays with pay . Article 25. ( 1 ) Everyone has the right to a standard of living adequate for the health and well-being of himself and of his family , including food , clothing , housing and medical care and necessary social services , and the right to security in the event of unemployment , sickness , disability , widowhood , old age or other lack of livelihood in circumstances beyond his control . ( 2 ) Motherhood and childhood are entitled to special care and assistance . All children , whether born in or out of wedlock , shall enjoy the same social protection . Article 26. ( 1 ) Everyone has the right to education . Education shall be free , at least in the elementary and fundamental stages . Elementary education shall be compulsory . Technical and professional education shall be made generally available and higher education shall be equally accessible to all on the basis of merit . ( 2 ) Education shall be directed to the full development of the human personality and to the strengthening of respect for human rights and fundamental freedoms . It shall promote understanding , tolerance and friendship among all nations , racial or religious groups , and shall further the activities of the United Nations for the maintenance of peace . ( 3 ) Parents have a prior right to choose the kind of education that shall be given to their children . Article 27. ( 1 ) Everyone has the right freely to participate in the cultural life of the community , to enjoy the arts and to share in scientific advancement and its benefits . ( 2 ) Everyone has the right to the protection of the moral and material interests resulting from any scientific , literary or artistic production of which he is the author . Article 28. Everyone is entitled to a social and international order in which the rights and freedoms set forth in this Declaration can be fully realized . Article 29. ( 1 ) Everyone has duties to the community in which alone the free and full development of his personality is possible . ( 2 ) In the exercise of his rights and freedoms , everyone shall be subject only to such limitations as are determined by law solely for the purpose of securing due recognition and respect for the rights and freedoms of others and of meeting the just requirements of morality , public order and the general welfare in a democratic society . ( 3 ) These rights and freedoms may in no case be exercised contrary to the purposes and principles of the United Nations . Article 30. Nothing in this Declaration may be interpreted as implying for any State , group or person any right to engage in any activity or to perform any act aimed at the destruction of any of the rights and freedoms set forth herein . </text>
<text id="UnitUnat_StatuteICOJ_EN.txt">
﻿ STATUTE OF THE INTERNATIONAL COURT OF JUSTICE -------------------------------------------------------------------------------- TABLE OF CONTENTS : Chapter I : Organization of the Court ( Articles 2 - 33 ) Chapter II : Competence of the Court ( Articles 34 - 38 ) Chapter III : Procedure ( Articles 39 - 64 ) Chapter IV : Advisory Opinions ( Articles 65 - 68 ) Chapter V : Amendment ( Articles 69 & 70 ) Article 1 -------------------------------------------------------------------------------- The International Court of Justice established by the Charter of the United Nations as the principal judicial organ of the United Nations shall be constituted and shall function in accordance with the provisions of the present Statute . -------------------------------------------------------------------------------- CHAPTER I - ORGANIZATION OF THE COURT -------------------------------------------------------------------------------- Article 2 The Court shall be composed of a body of independent judges , elected regardless of their nationality from among persons of high moral character , who possess the qualifications required in their respective countries for appointment to the highest judicial offices , or are jurisconsults of recognized competence in international law . Article 3 1. The Court shall consist of fifteen members , no two of whom may be nationals of the same state . 2. A person who for the purposes of membership in the Court could be regarded as a national of more than one state shall be deemed to be a national of the one in which he ordinarily exercises civil and political rights . Article 4 1. The members of the Court shall be elected by the General Assembly and by the Security Council from a list of persons nominated by the national groups in the Permanent Court of Arbitration , in accordance with the following provisions . 2. In the case of Members of the United Nations not represented in the Permanent Court of Arbitration , candidates shall be nominated by national groups appointed for this purpose by their governments under the same conditions as those prescribed for members of the Permanent Court of Arbitration by Article 44 of the Convention of The Hague of 1907 for the pacific settlement of international disputes . 3. The conditions under which a state which is a party to the present Statute but is not a Member of the United Nations may participate in electing the members of the Court shall , in the absence of a special agreement , be laid down by the General Assembly upon recommendation of the Security Council . Article 5 1. At least three months before the date of the election , the Secretary-General of the United Nations shall address a written request to the members of the Permanent Court of Arbitration belonging to the states which are parties to the present Statute , and to the members of the national groups appointed under Article 4 , paragraph 2 , inviting them to undertake , within a given time , by national groups , the nomination of persons in a position to accept the duties of a member of the Court . 2. No group may nominate more than four persons , not more than two of whom shall be of their own nationality . In no case may the number of candidates nominated by a group be more than double the number of seats to be filled . Article 6 Before making these nominations , each national group is recommended to consult its highest court of justice , its legal faculties and schools of law , and its national academies and national sections of international academies devoted to the study of law . Article 7 1. The Secretary-General shall prepare a list in alphabetical order of all the persons thus nominated . Save as provided in Article 12 , paragraph 2 , these shall be the only persons eligible . 2. The Secretary-General shall submit this list to the General Assembly and to the Security Council . Article 8 The General Assembly and the Security Council shall proceed independently of one another to elect the members of the Court . Article 9 At every election , the electors shall bear in mind not only that the persons to be elected should individually possess the qualifications required , but also that in the body as a whole the representation of the main forms of civilization and of the principal legal systems of the world should be assured . Article 10 1. Those candidates who obtain an absolute majority of votes in the General Assembly and in the Security Council shall be considered as elected . 2. Any vote of the Security Council , whether for the election of judges or for the appointment of members of the conference envisaged in Article 12 , shall be taken without any distinction between permanent and non-permanent members of the Security Council . 3. In the event of more than one national of the same state obtaining an absolute majority of the votes both of the General Assembly and of the Security Council , the eldest of these only shall be considered as elected . Article 11 If , after the first meeting held for the purpose of the election , one or more seats remain to be filled , a second and , if necessary , a third meeting shall take place . Article 12 1. If , after the third meeting , one or more seats still remain unfilled , a joint conference consisting of six members , three appointed by the General Assembly and three by the Security Council , may be formed at any time at the request of either the General Assembly or the Security Council , for the purpose of choosing by the vote of an absolute majority one name for each seat still vacant , to submit to the General Assembly and the Security Council for their respective acceptance . 2. If the joint conference is unanimously agreed upon any person who fulfills the required conditions , he may be included in its list , even though he was not included in the list of nominations referred to in Article 7. 3. If the joint conference is satisfied that it will not be successful in procuring an election , those members of the Court who have already been elected shall , within a period to be fixed by the Security Council , proceed to fill the vacant seats by selection from among those candidates who have obtained votes either in the General Assembly or in the Security Council . 4. In the event of an equality of votes among the judges , the eldest judge shall have a casting vote . Article 13 1. The members of the Court shall be elected for nine years and may be re-elected ; provided , however , that of the judges elected at the first election , the terms of five judges shall expire at the end of three years and the terms of five more judges shall expire at the end of six years . 2. The judges whose terms are to expire at the end of the above-mentioned initial periods of three and six years shall be chosen by lot to be drawn by the Secretary-General immediately after the first election has been completed . 3. The members of the Court shall continue to discharge their duties until their places have been filled . Though replaced , they shall finish any cases which they may have begun . 4. In the case of the resignation of a member of the Court , the resignation shall be addressed to the President of the Court for transmission to the Secretary-General . This last notification makes the place vacant . Article 14 Vacancies shall be filled by the same method as that laid down for the first election , subject to the following provision : the Secretary-General shall , within one month of the occurrence of the vacancy , proceed to issue the invitations provided for in Article 5 , and the date of the election shall be fixed by the Security Council . Article 15 A member of the Court elected to replace a member whose term of office has not expired shall hold office for the remainder of his predecessor 's term . Article 16 1. No member of the Court may exercise any political or administrative function , or engage in any other occupation of a professional nature . 2. Any doubt on this point shall be settled by the decision of the Court . Article 17 1. No member of the Court may act as agent , counsel , or advocate in any case . 2. No member may participate in the decision of any case in which he has previously taken part as agent , counsel , or advocate for one of the parties , or as a member of a national or international court , or of a commission of enquiry , or in any other capacity . 3. Any doubt on this point shall be settled by the decision of the Court . Article 18 1. No member of the Court can be dismissed unless , in the unanimous opinion of the other members , he has ceased to fulfill the required conditions . 2. Formal notification thereof shall be made to the Secretary-General by the Registrar . 3. This notification makes the place vacant . Article 19 The members of the Court , when engaged on the business of the Court , shall enjoy diplomatic privileges and immunities . Article 20 Every member of the Court shall , before taking up his duties , make a solemn declaration in open court that he will exercise his powers impartially and conscientiously . Article 21 1. The Court shall elect its President and Vice-President for three years ; they may be re-elected . 2. The Court shall appoint its Registrar and may provide for the appointment of such other officers as may be necessary . Article 22 1. The seat of the Court shall be established at The Hague . This , however , shall not prevent the Court from sitting and exercising its functions elsewhere whenever the Court considers it desirable . 2. The President and the Registrar shall reside at the seat of the Court . Article 23 1. The Court shall remain permanently in session , except during the judicial vacations , the dates and duration of which shall be fixed by the Court . 2. Members of the Court are entitled to periodic leave , the dates and duration of which shall be fixed by the Court , having in mind the distance between The Hague and the home of each judge . 3. Members of the Court shall be bound , unless they are on leave or prevented from attending by illness or other serious reasons duly explained to the President , to hold themselves permanently at the disposal of the Court . Article 24 1. If , for some special reason , a member of the Court considers that he should not take part in the decision of a particular case , he shall so inform the President . 2. If the President considers that for some special reason one of the members of the Court should not sit in a particular case , he shall give him notice accordingly . 3. If in any such case the member Court and the President disagree , the matter shall be settled by the decision of the Court . Article 25 1. The full Court shall sit except when it is expressly provided otherwise in the present Statute . 2. Subject to the condition that the number of judges available to constitute the Court is not thereby reduced below eleven , the Rules of the Court may provide for allowing one or more judges , according to circumstances and in rotation , to be dispensed from sitting . 3. A quorum of nine judges shall suffice to constitute the Court . Article 26 1. The Court may from time to time form one or more chambers , composed of three or more judges as the Court may determine , for dealing with particular categories of cases ; for example , labour cases and cases relating to transit and communications . 2. The Court may at any time form a chamber for dealing with a particular case . The number of judges to constitute such a chamber shall be determined by the Court with the approval of the parties . 3. Cases shall be heard and determined by the chambers provided for in this article if the parties so request . Article 27 A judgment given by any of the chambers provided for in Articles 26 and 29 shall be considered as rendered by the Court . Article 28 The chambers provided for in Articles 26 and 29 may , with the consent of the parties , sit and exercise their functions elsewhere than at The Hague . Article 29 With a view to the speedy dispatch of business , the Court shall form annually a chamber composed of five judges which , at the request of the parties , may hear and determine cases by summary procedure . In addition , two judges shall be selected for the purpose of replacing judges who find it impossible to sit . Article 30 1. The Court shall frame rules for carrying out its functions . In particular , it shall lay down rules of procedure . 2. The Rules of the Court may provide for assessors to sit with the Court or with any of its chambers , without the right to vote . Article 31 1. Judges of the nationality of each of the parties shall retain their right to sit in the case before the Court . 2. If the Court includes upon the Bench a judge of the nationality of one of the parties , any other party may choose a person to sit as judge . Such person shall be chosen preferably from among those persons who have been nominated as candidates as provided in Articles 4 and 5. 3. If the Court includes upon the Bench no judge of the nationality of the parties , each of these parties may proceed to choose a judge as provided in paragraph 2 of this Article . 4. The provisions of this Article shall apply to the case of Articles 26 and 29. In such cases , the President shall request one or , if necessary , two of the members of the Court forming the chamber to give place to the members of the Court of the nationality of the parties concerned , and , failing such , or if they are unable to be present , to the judges specially chosen by the parties . 5. Should there be several parties in the same interest , they shall , for the purpose of the preceding provisions , be reckoned as one party only . Any doubt upon this point shall be settled by the decision of the Court . 6. Judges chosen as laid down in paragraphs 2 , 3 , and 4 of this Article shall fulfill the conditions required by Articles 2 , 17 ( paragraph 2 ) , 20 , and 24 of the present Statute . They shall take part in the decision on terms of complete equality with their colleagues . Article 32 1. Each member of the Court shall receive an annual salary . 2. The President shall receive a special annual allowance . 3. The Vice-President shall receive a special allowance for every day on which he acts as President . 4. The judges chosen under Article 31 , other than members of the Court , shall receive compensation for each day on which they exercise their functions . 5. These salaries , allowances , and compensation shall be fixed by the General Assembly . They may not be decreased during the term of office . 6. The salary of the Registrar shall be fixed by the General Assembly on the proposal of the Court . 7. Regulations made by the General Assembly shall fix the conditions under which retirement pensions may be given to members of the Court and to the Registrar , and the conditions under which members of the Court and the Registrar shall have their travelling expenses refunded . 8. The above salaries , allowances , and compensation shall be free of all taxation . Article 33 The expenses of the Court shall be borne by the United Nations in such a manner as shall be decided by the General Assembly . -------------------------------------------------------------------------------- CHAPTER II - COMPETENCE OF THE COURT -------------------------------------------------------------------------------- Article 34 1. Only states may be parties in cases before the Court . 2. The Court , subject to and in conformity with its Rules , may request of public international organizations information relevant to cases before it , and shall receive such information presented by such organizations on their own initiative . 3. Whenever the construction of the constituent instrument of a public international organization or of an international convention adopted thereunder is in question in a case before the Court , the Registrar shall so notify the public international organization concerned and shall communicate to it copies of all the written proceedings . Article 35 1. The Court shall be open to the states parties to the present Statute . 2. The conditions under which the Court shall be open to other states shall , subject to the special provisions contained in treaties in force , be laid down by the Security Council , but in no case shall such conditions place the parties in a position of inequality before the Court . 3. When a state which is not a Member of the United Nations is a party to a case , the Court shall fix the amount which that party is to contribute towards the expenses of the Court . This provision shall not apply if such state is bearing a share of the expenses of the Court Article 36 1. The jurisdiction of the Court comprises all cases which the parties refer to it and all matters specially provided for in the Charter of the United Nations or in treaties and conventions in force . 2. The states parties to the present Statute may at any time declare that they recognize as compulsory ipso facto and without special agreement , in relation to any other state accepting the same obligation , the jurisdiction of the Court in all legal disputes concerning : a. the interpretation of a treaty ; b. any question of international law ; c. the existence of any fact which , if established , would constitute a breach of an international obligation ; d. the nature or extent of the reparation to be made for the breach of an international obligation . 3. The declarations referred to above may be made unconditionally or on condition of reciprocity on the part of several or certain states , or for a certain time . 4. Such declarations shall be deposited with the Secretary-General of the United Nations , who shall transmit copies thereof to the parties to the Statute and to the Registrar of the Court . 5. Declarations made under Article 36 of the Statute of the Permanent Court of International Justice and which are still in force shall be deemed , as between the parties to the present Statute , to be acceptances of the compulsory jurisdiction of the International Court of Justice for the period which they still have to run and in accordance with their terms . 6. In the event of a dispute as to whether the Court has jurisdiction , the matter shall be settled by the decision of the Court . Article 37 Whenever a treaty or convention in force provides for reference of a matter to a tribunal to have been instituted by the League of Nations , or to the Permanent Court of International Justice , the matter shall , as between the parties to the present Statute , be referred to the International Court of Justice . Article 38 1. The Court , whose function is to decide in accordance with international law such disputes as are submitted to it , shall apply : a. international conventions , whether general or particular , establishing rules expressly recognized by the contesting states ; b. international custom , as evidence of a general practice accepted as law ; c. the general principles of law recognized by civilized nations ; d. subject to the provisions of Article 59 , judicial decisions and the teachings of the most highly qualified publicists of the various nations , as subsidiary means for the determination of rules of law . 2. This provision shall not prejudice the power of the Court to decide a case ex aequo et bono , if the parties agree thereto . -------------------------------------------------------------------------------- CHAPTER III - PROCEDURE -------------------------------------------------------------------------------- Article 39 1. The official languages of the Court shall be French and English . If the parties agree that the case shall be conducted in French , the judgment shall be delivered in French . If the parties agree that the case shall be conducted in English , the judgment shall be delivered in English . 2. In the absence of an agreement as to which language shall be employed , each party may , in the pleadings , use the language which it prefers ; the decision of the Court shall be given in French and English . In this case the Court shall at the same time determine which of the two texts shall be considered as authoritative . 3. The Court shall , at the request of any party , authorize a language other than French or English to be used by that party . Article 40 1. Cases are brought before the Court , as the case may be , either by the notification of the special agreement or by a written application addressed to the Registrar . In either case the subject of the dispute and the parties shall be indicated . 2. The Registrar shall forthwith communicate the application to all concerned . 3. He shall also notify the Members of the United Nations through the Secretary-General , and also any other states entitled to appear before the Court . Article 41 1. The Court shall have the power to indicate , if it considers that circumstances so require , any provisional measures which ought to be taken to preserve the respective rights of either party . 2. Pending the final decision , notice of the measures suggested shall forthwith be given to the parties and to the Security Council . Article 42 1. The parties shall be represented by agents . 2. They may have the assistance of counsel or advocates before the Court . 3. The agents , counsel , and advocates of parties before the Court shall enjoy the privileges and immunities necessary to the independent exercise of their duties . Article 43 1. The procedure shall consist of two parts : written and oral . 2. The written proceedings shall consist of the communication to the Court and to the parties of memorials , counter-memorials and , if necessary , replies ; also all papers and documents in support . 3. These communications shall be made through the Registrar , in the order and within the time fixed by the Court . 4. A certified copy of every document produced by one party shall be communicated to the other party . 5. The oral proceedings shall consist of the hearing by the Court of witnesses , experts , agents , counsel , and advocates . Article 44 1. For the service of all notices upon persons other than the agents , counsel , and advocates , the Court shall apply direct to the government of the state upon whose territory the notice has to be served . 2. The same provision shall apply whenever steps are to be taken to procure evidence on the spot . Article 45 The hearing shall be under the control of the President or , if he is unable to preside , of the Vice-President ; if neither is able to preside , the senior judge present shall preside . Article 46 The hearing in Court shall be public , unless the Court shall decide otherwise , or unless the parties demand that the public be not admitted . Article 47 1. Minutes shall be made at each hearing and signed by the Registrar and the President . 2. These minutes alone shall be authentic . Article 48 The Court shall make orders for the conduct of the case , shall decide the form and time in which each party must conclude its arguments , and make all arrangements connected with the taking of evidence . Article 49 The Court may , even before the hearing begins , call upon the agents to produce any document or to supply any explanations . Formal note shall be taken of any refusal . Article 50 The Court may , at any time , entrust any individual , body , bureau , commission , or other organization that it may select , with the task of carrying out an enquiry or giving an expert opinion . Article 51 During the hearing any relevant questions are to be put to the witnesses and experts under the conditions laid down by the Court in the rules of procedure referred to in Article 30. Article 52 After the Court has received the proofs and evidence within the time specified for the purpose , it may refuse to accept any further oral or written evidence that one party may desire to present unless the other side consents . Article 53 1. Whenever one of the parties does not appear before the Court , or fails to defend its case , the other party may call upon the Court to decide in favour of its claim . 2. The Court must , before doing so , satisfy itself , not only that it has jurisdiction in accordance with Articles 36 and 37 , but also that the claim is well founded in fact and law . Article 54 1. When , subject to the control of the Court , the agents , counsel , and advocates have completed their presentation of the case , the President shall declare the hearing closed . 2. The Court shall withdraw to consider the judgment . 3. The deliberations of the Court shall take place in private and remain secret . Article 55 1. All questions shall be decided by a majority of the judges present . 2. In the event of an equality of votes , the President or the judge who acts in his place shall have a casting vote . Article 56 1. The judgment shall state the reasons on which it is based . 2. It shall contain the names of the judges who have taken part in the decision . Article 57 If the judgment does not represent in whole or in part the unanimous opinion of the judges , any judge shall be entitled to deliver a separate opinion . Article 58 The judgment shall be signed by the President and by the Registrar . It shall be read in open court , due notice having been given to the agents . Article 59 The decision of the Court has no binding force except between the parties and in respect of that particular case . Article 60 The judgment is final and without appeal . In the event of dispute as to the meaning or scope of the judgment , the Court shall construe it upon the request of any party . Article 61 1. An application for revision of a judgment may be made only when it is based upon the discovery of some fact of such a nature as to be a decisive factor , which fact was , when the judgment was given , unknown to the Court and also to the party claiming revision , always provided that such ignorance was not due to negligence . 2. The proceedings for revision shall be opened by a judgment of the Court expressly recording the existence of the new fact , recognizing that it has such a character as to lay the case open to revision , and declaring the application admissible on this ground . 3. The Court may require previous compliance with the terms of the judgment before it admits proceedings in revision . 4. The application for revision must be made at latest within six months of the discovery of the new fact . 5. No application for revision may be made after the lapse of ten years from the date of the judgment . Article 62 l. Should a state consider that it has an interest of a legal nature which may be affected by the decision in the case , it may submit a request to the Court to be permitted to intervene . 2 It shall be for the Court to decide upon this request . Article 63 1. Whenever the construction of a convention to which states other than those concerned in the case are parties is in question , the Registrar shall notify all such states forthwith . 2. Every state so notified has the right to intervene in the proceedings ; but if it uses this right , the construction given by the judgment will be equally binding upon it . Article 64 Unless otherwise decided by the Court , each party shall bear its own costs . -------------------------------------------------------------------------------- CHAPTER IV - ADVISORY OPINIONS -------------------------------------------------------------------------------- Article 65 1. The Court may give an advisory opinion on any legal question at the request of whatever body may be authorized by or in accordance with the Charter of the United Nations to make such a request . 2. Questions upon which the advisory opinion of the Court is asked shall be laid before the Court by means of a written request containing an exact statement of the question upon which an opinion is required , and accompanied by all documents likely to throw light upon the question . Article 66 1. The Registrar shall forthwith give notice of the request for an advisory opinion to all states entitled to appear before the Court . 2. The Registrar shall also , by means of a special and direct communication , notify any state entitled to appear before the Court or international organization considered by the Court , or , should it not be sitting , by the President , as likely to be able to furnish information on the question , that the Court will be prepared to receive , within a time-limit to be fixed by the President , written statements , or to hear , at a public sitting to be held for the purpose , oral statements relating to the question . 3. Should any such state entitled to appear before the Court have failed to receive the special communication referred to in paragraph 2 of this Article , such state may express a desire to submit a written statement or to be heard ; and the Court will decide . 4. States and organizations having presented written or oral statements or both shall be permitted to comment on the statements made by other states or organizations in the form , to the extent , and within the time-limits which the Court , or , should it not be sitting , the President , shall decide in each particular case . Accordingly , the Registrar shall in due time communicate any such written statements to states and organizations having submitted similar statements . Article 67 The Court shall deliver its advisory opinions in open court , notice having been given to the Secretary-General and to the representatives of Members of the United Nations , of other states and of international organizations immediately concerned . Article 68 In the exercise of its advisory functions the Court shall further be guided by the provisions of the present Statute which apply in contentious cases to the extent to which it recognizes them to be applicable . -------------------------------------------------------------------------------- CHAPTER V - AMENDMENT -------------------------------------------------------------------------------- Article 69 Amendments to the present Statute shall be effected by the same procedure as is provided by the Charter of the United Nations for amendments to that Charter , subject however to any provisions which the General Assembly upon recommendation of the Security Council may adopt concerning the participation of states which are parties to the present Statute but are not Members of the United Nations . Article 70 The Court shall have power to propose such amendments to the present Statute as it may deem necessary , through written communications to the Secretary-General , for consideration in conformity with the provisions of Article 69. -------------------------------------------------------------------------------- </text>
<text id="WindParaschivoiuEt_DarrieusTurbine_EN.txt">
﻿ H-Darrieus Wind Turbine with Blade Pitch Control Abstract A procedure for computing the optimal variation of the blades ' pitch angle of an H-Darrieus wind turbine that maximizes its torque at given operational conditions is proposed and presented along with the results obtained on a 7 kW prototype . The CARDAAV code , based on the “ Double-Multiple Streamtube ” model developed by the first author , is used to determine the performances of the straight-bladed vertical axis wind turbine . This was coupled with a genetic algorithm optimizer . The azimuthal variation of the blades ' pitch angle is modeled with an analytical function whose coefficients are used as variables in the optimization process . Two types of variations were considered for the pitch angle : a simple sinusoidal one and one which is more general , relating closely the blades ' pitch to the local flow conditions along their circular path . A gain of almost 30 % in the annual energy production was obtained with the polynomial optimal pitch control . 1. Introduction Following the 1973 energy crisis , large-scale research and development programs were initiated , directed toward finding replacement solutions to the limited fossil fuel reserves . Wind energy was given , along with photovoltaic , solar , hydroelectric , biomass , and other resources , particular attention as a renewable and environmentally friendly energy alternative . Its technological progress has been spectacular , especially in the last ten years and , due to its steady growth in competitiveness , wind power developed into a mainstream energy source in many countries worldwide . At the global scale , over 74000 MW of wind power are already installed , and current estimates indicate that by 2030 wind energy could cover as much as 29 % of world’s electricity needs . In the wind power domain two main technologies were considered as having the necessary potential for a viable development : the Horizontal Axis Wind Turbine ( HAWT ) and the Darrieus-type ( lift-based ) Vertical Axis Wind Turbine ( VAWT ) . A number of features have made HAWT to be preferred and become the dominant design type , especially in the utility-scale ( large and very large turbines ) segment . But , in certain conditions ( sites with highly turbulent wind like in the mountains or in urban environment ) , VAWTs seem to offer a better solution for the wind energy harnessing . If , through further and well-targeted research , increased attention is paid to the known VAWT drawbacks ( a somewhat less overall efficiency than the one of an HAWT , difficult/impossible self-starting , lower output due to operation closer to the ground , higher level of vibration caused by the inherent torque ripple and dynamic stall of the blades ) , at least in the “ small wind ” domain the VAWT design might become a major player . Among the most important problems that are now under study in the VAWT technology , the “ variable pitch ” for the H-Darrieus turbines is regarded as a promising solution for the alleviation of the negative effects of the blades dynamic stall ( efficiency loss , vibration ) , improvement of the rotor’s self starting qualities , and torque ripple smoothing [ 1–3 ] . At École Polytechnique de Montreal , Canada , in the wind energy research the major effort is devoted toward the development and improvement of the performance prediction of VAWTs [ 4 ] . The variable pitch is also included in the current research subjects in this domain , and results were already published [ 8 ] , obtained from the analysis that was carried out to determine if the performance of a VAWT , in terms of the power output , could be improved by simulating the operation of the blade just below stall . The present study aimed at determining if a more general cyclical pitch variation can be determined , so as to maximize the performance of an H-Darrieus ( straight bladed ) vertical axis wind turbine at given operation conditions . In order to perform this investigation , an optimization package was set up to serve in the determination of the optimal variation of the blade’s pitch angle for a small two-bladed VAWT . The paper presents first the main components of the numerical tool that was developed . Then , the results of an optimization case are discussed . Finally , several conclusions are formulated at the end of the paper . 2. The Optmization Tool Since the local flow parameters on the blades vary along their circular path and differ quite significantly between the upwind and the downwind parts of the rotor , an optimization procedure had to be employed to determine the best law of variation of the blades ’ pitch angle . In the present study a tool for numerical optimization was set up by coupling the code CARDAAV , which computes the flow through and the performances of a VAWT , to an optimizer based on the genetic algorithm method . These ( main ) components of the optimization package are briefly presented in the following sections , along with the objective function , its variables , and the constraints that were imposed on their value during the optimization process . 2.1 . The CARDAAV Code CARDAAV , the numerical tool used in this analysis , is based on an improved version of the “ double-multiple streamtube ” ( DMS ) model [ 4 ] . This model considers a partition of the rotor in streamtubes and treats each of the two blade elements defined by a given streamtube as an actuator disk . Figure 1 illustrates such a streamtube and shows the values of the velocity of the flow at a number of key stations along it . Disk 1 represents the upwind blade element while disk 2 represents the downwind blade element . The actuator disk theory is based on the momentum conservation ; therefore , the velocities of the wind must be known in order to compute the force acting on the disks . The different values of the velocity ( see notations in Figure 1 and relations ( 1 ) depend on the incoming ( “ undisturbed ” ) wind velocity and on the interference factors 𝐮 and 𝐮 ( 1 ) To determine the interference factors , a second set of equations is used . Those equations are derived from the blade element theory [ 4 ] , which equates , in each streamtube , the normal forces acting on the upwind and downwind blade elements to the forces acting upon the actuator disks . To compute the normal and tangential forces , the blade element theory is applied , and the lift ( 𝐶 𝑙 ) and drag ( 𝐶 𝑑 ) coefficients , obtained from the airfoil data , are used . For the upwind interference factor 𝑢 , the following expression , relating it to the azimuthal angle 𝜃 , is obtained : 𝑢 ( 𝜃 ) = 𝐾 𝐾( 2 ) with 𝐾 = 8 𝜋 𝑟 ( 3 ) A similar set of equations is derived for the downwind interference factor 𝑢 ′ . An interference factor equal to 1 is assumed at the beginning of the iterative process . Once the force given by the blade element theory equates the one given by the actuator disk theory , the convergence is achieved and the upwind and downwind velocities are obtained . Then the torque and the mechanical power are computed . CARDAAV has the capability to analyze several predefined or user-defined rotor shapes with straight or curved blades ( parabola , catenary , ideal and modified troposkien , and Sandia shape ) . The code requires three main sets of input data , giving the geometry definition of the wind turbine ( diameter , height , blade section airfoil , blade shape , etc. ) , the operational conditions ( wind velocity , rotational speed , atmospheric conditions ) and the main control parameters ( convergence criterion , computation of the secondary effects , and the effect of dynamic stall ) . The software includes several dynamic stall semiempirical models : Gormont [ 5 ] and its variations ( Strickland , Paraschivoiu , and Berg ) and the one based on the indicial method [ 4 ] . Dynamic stall results in increased peak aerodynamic torque and affects the structural fatigue of the Darrieus turbine . This effect significantly impacts the drive-train generator sizing and system reliability . The dynamic stall used in this study was the Berg version of the Gormont model , because it was found out to be the best correlated with the experimental studies carried out on similar rotor configurations as those used in the present investigation . CARDAAV is also able to account for the so-called “ secondary effects , ” such as those due to the rotating central tower , struts , and spoilers . CARDAAV has made it possible to design , analyze , and build more efficiently and at lower costs wind energy systems such as the Darrieus-type VAWT . The code is used to determine , at specified operational conditions , aero-dynamic forces and power output of VAWTs of any blade geometry . Wind speed can vary with height above ground according to a power law . The program output consists of the local-induced velocities , the local Reynolds numbers and angle of attack , the blade loads , and the azimuthal torque and power coefficient data . Each of these is calculated separately for the upwind and downwind halves of the rotor . The numerical models used by the program have been validated for different Darrieus-type VAWTs , through comparison with experimental data obtained from laboratory tests ( wind or water tunnels ) or from field tests , thus making CARDAAV a very attractive and efficient design and analysis tool . In Figure 2 the power output of the SANDIA 17 m wind turbine computed with CARDAAV is compared with experiments and results provided by other numerical codes . 𝐴 𝑀 is an empirical constant used to correct 𝐶 𝑙 and 𝐶 𝑑 for dynamic stall effects [ 6 ] . 2.2 . The Optimizer To search for the best pitch variation law , an optimization strategy was adopted , namely , one that uses a genetic algorithm ( GA ) method . At the beginning of the optimization process , a genetic algorithm randomly selects an initial “ population ” composed of “ individuals ” , which are solutions of the analyzed problem computed for particular , randomly selected , values of the optimization variables . Three operations are typically performed by the genetic algorithms on the analyzed “ population ” : “ selection ” ( choice of the “ individuals ” for the next generation , according to a “ survival of the fittest ” criterion ) , “ crossover ” ( operation which allows information exchange between the “ individuals ” by swapping parts of the parameter vector in an attempt to get better “ individuals ” ) and “ mutation ” ( operation which introduces new or prematurely lost information in the form of random changes applied to randomly chosen vector components ) . Like in any optimization study , an “ objective function ” had to be defined . In this case the inverse of the rotor power , for given conditions of operation ( wind speed , rotational speed ) 1 𝐹 = 𝑃 ( 4 ) was used as optimization function 𝐹 . On the other hand , for the pitch angle the following analytical expression was considered : 𝜏 = 𝑥 ( 5 ) For different values given to the optimization variables 𝑥 , the variation of the blade pitch angle 𝜏 with the angle of azimuth 𝜃 will be different . Since the local angle of attack α of a blade element 𝛼 = s i n ( 6 ) contains the pitch angle , the later influences the aerodynamic characteristics , the torque , and ultimately the power output of the rotor . Hence , through relations ( 5 ) and ( 6 ) an indirect link is established between the objective function ( 4 ) and the optimization variables 𝑥 , which control the variation of 𝜏 . The genetic algorithm evolution strategy optimization package , GENIAL v1.1 [ 7 ] , was employed to minimize the objective function . This code includes three main modules , which perform the above mentioned operations . A number of parameters are available in each module to control its functioning during the optimum search process . As mentioned above , the coefficients 𝑥 of the pitch variation function ( 5 ) were used as optimization variables . Their values were subjected to certain constraints , to avoid any possible mathematical invalidity and to keep the pitch angle within reasonable or practical ( technically feasible ) limits . 2.3 . The Optimization Package To set up the optimization package , including GENIAL and CARDAAV as principal components , a main program ( MAIN ) and a new subroutine ( PITCH ) had to be coded . When the program is launched , MAIN reads some of the parameters that control the optimization process , namely , those that are frequently changed ( size of the “ population”—number of “ individuals ” , number of evaluations , constraints to be set on the optimization variables ) . These parameters have to be provided through the keyboard when a new optimization is initiated . Then , MAIN calls the optimizer ( GENIAL ) , which takes control and carries through the optimization process . For each combination of the optimization variables , defining a distinct ‘ individual ” , GENIAL calls ( using a “ system function ” ) PITCH then CARDAAV , which performs the analysis of the VAWT for that specific variation of the blades ’ pitch angle . With the turbine power , calculated by CARDAAV , the objective function ( 4 ) is determined and , based on it , the “ fitness function ” which characterizes that “ individual ” is obtained . Depending on its “ fitness ” , an “ individual ” can be maintained or eliminated from the “ population ” during the optimization process . Selection , crossover , and mutation are used to advance the “ population ” from one optimization cycle to the next until the optimum or the predefined limit of evolutions is reached . At the end of the optimization , MAIN outputs the optimal values of the 𝑥 variables ( as found through optimization ) , which define the best variation law for the pitch angle . Corresponding to this , the performance characteristics of the turbine are computed and stored in a file for postprocessing purposes . As the name indicates , the subroutine PITCH uses relation ( 5 ) to calculate the pitch angle over the entire circular trajectory of the blades , based on the values of 𝑥 received from GENIAL . It stores the azimuthal and the pitch angles in a file where CARDAAV seeks this information before performing each new analysis . 3. Results This study was carried out on an H-Darrieus VAWT , having two constant-chord blades with an NACA 0015 airfoil cross section . It is a small , 7 kW rated power prototype , its rotor having the ( main ) geometrical characteristics given in Table 1. The performance ( power , power coefficient , Figures 3 and 4 ) of this turbine was computed with CARDAAV in several situations : without taking into account the influence of the dynamic stall , by applying the dynamic stall correction , with a blade pitch that had a sinusoidal variation and with a blade pitch that varied according to relation ( 5 ) in which : 𝑥 . These calculations , as well as all the other that are presented in this paper , have been performed for a constant rotational speed of 125 rpm and at one or several different wind speed values . </text>
<text id="WindPurohitEt_CDMIndia_EN.txt">
﻿ Potential of wind power projects under the Clean Development Mechanism in India Results : CDM Potential of Wind Power Projects in India Considerable variation has been observed in the reported values of the PLF of the wind power plants in the CDM Project Design Documents ( Table 5 ) . Therefore , in this study to estimate the CDM potential of wind power projects in India the PLF of the wind power plants have been taken as 25 % . There are five regional grids within the country – the Northern , Western , Southern , Eastern and North-Eastern . Therefore , the CO2 emissions mitigation potential through wind power projects in India is estimated on the basis of the regional grids , whose emission factors have been calculated by the Central Electricity Authority ( CEA ) of the Government of India in 2006. Table 6 presents the estimated values of CDM potential through wind power projects in India on the basis of the regional baselines . We now do a sensitivity analysis with regards to additionality determination . The case of lax additionality assumes that all wind power projects submitted are registered . The median case assumes that the rejection rate remains at the current level ( 2 out of 18 projects , i. e. 11 % ) . The case of stringent additionality assumes that 50 % of the projects are registered . In the lax additionality case , gross annual CER potential of wind power in India reaches 86 million . Similarly , based on the technical potential of wind power projects in India the CDM potential has been estimated as 25 million tonne . Among all the states in India , Gujarat has the largest CO2 emissions mitigation potential through wind power ( 19 million tonne ) followed by Andhra Pradesh ( 15.6 million tonne ) , Madhya Pradesh ( 10.8 million tonne ) , Karnataka ( 12.5 million tonne ) , Rajasthan ( 8.9 million tonne ) , and so on ( Table 6 ) . The annual electricity generation by wind power projects based on the gross and technical potential is also given in Table 6. With 25 % PLF of wind power projects the annual gross electricity generation potential has been estimated at 99 TWh whereas the annual technical electricity generation potential has been estimated at 28 TWh . Table 7 presents the projected values of the cumulative capacity of wind power and likely CER generation using the logistic model described in the Methods section while Figure 5 shows the development over time . It may be noted that with the current trend of dissemination of wind power projects in the country , around 22 GW capacity could be installed up to the end of first crediting period in the SS scenario whereas in the OS scenario 36 GW capacity could be installed . Up to the the year 2020 , more than 44 GW capacity of the wind power projects are expected to be installed that would generate 87 million CERs . Discussion : How the CDM could be applied to the Diffusion of Wind Power Projects ? The CDM was slow to take off as after the Marrakech Accords of 2001 it took another three years to define the bulk of the rules . The CDM Executive Board ( EB ) which is the body defining the CDM rules surprised many observers by taking a rigorous stance on critical issues such as baseline and additionality determination ( see below ) . Once the key rules were in place , a " gold rush " happened in 2005 and 2006. Over 1500 projects were submitted with an estimated CER volume of about 1.5 billion . However , the volume share of renewable energy projects has been less than expected due to the high attractiveness of projects reducing industrial gases and methane from waste . Out of the 1478 CDM projects submitted to the EB , 456 projects had been registered by the EB till 20th December , 2006 [ 32,33 ] . 183 CDM projects related to wind energy of which 47 have been registered , 9 requested registration and 127 were at the validation stage [ 33 ] . Figure 6 presents the status of the wind power projects from India . Out of the 89 projects submitted to the UNFCCC , 18 projects had been registered and two projects had submitted the request for registration . 67 projects were at the validation stage whereas 2 projects had been rejected by the EB . The quantification of GHG benefits of a CDM project is done by means of a " baseline " . A baseline describes the ( theoretical ) emissions that would have occurred in case the CDM project was not implemented . The amounts of CERs that can be earned by the project are then calculated as the difference of baseline emissions and project emissions . The CO2 emissions mitigation benefits associated with a wind power project depend upon the amount of electricity saved . To estimate the CDM potential of wind power project in the country , the approved consolidated baseline methodology for grid-connected electricity generation from renewable sources ACM0002 ( Version 06 ) has been used . For the small scale CDM ( SSC ) projects , the small scale methodology AMS-I . D. " Grid connected renewable electricity generation " in its version of 23rd December 2006 [ 34 ] can be used which explicitly mentions wind power for electricity generation . In India , most of the wind power projects are grid connected and substitute grid electricity . Therefore , for such systems , the baseline is the kWh produced by the renewable generating unit multiplied by an emission coefficient ( measured in g CO2eq . /kWh ) calculated in a transparent and conservative manner . This coefficient is 800 g CO2eq . /kWh for a grid where all generators use exclusively fuel oil and/or diesel fuel , whereas it is the weighted average of the so-called operating margin ( emission factor of all thermal power plants serving the grid ) and build margin ( emission factor of the most recently built plants that provide 20 % of the grid 's electricity ) . For wind power , the weight of the operating margin is 0.75 while the build margin is weighted at 0.25 . Alternatively , project developers can use the weighted average emissions of the current generation mix but this will always be less than the emission factor derived previously and thus unattractive . For intermittent and non-dispatchable generation types such as wind and solar photovoltaic , ACM0002 allows to weigh the operating margin ( OM ) and build margin ( BM ) at 75 % and 25 % , respectively , however , in this study we have used combines margin by using equal weights for OM and BM as given in CEA document [ 35 ] . To maintain the environmental integrity of the Kyoto Protocol , CERs are given only for " additional " activities that would otherwise not be expected to occur [ 36 ] . Therefore , any CDM project requires careful analysis of additionality . This has probably been the most contentious point in the development of the CDM and also resulted in great confusion amongst project developers [ 37,38 ] . The Kyoto Protocol stops short of requiring project proponents to show strict financial additionality – that the CDM revenue makes an uneconomic project economic – and left scope for the CDM EB to refine the demonstration of additionality . The EB subsequently took a fairly strict interpretation of additionality and developed an additionality tool which formally is voluntary but which has become de facto mandatory as it was incorporated in most baseline methodologies . The additionality tool requires an investment analysis and/or a barrier analysis to determine whether the CDM project is the most attractive realistic alternative . This means that the project can be profitable and additional as long as developers can show that another project type was even more profitable . It is estimated that wind power in many countries is already competitive with fossil fuel and nuclear power if social/environmental costs are considered [ 28 ] . However , in India , in terms of costs per kWh in grid-connected areas , costs of wind power are higher than electricity provided by a coal plant projects thus be additional at any rate . The unit cost of electricity generation is 0.05 €/kWh for coal and 0.06 €/kWh for fuel oil based system whereas in case of wind , the unit cost of electricity generation is 0.07 €/kWh in the best locations . The problem with this reasoning is that if wind projects are used to displace expensive grid electricity for industrial consumers ( priced at 0.09 €/kWh [ 39 ] ) , they are invariably the most attractive alternative unless they are built in locations with low wind speed . The situation for wind projects that supply to the grid at the state-guaranteed feed-in tariff is less clear ; the attractiveness depends on the level of the tariff . As the investment test will not be passed by most wind projects ( or only if they omit the tax incentives , as has been done by a project that achieved registration ) , project developers will use the barrier test . The barrier of higher capital cost compared to fossil fuel power plants is not really credible due to the abundance of capital for wind power in India and thus is mentioned only rarely . More credible barriers are low capacity utilization factor , and possible reduction in feed-in tariffs . The former depends on the siting of the project . The latter is very important as shown by the policy of Rajasthan ( see Table 3 ) and other states . In 2001 , Tamil Nadu Electricity Board ( TNEB ) changed its policy and froze the power purchase tariff for wind energy at Rs 2.70 per kWh with no escalation till 2006 and had informed that this power purchase tariff would be reviewed at 2006 and a new tariff would be fixed then . This was a major barrier for establishing new wind farms as other renewable energy plants continued to get a higher tariff . For instance , the power purchase tariff for electricity from an industrial waste/municipal waste based generation was Rs 3.49 for the year 2005 as against Rs 2.70 for wind energy . This policy encourages investors to invest in other renewable energy plants . Reduction in power purchase tariff was a major investment barrier . Moreover , feed-in-tariffs may be replaced by the Availability Based Tariff ( ABT ) in which the generators with firm delivery of power against commitment will start getting more prices for the generated power , whereas wind power producers cannot guarantee supply of electricity and will be thus receive lower rates . For the projects that substitute grid electricity at industrial tariffs , there is the risk that the wind power benefit will melt down as liberalization permits industrial electricity consumers to choose the supplier in a competitive environment . Some projects have also highlighted the technological risks associated with new types of wind turbines . Lack of familiarity and experience with such new technologies can lead to perceptions of greater technical risk than for conventional energy sources . Doing the investment test – case study A 125 MW wind project in Karnataka calculated an IRR of 7.3 % . At that rate , the project would clearly be unattractive for an investor . However , the picture changes if one analyzes the project more closely . If one uses industry averages for the investment cost ( Rs 5 crore per MW ) , the IRR is 11 % . If one includes the accelerated depreciation of 80 % in the first year and the 10 year income tax holiday , the IRR reaches 22 % ( personal communication by Mr. Sanjeev Chadha ) . It would be difficult to find serious alternatives that are more attractive . Nevertheless , the project was registered by the EB . Table 5 presents the additionality arguments of Indian wind power projects . 14 projects out of 20 have carried out investment and barrier analysis for the justification of additionality whereas 6 projects carried out the barrier analysis only . An assessment of the PDD 's indicates that the investment analysis is not convincing in most of the cases . Two wind projects from India were rejected due to lack of additionality . The rejection was mainly due to the following statement in the annual report of the company that had invested in the projects : " The project is extremely beneficial on a standalone basis and has a payback period of three years with an internal rate of return in excess of 28 per cent . In addition to hedging Bajaj Auto 's power costs , this investment also provides sales tax incentives and an income tax shield " [ 40 ] . </text>
<text id="WindRiadhEt_ContrarotatingConverter_EN.txt">
﻿ Performance of a Contrarotating Small Wind Energy Converter 1. Introduction Wind energy has been shown to be one of the most feasible sources of renewable energy . It presents attractive opportunities to a wide range of people , including investors and entrepreneurs . The main goal of wind energy industry is to minimize the cost of wind energy in order to make it more competitive compared to other energy sources . How to reduce the cost of wind energy is a vital engineering challenge presented by the interlocking disciplines of aerodynamics , structure , control , electrical conversion , and electronics . In fact , technologies in these related areas are still under active research and development to achieve high efficiency and low cost . In the shadows of advancing multimegawatt wind turbines is another growing sector within this industry , the small wind turbines . Small wind energy converters ( SWECs ) for urban or rural applications range in size from a few hundred watts to thousands of watts ( usually with a rated capacity of less than 100 kW ) and can be applied economically for a variety of power demands . These systems can be used in connection with an electricity transmission and distribution system , or in stand-alone applications that are not connected to the utility grid and are appropriate for homes , farms , or even entire communities . Investments in this sector are feasible not as stand-alone only , but as components of an integrated power-generating system that include various forms of energy resources . The main technical challenges for SWECs are the design of a system that has maximum efficiency in turbulent low speed winds ; ability to comply with both efficiency expectations and the requirements of grid utilities ; and have the minimum environmental and health impacts in terms of noise and vibration . Two facts characterize the urban environment for wind energy : lower annual mean wind speed ( AMWS ) compared to rural areas or to sea shores and more turbulent flow . The low AMWS is related to the uneven ground created by buildings and other features of the urban landscape , which causes wind speeds to increase with height above the ground more slowly . The turbulent flow is a result of the wind interacting with landscape obstacles , the fact that applies extra stress on the turbine blades . The challenge is to develop wind turbines that operate at lower speeds and cope with the turbulent . The wind generating technology development is leading to improved performance and efficiency . Most wind turbines are single-rotor systems , which provide simplicity , reliability , and durability . Along the years , improvements have enhanced energy conversion efficiency of these single-rotor systems . For example , blades have better aerodynamic characteristics , gears with reduced noise have better torque transmission efficiency , and alternators have better electrical efficiency . However , despite these improvements , single-rotor systems are able to convert only a small fraction of the total wind stream energy into electrical energy . Moreover , such a system requires high wind velocity ( above 4 m/s ) which is not available in many places , a part from costal regions . This low velocity and seasonal winds imply a high cost of exploitation of wind energy . Thus , the challenge lies with the design of a wind generator which can operate at lower speeds and be used in a small-scale manner in remote and rural areas . This paper investigates the performance of the SWEC basing on wind tunnel tests . The paper is organized as follows . Section 2 discusses the contrarotating concepts and provides a literature review on the subject , while Section 3 presents the theory of rotor torque and power . Section 4 describes the wind tunnel experimental setup , and Section 5 presents the rotor performance results . Finally , conclusions are drawn in Section 6. 2. Contrarotating Blade System The prime mover in wind energy system is the wind turbine . One prevailing trend in wind turbine technology throughout the past couple of decades has been growth in the size of the rotor to realize the advantages of scale and the generally higher winds available at greater heights . Geometrically , consistent upscaling of blade length shows that the surface stresses at the blade surface , vibratory loads , and loading noise due to aerodynamical and gravitational loads grow in proportion to the length of the blade [ 1 ] . However , an alternative mean of overcoming the limitation of the efficiency of a single-rotor system without increasing the size of the rotor and consequently the stress on blades could be through the adoption of a dual-rotor ( contrarotating ) blade system . In addition , the acceptance of wind turbines by the public depends strongly on achieving low noise levels in operation , which largely depends on the level of stress on the blades . According to Betz theory , the maximum power that can be extracted from the wind is about 59 % of the available energy in the wind when the axial wind speed is reduced by two-thirds across a single rotor disc . However , practical wind turbines convert less than 40 % of the wind energy into electrical energy . Hence , nearly 60 % of the potential wind energy escapes without being harnessed . In reality , the energy in the wake behind a single rotor is not very small . Part of this energy may be extracted further by installing a second rotor in the wake . As the wake behind the first rotor is rotating in the opposite direction to the rotational direction of the rotor , the second rotor should rotate in the same direction as the wake in order to extract efficiently the available energy in the wake . The contrarotating system is a very old concept that was initially proposed more than 100 years ago . A friend of Betz who is sometimes described as the “ father of modern wind energy collection theory , ” Hans Honneff , wrote a book on the use of contrarotation , using two rotors one behind the other , driving the two halves of an electrical generator , therefore creating a true wind turbine [ 2 ] . Currently , the contra concept is used on airplanes , boats , and submarines to increase efficiency while eliminating the asymmetrical torque faced by conventional rotors . A dual-rotor system can be described as a system consisting of two rotors separated by an appropriate distance ( Figure 1 ) . One of the rotors is rotating in counterclockwise direction and the other in clockwise direction on the same axis . The relative size as well as the appropriate distance between the two rotors should be identified for best performance . Drawbacks of the dual-rotor system come from mechanical complexity based on the fact that in order to reverse direction of rotation of one rotor , a gearbox is required . This may increase weight or maintenance and spare parts cost for the system . Based on evidence in literature , aerodynamic research is poised between experimental and computational : either the wind turbine is studied experimentally in a wind tunnel , or the turbine is investigated computationally using methods that belong to the field of computational fluid dynamics ( CFD ) . The two are closely linked , and as progress is made in the development of more advanced computational fluid models , more comprehensive wind tunnel experimental data is required to validate the models . Experimental and computational research provide results for better understanding of the flow physics and enable investigation of wind energy performance , a requirement in order to adjust the design of wind turbines to the unique aerodynamic conditions in the environment . As with all methods of analysis , the CFD approach has limitations which are essentially related to turbulence modeling . Sumner et al . [ 3 ] review the development of CFD as a virtual , multiscale wind tunnel applied by the wind energy community from small to large scale . Although the cost of a CFD analysis may be comparable to that of a wind tunnel experiment , we considered the wind tunnel experimental option for the current study emphasizing on the importance of transition to turbulence effects . Typically , wind tunnel tests overstate performance , and consumers will never see the performance measured in a wind tunnel . However , such tests are good indicators of performance . To our knowledge , only a limited number of wind tunnel studies can be found in literature [ 2 , 4 ] . In order to study the streamlines and obtain the detailed information of flow around the wind turbine , a flow visualization and velocity measurement are important . Investigation [ 5 ] has been carried out for this sake . Considerable improvements in the understanding of contrarotating wind turbine system can be achieved through proper instrumentation and experimental measurements . According to [ 6 ] , the maximum power that can be extracted from a dual-rotor system increases up to 64 % of the available energy . It continues to reach 66.7 % for an infinite number of rotors [ 7 ] . A contrarotating wind turbine equipped with two 500 kW turbines performed quite well at high wind speeds . The turbine can produce 43.5 % more annual energy than a single-rotor turbine of the same type . The performance of the system can be improved if it is operated for low wind speeds at the tip-speed ratio where a maximum Cp is obtained [ 8 ] . Research studies provide sufficient evidence to look closer at the concept of contrarotating system to eventually produce quantifiable comparisons to other turbines [ 9 , 10 ] . A smaller gear ratio is needed because of higher tip speeds achieved by smaller blade length in comparison with the conventional system in case of the same power output . Energy capture in the rotor holds the greatest potential for long-term reduction of the cost of wind energy . A feasibility study [ 11 ] provides sufficient evidence to look closer at the concept of contrarotating to eventually produce quantifiable comparisons to other turbines . Their field tests showed that a dual-rotor turbine produces 43.5 % more annual energy than a single-rotor turbine of the same type . In addition , a smaller gear ratio is needed because of higher tip speeds achieved by smaller blade length in comparison with the conventional system in case of the same power output [ 12 ] . According to a field test demonstrated in California [ 13 ] , energy extraction from a wind turbine using contrarotating system increased by up to 40 % over an equivalent wind turbine with only one rotor . Power conversion efficiency was high at low rotor speeds , suggesting applicability of contrarotating turbines to large utility-scale wind turbines that rotate at 16–20 rpm . In addition , the bending stress on the supporting tower was reduced by the contrarotating system over the single-rotor system . This reduced bending stress results when the torques produced by two rotors counterbalance each other . The contrarotating SWEC clearly has a promise for wind energy , and after preliminary research and field studies [ 6–13 ] , it was decided to proceed with a small SWEC prototype for testing and evaluation . 3. Rotor Torque and Power The motion of any fluid can be derived from the basic physical principles of mass , momentum , and energy interchange . The torque responsible for power production of the wind turbine mostly arises due to the forces produced by interaction of blades with the wind . The output power 𝑃 𝑇 from a turbine rotor and the wind kinetic energy per unit time 𝑃 𝑊 are given as follows : 𝑃 𝑇 = 𝑇 𝑚 𝑃 × 𝜔 , 𝑊 = 1 2 𝜌 × 𝑉 3 0 × 𝐴 , ( 1 ) where 𝑇 𝑚 is the mechanical torque at the turbine side , 𝜔 is the angular rotation of the shaft , 𝜌 is the air density at the hub height , 𝑉 0 is the wind velocity , and 𝐴 is the swept area of the blades . If momentum equation is solved across an idealized control volume about the turbine rotor , it can be shown that the percentage of the total power available that can be extracted by a turbine is 16/27 or 59 % . This limit is known as the Betz limit . Therefore , the maximum power that a turbine can produce is expressed as follows [ 14 ] : 𝑃 𝑊 =  1 6 1 2 7   2  𝜌 × 𝑉 3 0 × 𝐴 . ( 2 ) Most turbines extract the maximum possible energy as defined above for lower wind speeds but gradually become less efficient as the on-coming wind speed increases and the flow condition across the blades approaches the stall condition . The rotor power coefficient 𝐶 𝑝 is defined as the ratio between the rotor output power and the dynamic power of the air as shown in the following : 𝐶 𝑝 = 𝑃 𝑇 𝑃 𝑊 = 𝑇 𝑚 × 𝜔  ( 1 / 2 ) 𝜌 × 𝑉 3 0  × 𝐴 . ( 3 ) The power coefficient is a nonlinear function of the tip speed-ratio 𝜆 , which depends on the wind velocity and the rotation speed of the shaft 𝑉 𝜆 = T i p 𝑉 0 = 𝑟 × 𝜔 𝑉 0 , ( 4 ) where 𝑟 is the rotor radius . The rotor power coefficient is regarded as the energy transformation efficiency . Note that 𝐶 𝑝 is usually precomputed based on the theoretically expected performance of the turbine system . The wind turbine mechanical characteristics are described by the following equation ( where the turbine rotor friction is ignored ) : 𝑇 𝑚 − 𝑇 𝑔 = 𝐽 𝑑 𝜔 𝑑 𝑡 , ( 5 ) where 𝑇 𝑔 is the load torque , and 𝐽 is the turbine inertia moment . The incoming wind flow rate should be equal to the outgoing flow rate to satisfy the mass conservation law if a control volume around a turbine is assumed . The outgoing wind-speed distribution and its direction strongly determine the turbine efficiency . Figure 2 shows the geometry of the stream tube through the disk . Neglecting fluid drags , the power extracted from the air stream can be written as 1 𝑃 = ( 6 ) where 𝑉 , and 𝑉 are the flow velocity components along the axis of the stream tube . The power coefficient is obtained by nondimensionalizing the above power equation as 𝐶 , ( 7 ) where 𝑎 is the axial induction factor . 4. Wind Tunnel Experimental Setup In this section , laboratory measurement techniques are discussed ; however , some of the methods used are conventional and require little elaboration . 4.1 . Wind Tunnel Facility An open-return type wind tunnel is used in the present study . A contrarotating model 3-blade wind turbine was placed in the boundary-layer wind tunnel with the goal of studying power performance , turbulence effect , and flow visualization . Figure 3 shows the schematic of the wind tunnel experimental setup where the contraction and test sections are on the right hand side , and the motor and fan are in the left hand side . Air enters the fan from the laboratory through a large gate covered by a filter , held by wire meshes . The air flow is driven by a propulsion system made of an axial fan to provide the dynamic pressure for compensating viscous losses . There are smooth glass walls on both sides of the tunnel , and access is possible through the plywood ceiling and floor . Any large obstruction placed within a wind tunnel will alter the characteristics of the flow to some degree . The wind tunnel is capable of generating wind speeds up to 30 m/s . This suction type wind tunnel has a cross-section of 0.61 m width by 0.9 m height . The tunnel has a working ( test ) section of length 3.6 m. As the test section is the narrowest part of the circuit , it is also the part where the air velocity is the highest and , therefore , by Bernoulli’s principle , where the pressure is the lowest . The main distinguishing feature of this wind tunnel is that it was designed to produce a low level of turbulence in the test section . Power for the tunnel comes from a three-phase AC motor of 30 hp at 1800 rpm with a maximum speed of 1170 rpm , driving a 10-bladed fan of 54 inches diameter with blade setting of 23° , mounted in a cylindrical steel casing . To minimise noise and vibration , the casing is supported on rubber shock mounts and is connected by flexible seals to the tunnel on either side . The air speed does not change as the air passes through the fan . The rotational speed of the fan is controlled by a regulated magnetic field and solid-state power supply . In order to control the ambient turbulence level , turbulence manipulators are placed upstream of the rotor , including a fine mesh screen and an aluminum honeycomb section . Smoothing is provided by the fine mesh screen . The honeycomb plays the role of a flow straightener . When the wind turbine is stopped , the mean velocity over the center portion of the wind tunnel is uniform and almost steady . 4.2 . Instrumentation A small model SWEC with two blade sets of 23 cm diameter and a varying distance between the blade sets of 7–54 cm has been built and tested over a range of operating conditions . In order to introduce some degree of uniformity into the way in which users of the wind tunnel record their data , an instrumentation system to measure and display a number of variables that are normally required for all experiments was installed . Two guide rails were used to hold the SWEC inside wind tunnel floor along the centreline using a steel mounting system . The steel mounting system ensured that the system did not move during testing . Measuring sensors were mounted at different locations of the setup . The upwind and downwind velocities are measured by pitot tubes , which use Bernoulli’s principle to convert pressure to velocity readings . The tubes are attached to 2 sensors to convert pressure in volts to velocities in m/s . For measuring the rotational speed of the rotor , two infrared detector and emitter units ( photogate sensors ) were used . They were mounted behind the rotor . Measurement depends largely on a data acquisition system utilizing electronic measuring to read instantaneous power produced by the generating system , as various parameters are varied on the turbine or in the environment . The parameters varied include the distance between the two sets of blades , blade profiles , number of blades , wind speeds , and size ratios . To accomplish the objective of this test , three aspects of experimental setup are needed : mechanical , electrical , and measurement software . All sensors are powered , grounded , and connected to the data acquisition board . All wires are shielded for protection against noise . Measurements are monitored directly and instantaneously in the Graphical User Interface ( GUI ) of LabView . The user enters numerical values of the blade distance , blade pitch , and blade diameter for the front and back and the relative humidity and temperature . The circuit has 5 sets of measurements on both the front and the back of the generating system . The voltages are measured directly from the potentiometers ; these are the total voltages of the circuits . The currents are obtained by measuring the voltages from fixed resistors and dividing that by the resistance . The power is the product of the voltage and the calculated current . The rpm signals go through a frequency measurement tool in LabView and are then multiplied by 60 to obtain the angular velocity in revolutions per minute ( rpm ) . All lines of measurements are connected to the National Instruments Data Acquisition Board NIDAQ USB-6210 . Each line is connected to an analog pin which is fed into the LabView program with a USB connection to the computer . At the beginning of the measurement process , all sensors were checked and calibrated . The pitot tubes are corrected by the offset values to give zero when there is no wind in the tunnel . When starting the program , a path is requested for an Excel file to record the data . </text>
<text id="ted/a_j_jacobs_year_of_living_biblically">
I thought I 'd tell you a little about what I like to write . And I like to immerse myself in my topics . I just like to dive right in and become sort of a human guinea pig . And I see my life as a series of experiments . So , I work for Esquire magazine , and a couple of years ago I wrote an article called " My Outsourced Life , " where I hired a team of people in Bangalore , India , to live my life for me . So they answered my emails . They answered my phone . They argued with my wife for me , and they read my son bedtime stories . It was the best month of my life , because I just sat back and I read books and watched movies . It was a wonderful experience . More recently , I wrote an article for Esquire called -- about radical honesty . And this is a movement -- this is started by a psychologist in Virginia , who says that you should never , ever lie , except maybe during poker and golf , his only exceptions . And , more than that , whatever is on your brain should come out of your mouth . I decided I would try this for a month . This was the worst month of my life . ( Laughter ) I do not recommend this at all . To give you a sense of the experience , the article was called , " I Think You 're Fat . " ( Laughter ) So , that was hard . My most recent book -- my previous book was called " The Know-it-All , " and it was about the year I spent reading the Encyclopedia Britannica from A to Z in my quest to learn everything in the world , or more precisely from A-ak , which is a type of East Asian music , all the way to Zwyiec , which is -- well , I do n't want to ruin the ending . ( Laughter ) It 's a very exciting twist ending , like an O. Henry novel , so I wo n't ruin it . But I love that one because that was an experiment about how much information one human brain could absorb , although , listening to Kevin Kelly , you do n't have to remember anything . You can just Google it . So I wasted some time there . I love those experiments , but I think that the most profound and life-changing experiment that I 've done is my most recent experiment , where I spent a year trying to follow all of the rules of the Bible -- " The Year of Living Biblically . " And I undertook this for two reasons . The first was that I grew up with no religion at all . As I say in my book , I 'm Jewish in the same way the Olive Garden is Italian . ( Laughter ) So , not very . But I 've become increasingly interested in religion . I do think it 's the defining issue of our time , or one of the main ones . And I have a son . I want to know what to teach him . So , I decided to dive in head first , and try to live the Bible . The second reason I undertook this is because I 'm concerned about the rise of fundamentalism , religious fundamentalism , and people who say they take the Bible literally , which is , according to some polls , as high as 45 or 50 percent of America . So I decided , what if you really did take the Bible literally ? I decided to take it to its logical conclusion and take everything in the Bible literally , without picking and choosing . The first thing I did was I got a stack of bibles . I had Christian bibles . I had Jewish bibles . A friend of mine sent me something called a hip-hop bible , where the 23rd Psalm is rendered as , " The Lord is all that , " as opposed to what I knew it as , " The Lord is my shepherd . " Then I went down and I read several versions , and I wrote down every single law that I could find . And this was a very long list -- over 700 rules . And they range from the famous ones that I had heard of -- The Ten Commandments , love your neighbor , be fruitful and multiply . So I wanted to follow those . And actually I take my projects very seriously because I had twins during my year , so I definitely take my projects seriously . But I also wanted to follow the hundreds of arcane and obscure laws that are in the Bible . There is the law in Leviticus -- " You cannot shave the corners of your beard . " I did n't know where my corners were , so I decided to let the whole thing grow , and this is what I looked like by the end . As you can imagine , I spent a lot of time at airport security . ( Laughter ) My wife would n't kiss me for the last two months . So , certainly the challenge was there . The Bible says you cannot wear clothes made of mixed fibers , so I thought , " Sounds strange , but I 'll try it . " You only know if you try it . I got rid of all my poly-cotton t-shirts . The Bible says that if two men are in a fight , and the wife of one of those men grabs the testicles of the other man , then her hand shall be cut off . So , I wanted to follow that rule . ( Laughter ) That one I followed by default , by not getting in a fight with a man whose wife was standing nearby , looking like she had a strong grip . ( Laughter ) So -- oh , there 's another shot of my beard . I will say it was an amazing year because it really was life-changing , and incredibly challenging . And there were two types of laws that were particularly challenging . The first was avoiding the little sins that we all commit every day . You know , I could spend a year not killing , but spending a year not gossiping , not coveting , not lying -- you know , I live in New York , and I work as a journalist , so this was 75 , 80 percent of my day I had to do it . But it was really interesting , because I was able to make some progress because I could n't believe how much my behavior changed my thoughts . This was one of the huge lessons of the year , is that I almost pretended to be a better person , and I became a little bit of a better person . So I had always thought , you know , " You change your mind , and you change your behavior , " but it 's often the other way round . You change your behavior , and you change your mind . So , you know , if you want to become more compassionate , you visit sick people in the hospital , and you will become more compassionate . You donate money to a cause , and you become emotionally involved in that cause . So , it really was cognitive psychology -- you know , cognitive dissonance -- that I was experiencing . The Bible actually talks about cognitive psychology , very primitive cognitive psychology . In the Proverbs , it says that if you smile , you will become happier , which , as we know , is actually true . The second type of rule that was difficult to obey was the rules that will get you into a little trouble in 21st-century America . And perhaps the clearest example of this is stoning adulterers . ( Laughter ) But it 's a big part of the Bible , so I figured I had to address it . So , I was able to stone one adulterer . It happened -- I was in the park , and I was dressed in my biblical clothing -- sandals and a white robe -- you know , because again , the outer affects the inner . I wanted to see how dressing biblically affected my mind . And this man came up to me and he said , " Why are you dressed like that ? " And I explained my project , and he said , " Well , I am an adulterer , are you going to stone me ? " And I said , " Well , that would be great ! " ( Laughter ) And I took out a handful of stones from my pocket that I had been carrying around for weeks , hoping for just this interaction -- and , you know , they were pebbles -- but he grabbed them out of my hand . He was actually an elderly man , mid-seventies , just so you know . But he 's still an adulterer , and still quite angry . He grabbed them out of my hand and threw them at my face , and I felt that I could -- eye for an eye , I could retaliate , and throw one back at him . So that was my experience stoning , and it did allow me to talk about in a more serious way these big issues . How can the Bible be so barbaric in some places , and yet so incredibly wise in others ? How should we view the Bible ? Should we view it , you know , as original intent , like a sort of a Scalia version of the Bible ? How was the Bible written ? And actually , since this is a tech crowd , I talk in the book about how the Bible actually reminds me of Wikipedia because it has all of these authors and editors over hundreds of years . And it 's sort of evolved . It 's not a book that was written and came down from on high . So I thought I would end by telling you just a couple of the take-away , the bigger lessons that I learned from my year . The first is -- Thou shalt not take the Bible literally . This became very , very clear , early on . Because if you do , then you end up acting like a crazy person , and stoning adulterers , or -- here 's another example -- well , that 's another -- I did spend some time shepherding . ( Laughter ) It 's a very relaxing vocation . I recommend it . But this one is , the Bible says that you cannot touch women during certain times of the month , and more than that , you cannot sit on a seat where a menstruating woman has sat . And my wife thought this was very offensive , so she sat in every seat in our apartment , and I had to spend much of the year standing until I bought my own seat and carried it around . So , you know , I met with creationists . I went to the creationists ' museum . And these are the ultimate literalists . And it was fascinating , because they were not stupid people at all . I would wager that their IQ is exactly the same as the average evolutionist . It 's just that their faith is so strong in this literal interpretation of the Bible that they distort all the data to fit their model . And they go through these amazing mental gymnastics to accomplish this . And I will say , though , the museum is gorgeous . They really did a fantastic job . If you 're ever in Kentucky , there 's -- you can see a movie of the flood , and they have sprinklers in the ceiling that will sprinkle on you during the flood scenes . So , whatever you think of creationism , and I think it 's crazy , they did a great job . ( Laughter ) Another lesson is that thou shalt give thanks . And this one was a big lesson because I was praying , giving these prayers of thanksgiving , which was odd for an agnostic . But I was saying thanks all the time , every day , and I started to change my perspective , and I started to realize the hundreds of little things that go right every day , that I did n't even notice , that I took for granted -- as opposed to focusing on the three or four that went wrong . So , this is actually a key to happiness for me , is to just remember when I came over here , the car did n't flip over , and I did n't trip coming up the stairs . It 's a remarkable thing . Third , that thou shall have reverence . This one was unexpected because I started the year as an agnostic , and by the end of the year I became what a friend of mine calls a reverent agnostic , which I love . And I 'm trying to start it as a movement . So if anyone wants to join , the basic idea is , whether or not there is a God , there 's something important and beautiful about the idea of sacredness , and that our rituals can be sacred . The Sabbath can be sacred . This was one of the great things about my year , doing the Sabbath , because I am a workaholic , so having this one day where you cannot work -- it really , that changed my life . So , this idea of sacredness , whether or not there is a God . Thou shall not stereotype . This one happened because I spend a lot of time with various religious communities throughout America because I wanted it to be more than about my journey . I wanted it to be about religion in America . So I spent time with evangelical Christians , and Hasidic Jews and the Amish . I 'm very proud because I think I 'm the only person in America to out Bible-talk a Jehovah 's Witness . ( Laughter ) After three and a half hours , he looked at his watch , he 's like , " I gotta go . " ( Laughter ) Oh , thank you very much . Thank you . Bless you , bless you . But it was interesting because I had some very preconceived notions about , for instance , evangelical Christianity , and I found that it 's such a wide and varied movement that it is difficult to make generalizations about it . There 's a group I met with called the Red Letter Christians , and they focus on the red words in the Bible , which are the ones that Jesus spoke -- that 's how they printed them in the old bibles . And their argument is that Jesus never talked about homosexuality . They have a pamphlet that says , " Here 's what Jesus said about homosexuality , " and you open it up , and there 's nothing in it . So , they say Jesus did talk a lot about helping the outcasts , helping poor people . So this was very inspiring to me . I recommend Jim Wallace and Tony Campolo . They 're very inspiring leaders , even though I disagree with much of what they say . Also , thou shalt not disregard the irrational . This one was very unexpected because , you know , I grew up with the scientific worldview , and I was shocked learning how much of my life is governed by irrational forces . And the thing is , if they 're not harmful , they 're not to be completely dismissed . Because I learned that -- I was thinking , I was doing all these rituals , these biblical rituals , separating my wool and linen , and I would ask these religious people " Why would The Bible possibly tell us to do this ? Why would God care ? " And they said , " We do n't know , but it 's just rituals that give us meaning . " And I would say , " But that 's crazy . " And they would say , " Well , what about you ? You blow out candles on top of a birthday cake . If a guy from Mars came down and saw , here 's one guy blowing out the fire on top of a cake versus another guy not wearing clothes of mixed fabrics , would the Martians say , 'Well , that guy , he makes sense , but that guy 's crazy ? ' " So no , I think that rituals are , by nature , irrational . So the key is to choose the right rituals , the ones that are not harmful -- but rituals by themselves are not to be dismissed . And finally I learned that thou shall pick and choose . And this one I learned because I tried to follow everything in the Bible . And I failed miserably . Because you ca n't . You have to pick and choose , and anyone who follows the Bible is going to be picking and choosing . The key is to pick and choose the right parts . There 's the phrase called cafeteria religion , and the fundamentalists will use it in a denigrating way , and they 'll say , " Oh , it 's just cafeteria religion . You 're just picking and choosing . " But my argument is , " What 's wrong with cafeterias ? " I 've had some great meals at cafeterias . I 've also had some meals that make me want to dry heave . So , it 's about choosing the parts of the Bible about compassion , about tolerance , about loving your neighbor , as opposed to the parts about homosexuality is a sin , or intolerance , or violence , which are very much in the Bible as well . So if we are to find any meaning in this book , then we have to really engage it , and wrestle with it . And I thought I 'd end with just a couple more . There 's me reading the Bible . That 's how I hailed taxi-cabs . ( Laughter ) Seriously , and it worked -- and yes , that was actually a rented sheep , so I had to return that in the morning , but it served well for a day . So , anyway , thank you so much for letting me speak . </content>
</text>
<text id="ted/alan_kay_shares_a_powerful_idea_about_ideas">
A great way to start , I think , with my view of simplicity , is to take a look at TED . Here you are , understanding why we 're here , what 's going on , with no difficulty at all . The best AI in the planet would find it complex and confusing , and my little dog Watson would find it simple and understandable , but would miss the point . ( Laughter ) He would have a great time . And of course , if you 're a speaker here , like Hans Rosling , a speaker finds this complex , tricky . But in Hans Rosling 's case , he had a secret weapon yesterday , literally , in his sword swallowing act . And I must say I thought of quite a few objects that I might try to swallow today and finally gave up on -- but he just did it and that was a wonderful thing . So Puck meant not only are we fools in the pejorative sense , but that we 're easily fooled . In fact what Shakespeare was pointing out is we go to the theater in order to be fooled , so we 're actually looking forward to it . We go to magic shows in order to be fooled . And this makes many things fun , but it makes it difficult to actually get any kind of picture on the world we live in , or on ourselves . And our friend , Betty Edwards , the Drawing On the Right Side of the Brain lady , shows these two tables to her drawing class and says , the problem you have with learning to draw is not that you ca n't move your hand , but that the way your brain perceives images is faulty . It 's trying to perceive images into objects rather than seeing what 's there . And to prove it , she says , the exact size and shape of these tabletops is the same , and I 'm going to prove it to you . She does this with cardboard , but since I have an expensive computer here , I 'll just rotate this little guy around and ... . Now having seen that -- and I 've seen it hundreds of times , because I use this in every talk I give -- I still ca n't see that they 're the same size and shape , and I doubt that you can either . So what do artists do ? Well , what artists do is to measure . They measure very , very carefully . And if you measure very , very carefully with a stiff arm and a straight edge , you 'll see that those two shapes are exactly the same size . And the Talmud saw this a long time ago , saying , we see things not as they are , but as we are . I certainly would like to know what happened to the person who had that insight back then , if they actually followed it to its ultimate conclusion . So if the world is not as it seems and we see things as we are , then what we call reality is a kind of hallucination happening inside here . It 's a waking dream . And understanding that that is what we actually exist in is one of the biggest epistemological barriers in human history . And what that means : " simple and understandable " might not be actually simple or understandable , and things we think are complex might be made simple and understandable . Somehow we have to understand ourselves to get around our flaws . We can think of ourselves as kind of a noisy channel . The way I think of it is , we ca n't learn to see until we admit we 're blind . Once you start down at this very humble level , then you can start finding ways to see things . And what 's happened over the last four hundred years in particular is that human beings have invented brainlets : little additional parts for our brain , made out of powerful ideas that help us see the world in different ways . And these are in the form of sensory apparatus -- telescopes , microscopes -- reasoning apparatus , various ways of thinking , and most importantly , in the ability to change perspective on things . I 'll talk about that a little bit . It 's this change in perspective , and what it is we think we 're perceiving , that has helped us make more progress in the last four hundred years than we have in the rest of human history . And yet it is not taught in any K through 12 curriculum in America that I 'm aware of . So one of the things that goes from simple to complex is when we do more . We like more . If we do more in a kind of a stupid way , the simplicity gets complex . And in fact , we can keep on doing it for a very long time . But Murray Gell-Mann yesterday talked about emergent properties . Another name for them could be " architecture " as a metaphor for taking the same old material and thinking about non-obvious , non-simple ways of combining it . And in fact , what Murray was talking about yesterday in the fractal beauty of nature , of having the descriptions at various levels be rather similar , all goes down to the idea that the elementary particles are both sticky and stand-offish , and they 're in violent motion . Those three things give rise to all the different levels of what seem to be complexity in our world . But how simple ? So when I saw the Roslings ' Gapminder stuff a few years ago , I just thought it was the greatest thing I 'd seen in conveying complex ideas simply . But then I had a thought of , boy , maybe it 's too simple . And I put some effort in to try and check to see how well these simple portrayals of trends over time actually matched up with some ideas and investigations from the side , and I found that they matched up very well . So the Roslings have been able to do simplicity without removing what 's important about the data . Whereas the film yesterday that we saw of the simulation of the inside of a cell , as a former molecular biologist , I did n't like that at all . Not because it was n't beautiful or anything , but because it misses the thing that most students fail to understand about molecular biology , and that is , why is there any probability at all of two complex shapes finding each other just the right way so they combine together and be catalyzed ? And what we saw yesterday was , every reaction was fortuitous . They just swooped in the air and bound , and something happened . But in fact those molecules are spinning at the rate of about a million revolutions per second . They 're agitating back and forth their size every two nanoseconds . They 're completely crowded together . They 're jammed , they 're bashing up against each other . And if you do n't understand that in your mental model of this stuff , what happens inside of a cell seems completely mysterious and fortuitous . And I think that 's exactly the wrong image for when you 're trying to teach science . So another thing that we do is to confuse adult sophistication with the actual understanding of some principle . So a kid who 's 14 in high school gets this version of the Pythagorean theorem , which is a truly subtle and interesting proof , but in fact it 's not a good way to start learning about mathematics . So a more direct one , one that gives you more of the feeling of math , is something closer to Pythagoras ' own proof which goes like this . So here we have this triangle , and if we surround that C square with three more triangles and we copy that , notice that we can move those triangles down like this , and that leaves two open areas that are kind of suspicious , and bingo . And that is all you have to do . And this kind of proof is the kind of proof that you need to learn when you 're learning mathematics in order to get an idea of what it means before you look into the , literally , 12 or 1500 proofs of Pythagoras ' theorem that had been discovered . Now let 's go to young children . This is a very unusual teacher who was a kindergarten and first-grade teacher , but was a natural mathematician . So she was like that jazz musician friend you have who never studied music , but is a terrific musician . She just had a feeling for math , and here are her six-year-olds , and she 's got them making shapes out of a shape . So they pick a shape they like -- a diamond , or a square , or a triangle , or a trapezoid -- and then they try and make the next larger shape of that same shape , and the next larger shape . And you can see the trapezoids are a little challenging there . And [ what ] this teacher did on every project was to have the children act like first it was a creative arts project and then something like science . So they 'd created these artifacts . Now she had them look at them and do this laborious -- which I thought for a long time , until she explained to me , was to slow them down so they 'll think . So they 're cutting out the little pieces of cardboard here , and pasting them up . But the whole point of this thing is for them to look at this chart and fill it out . What have you noticed about what you did ? And so six-year-old Lauren there noticed that the first one took one , and the second one took three more , and the total was four on that one . The third one took five more , and the total was nine on that one , and then the next one . So she saw right away that the additional tiles that you had to add around the edges was always going to grow by two . So she was very confident about how she made those numbers there . And she could see that these were the square numbers up until about six . Where she was n't sure what six times six was , and what seven times seven was . But then she was confident again . So that 's what Lauren did . And then the teacher , Gillian Ishijima , had the kids bring all of their projects up to the front of the room and put them on the floor . And everybody went batshit . Holy shit ! They 're the same ! No matter what the shapes were , the growth law is the same . And the mathematicians and scientists in the crowd will recognize these two progressions as a first order discrete differential equation , and a second order discrete differential equation . Derived by six-year-olds . Well , that 's pretty amazing . That is n't what we usually try to teach six-year-olds . So let 's take a look now at how we might use the computer for some of this . And so the first idea here is just to show you the kind of things that children do . I 'm using the software that we 're putting on the 100 dollar laptop . So I 'd like to draw a little car here . I 'll just do this very quickly . And put a big tire on him . And I get a little object here , and I can look inside this object . I 'll call it a car . And here 's a little behavior : car forward . Each time I click it , car turn . If I want to make a little script to do this over and over again , I just drag these guys out and set them going . And I can try steering the car here by -- see the car turn by five here ? So what if I click this down to zero ? It goes straight . That 's a bit of a revelation for nine-year-olds . Make it go in the other direction . But of course that 's a little bit like kissing your sister as far as driving a car . So the kids want to do a steering wheel . So they draw a steering wheel . And we 'll call this a wheel . And , see this wheel 's heading here ? If I turn this wheel , you can see that number over there going minus and positive . That 's kind of an invitation to pick up this name of those numbers coming out there and to just drop it into the script here . And now I can steer the car with the steering wheel . And it 's interesting . You know how much trouble the children have with variables , but by learning it this way , in a situated fashion , they never forget from this single trial what a variable is and how to use it . And we can reflect here the way Gillian Ishijima did . So if you look at the little script here , the speed is always going to be 30. We 're going to move the car , according to that , over and over again . And I 'm dropping a little dot for each one of these things . They 're evenly spaced because they 're 30 apart . And what if I do this progression that the six-year-olds did of saying , OK , I 'm going to increase the speed by two each time , and then I 'm going to increase the distance by the speed each time ? What do I get there ? We get a visual pattern of what these nine-year-olds called acceleration . So how did the children do science ? ( Video ) Teacher : Objects that you think will fall to the earth at the same time -- Kid : This is nice . Teacher : Do not pay any attention to what anybody else is doing . Who 's got the apple ? Alan Kay : They 've got little stopwatches . Teacher : What do you get ? What did you get ? AK : Stopwatches are n't accurate enough . Girl : 0.99 seconds . Teacher : So put " sponge ball " -- Girl : There was a shot-put and a sponge ball , because they 're two totally different weights . And if you drop them at the same time , maybe they 'll drop at the same speed . Teacher : Drop . AK : So obviously Aristotle never asked a child about this particular point , because of course he did n't bother doing the experiment , and neither did St. Thomas Aquinas . And it was not until Galileo actually did it that an adult thought like a child . Only 400 years ago . We get one child like that about every classroom of 30 kids who will actually cut straight to the chase . Now , what if we want to look at this more closely ? We can take a movie of what 's going on , but even if we single stepped this movie , it 's tricky to see what 's going on . And so what we can do is , we can lay out the frames side by side , or stack them up . So when the children see this , they say , " Ah , acceleration , " remembering back four months when they did their cars sideways , and they start measuring to find out what kind of acceleration it is . And so what I 'm doing is measuring from the bottom of one image to the bottom of the next image , about a fifth of a second later , like that , and they 're getting faster and faster each time . And if I stack these guys up , then we see the differences , the increase in the speed is constant . And they say , oh , yeah , constant acceleration . We 've done that already . And how shall we look and verify that we actually have it ? So we ca n't tell much from just making the ball drop there , but if we drop the ball and run the movie at the same time , we can see that we have come up with an accurate physical model . Galileo , by the way , did this very cleverly by running a ball down backwards down the strings of his lute . I pulled out those apples to remind myself to tell you that this is actually probably a Newton and the apple-type story , but it 's a great story . And I thought I would do just one thing on the 100 dollar laptop here just to prove that this stuff works here . So once you have gravity , here 's this -- increase the speed by something , increase the ship 's speed . If I start the little game here that the kids have done , it 'll crash the space ship . But if I oppose gravity , here we go -- oops ! ( Laughter ) One more . Yeah , there we go . Yeah , OK ? I guess the best way to end this is with two quotes . Marshall McLuhan said , " Children are the messages that we send to the future . " But in fact , if you think of it , children are the future we send to the future . Forget about messages . Children are the future . And children in the first and second world , and most especially in the third world , need mentors . And this summer we 're going to build 5 million of these 100 dollar laptops and maybe 50 million next year . But we could n't create a thousand new teachers this summer to save our life . And that means that we once again have a thing where we can put technology out , but the mentoring that is required to go from a simple new iChat instant messaging system to something with depth is missing . I believe this has to be done with a new kind of user interface . And this new kind of user interface could be done with an expenditure of about 100 million dollars . It sounds like a lot , but it is literally 18 minutes of what we 're spending in Iraq . We 're spending 8 billion dollars a month . 18 minutes is 100 million dollars . So this is actually cheap . And Einstein said , " Things should be as simple as possible , but not simpler . " Thank you . </content>
</text>
<text id="ted/alex_tabarrok_foresees_economic_growth">
The first half of the twentieth century was an absolute disaster in human affairs , a cataclysm . We had the First World War , the Great Depression , the Second World War , and the rise of the communist nations . And each one of these forces split the world , tore the world apart , divided the world . And they threw up walls , political walls , trade walls , transportation walls , communication walls , iron curtains , which divided peoples and nations . It was only in the second half of the twentieth century that we slowly began to pull ourselves out of this abyss . Trade walls began to come tumbling down . Here are some data on tariffs : starting at 40 percent , coming down to less than 5 percent . We globalized the world . And what does that mean ? It means that we extended cooperation across national boundaries . We made the world more cooperative . Transportation walls came tumbling down . You know in 1950 the typical ship carried 5,000 to 10,000 tons worth of goods . Today a container ship can carry 150,000 tons . It can be manned with a smaller crew , and unloaded faster than ever before . Communication walls , I do n't have to tell you , the internet , have come tumbling down . And of course the iron curtains , political walls have come tumbling down . Now all of this has been tremendous for the world . Trade has increased . Here is just a little bit of data . In 1990 exports from China to the United States -- 15 billion dollars . By 2007 , over 300 billion dollars . And perhaps most remarkably , at the beginning of the twenty-first century , really for the first time in modern history , growth extended to almost all parts of the world . So China , I 've already mentioned , beginning in 1978 , around the time of the death of Mao , growth -- ten percent a year . Year after year after year , absolutely incredible . Never before in human history have so many people been raised out of such great poverty , as happened in China . China is the world 's greatest anti-poverty program over the last three decades . India , starting a little bit later , but in 1990 , begetting tremendous growth . Incomes at that time less than 1,000 dollars per year . And over the next 18 years have almost tripled . Growth of six percent a year . Absolutely incredible . Now Africa , Sub-Saharan Africa , Sub-Saharan Africa has been the area of the world most resistant to growth . And we can see the tragedy of Africa in the first few bars here . Growth was negative . People were actually getting poorer than their parents . And sometimes even poorer than their grandparents had been . But at the end of the twentieth century , the beginning of the twenty-first century , we saw growth in Africa . And I think , as you 'll see , there 's reasons for optimism . Because I believe that the best is yet to come . Now why . On the cutting edge today it 's new ideas which are driving growth . And by that I mean it 's products for which the research and development costs are really high , and the manufacturing costs are low . More than ever before it is these types of ideas which are driving growth on the cutting edge . Now ideas have this amazing property . Thomas Jefferson , I think , really expressed this quite well . He said , " He who receives an idea from me receives instruction himself , without lessening mine . As he who lights his candle at mine receives light without darkening me . Or to put it slightly differently , one apple feeds one man , but an idea can feed the world . Now this is not new . This is practically not new to TEDsters . This is practically the model of TED . What is new is that the greater function of ideas is going to drive growth even more than ever before . This provides a reason why trade and globalization are even more important , more powerful than ever before , and are going to increase growth more than ever before . And to explain why this is so , I have a question . Suppose that there are two diseases . One of them is rare , the other one is common . But if they are not treated they are equally severe . If you had to choose , which would you rather have ? The common disease or the rare disease ? Common . The common . I think that 's absolutely right . Why ? Because there are more drugs to treat common diseases than there are to treat rare diseases . The reason for this is incentives . It costs about the same to produce a new drug , whether that drug treats 1,000 people , 100,000 people , or a million people . But the revenues are much greater if the drug treats a million people . So the incentives are much larger to produce drugs which treat more people . To put this differently , larger markets save lives . In this case misery truly does love company . Now think about the following : if China and India were as rich as the United States is today , the market for cancer drugs would be eight times larger than it is now . Now we are not there yet , but it is happening . As other countries become richer the demand for these pharmaceuticals is going to increase tremendously . And that means an increase incentive to do research and development , which benefits everyone in the world . Larger markets increase the incentive to produce all kinds of ideas . Whether it 's software , whether it 's a computer chip , whether it 's a new design . For the Hollywood people in the audience , it even explains why action movies have larger budgets than comedies . It 's because action movies translate easier into other languages and other cultures . So the market for those movies is larger . People are willing to invest more , and the budgets are larger . Alright . Well if larger markets increase the incentive to produce new ideas , how do we maximize that incentive ? It 's by having one world market , by globalizing the world . The way I like to put this is , one idea , ideas are meant to be shared , so one idea can serve one world , one market . One idea , one world , one market . Well how else can we create new ideas ? That 's one reason . Globalize , trade . How else can we create new ideas ? Well , more idea creators . Now idea creators , they come from all walks of life . Artists and innovators , many of the people you 've seen on this stage . I 'm going to focus on scientists and engineers because I have some data on that , and I 'm a data person . Now , today , less than 1/10th of one percent of the world 's population are scientists and engineers . ( Laughter ) The United States has been an idea leader . A large fraction of those people are in the United States . But the U. S. is losing its idea leadership . And for that I am very grateful . That is a good thing . It is fortunate that we are becoming less of an idea leader because for too long the United States , and a handful of other developed countries , have shouldered the entire burden of research and development . But consider the following : if the world as a whole were as wealthy as the United States is now there would be more than five times as many scientists and engineers contributing to ideas which benefit everyone , which are shared by everyone . I think of the great Indian mathematician , Ramanujan . How many Ramanujans are there in India today toiling in the fields , barely able to feed themselves , when they could be feeding the world ? Now we 're not there yet . But it is going to happen in this century . The real tragedy of the last century is this : if you think about the world 's population as a giant computer , a massively parallel processor , then the great tragedy has been that billions of our processors have been off line . But in this century China is coming on line . India is coming on line . Africa is coming on line . We will see an Einstein in Africa in this century . Here is just some data . This is China . 1996 , less than one million new university students in China , per year . 2006 , over five million . Now think what this means . This means we all benefit when another country gets rich . We should not fear other countries becoming wealthy . That is something that we should embrace -- a wealthy China , a wealthy India , a wealthy Africa . We need a greater demand for ideas , those larger markets I was talking about earlier , and a greater supply of ideas for the world . Now you can see some of the reasons why I 'm optimistic . Globalization is increasing the demand for ideas , the incentive to create new ideas . Investments in education are increasing the supply of new ideas . In fact if you look at world history you can see some reasons for optimism . From about the beginnings of humanity to 1500 , zero economic growth , nothing . 1500 to 1800 , maybe a little bit of economic growth . But less in a century than you expect to see in a year today . 1900s maybe one percent . Twentieth century a little bit over two percent . Twenty-first century could easily be 3.3 even higher percent . Even at that rate by 2100 , average GDP per capita in the world will be 200,000 dollars . That 's not U. S. GDP per capita , which will be over a million . But world GDP per capita , 200,000 dollars . That 's not that far . We wo n't make it . But some of our grandchildren probably will . And I should say I think this is a rather modest prediction . In Kurzweilian terms this is gloomy . In Kurzweilian terms I 'm like the Eeyore of economic growth . ( Laughter ) Alright what about problems ? What about a great depression ? Well let 's take a look . Let 's take a look at the Great Depression . Here is GDP per capita from 1900 to 1929. Now let 's imagine that you were an economist in 1929 , trying to forecast future growth for the United States , not knowing that the economy was about to go off a cliff . Not knowing that we were about to enter the greatest economic disaster certainly in the twentieth century . What would you have predicted not knowing this ? If you had based your prediction , your forecast on 1900 to 1929 you 'd have predicted something like this . If you 'd been a little more optimistic , say based upon the roaring 20s , you 'd have said this . So what actually happened ? We went off a cliff but we recovered . In fact in the second half of the twentieth century growth was even higher than anything you would have predicted based upon the first half of the twentieth century . So growth can wash away even what appears to be a great depression . Alright . What else ? Oil . Oil . This was a big topic . When I was writing up my notes oil was 140 dollars per barrel . So people were asking a question . The were saying , " Is China drinking our milkshake ? " ( Laughter ) And there is some truth to this in the sense that we have something of a finite resource . And increased growth is going to push up demand for that . But I think I do n't have to tell this audience that a higher price of oil is not necessarily a bad thing . Moreover , as everyone knows , look it 's energy , not oil , which counts . And higher oil prices mean a greater incentive to invest in energy R&D . You can see this in the data . As oil prices go up , energy patents go up . The world is much better equipped to overcome an increase in the price of oil today , than ever in the past , because of what I 'm talking about . One idea , one world , one market . So I 'm optimistic so long as we hew to these two ideas : to keep globalizing world markets , keep extending cooperation across national boundaries , and keep investing in education . Now the United States has a particularly important role to play in this -- to keep our education system globalized , to keep our education system open to students from all over the world -- because our education system is the candle that other students come to to light their own candles . Now remember here what Jefferson said . Jefferson said , " When they come and light their candles at ours , that they gain light , and we are not darkened . " But Jefferson was n't quite right , was he ? Because the truth is , when they light their candles at ours , there is twice as much light available for everyone . So my view is be optimistic . Spread the ideas . Spread the light . Thank you . ( Applause ) </content>
</text>
<text id="ted/amy_tan_on_creativity">
The value of nothing : out of nothing comes something . That was an essay I wrote when I was 11 years old and I got a B+ . ( Laughter ) What I 'm going to talk about : nothing out of something , and how we create . And I 'm gonna try and do that within the 18-minute time span that we were told to stay within , and to follow the TED commandments : that is , actually , something that creates a near-death experience , but near-death is good for creativity . ( Laughter ) OK . So , I also want to explain , because Dave Eggers said he was going to heckle me if I said anything that was a lie , or not true to universal creativity . And I 've done it this way for half the audience , who is scientific . When I say we , I do n't mean you , necessarily ; I mean me , and my right brain , my left brain , and the one that 's in between that is the censor and tells me what I 'm saying is wrong . And I 'm going do that also by looking at what I think is part of my creative process , which includes a number of things that happened , actually -- the nothing started even earlier than the moment in which I 'm creating something new . And that includes nature , and nurture , and what I refer to as nightmares . Now in the nature area , we look at whether or not we are innately equipped with something , perhaps in our brains , some abnormal chromosome that causes this muse-like effect . And some people would say that we 're born with it in some other means , and others , like my mother , would say that I get my material from past lives . Some people would also say that creativity may be a function of some other neurological quirk -- van Gogh syndrome -- that you have a little bit of , you know , psychosis , or depression . I do have to say , somebody -- I read recently that van Gogh was n't really necessarily psychotic , that he might have had temporal lobe seizures , and that might have caused his spurt of creativity , and I do n't -- I suppose it does something in some part of your brain . And I will mention that I actually developed temporal lobe seizures a number of years ago , but it was during the time I was writing my last book , and some people say that book is quite different . I think that part of it also begins with a sense of identity crisis : you know , who am I , why am I this particular person , why am I not black like everybody else ? And sometimes you 're equipped with skills , but they may not be the kind of skills that enable creativity . I used to draw . I thought I would be an artist . And I had a miniature poodle . And it was n't bad , but it was n't really creative . Because all I could really do was represent in a very one-on-one way . And I have a sense that I probably copied this from a book . And then I also was n't really shining in a certain area that I wanted to be , and you know , you look at those scores , and it was n't bad , but it was not certainly predictive that I would one day make my living out of the artful arrangement of words . Also , one of the principles of creativity is to have a little childhood trauma . And I had the usual kind that I think a lot of people had , and that is that , you know , I had expectations placed on me . That figure right there , by the way , figure right there was a toy given to me when I was but nine years old , and it was to help me become a doctor from a very early age . I have some ones that were long lasting : from the age of five to 15 , this was supposed to be my side occupation , and it led to a sense of failure . But actually there was something quite real in my life that happened when I was about 14. And it was discovered that my brother , in 1967 , and then my father , six months later , had brain tumors . And my mother believed that something had gone wrong , and she was gonna find out what it was . And she was gonna fix it . My father was a Baptist minister , and he believed in miracles , and that God 's will would take care of that . But of course , they ended up dying , six months apart . And after that , my mother believed that it was fate , or curses -- she went looking through all the reasons in the universe why this would have happened . Everything except randomness . She did not believe in randomness . There was a reason for everything . And one of the reasons , she thought , was that her mother , who had died when she was very young , was angry at her . And so I had this notion of death all around me because my mother also believed that I would be next , and she would be next And when you are faced with the prospect of death very soon , you begin to think very much about everything . You become very creative , in a survival sense . And this , then , led to my big questions . And they 're the same ones that I have today . And they are : Why do things happen , and how do things happen ? And the one my mother asked : How do I make things happen ? It 's a wonderful way to look at these questions , when you write a story . Because after all , in that framework , between page one and 300 , you have to answer this question of why things happen , how things happen , in what order they happen . What are the influences ? How do I , as the narrator , as the writer , also influence that ? And it 's also one that I think many of our scientists have been asking . It 's a kind of cosmology , and I have to develop a cosmology of my own universe , as the creator of that universe . And you see , there 's a lot of back and forth in trying to make that happen , trying to figure it out -- years and years , oftentimes . So when I look at creativity , I also think that it is this sense or this inability to repress my looking at associations in practically anything in life . And I got a lot of them during what 's been going on throughout this conference , almost everything that 's been going on . And so I 'm going to use , as the metaphor , this association : quantum mechanics , which I really do n't understand , but I 'm still gonna use it as the process for explaining how it is the metaphor . So in quantum mechanics , of course , you have dark energy and dark matter . And it 's the same thing in looking at these questions of how things happen . There 's a lot of unknown , and you often do n't know what it is except by its absence . But when you make those associations , you want them to come together in a kind of synergy in the story , and what you 're finding is what matters . The meaning . And that 's what I look for in my work , a personal meaning . There is also the uncertainty principle , which is part of quantum mechanics , as I understand it . ( Laughter ) And this happens constantly in the writing . And there 's the terrible and dreaded observer effect , in which you 're looking for something , and you know , things are happening simultaneously , and you 're looking at it in a different way , and you 're trying to really look for the about-ness . Or what is this story about . And if you try too hard , then you will only write the about . You wo n't discover anything . And what you were supposed to find , what you hoped to find , in some serendipitous way , is no longer there . Now , I do n't want to ignore the other side of what happens in our universe , like many of our scientists have . And so I am going to just throw in string theory here , and just say that creative people are multi-dimensional , and there are eleven levels , I think , of anxiety . ( Laughter ) And they all operate at the same time . There is also a big question of ambiguity . And I would link that to something called the cosmological constant . And you do n't know what is operating , but something is operating there . And ambiguity , to me , is very uncomfortable in my life , and I have it . Moral ambiguity . It is constantly there . And just as an example , this is one that recently came to me . It was something I read in an editorial by a woman who was talking about the war in Iraq . And she said , " Save a man from drowning , you are responsible to him for life . " A very famous Chinese saying , she said . And that means because we went into Iraq , we should stay there until things were solved . You know , maybe even 100 years . So there was another one that I came across , and it 's " saving fish from drowning . " And it 's what Buddhist fishermen say , because they 're not supposed to kill anything . And they also have to make a living , and people need to be fed . So their way of rationalizing that is they are saving the fish from drowning , and unfortunately in the process the fish die . Now what 's encapsulated in both these drowning metaphors -- actually , one of them is my mother 's interpretation , and it is a famous Chinese saying because she said it to me : " Save a man from drowning , you are responsible to him for life . " And it was a warning -- do n't get involved in other people 's business , or you 're going to get stuck . OK . I think if somebody really was drowning , she 'd save them . But both of these sayings , saving a fish from drowning , or saving a man from drowning , to me they had to do with intentions . And all of us in life , when we see a situation , we have a response . And then we have intentions . There 's an ambiguity of what that should be that we should do , and then we do something . And the results of that may not match what our intentions had been . Maybe things go wrong . And so , after that , what are our responsibilities ? What are we supposed to do ? Do we stay in for life , or do we do something else and justify and say , well , my intentions were good , and therefore I cannot be held responsible for all of it ? That is the ambiguity in my life that really disturbed me , and led me to write a book called Saving Fish From Drowning . I saw examples of that , once I identified this question . It was all over the place . I got these hints everywhere . And then , in a way , I knew that they had always been there . And then writing , that 's what happens . I get these hints , these clues , and I realize that they 've been obvious , and yet they have not been . And what I need , in effect , is a focus . And when I have the question , it is a focus . And all these things that seem to be flotsam and jetsam in life actually go through that question , and what happens is those particular things become relevant . And it seems like it 's happening all the time . You think there 's a sort of coincidence going on , a serendipity , in which you 're getting all this help from the universe . And it may also be explained that now you have a focus . And you are noticing it more often . But you apply this . You begin to look at things having to do with your tensions . Your brother , who 's fallen in trouble , do you take care of him ? Why or why not ? It may be something that is perhaps more serious -- as I said , human rights in Burma . I was thinking that I should n't go because somebody said if I did , it would show that I approved of the military regime there . And then after a while , I had to ask myself , " Why do we take on knowledge , why do we take on assumptions that other people have given us ? " And it was the same thing that I felt when I was growing up , and was hearing these rules of moral conduct from my father , who was a Baptist minister . So I decided that I would go to Burma for my own intentions , and still did n't know that if I went there , what the result of that would be if I wrote a book -- and I just would have to face that later , when the time came . We are all concerned with things that we see in the world that we are aware of . We come to this point and say , what do I as an individual do ? Not all of us can go to Africa , or work at hospitals , so what do we do if we have this moral response , this feeling ? Also , I think one of the biggest things we are all looking at , and we talked about today , is genocide . This leads to this question , when I look at all these things that are morally ambiguous and uncomfortable , and I consider what my intentions should be , I realize it goes back to this identity question that I had when I was a child -- and why am I here , and what is the meaning of my life , and what is my place in the universe ? It seems so obvious , and yet it is not . We all hate moral ambiguity in some sense , and yet it is also absolutely necessary . In writing a story , it is the place where I begin . Sometimes I get help from the universe , it seems . My mother would say it was the ghost of my grandmother from the very first book , because it seemed I knew things I was not supposed to know . Instead of writing that the grandmother died accidentally , from an overdose of opium while having too much of a good time , I actually put down in the story that the woman killed herself , and that actually was the way it happened . And my mother decided that that information must have come from my grandmother . There are also things , quite uncanny , which bring me information that will help me in the writing of the book . In this case , I was writing a story that included some kind of detail , period of history , a certain location . And I needed to find something historically that would match that . And I took down this book , and I -- first page that I flipped it to was exactly the setting , and the time period . And the kind of character I needed was the Taiping rebellion , happening in the area near Guilin , outside of that , and a character who thought he was the son of God . You wonder , are these things random chance ? Well , what is random ? What is chance ? What is luck ? What are things that you get from the universe that you ca n't really explain ? And that goes into the story too . These are the things I constantly think about from day to day . Especially when good things happen , and in particular , when bad things happen . But I do think there 's a kind of serendipity , and I do want to know what those elements are , so I can thank them , and also try to find them in my life . Because , again , I think that when I am aware of them , more of them happen . Another chance encounter is when I went to a place -- I just was with some friends , and we drove randomly to a different place , and we ended up in this non-tourist location , a beautiful village , pristine . And we walked three valleys beyond , and the third valley , there was something quite mysterious and ominous , a discomfort I felt . And then I knew that had to be setting of my book . And in writing one of the scenes , it happened in that third valley . For some reason I wrote about cairns -- stacks of rocks -- that a man was building . And I did n't know exactly why I had it , but it was so vivid . I got stuck , and a friend , when she asked if I would go for a walk with her dogs , that I said , sure . And about 45 minutes later , walking along the beach , I came across this . And it was a man , a Chinese man , and he was stacking these things , not with glue , not with anything . And I asked him how is it possible to do this ? And he said , well , I guess with everything in life , there 's a place of balance . And this was exactly the meaning of my story at that point . I had so many examples -- I have so many instances like this when I 'm writing a story , and I cannot explain it . Is it because I had the filter that I have such a strong coincidence in writing about these things ? Or is it a kind of serendipity that we cannot explain , like the cosmological constant ? A big thing that I also think about is accidents . And as I said , my mother did not believe in randomness . What is the nature of accidents ? And how are we going to assign what the responsibility and the causes are , outside of a court of law ? I was able to see that in a firsthand way , when I went to beautiful Dong village , in Guizhou , the poorest province of China . And I saw this beautiful place . I knew I wanted to come back . And I had a chance to do that when National Geographic asked me if I wanted to write anything about China . And I said yes , about this village of Singing people , Singing minority . And they agreed , and between the time I saw this place and the next time I went , there was a terrible accident . A man , an old man , fell asleep , and his quilt dropped in a pan of fire that kept him warm . 60 homes were destroyed , and 40 were damaged . Responsibility was assigned to the family . The man 's sons were banished to live three kilometers away , in a cow shed . And of course , as Westerners , we say , " Well , it was an accident . That 's not fair . It 's the son , not the father . " And when I go on a story , I have to let go of those kinds of beliefs . It takes a while , but I have to let go of them and just go there , and be there . And so I was there on three occasions , different seasons . And I began to sense something different about the history and what had happened before , and the nature of life in a very poor village , and what you find as your joys , and your rituals , your traditions , your links with other families . And I saw how this had a kind of justice in its responsibility . I was able to find out also about the ceremony that they were using , a ceremony they had n't used in about 29 years . And it was to send some men -- a Feng Shui master sent men down to the underworld on ghost horses . Now you , as Westerners , and I , as Westerners , would say well , that 's superstition . But after being there for a while , and seeing the amazing things that happened , you begin to wonder whose beliefs are those that are in operation in the world , determining how things happen . So I remained with them , and the more I wrote that story , the more I got in to those beliefs , and I think that 's important for me -- to take on the beliefs , because that is where the story is real , and that is where I 'm gonna find the answers to how I feel about certain questions that I have in life . Years go by , of course , and the writing , it does n't happen instantly , as I 'm trying to convey it to you here at TED . The book comes and it goes . When it arrives , it is no longer my book . It is in the hands of readers , and they interpret it differently . But I go back to this question of , how do I create something out of nothing ? And how do I create my own life ? And I think it is by questioning , and saying to myself that there are no absolute truths . I believe in specifics , the specifics of story , and the past , the specifics of that past , and what is happening in the story at that point . I also believe that in thinking about things , my thinking about luck , and fate , and coincidences and accidents , God 's will , and the synchrony of mysterious forces , I will come to some notion of what that is , how we create . I have to think of my role . Where I am in the universe , and did somebody intend for me to be that way , or is it just something I came up with ? And I also can find that by imagining fully , and becoming what is imagined , and yet is in that real world , the fictional world . And that is how I find particles of truth , not the absolute truth , or the whole truth . And they have to be in all possibilities , including those I never considered before . So there are never complete answers . Or rather , if there is an answer , it is to remind myself that there is uncertainty in everything , and that is good . Because then I will discover something new . And if there is a partial answer , a more complete answer from me , it is to simply imagine . And to imagine is to put myself in that story , until there was only -- there is a transparency between me and the story I am creating . And that 's how I 've discovered that if I feel what is in the story -- in one story -- then I come the closest , I think , to knowing what compassion is , to feeling that compassion . Because for everything , in that question of how things happen , it has to do with the feeling . I have to become the story in order to understand a lot of that . We 've come to the end of the talk , and I will reveal what is in the bag , and it is the muse , and it is the things that transform in our lives , that are wonderful and stay with us . There she is . Thank you very much ! ( Applause ) </content>
</text>
<text id="ted/barry_schwartz_on_the_paradox_of_choice">
I 'm going to talk to you about some stuff that 's in this book of mine that I hope will resonate with other things you 've already heard , and I 'll try to make some connections myself , in case you miss them . I want to start with what I call the " official dogma . " The official dogma of what ? The official dogma of all western industrial societies . And the official dogma runs like this : if we are interested in maximizing the welfare of our citizens , the way to do that is to maximize individual freedom . The reason for this is both that freedom is in and of itself good , valuable , worthwhile , essential to being human . And because if people have freedom , then each of us can act on our own to do the things that will maximize our welfare , and no one has to decide on our behalf . The way to maximize freedom is to maximize choice . The more choice people have , the more freedom they have , and the more freedom they have , the more welfare they have . This , I think , is so deeply embedded in the water supply that it would n't occur to anyone to question it . And it 's also deeply embedded in our lives . I 'll give you some examples of what modern progress has made possible for us . This is my supermarket . Not such a big one . I want to say just a word about salad dressing . 175 salad dressings in my supermarket , if you do n't count the 10 different extra-virgin olive oils and 12 balsamic vinegars you could buy to make a very large number of your own salad dressings , in the off chance that none of the 175 the store has on offer suit you . So this is what the supermarket is like . And then you go to the consumer electronics store to set up a stereo system -- speakers , CD player , tape player , tuner , amplifier . And in this one single consumer electronics store , there are that many stereo systems . We can construct six and a half million different stereo systems out of the components that are on offer in one store . You 've got to admit that 's a lot of choice . In other domains -- the world of communications . There was a time , when I was a boy , when you could get any kind of telephone service you wanted , as long as it came from Ma Bell . You rented your phone . You did n't buy it . One consequence of that , by the way , is that the phone never broke . And those days are gone . We now have an almost unlimited variety of phones , especially in the world of cell phones . These are cell phones of the future . My favorite is the middle one -- the MP3 player , nose hair trimmer , and creme brulee torch . And if by some chance you have n't seen that in your store yet , you can rest assured that one day soon you will . And what this does is it leads people to walk into their stores asking this question . And do you know what the answer to this question now is ? The answer is " No. " It is not possible to buy a cell phone that does n't do too much . So , in other aspects of life that are much more significant than buying things , The same explosion of choice is true . Health care -- it is no longer the case in the United States that you go to the doctor , and the doctor tells you what to do . Instead , you go to the doctor , and the doctor tells you , well , we could do A , or we could do B. A has these benefits , and these risks . B has these benefits , and these risks . What do you want to do ? And you say , " Doc , what should I do ? " And the doc says , A has these benefits and risks , and B has these benefits and risks . What do you want to do ? And you say , " If you were me , Doc , what would you do ? " And the doc says , " But I 'm not you . " And the result is -- we call it " patient autonomy , " which makes it sound like a good thing . But what it really is is a shifting of the burden and the responsibility for decision-making from somebody who knows something -- namely the doctor -- to somebody who knows nothing and is almost certainly sick and thus not in the best shape to be making decisions -- namely the patient . There 's enormous marketing of prescription drugs to people like you and me , which , if you think about it , makes no sense at all , since we ca n't buy them . Why do they market to us if we ca n't buy them ? The answer is that they expect us to call our doctors the next morning and ask prescriptions to be changed . Something as dramatic as our identity has now become a matter of choice , as this slide is meant to indicate . We do n't inherit an identity , we get to invent it . And we get to re-invent ourselves as often as we like . And that means that every day when you wake up in the morning , you have to decide what kind of person you want to be . With respect to marriage and family , there was a time when the default assumption that almost everyone had is that you got married as soon as you could , and then you started having kids as soon as you could . The only real choice was who , not when , and not what you did after . Nowadays , everything is very much up for grabs . I teach wonderfully intelligent students , and I assign 20 percent less work than I used to . And it 's not because they 're less smart , and it 's not because they 're less diligent . It 's because they are preoccupied , asking themselves , " Should I get married or not ? Should I get married now ? Should I get married later ? Should I have kids first , or a career first ? " All of these are consuming questions . And they 're going to answer these questions , whether or not it means not doing all the work I assign and not getting a good grade in my courses . And indeed they should . These are important questions to answer . Work -- we are blessed , as Carl was pointing out , with the technology that enables us to work every minute of every day from any place on the planet -- except the Randolph Hotel . ( Laughter ) There is one corner , by the way , that I 'm not going to tell anybody about , where the WiFi works . I 'm not telling you about it because I want to use it . So what this means , this incredible freedom of choice we have with respect to work , is that we have to make a decision , again and again and again , about whether we should or should n't be working . We can go to watch our kid play soccer , and we have our cell phone on one hip , and our Blackberry on our other hip , and our laptop , presumably , on our laps . And even if they 're all shut off , every minute that we 're watching our kid mutilate a soccer game , we are also asking ourselves , " Should I answer this cell phone call ? Should I respond to this email ? Should I draft this letter ? " And even if the answer to the question is " no , " it 's certainly going to make the experience of your kid 's soccer game very different than it would 've been . So everywhere we look , big things and small things , material things and lifestyle things , life is a matter of choice . And the world we used to live in looked like this . That is to say , there were some choices , but not everything was a matter of choice . And the world we now live in looks like this . And the question is , is this good news , or bad news ? And the answer is yes . ( Laughter ) We all know what 's good about it , so I 'm going to talk about what 's bad about it . All of this choice has two effects , two negative effects on people . One effect , paradoxically , is that it produces paralysis , rather than liberation . With so many options to choose from , people find it very difficult to choose at all . I 'll give you one very dramatic example of this , a study that was done of investments in voluntary retirement plans . A colleague of mine got access to investment records from Vanguard , the gigantic mutual fund company of about a million employees and about 2,000 different workplaces . And what she found is that for every 10 mutual funds the employer offered , rate of participation went down two percent . You offer 50 funds -- 10 percent fewer employees participate than if you only offer five . Why ? Because with 50 funds to choose from , it 's so damn hard to decide which fund to choose that you 'll just put it off until tomorrow . And then tomorrow , and then tomorrow , and tomorrow , and tomorrow , and of course tomorrow never comes . Understand that not only does this mean that people are going to have to eat dog food when they retire because they do n't have enough money to put away , it also means that making the decision is so hard that they pass up significant matching money from the employer . By not participating , they are passing up as much as 5,000 dollars a year from the employer , who would happily match their contribution . So paralysis is a consequence of having too many choices . And I think it makes the world look like this . ( Laughter ) You really want to get the decision right if it 's for all eternity , right ? You do n't want to pick the wrong mutual fund , or even the wrong salad dressing . So that 's one effect . The second effect is that even if we manage to overcome the paralysis and make a choice , we end up less satisfied with the result of the choice than we would be if we had fewer options to choose from . And there are several reasons for this . One of them is that with a lot of different salad dressings to choose from , if you buy one , and it 's not perfect -- and , you know , what salad dressing is ? It 's easy to imagine that you could have made a different choice that would have been better . And what happens is this imagined alternative induces you to regret the decision you made , and this regret subtracts from the satisfaction you get out of the decision you made , even if it was a good decision . The more options there are , the easier it is to regret anything at all that is disappointing about the option that you chose . Second , what economists call opportunity costs . Dan Gilbert made a big point this morning of talking about how much the way in which we value things depends on what we compare them to . Well , when there are lots of alternatives to consider , it is easy to imagine the attractive features of alternatives that you reject , that make you less satisfied with the alternative that you 've chosen . Here 's an example . For those of you who are n't New Yorkers , I apologize . ( Laughter ) But here 's what you 're supposed to be thinking . Here 's this couple on the Hamptons . Very expensive real estate . Gorgeous beach . Beautiful day . They have it all to themselves . What could be better ? " Well , damn it , " this guy is thinking , " It 's August . Everybody in my Manhattan neighborhood is away . I could be parking right in front of my building . " And he spends two weeks nagged by the idea that he is missing the opportunity , day after day , to have a great parking space . Opportunity costs subtract from the satisfaction we get out of what we choose , even when what we choose is terrific . And the more options there are to consider , the more attractive features of these options are going to be reflected by us as opportunity costs . Here 's another example . Now this cartoon makes a lot of points . It makes points about living in the moment as well , and probably about doing things slowly . But one point it makes is that whenever you 're choosing one thing , you 're choosing not to do other things . And those other things may have lots of attractive features , and it 's going to make what you 're doing less attractive . Third : escalation of expectations . This hit me when I went to replace my jeans . I wear jeans almost all the time . And there was a time when jeans came in one flavor , and you bought them , and they fit like crap , and they were incredibly uncomfortable , and if you wore them long enough and washed them enough times , they started to feel OK . So I went to replace my jeans after years and years of wearing these old ones , and I said , " You know , I want a pair of jeans , here 's my size . " And the shopkeeper said , " Do you want slim fit , easy fit , relaxed fit ? You want button fly or zipper fly ? You want stonewashed or acid washed ? Do you want them distressed ? You want boot cut , you want tapered , blah blah blah ... " On and on he went . My jaw dropped , and after I recovered , I said , " I want the kind that used to be the only kind . " ( Laughter ) He had no idea what that was , so I spent an hour trying on all these damn jeans , and I walked out of the store -- truth be told -- with the best fitting jeans I had ever had . I did better . All this choice made it possible for me to do better . But I felt worse . Why ? I wrote a whole book to try and explain this to myself . The reason I felt worse is that , with all of these options available , my expectations about how good a pair of jeans should be went up . I had very low expectations . I had no particular expectations when they only came in one flavor . When they came in 100 flavors , damn it , one of them should 've been perfect . And what I got was good , but it was n't perfect . And so I compared what I got to what I expected , and what I got was disappointing in comparison to what I expected . Adding options to people 's lives ca n't help but increase the expectations people have about how good those options will be . And what that 's going to produce is less satisfaction with results , even when they 're good results . Nobody in the world of marketing knows this . Because if they did , you would n't all know what this was about . The truth is more like this . ( Laughter ) The reason that everything was better back when everything was worse is that when everything was worse , it was actually possible for people to have experiences that were a pleasant surprise . Nowadays , the world we live in -- we affluent , industrialized citizens , with perfection the expectation -- the best you can ever hope for is that stuff is as good as you expect it to be . You will never be pleasantly surprised because your expectations , my expectations , have gone through the roof . The secret to happiness -- this is what you all came for -- the secret to happiness is low expectations . ( Laughter ) ( Applause ) I want to say -- just a little autobiographical moment -- that I actually am married to a wife , and she 's really quite wonderful . I could n't have done better . I did n't settle . But settling is n't always such a bad thing . Finally , one consequence of buying a bad-fitting pair of jeans when there is only one kind to buy is that when you are dissatisfied , and you ask why , who 's responsible , the answer is clear . The world is responsible . What could you do ? When there are hundreds of different styles of jeans available , and you buy one that is disappointing , and you ask why , who 's responsible ? It is equally clear that the answer to the question is you . You could have done better . With a hundred different kinds of jeans on display , there is no excuse for failure . And so when people make decisions , and even though the results of the decisions are good , they feel disappointed about them , they blame themselves . Clinical depression has exploded in the industrial world in the last generation . I believe a significant -- not the only , but a significant contributor to this explosion of depression , and also suicide , is that people have experiences that are disappointing because their standards are so high . And then when they have to explain these experiences to themselves , they think they 're at fault . And so the net result is that we do better in general , objectively , and we feel worse . So let me remind you . This is the official dogma , the one that we all take to be true , and it 's all false . It is not true . There 's no question that some choice is better than none , but it does n't follow from that that more choice is better than some choice . There 's some magical amount . I do n't know what it is . I 'm pretty confident that we have long since passed the point where options improve our welfare . Now , as a policy matter -- I 'm almost done -- as a policy matter , the thing to think about is this . What enables all of this choice in industrial societies is material affluence . There are lots of places in the world , and we have heard about several of them , where their problem is not that they have too much choice . Their problem is that they have too little . So the stuff I 'm talking about is the peculiar problem of modern , affluent , Western societies . And what is so frustrating and infuriating is this : Steve Levitt talked to you yesterday about how these expensive and difficult to install child seats do n't help . It 's a waste of money . What I 'm telling you is that these expensive , complicated choices -- it 's not simply that they do n't help . They actually hurt . They actually make us worse off . If some of what enables people in our societies to make all of the choices we make were shifted to societies in which people have too few options , not only would those people 's lives be improved , but ours would be improved also . This is what economists call a Pareto-improving move . Income redistribution will make everyone better off -- not just poor people -- because of how all this excess choice plagues us . So to conclude . You 're supposed to read this cartoon , and , being a sophisticated person , say , " Ah ! What does this fish know ? You know nothing is possible in this fishbowl . " Impoverished imagination , a myopic view of the world -- and that 's the way I read it at first . The more I thought about it , however , the more I came to the view that this fish knows something . Because the truth of the matter is that if you shatter the fishbowl so that everything is possible , you do n't have freedom . You have paralysis . If you shatter this fishbowl so that everything is possible , you decrease satisfaction . You increase paralysis , and you decrease satisfaction . Everybody needs a fishbowl . This one is almost certainly too limited -- perhaps even for the fish , certainly for us . But the absence of some metaphorical fishbowl is a recipe for misery , and , I suspect , disaster . Thank you very much . ( Applause ) </content>
</text>
<text id="ted/benjamin_wallace_on_the_price_of_happiness">
I 'm just going to play a brief video clip . Video : 50,000 pounds . On the fifth of December 1985 , a bottle of 1787 Lafitte was sold for 105,000 pounds -- nine times the previous world record . Mr. Forbes . The buyer was Kip Forbes , son of one of the most flamboyant millionaires of the 20th century . The original owner of the bottle turned out to be one of the most enthusiastic wine buffs of the 18th century . Château Lafitte is one of the greatest wines in the world , the prince of any wine cellar . Benjamin Wallace : Now , that 's about all the videotape that remains of an event that set off the longest-running mystery in the modern wine world . And the mystery existed because of a gentleman named Hardy Rodenstock . In 1985 , he announced to his friends in the wine world that he had made this incredible discovery . Some workmen in Paris had broken through a brick wall , and happened upon this hidden cache of wines -- apparently the property of Thomas Jefferson . 1787 , 1784. He would n't reveal the exact number of bottles , he would not reveal exactly where the building was and he would not reveal exactly who owned the building . The mystery persisted for about 20 years . It finally began to get resolved in 2005 because of this guy . Bill Koch is a Florida billionaire who owns four of the Jefferson bottles , and he became suspicious . And he ended up spending over a million dollars and hiring ex-FBI and ex-Scotland Yard agents to try to get to the bottom of this . There 's now ample evidence that Hardy Rodenstock is a con man , and that the Jefferson bottles were fakes . But for those 20 years , an unbelievable number of really eminent and accomplished figures in the wine world were sort of drawn into the orbit of these bottles . I think they wanted to believe that the most expensive bottle of wine in the world must be the best bottle of wine in the world , must be the rarest bottle of wine in the world . I became increasingly , kind of voyeuristically interested in the question of you know , why do people spend these crazy amounts of money , not only on wine but on lots of things , and are they living a better life than me ? So , I decided to embark on a quest . With the generous backing of a magazine I write for sometimes , I decided to sample the very best , or most expensive , or most coveted item in about a dozen categories , which was a very grueling quest , as you can imagine . ( Laughter ) This was the first one . A lot of the Kobe beef that you see in the U. S. is not the real thing . It may come from Wagyu cattle , but it 's not from the original , Appalachian Hyogo Prefecture in Japan . There are very few places in the U. S. where you can try real Kobe , and one of them is Wolfgang Puck 's restaurant , CUT , in Los Angeles . I went there , and I ordered the eight-ounce rib eye for 160 dollars . And it arrived , and it was tiny . And I was outraged . It was like , 160 dollars for this ? And then I took a bite , and I wished that it was tinier , because Kobe beef is so rich . It 's like foie gras -- it 's not even like steak . I almost could n't finish it . I was really happy when I was done . ( Laughter ) Now , the photographer who took the pictures for this project for some reason posed his dog in a lot of them , so that 's why you 're going to see this recurring character . Which , I guess , you know , communicates to you that I did not think that one was really worth the price . White truffles . One of the most expensive luxury foods by weight in the world . To try this , I went to a Mario Batali restaurant in Manhattan -- Del Posto . The waiter , you know , came out with the white truffle knob and his shaver , and he shaved it onto my pasta and he said , you know , " Would Signore like the truffles ? " And the charm of white truffles is in their aroma . It 's not in their taste , really . It 's not in their texture . It 's in the smell . These white pearlescent flakes hit the noodles , this haunting , wonderful , nutty , mushroomy smell wafted up . 10 seconds passed and it was gone . And then I was left with these little ugly flakes on my pasta that , you know , their purpose had been served , and so I 'm afraid to say that this was also a disappointment to me . There were several -- several of these items were disappointments . ( Laughter ) Yeah . The magazine would n't pay for me to go there . ( Laughter ) They did give me a tour , though . And this hotel suite is 4,300 square feet . It has 360-degree views . It has four balconies . It was designed by the architect I. M. Pei . It comes with its own Rolls Royce and driver . It comes with its own wine cellar that you can draw freely from . When I took the tour , it actually included some Opus One , I was glad to see . 30,000 dollars for a night in a hotel . This is soap that 's made from silver nanoparticles , which have antibacterial properties . I washed my face with this this morning in preparation for this . And it , you know , tickled a little bit and it smelled good , but I have to say that nobody here has complimented me on the cleanliness of my face today . ( Laughter ) But then again , nobody has complimented me on the jeans I 'm wearing . These ones GQ did spring for -- I own these -- but I will tell you , not only did I not get a compliment from any of you , I have not gotten a compliment from anybody in the months that I have owned and worn these . I do n't think that whether or not you 're getting a compliment should be the test of something 's value , but I think in the case of a fashion item , an article of clothing , that 's a reasonable benchmark . That said , a lot of work goes into these . They are made from handpicked organic Zimbabwean cotton that has been shuttle loomed and then hand-dipped in natural indigo 24 times . But no compliments . ( Laughter ) Thank you . Armando Manni is a former filmmaker who makes this olive oil from an olive that grows on a single slope in Tuscany . And he goes to great lengths to protect the olive oil from oxygen and light . He uses tiny bottles , the glass is tinted , he tops the olive oil off with an inert gas . And he actually -- once he releases a batch of it , he regularly conducts molecular analyses and posts the results online , so you can go online and look at your batch number and see how the phenolics are developing , and , you know , gauge its freshness . I did a blind taste test of this with 20 people and five other olive oils . It tasted fine . It tasted interesting . It was very green , it was very peppery . But in the blind taste test , it came in last . The olive oil that came in first was actually a bottle of Whole Foods 365 olive oil which had been oxidizing next to my stove for six months . ( Laughter ) A recurring theme is that a lot of these things are from Japan -- you 'll start to notice . I do n't play golf , so I could n't actually road test these , but I did interview a guy who owns them . Even the people who market these clubs -- I mean , they 'll say these have four axis shafts which minimize loss of club speed and thereby drive the ball farther -- but they 'll say , look , you know , you 're not getting 57,000 dollars worth of performance from these clubs . You 're paying for the bling , that they 're encrusted with gold and platinum . The guy who I interviewed who owns them did say that he 's gotten a lot of pleasure out of them , so ... Oh , yeah , you know this one ? This is a coffee made from a very unusual process . The luwak is an Asian Palm Civet . It 's a cat that lives in trees , and at night it comes down and it prowls the coffee plantations . And apparently it 's a very picky eater and it , you know , homes in on only the ripest coffee cherries . And then an enzyme in its digestive tract leeches into the beans , and people with the unenviable job of collecting these cats ' leavings then go through the forest collecting the , you know , results and processing it into coffee -- although you actually can buy it in the unprocessed form . That 's right . Unrelatedly -- ( Laughter ) Japan is doing crazy things with toilets . ( Laughter ) There is now a toilet that has an MP3 player in it . There 's one with a fragrance dispenser . There 's one that actually analyzes the contents of the bowl and transmits the results via email to your doctor . It 's almost like a home medical center -- and that is the direction that Japanese toilet technology is heading in . This one does not have those bells and whistles , but for pure functionality it 's pretty much the best -- the Neorest 600. And to try this -- I could n't get a loaner , but I did go into the Manhattan showroom of the manufacturer , Toto , and they have a bathroom off of the showroom that you can use , which I used . It 's fully automated -- you walk towards it , and the seat lifts . The seat is preheated . There 's a water jet that cleans you . There 's an air jet that dries you . You get up , it flushes by itself . The lid closes , it self-cleans . Not only is it a technological leap forward , but I really do believe it 's a bit of a cultural leap forward . I mean , a no hands , no toilet paper toilet . And I want to get one of these . ( Laughter ) This was another one I could not get a loaner of . Tom Cruise supposedly owns this bed . There 's a little plaque on the end that , you know , each buyer gets their name engraved on it . ( Laughter ) To try this one , the maker of it let me and my wife spend the night in the Manhattan showroom . Lights glaring in off the street , and we had to hire a security guard and all these things . But anyway , we had a great night 's sleep . And you spend a third of your life in bed . I do n't think it 's that bad of a deal . ( Laughter ) This was a fun one . This is the fastest street-legal car in the world and the most expensive production car . I got to drive this with a chaperone from the company , a professional race car driver , and we drove around the canyons outside of Los Angeles and down on the Pacific Coast Highway . And , you know , when we pulled up to a stoplight the people in the adjacent cars kind of gave us respectful nods . And it was really amazing . It was such a smooth ride . Most of the cars that I drive , if I get up to 80 they start to rattle . I switched lanes on the highway and the driver , this chaperone , said , " You know , you were just going 110 miles an hour . " And I had no idea that I was one of those obnoxious people you occasionally see weaving in and out of traffic , because it was just that smooth . And if I was a billionaire , I would get one . ( Laughter ) This is a completely gratuitous video I 'm just going to show of one of the pitfalls of advanced technology . This is Tom Cruise arriving at the " Mission : Impossible III " premiere . When he tries to open the door , you could call it " Mission : Impossible IV . " There was one object that I could not get my hands on , and that was the 1947 Cheval Blanc . The '47 Cheval Blanc is probably the most mythologized wine of the 20th century . And Cheval Blanc is kind of an unusual wine for Bordeaux in having a significant percentage of the Cabernet Franc grape . And 1947 was a legendary vintage , especially in the right bank of Bordeaux . And just together , that vintage and that chateau took on this aura that eventually kind of gave it this cultish following . But it 's 60 years old . There 's not much of it left . What there is of it left you do n't know if it 's real -- it 's considered to be the most faked wine in the world . Not that many people are looking to pop open their one remaining bottle for a journalist . So , I 'd about given up trying to get my hands on one of these . I 'd put out feelers to retailers , to auctioneers , and it was coming up empty . And then I got an email from a guy named Bipin Desai . Bipin Desai is a UC Riverside theoretical physicist who also happens to be the preeminent organizer of rare wine tastings , and he said , " I 've got a tasting coming up where we 're going to serve the '47 Cheval Blanc . " And it was going to be a double vertical -- it was going to be 30 vintages of Cheval Blanc , and 30 vintages of Yquem . And it was an invitation you do not refuse . I went . It was three days , four meals . And at lunch on Saturday , we opened the '47 . And you know , it had this fragrant softness , and it smelled a little bit of linseed oil . And then I tasted it , and it , you know , had this kind of unctuous , porty richness , which is characteristic of that wine -- that it sort of resembles port in a lot of ways . There were people at my table who thought it was , you know , fantastic . There were some people who were a little less impressed . And I was n't that impressed . And I do n't -- call my palate a philistine palate -- so it does n't necessarily mean something that I was n't impressed , but I was not the only one there who had that reaction . And it was n't just to that wine . Any one of the wines served at this tasting , if I 'd been served it at a dinner party , it would have been , you know , the wine experience of my lifetime , and incredibly memorable . But drinking 60 great wines over three days , they all just blurred together , and it became almost a grueling experience . And I just wanted to finish by mentioning a very interesting study which came out earlier this year from some researchers at Stanford and Caltech . And they gave subjects the same wine , labeled with different price tags . A lot of people , you know , said that they liked the more expensive wine more -- it was the same wine , but they thought it was a different one that was more expensive . But what was unexpected was that these researchers did MRI brain imaging while the people were drinking the wine , and not only did they say they enjoyed the more expensively labeled wine more -- their brain actually registered as experiencing more pleasure from the same wine when it was labeled with a higher price tag . Thank you . </content>
</text>
<text id="ted/bono_s_call_to_action_for_africa">
Well , as Alexander Graham Bell famously said on his first successful telephone call , " Hello , is that Domino 's Pizza ? " ( Laughter ) I just really want to thank you very much . As another famous man , Jerry Garcia , said , " What a strange , long trip . " And he should have said , " What a strange , long trip it 's about to become . " At this very moment , you are viewing my upper half . My lower half is appearing at a different conference -- ( Laughter ) in a different country . You can , it turns out , be in two places at once . But still , I 'm sorry I ca n't be with you in person . I 'll explain at another time . And though I 'm a rock star , I just want to assure you that none of my wishes will include a hot tub . But what really turns me on about technology is not just the ability to get more songs on mp3 players . The revolution -- this revolution -- is much bigger than that . I hope , I believe . What turns me on about the digital age , what excited me personally , is that you have closed the gap between dreaming and doing . You see , it used to be that if you wanted to make a record of a song , you needed a studio and a producer . Now , you need a laptop . If you wanted to make a film , you needed a mass of equipment and a Hollywood budget . Now , you need a camera that fits in your palm , and a couple of bucks for a blank DVD . Imagination has been decoupled from the old constraints . And that really , really excites me . I 'm excited when I glimpse that kind of thinking writ large . What I would like to see is idealism decoupled from all constraints . Political , economic , psychological , whatever . The geopolitical world has got a lot to learn from the digital world . From the ease with which you swept away obstacles that no one knew could even be budged . And that 's actually what I 'd like to talk about today . First , though , I should probably explain why , and how , I got to this place . It 's a journey that started 20 years ago . You may remember that song , " We Are the World , " or , " Do They Know It 's Christmas ? " Band Aid , Live Aid . Another very tall , grizzled rock star , my friend Sir Bob Geldof , issued a challenge to " feed the world . " It was a great moment , and it utterly changed my life . That summer , my wife , Ali , and myself went to Ethiopia . We went on the quiet to see for ourselves what was going on . We lived in Ethiopia for a month , working at an orphanage . The children had a name for me . They called me , " The girl with the beard . " ( Laughter ) Do n't ask . Anyway , we found Africa to be a magical place . Big skies , big hearts , big , shining continent . Beautiful , royal people . Anybody who ever gave anything to Africa got a lot more back . Ethiopia did n't just blow my mind ; it opened my mind . Anyway , on our last day at this orphanage a man handed me his baby and said , " Would you take my son with you ? " He knew , in Ireland , that his son would live , and that in Ethiopia , his son would die . It was the middle of that awful famine . Well , I turned him down . And it was a funny kind of sick feeling , but I turned him down . And it 's a feeling I ca n't ever quite forget . And in that moment , I started this journey . In that moment , I became the worst thing of all : I became a rock star with a cause . Except this is n't the cause , is it ? Six and a half thousand Africans dying every single day from AIDS -- a preventable , treatable disease -- for lack of drugs we can get in any pharmacy . That 's not a cause . That 's an emergency . 11 million AIDS orphans in Africa , 20 million by the end of the decade . That 's not a cause . That 's an emergency . Today , every day , 9,000 more Africans will catch HIV because of stigmatization and lack of education . That 's not a cause . That 's an emergency . So what we 're talking about here is human rights . The right to live like a human . The right to live , period . And what we 're facing in Africa is an unprecedented threat to human dignity and equality . The next thing I 'd like to be clear about is what this problem is , and what this problem is n't . Because this is not all about charity . This is about justice . Really . This is not about charity . This is about justice . That 's right . And that 's too bad , because we 're very good at charity . Americans , like Irish people , are good at it . Even the poorest neighborhoods give more than they can afford . We like to give , and we give a lot . Look at the response to the tsunami , it 's inspiring . But justice is a tougher standard than charity . You see , Africa makes a fool of our idea of justice . It makes a farce of our idea of equality . It mocks our pieties . It doubts our concern . It questions our commitment . Because there is no way we can look at what 's happening in Africa , and if we 're honest , conclude that it would ever be allowed to happen anywhere else . As you heard in the film , anywhere else , not here . Not here , not in America , not in Europe . In fact , a head of state that you 're all familiar with admitted this to me . And it 's really true . There is no chance this kind of hemorrhaging of human life would be accepted anywhere else other than Africa . Africa is a continent in flames . And deep down , if we really accepted that Africans were equal to us , we would all do more to put the fire out . We 're standing around with watering cans , when what we really need is the fire brigade . You see , it 's not as dramatic as the tsunami . It 's crazy , really , when you think about it . Does stuff have to look like an action movie these days to exist in the front of our brain ? The slow extinguishing of countless lives is just not dramatic enough , it would appear . Catastrophes that we can avert are not as interesting as ones we could avert . Funny , that . Anyway , I believe that that kind of thinking offends the intellectual rigor in this room . Six and a half thousand people dying a day in Africa may be Africa 's crisis , but the fact that it 's not on the nightly news , that we in Europe , or you in America , are not treating it like an emergency -- I want to argue with you tonight that that 's our crisis . I want to argue that though Africa is not the front line in the war against terror , it could be soon . Every week , religious extremists take another African village . They 're attempting to bring order to chaos . Well , why are n't we ? Poverty breeds despair . We know this . Despair breeds violence . We know this . In turbulent times , is n't it cheaper , and smarter , to make friends out of potential enemies than to defend yourself against them later ? The war against terror is bound up in the war against poverty . And I did n't say that . Colin Powell said that . Now when the military are telling us that this is a war that cannot be won by military might alone , maybe we should listen . There 's an opportunity here , and it 's real . It 's not spin . It 's not wishful thinking . The problems facing the developing world afford us in the developed world a chance to re-describe ourselves to the world . We will not only transform other people 's lives , but we will also transform the way those other lives see us . And that might be smart in these nervous , dangerous times . Do n't you think that on a purely commercial level , that anti-retroviral drugs are great advertisements for Western ingenuity and technology ? Does n't compassion look well on us ? And let 's cut the crap for a second . In certain quarters of the world , brand EU , brand USA , is not at its shiniest . The neon sign is fizzing and cracking . Someone 's put a brick through the window . The regional branch managers are getting nervous . Never before have we in the west been so scrutinized . Our values : do we have any ? Our credibility ? These things are under attack around the world . Brand USA could use some polishing . And I say that as a fan , you know ? As a person who buys the products . But think about it . More anti-retrovirals make sense . But that 's just the easy part , or ought to be . But equality for Africa -- that 's a big , expensive idea . You see , the scale of the suffering numbs us into a kind of indifference . What on earth can we all do about this ? Well , much more than we think . We ca n't fix every problem , but the ones we can , I want to argue , we must . And because we can , we must . This is the straight truth , the righteous truth . It is not a theory . The fact is that ours is the first generation that can look disease and extreme poverty in the eye , look across the ocean to Africa , and say this , and mean it . We do not have to stand for this . A whole continent written off -- we do not have to stand for this . ( Applause ) And let me say this without a trace of irony -- before I back it up to a bunch of ex-hippies . Forget the '60s . We can change the world . I ca n't , you ca n't , as individuals , but we can change the world . I really believe that , the people in this room . Look at the Gates Foundation . They 've done incredible stuff , unbelievable stuff . But working together , we can actually change the world . We can turn the inevitable outcomes , and transform the quality of life for millions of lives who look and feel rather like us , when you 're up close . I 'm sorry to laugh here , but you do look so different than you did in Haight-Ashbury in the '60s . ( Laughter ) But I want to argue that this is the moment that you are designed for . It is the flowering of the seeds you planted in earlier , headier days. Ideas that you gestated in your youth . This is what excites me . This room was born for this moment , is really what I want to say to you tonight . Most of you started out wanting to change the world , did n't you ? Most of you did , the digital world . Well , now , actually because of you , it is possible to change the physical world . It 's a fact . Economists confirm it , and they know much more than I do . So why , then , are we not pumping our fists into the air ? Probably because when we admit we can do something about it , we 've got to do something about it . It is a pain in the arse . This equality business is actually a pain in the arse . But for the first time in history , we have the technology , we have the know-how , we have the cash , we have the life-saving drugs . Do we have the will ? I hope this is obvious , but I 'm not a hippie . And I 'm not really one for the warm , fuzzy feeling . I do not have flowers in my hair . Actually , I come from punk rock . The Clash wore big army boots , not sandals . But I know toughness when I see it . And for all the talk of peace and love on the West Coast , there was muscle to the movement that started out here . You see , idealism detached from action is just a dream . But idealism allied with pragmatism , with rolling up your sleeves and making the world bend a bit , is very exciting . It 's very real . It 's very strong . And it 's very present in a crowd like you . Last year at DATA , this organization I helped set up , we launched a campaign to summon this spirit in the fight against AIDS and extreme poverty . We 're calling it the ONE Campaign . It 's based on our belief that the action of one person can change a lot , but the actions of many coming together as one can change the world . Well , we feel that now is the time to prove we 're right . There are moments in history when civilization redefines itself . We believe this is one . We believe that this could be the time when the world finally decides that the wanton loss of life in Africa is just no longer acceptable . This could be the time that we finally get serious about changing the future for most people who live on planet Earth . Momentum has been building . Lurching a little , but it 's building . This year is a test for us all , especially the leaders of the G8 nations , who really are on the line here , with all the world in history watching . I have been , of late , disappointed with the Bush Administration . They started out with such promise on Africa . They made some really great promises , and actually have fulfilled a lot of them . But some of them they have n't . They do n't feel the push from the ground , is the truth . But my disappointment has much more perspective when I talk to American people , and I hear their worries about the deficit , and the fiscal well-being of their country . I understand that . But there 's much more push from the ground than you 'd think , if we got organized . What I try to communicate , and you can help me if you agree , is that aid for Africa is just great value for money at a time when America really needs it . Putting it in the crassest possible terms , the investment reaps huge returns . Not only in lives saved , but in goodwill , stability and security that we 'll gain . So this is what I hope that you will do , if I could be so bold , and not have it deducted from my number of wishes . ( Laughter ) What I hope is that beyond individual merciful acts , that you will tell the politicians to do right by Africa , by America and by the world . Give them permission , if you like , to spend their political capital and your financial capital , your national purse on saving the lives of millions of people . That 's really what I would like you to do . Because we also need your intellectual capital : your ideas , your skills , your ingenuity . And you , at this conference , are in a unique position . Some of the technologies we 've been talking about , you invented them , or at least revolutionized the way that they 're used . Together you have changed the zeitgeist from analog to digital , and pushed the boundaries . And we 'd like you to give us that energy . Give us that kind of dreaming , that kind of doing . As I say , there 're two things on the line here . There 's the continent Africa . But there 's also our sense of ourselves . People are starting to figure this out . Movements are springing up . Artists , politicians , pop stars , priests , CEOs , NGOs , mothers ' unions , student unions . A lot of people are getting together , and working under this umbrella I told you about earlier , the ONE Campaign . I think they just have one idea in their mind , which is , where you live in the world , should not determine whether you live in the world . ( Applause ) History , like God , is watching what we do . When the history books get written I think our age will be remembered for three things . Really , it 's just three things this whole age will be remembered for . The digital revolution , yes . The war against terror , yes . And what we did or did not do to put out the fires in Africa . Some say we ca n't afford to . I say we ca n't afford not to . Thank you , thank you very much . ( Applause ) Okay , my three wishes . The ones that TED has offered to grant . You see , if this is true , and I believe it is , that the digital world you all created has uncoupled the creative imagination from the physical constraints of matter . This should be a piece of piss . ( Laughter ) I should add that this started out as a much longer list of wishes . Most of them impossible , some of them impractical and one or two of them certainly immoral . ( Laughter ) This business , it gets to be addictive , you know what I mean , when somebody else is picking up the tab . Anyway , here 's number one . I wish for you to help build a social movement of more than one million American activists for Africa . That is my first wish . I believe it 's possible . A few minutes ago , I talked about all the citizens ' campaigns that are springing up . You know , there 's lots out there . And with this one campaign as our umbrella , my organization , DATA , and other groups , have been tapping into the energy and the enthusiasm that 's out there from Hollywood into the heartland of America . We know there 's more than enough energy to power this movement . We just need your help in making it happen . We want all of you here , church America , corporate America , Microsoft America , Apple America , Coke America , Pepsi America , nerd America , noisy America . We ca n't afford to be cool and sit this one out . I do believe if we build a movement that 's one million Americans strong , we 're not going to be denied . We will have the ear of Congress . We 'll be the first page in Condi Rice 's briefing book , and right into the Oval Office . If there 's one million Americans -- and I really know this -- who are ready to make phone calls , who are ready to be on email . I am absolutely sure that we can actually change the course of history , literally , for the continent of Africa . Anyway , so I 'd like your help in getting that signed up . I know John Gage and Sun Microsystems are already on board for this , but there 's lots of you we 'd like to talk to . Right , my second wish , number two . I would like one media hit for every person on the planet who is living on less than one dollar a day . That 's one billion media hits . Could be on Google , could be on AOL . Steve Case , Larry , Sergey -- they 've done a lot already . It could be NBC . It could be ABC . Actually we 're talking to ABC today about the Oscars . We have a film , produced by Jon Kamen at Radical Media . But you know , we want , we need some airtime for our ideas . We need to get the math , we need to get the statistics out to the American people . I really believe that old Truman line , that if you give the American people the facts , they 'll do the right thing . And , the other thing that 's important , is that this is not Sally Struthers . This has to be described as an adventure , not a burden . ( Video ) : One by one they step forward , a nurse , a teacher , a homemaker , and lives are saved . The problem is enormous . Every three seconds one person dies . Another three seconds , one more . The situation is so desperate in parts of Africa , Asia , even America that aid groups , just as they did for the tsunami are uniting as one , acting as one . We can beat extreme poverty , starvation , AIDS . But we need your help . One more person , letter , voice will mean the difference between life and death for millions of people . Please join us by working together . Americans have an unprecedented opportunity . We can make history . We can start to make poverty history . One , by one , by one . Please visit ONE at this address . We 're not asking for your money . We 're asking for your voice . Bono : All right . I wish for TED to truly show the power of information . Its power to rewrite the rules and transform lives , by connecting every hospital , health clinic and school in one African country . And I would like it to be Ethiopia . I believe we can connect every school in Ethiopia , every health clinic , every hospital . We can connect to the Internet . That is my wish , my third wish . I think it 's possible . I think we have the money and brains in the room to do that . And that would be a mind-blowing wish to come true . I 've been to Ethiopia , as I said earlier . It 's actually where it all started for me . The idea that the Internet , which changed all of our lives , can transform a country -- and a continent that has hardly made it to analog , let alone digital -- blows my mind . But it did n't start out that way . The first long-distance line from Boston to New York was used in 1885 on the phone . It was just nine years later that Addis Ababa was connected by phone to Harare , which is 500 kilometers away . Since then , not that much has changed . The average waiting time to get a land line in Ethiopia is actually about seven or eight years . But wireless technology was n't dreamt up then . Anyway , I 'm Irish , and as you can see , I know how important talking is . Communication is very important for Ethiopia -- will transform the country . Nurses getting better training , pharmacists being able to order supplies , doctors sharing their expertise in all aspects of medicine . It 's a very , very good idea to get them wired . And that is my third and final wish for you at the TED conference . Thank you very much once again . ( Applause ) </content>
</text>
<text id="ted/dan_dennett_cute_sexy_sweet_funny">
I’m going around the world giving talks about Darwin , and usually what I’m talking about is Darwin’s strange inversion of reasoning . Now that title , that phrase , comes from a critic , an early critic , and this is a passage that I just love , and would like to read for you . " In the theory with which we have to deal , Absolute Ignorance is the artificer ; so that we may enunciate as the fundamental principle of the whole system , that , in order to make a perfect and beautiful machine , it is not requisite to know how to make it . This proposition will be found on careful examination , to express , in condensed form , the essential purport of the Theory , and to express in a few words all Mr. Darwin’s meaning ; who , by a strange inversion of reasoning , seems to think Absolute Ignorance fully qualified to take the place of Absolute Wisdom in the achievements of creative skill . " Exactly . Exactly . And it is a strange inversion . A creationist pamphlet has this wonderful page in it : " Test Two : Do you know of any building that didn’t have a builder ? Yes No. Do you know of any painting that didn’t have a painter ? Yes No. Do you know of any car that didn’t have a maker ? Yes No. If you answered " YES " for any of the above , give details . " A-ha ! I mean , it really is a strange inversion of reasoning . You would have thought it stands to reason that design requires an intelligent designer . But Darwin shows that it’s just false . Today , though , I’m going to talk about Darwin’s other strange inversion , which is equally puzzling at first , but in some ways just as important . It stands to reason that we love chocolate cake because it is sweet . Guys go for girls like this because they are sexy . We adore babies because they’re so cute . And , of course , we are amused by jokes because they are funny . This is all backwards . It is . And Darwin shows us why . Let’s start with sweet . Our sweet tooth is basically an evolved sugar detector , because sugar is high energy , and it’s just been wired up to the preferer , to put it very crudely , and that’s why we like sugar . Honey is sweet because we like it , not " we like it because honey is sweet . " There’s nothing intrinsically sweet about honey . If you looked at glucose molecules till you were blind , you wouldn’t see why they tasted sweet . You have to look in our brains to understand why they’re sweet . So if you think first there was sweetness , and then we evolved to like sweetness , you’ve got it backwards ; that’s just wrong . It’s the other way round . Sweetness was born with the wiring which evolved . And there’s nothing intrinsically sexy about these young ladies . And it’s a good thing that there isn’t , because of there were , then Mother Nature would have a problem : How on earth do you get chimps to mate ? Now you might think , ah , there’s a solution : hallucinations . That would be one way of doing it , but there’s a quicker way . Just wire the chimps up to love that look , and apparently they do . That’s all there is to it . Over six million years , we and the chimps evolved our different ways . We became bald-bodied , oddly enough ; for one reason or another , they didn’t . If we hadn’t , then probably this would be the height of sexiness . Our sweet tooth is an evolved and instinctual preference for high-energy food . It wasn’t designed for chocolate cake . Chocolate cake is a supernormal stimulus . The term is owed to Niko Tinbergen , who did his famous experiments with gulls , where he found that that orange spot on the gull’s beak -- if he made a bigger , oranger spot the gull chicks would peck at it even harder . It was a hyperstimulus for them , and they loved it . What we see with , say , chocolate cake is it’s a supernormal stimulus to tweak our design wiring . And there are lots of supernormal stimuli ; chocolate cake is one . There 's lots of supernormal stimuli for sexiness . And there 's even supernormal stimuli for cuteness . Here’s a pretty good example . It’s important that we love babies , and that we not be put off by , say , messy diapers . So babies have to attract our affection and our nurturing , and they do . And , by the way , a recent study shows that mothers prefer the smell of the dirty diapers of their own baby . So nature works on many levels here . But now , if babies didn’t look the way they do , if babies looked like this , that’s what we would find adorable , that’s what we would find -- we would think , oh my goodness , do I ever want to hug that . This is the strange inversion . Well now , finally what about funny . My answer is , it’s the same story , the same story . This is the hard one , the one that isn’t obvious . That’s why I leave it to the end . And I won’t be able to say too much about it . But you have to think evolutionarily , you have to think , what hard job that has to be done -- it’s dirty work , somebody’s got to do it -- is so important to give us such a powerful , inbuilt reward for it when we succeed . Now , I think we 've found the answer , I and a few of my colleagues . It’s a neural system that’s wired up to reward the brain for doing a grubby clerical job . Our bumper sticker for this view is that this is the joy of debugging . Now I’m not going to have time to spell it all out , but I’ll just say that only some kinds of debugging get the reward . And what we’re doing is we’re using humor as a sort of neuroscientific probe by switching humor on and off , by turning the knob on a joke -- now it’s not funny ... oh , now it’s funnier ... now we’ll turn a little bit more ... now it’s not funny -- in this way , we can actually learn something about the architecture of the brain , the functional architecture of the brain . Matthew Hurley is the first author of this . We call it the Hurley Model . He’s a computer scientist , Reginald Adams a psychologist , and there I am , and we’re putting this together into a book . Thank you very much . </content>
</text>
<text id="ted/daniel_kraft_invents_a_better_way_to_harvest_bone_marrow">
So I am a pediatric cancer doctor and stem-cell researcher at Stanford University where my clinical focus has been bone marrow transplantation . Now , inspired by Jill Bolte Taylor last year , I did n't bring a human brain , but I did bring a liter of bone marrow . And bone marrow is actually what we use to save the lives of tens of thousands of patients , most of whom have advanced malignancies like leukemia and lymphoma and some other diseases . So , a few years ago , I 'm doing my transplant fellowship at Stanford . I 'm in the operating room . We have Bob here , who is a volunteer donor . We 're sending his marrow across the country to save the life of a child with leukemia . So actually how do we harvest this bone marrow ? Well we have a whole O. R. team , general anesthesia , nurses , and another doctor across from me . Bob 's on the table , and we take this sort of small needle , you know , not too big . And the way we do this is we basically place this through the soft tissue , and kind of punch it into the hard bone , into the tuchus -- that 's a technical term -- and aspirate about 10 mls of bone marrow out , each time , with a syringe . And hand it off to the nurse . She squirts it into a tin . Hands it back to me . And we do that again and again . About 200 times usually . And by the end of this my arm is sore , I 've got a callus on my hand . Let alone Bob , Whose rear end looks something more like this , like swiss cheese . So I 'm thinking , you know , this procedure has n't changed in about 40 years . And there is probably a better way to do this . So I thought of a minimally invasive approach . And a new device that we call the Marrow Miner . This is it . And the Marrow Miner , the way it works is shown here . Our standard see-through patient . Instead of entering the bone dozens of times , we enter just once , into the front of the hip or the back of the hip . And we have a flexible , powered catheter with a special wire loop tip that stays inside the crunchy part of the marrow and follows the contours of the hip , as it moves around . So it enables you to very rapidly aspirate , or suck out , rich bone marrow very quickly through one hole . We can do multiple passes through that same entry . No robots required . And , so , very quickly , Bob can just get one puncture , local anesthesia , and do this harvest as an outpatient . So I did a few prototypes . I got a small little grant at Stanford . And played around with this a little bit . And our team members developed this technology . And eventually we got two large animals , and pig studies . And we found , to our surprise , that we not only got bone marrow out , but we got 10 times the stem cell activity in the marrow from the Marrow Miner , compared to the normal device . This device was just FDA approved in the last year . Here is a live patient . You can see it following the flexible curves around . There will be be two passes here , in the same patient , from the same hole . This was done under local anesthesia , as an outpatient . And we got , again , about three to six times more stem cells than the standard approach done on the same patient . So why should you care ? Bone marrow is a very rich source of adult stem cells . You all know about embryonic stem cells . They 've got great potential but have n't yet entered clinical trials . Adult stem cells are throughout our body , including the blood-forming stem cells in our bone marrow . Which we 've been using as a form of stem-cell therapy for over 40 years . In the last decade there 's been an explosion of use of bone marrow stem cells to treat the patient 's other diseases such as heart disease , vascular disease , orthopedics , tissue engineering , even in neurology to treat Parkinson 's , and diabetes . We 've just come out , we 're commercializing , this year , generation 2.0 of the Marrow Miner . The hope is is that this gets more stem cells out . Which translates to better outcomes . It may encourage more people to sign up to be potential live saving bone marrow donors . It may even enable you to bank your own marrow stem cells , when you 're younger and healthier , to use in the future , should you need it . And ultimately -- and here 's a picture of our bone marrow transplant survivors , who come together for a reunion each year at Stanford . Hopefully this technology will let us have more of these survivors in the future . Thanks . ( Applause ) </content>
</text>
<text id="ted/dave_eggers_makes_his_ted_prize_wish_once_upon_a_school">
Thank you so much everyone from TED , and Chris and Amy in particular . I cannot believe I 'm here . I have not slept in weeks . Neil and I were sitting there comparing how little we 've slept in anticipation for this . I 've never been so nervous -- and I do this when I 'm nervous , I just realized . So , I 'm going to talk about sort of what we did at this organization called 826 Valencia , and then I 'm going to talk about how we all might join in and do similar things . Back in about 2000 , I was living in Brooklyn , I was trying to finish my first book , I was wandering around dazed every day because I wrote from 12 a. m. to 5 a. m. So I would walk around in a daze during the day . I had no mental acuity to speak of during the day , but I had flexible hours . In the Brooklyn neighborhood that I lived in , Park Slope , there are a lot of writers -- it 's like a very high per-capita ratio of writers to normal people . Meanwhile , I had grown up around a lot of teachers . My mom was a teacher , my sister became a teacher and after college so many of my friends went into teaching . And so I was always hearing them talk about their lives and how inspiring they were , and they were really sort of the most hard-working and constantly inspiring people I knew . But I knew so many of the things they were up against , so many of the struggles they were dealing with . And one of them was that so many of my friends that were teaching in city schools were having trouble with their students keeping up at grade level , in their reading and writing in particular . Now , so many of these students had come from households where English is n't spoken in the home , where many of them have different special needs , learning disabilities . And of course they 're working in schools which sometimes and very often are under-funded . And so they would talk to me about this and say , " You know , what we really need is just more people , more bodies , more one-on-one attention , more hours , more expertise from people that have skills in English and can work with these students one-on-one . " Now , I would say , " Well , why do n't you just work with them one-on-one ? " And they would say , " Well , we have five classes of 30 to 40 students each . This can lead up to 150 , 180 , 200 students a day . How can we possibly give each student even one hour a week of one-on-one attention ? " You 'd have to greatly multiply the workweek and clone the teachers . And so we started talking about this . And at the same time , I thought about this massive group of people I knew : writers , editors , journalists , graduate students , assistant professors , you name it . All these people that had sort of flexible daily hours and an interest in the English word -- I hope to have an interest in the English language , but I 'm not speaking it well right now . I 'm trying . That clock has got me . But everyone that I knew had an interest in the primacy of the written word in terms of nurturing a democracy , nurturing an enlightened life . And so they had , you know , their time and their interest , but at the same time there was n't a conduit that I knew of in my community to bring these two communities together . So when I moved back to San Francisco , we rented this building . And the idea was to put McSweeney 's -- McSweeney 's Quarterly , that we published twice or three times a year , and a few other magazines -- we were going to move it into an office for the first time . It used to be in my kitchen in Brooklyn . We were going to move it into an office , and we were going to actually share space with a tutoring center . So we thought , " We 'll have all these writers and editors and everybody -- sort of a writing community coming into the office every day anyway , why do n't we just open up the front of the building for students to come in there after school , get extra help on their written homework , so you have basically no border between these two communities ? " So the idea was that we would be working on whatever we 're working on , at 2:30 the students flow in and you put down what you 're doing , or you trade , or you work a little bit later or whatever it is . You give those hours in the afternoon to the students in the neighborhood . So , we had this place , we rented it , the landlord was all for it . We did this mural , that 's a Chris Ware mural , that basically explains the entire history of the printed word , in mural form -- it takes a long time to digest and you have to stand in the middle of the road . So we rented this space . And everything was great except the landlord said , " Well , the space is zoned for retail ; you have to come up with something . " You 've gotta sell something . You ca n't just have a tutoring center . " So we thought , " Ha ha ! Really ! " And we could n't think of anything necessarily to sell , but we did all the necessary research . It used to be a weight room , so there were rubber floors below , acoustic tile ceilings , fluorescent lights . We took all that down , and we found beautiful wooden floors , whitewashed beams and it had the look -- while we were renovating this place , somebody said , " You know , it really kind of looks like the hull of a ship . " And we looked around and somebody else said , " Well , you should sell supplies to the working buccaneer . " And so this is what we did . So it made everybody laugh , and we said , " There 's a point to that . Let 's sell pirate supplies . " This is the pirate supply store . You see , this is sort of a sketch I did on a napkin . A great carpenter built all this stuff and you see , we made it look sort of pirate supply-like . Here you see planks sold by the foot and we have supplies to combat scurvy ; we have the peg legs there , that are all handmade and fitted to you ; up at the top you see the eyepatch display , which is the black column there for everyday use , your regular eyepatch , and then you have the pastel and other colors for stepping out at night -- special occasions , bar mitzvahs and whatever . So we opened this place . And this is a vat that we fill with treasures that students dig in : this is replacement eyes in case you lose one ; these are some signs that we have all over the place : " Practical Joking with Pirates . " While you 're reading the sign , we pull a rope behind the counter and eight mop heads drop on your head . That was just my one thing -- I said we had to have something that drops on people 's heads . It became mop heads . And this is the fish theater , which is just a saltwater tank with three seats , and then right behind it we set up this space . Which was the tutoring center . So right there is the tutoring center , and then behind the curtain are the McSweeney 's offices , where all of us would be working on the magazine and book editing and like that . The kids would come in -- or we thought they would come in . I should back up . We set the place up , we opened up , we spent months and months renovating this place . We had tables , chairs , computers , everything . I went to a dot-com auction at a Holiday Inn in Palo Alto and I bought 11 G4s with a stroke of a paddle . Anyway , we bought 'em , we set everything up and then we waited . It was started with about 12 of my friends , people that I had known for years that were writers in the neighborhood . And we sat . And at 2:30 we put a sandwich board out on the front sidewalk and it just said , " Free Tutoring for Your English-Related and Writing-Related Needs -- Just Come In , It 's All Free . " And we thought , " Oh , they 're going to storm the gates , they 're gonna love it . " And they did n't . And so we waited , we sat at the tables , we waited and waited . And everybody was becoming very discouraged because it was weeks and weeks that we waited , really , where nobody came in . And then somebody alerted us to the fact that maybe there was a trust gap , because we were operating behind a pirate supply store . We never put it together , you know ? And so then , around that time , I persuaded a woman named Nineveh Caligari , a longtime San Francisco educator -- she was teaching in Mexico City , she had all the experience necessary , knew everything about education , was connected with all the teachers and community members in the neighborhood . I convinced her to move up from Mexico City where she was teaching ; she took over as executive director . Immediately , she made the inroads with the teachers and the parents and the students and everything , and so suddenly it was actually full every day . And what we were trying to offer every day was one-on-one attention . The goal was to have a one-to-one ratio with every one of these students . You know , it 's been proven that 35 to 40 hours a year with one-on-one attention , a student can get one grade level higher . And so most of these students , English is not spoken in the home . They come there , many times their parents -- you ca n't see it , but there 's a church pew that I bought in a Berkeley auction right there -- the parents will sometimes watch while their kids are being tutored . So that was the basis of it , was one-on-one attention . And we found ourselves full every day with kids . If you 're on Valencia Street within those few blocks at around 2:00 , 2:30 , you will get run over , often , by the kids and their big backpacks , or whatever , actually running to this space . Which is very strange , because it 's school , in a way . But there was something psychological happening there that was just a little bit different . And the other thing was , there was no stigma . Kids were n't going into the " Center-for-Kids-That-Need-More-Help " or something like that . It was 826 Valencia . First of all , it was a pirate supply store , which is insane . And then secondly , there 's a publishing company in the back . And so our interns were actually working at the same tables very often , and shoulder-to-shoulder , computer next to computer with the students . And so it became a tutoring center -- publishing center , is what we called it -- and a writing center . They go in , and they might be working with a high school student actually working on a novel -- because we had very gifted kids , too . So there 's no stigma . They 're all working next to each other . It 's all a creative endeavor . They 're seeing adults . They 're modeling their behavior . These adults , they 're working in their field . They can lean over , ask a question of one of these adults and it all sort of feeds on each other . There 's a lot of cross-pollination . The only problem , especially for the adults working at McSweeney 's who had n't necessarily bought into all of this when they signed up , was that there was just the one bathroom . With like 60 kids a day , this is a problem . But you know , there 's something about the kids finishing their homework in a given day , working one-on-one , getting all this attention -- they go home , they 're finished . They do n't stall , they do n't do their homework in front of the TV . They 're allowed to go home at 5:30 , enjoy their family , enjoy other hobbies , get outside , play . And that makes a happy family . A bunch of happy families in a neighborhood is a happy community . A bunch of happy communities tied together is a happy city and a happy world . So the key to it all is homework ! There you have it , you know -- one-on-one attention . So we started off with about 12 volunteers , and then we had about 50. And then a couple hundred . And we now have 1,400 volunteers on our roster . And we make it incredibly easy to volunteer . The key thing is , even if you only have a couple of hours a month , those two hours shoulder-to-shoulder , next to one student , concentrated attention , shining this beam of light on their work , on their thoughts and their self-expression , is going to be absolutely transformative , because so many of the students have not had that ever before . So we said , " Even if you have two hours one Sunday every six months , it does n't matter . That 's going to be enough . " So that 's partly why the tutor corps grew so fast . Then we said , " Well , what are we going to do with the space during the day , because it has to be used before 2:30 ? " So we started bringing in classes during the day . So every day , there 's a field trip where they together create a book ; you can see it being typed up above . This is one of the classes getting way too excited about writing . You just point a camera at a class , and it always looks like this . So this is one of the books that they do . Notice the title of the book , " The Book That Was Never Checked Out : Titanic . " And the first line of that book is , " Once there was a book named Cindy that was about the Titanic . " So , meanwhile , there 's an adult in the back typing this up , taking it completely seriously , which blows their mind . So then we still had more tutors to use . This is a shot of just some of the tutors during one of the events . The teachers that we work with -- and everything is different to teachers -- they tell us what to do . We went in there thinking , " We 're ultimately , completely malleable . You 're going to tell us . The neighborhood 's going to tell us , the parents are going to tell us . The teachers are going to tell us how we 're most useful . " So then they said , " Why do n't you come into the schools ? Because what about the students that would n't come to you , necessarily , who do n't have really active parents that are bringing them , or are n't close enough ? " So then we started saying , " Well , we 've got 1,400 people on our tutor roster . Let 's just put out the word . " A teacher will say , " I need 12 tutors for the next five Sundays . We 're working on our college essays . Send them in . " So we put that out on the wire : 1,400 tutors . Whoever can make it signs up . They go in about a half an hour before the class . The teacher tells them what to do , how to do it , what their training is , what their project is so far . They work under the teacher 's guide , and it 's all in one big room . And that 's actually the brunt of what we do is , people going straight from their workplace , straight from home , straight into the classroom and working directly with the students . So then we 're able to work with thousands and thousands more students . Then another school said , " Well , what if we just give you a classroom and you can staff it all day ? " So this is the Everett Middle School Writers ' Room , where we decorated it in buccaneer style . It 's right off the library . And there we serve all 529 kids in this middle school . This is their newspaper , the " Straight-Up News , " that has an ongoing column from Mayor Gavin Newsom in both languages -- English and Spanish . So then one day Isabel Allende wrote to us and said , " Hey , why do n't you assign a book with high school students ? I want them to write about how to achieve peace in a violent world . " And so we went into Thurgood Marshall High School , which is a school that we had worked with on some other things , and we gave that assignment to the students . And we said , " Isabel Allende is going to read all your essays at the end . She 's going to publish them in a book . She 's going to sponsor the printing of this book in paperback form . It 's going to be available in all the bookstores in the Bay Area and throughout the world , on Amazon and you name it . " And so these kids worked harder than they 've ever worked on anything in their lives , because there was that outside audience , there was Isabel Allende on the other end . I think we had about 170 tutors that worked on this book with them and so this worked out incredibly well . We had a big party at the end . This is a book that you can find anywhere . So that led to a series of these . You can see Amy Tan sponsored the next one , " I Might Get Somewhere . " And this became an ongoing thing . More and more books . Now we 're sort of addicted to the book thing . The kids will work harder than they 've ever worked in their life if they know it 's going to be permanent , know it 's going to be on a shelf , know that nobody can diminish what they 've thought and said , that we 've honored their words , honored their thoughts with hundreds of hours of five drafts , six drafts -- all this attention that we give to their thoughts . And once they achieve that level , once they 've written at that level , they can never go back . It 's absolutely transformative . And so then they 're all sold in the store . This is near the planks . We sell all the student books . Where else would you put them , right ? So we sell 'em , and then something weird had been happening with the stores . The store , actually -- even though we started out as just a gag -- the store actually made money . So it was paying the rent . And maybe this is just a San Francisco thing -- I do n't know , I do n't want to judge . But people would come in -- and this was before the pirate movies and everything ! It was making a lot of money . Not a lot of money , but it was paying the rent , paying a full-time staff member there . There 's the ocean maps you can see on the left . And it became a gateway to the community , People would come in and say , " What the -- ? What is this ? " I do n't want to swear on the web . Is that a rule ? I do n't know . They would say , " What is this ? " And people would come in and learn more about it . And then right beyond -- there 's usually a little chain there -- right beyond , they would see the kids being tutored . This is a field trip going on . And so they would be shopping , and they might be more likely to buy some lard , or millet for their parrot , or , you know , a hook , or hook protector for nighttime , all of these things we sell . So the store actually did really well . But it brought in so many people : teachers , donors , volunteers , everybody . Because it was street level . It was open to the public . It was n't a non-profit buried , you know , on the 30th floor of some building downtown . It was right in the neighborhood that it was serving , and it was open all the time to the public . So , it became this sort of weird , happy accident . So all the people I used to know in Brooklyn , they said , " Well , why do n't we have a place like that here ? " And a lot of them had been former educators or would-be educators , so they combined with a lot of local designers , local writers , and they just took the idea independently and they did their own thing . They did n't want to sell pirate supplies ; they did n't think that that was going to work there . So , knowing the crime-fighting community in New York , they opened the Brooklyn Superhero Supply Company . This is Sam Potts ' great design that did this . And this was to make it look sort of like one of those keysmith 's shops that has to have every service they 've ever offered , you know , all over there . So they opened this place . Inside it 's like a Costco for superheroes -- all the supplies in kind of basic form . These are all handmade . These are all sort of repurposed other products , or whatever . All the packaging is done by Sam Potts . So then you have the villain containment unit , where kids put their parents . You have the office . This is a little vault -- you have put your product in there , it goes up an electric lift and then the guy behind the counter tells you that you have to recite the vow of heroism , which you do if you want to buy anything . And it limits , really , their sales . Personally , I think it 's a problem . Because they have to do it hand on heart and everything . These are some of the products . These are all handmade . This is a secret identity kit . If you want to take on the identity of Sharon Boone , one American female marketing executive from Hoboken , New Jersey . It 's a full dossier on everything you would need to know about Sharon Boone . So , this is the capery where you get fitted for your cape , and then you walk up these three steel-graded steps and then we turn on three hydraulic fans from every side and then you can see the cape in action . There 's nothing worse than , you know , getting up there and the cape is bunching up or something like that . So then , the secret door -- this is one of the shelves you do n't see when you walk in but it slowly opens . You can see it there in the middle next to all the grappling hooks . It opens and then this is the tutoring center in the back . So you can see the full effect ! But this is -- I just want to emphasize -- locally funded , locally built . All the designers , all of the builders , everybody was local , all the time was pro-bono . I just came and visited and said , " Yes , you guys are doing great , " or whatever . That was it . You can see the time in all five boroughs of New York in the back . So this is the space during tutoring hours . It 's very busy . Same principles : one-on-one attention , complete devotion to the students ' work and a boundless optimism and sort of a possibility of creativity and ideas . And this switch is flicked in their heads when they walk through those 18 feet of this bizarre store , right ? So it 's school , but it 's not school . It 's clearly not school , even though they 're working shoulder-to-shoulder on tables , pencils and papers , whatever . This is one of the students , Khaled Hamdan . You can read this quote . Addicted to video games and TV . Could n't concentrate at home . Came in . Got this concentrated attention . And he could n't escape it . So soon enough , he was writing . He would finish his homework early -- got really addicted to finishing his homework early . It 's an addictive thing to sort of be done with it and to have it checked and to know he 's going to achieve the next thing and be prepared for school the next day . So he got hooked on that , and then he started doing other things . He 's now been published in five books . He co-wrote a mockumentary about failed superheroes called " Super-Has-Beens . " He wrote a series on " Penguin Balboa , " which is a fighting -- a boxing -- penguin . And then he read aloud just a few weeks ago to 500 people at Symphony Space , at a benefit for 826 New York . So he 's there every day . He 's evangelical about it . He brings his cousins in now . There 's four family members that come in every day . So , I 'll go through really quickly . This is L. A. , The Echo Park Time Travel Mart : " Whenever you are , we 're already then . " This is sort of a 7-11 for time travelers . So you see everything : it 's exactly as a 7-11 would be . Leeches . Mammoth chunks . They even have their own slurpee machine : " Out of order . Come back yesterday . " Anyway . So I 'm going to jump ahead . These are spaces that are only affiliated with us , doing this same thing : Word St. in Pittsfield , Massachusetts . Ink Spot in Cincinnati . Youth Speaks , San Francisco , California , which inspired us . Studio St. Louis in St. Louis . Austin Bat Cave in Austin . Fighting Words in Dublin , Ireland , started by Roddy Doyle ; this will be open in April . Now I 'm going to the TED Wish -- is that okay ? All right ; I 've got a minute . So , the TED Wish : I wish that you -- you personally and every creative individual and organization you know -- will find a way to directly engage with a public school in your area and that you 'll then tell the story of how you got involved , so that within a year we have a thousand examples -- a thousand ! -- of transformative partnerships . Profound leaps forward ! And these can be things that maybe you 're already doing . I know that so many people in this room are already doing really interesting things . I know that for a fact . So , tell us these stories and inspire others on the website . We created a website , I 'm going to switch to " we " and not " I " hope : We hope that the attendees of this conference will usher in a new era of participation in our public schools . We hope that you will take the lead in partnering your innovative spirit and expertise with that of innovative educators in your community . Always let the teachers lead the way . They will tell you how to be useful . I hope that you 'll step in and help out . There are a million ways . You can walk up to your local school and consult with the teachers . They 'll always tell you how to help . So -- this is with Hot Studio in San Francisco , they did this phenomenal job . This website is already up , it 's already got a bunch of stories , a lot of ideas . It 's called " Once Upon a School , " which is a great title , I think . This site will document every story , every project that comes out of this conference and around the world . So you go to the website ; you see a bunch of ideas you can be inspired by and then you add your own projects once you get started . Hot Studio did a great job in a very tight deadline . So , visit the site . If you have any questions , you can ask this guy , who 's our director of national programs . He 'll be on the phone . You email him , he 'll answer any question you possibly want . And he 'll get you inspired and get you going and guide you through the process so that you can affect change . And it can be fun ! That 's the point of this talk -- it need n't be sterile . It need n't be bureaucratically untenable . You can do and use the skills that you have . The schools need you . The teachers need you . Students and parents need you . They need your actual person : your physical personhood and your open minds and open ears and boundless compassion , sitting next to them , listening and nodding and asking questions for hours at a time . Some of these kids just do n't plain know how good they are : how smart and how much they have to say . You can tell them . You can shine that light on them , one human interaction at a time . So we hope you 'll join us . Thank you so much . </content>
</text>
<text id="ted/don_norman_on_design_and_emotion">
The new me is beauty . ( Laughter ) Yeah , people used to say , you know , Norman 's OK , but if you followed what he said , everything would be usable but it would be ugly . Well , I did n't have that in mind , so ... This is neat . Thank you for setting up my display . I mean , it 's just wonderful . And I have n't the slightest idea what it does or what it 's good for , but I want it . And that 's my new life . My new life is trying to understand what beauty is about , and pretty , and emotions . The new me is all about making things kind of neat and fun . And so this is a Philippe Starck juicer , produced by Alessi . It 's so much fun I have it in my house , but I have it in the entryway , I do n't use it to make juice . ( Laughter ) In fact , I bought the gold-plated special edition and it comes with a little slip of paper that says , " Do n't use this juicer to make juice . The acid will ruin the gold-plating . " ( Laughter ) So actually , I took a carton of orange juice and I poured it in the glass to take this picture . ( Laughter ) But , beneath it is a wonderful knife . It 's a Global cutting knife made in Japan . First of all , look at the shape , it 's just wonderful to look at . Second of all , it 's really beautiful balanced it holds -- feels well . And third of all , it 's so sharp , it just cuts . It 's a delight to use . And so , it 's got everything , right ? It 's beautiful and it 's functional . And I can tell you stories about it , which makes it reflective , and so you 'll see I have a theory of emotion . And those are the three components . Hiroshi Ishii and his group at the MIT Media Lab took a ping-pong table and a projector above it , and on the ping-pong table they projected an image of water and fish swimming in it . And as you play ping-pong , whenever the ball hits part of the table the ripples spread out and the fish run away . But of course , then the ball hits the other side , ripples hit the -- poor fish , they ca n't find any peace and quiet . ( Laughter ) And , is that a good way to play ping-pong ? No. But is it fun ? Yeah ! Yeah . So -- or look at Google . If you type in , oh say , " emotion and design " you get 10 pages of results . So Google just took their logo and they spread it out . Instead of saying " You got 73,000 results . This one through 20. Next , " they just give you as many O 's as there are pages . It 's really simple and subtle . I bet a lot of you have seen it and never noticed it . That 's the subconscious mind that sort of notices it , it probably is kind of pleasant and you did n't know why . And it 's just clever . And of course , what 's especially good , if you type " design and emotion , " the first response out of those 10 pages is my website . ( Laughter ) Now , the weird thing is Google lies because if I type " design and emotion , " it says , " You do n't need the 'and . ' We do it anyway . " So , OK . So I type " design emotion " and my website was n't first again . It was third . Oh well , different story . There was this wonderful review in The New York Times about the MINI Cooper automobile . It said , " You know , this is a car that has lots of faults . Buy it anyway . It 's so much fun to drive . " And if you look at the inside of the car -- I mean , I wanted to see , I rented it , this is me taking a picture while my son is driving -- and the inside of the car , the whole design is fun . It 's round , it 's neat . The controls work wonderfully . So that 's my new life , it 's all about fun . I really have the feeling that pleasant things work better , and that never made any sense to me until I finally figured out , look ... I 'm going to put a plank on the ground . So , imagine I have a plank about two feet wide and 30 feet long and I 'm going to walk on it , and you see I can walk on it without looking , I can go back and forth and I can jump up and down . No problem . Now I 'm going to put the plank 300 feet in the air and I 'm not going to go near it , thank you . Intense fear paralyzes you . It actually affects the way the brain works . So , Paul Saffo , just before his talk said that he did n't really have it down until just a few days or hours before the talk , and that anxiety was really helpful in causing him to focus And that 's what fear and anxiety does It causes you to be -- what 's called depth-first processing -- to focus , not be distracted , and I could n't force myself across that . Now some people can -- circus workers , steel workers . But it really changes the way you think . And then , a psychologist , Alice Isen , did this wonderful experiment . She brought students in to solve problems So , she 'd bring people into the room , there 'd be a string hanging down here and a string hanging down here and an empty room , except a table with a bunch of crap on it -- some papers and scissors and stuff . And she 'd bring them in , and she 'd say , " This is an IQ test and it determines how well you do in life . Would you tie those two strings together ? " So they 'd take one string and they 'd pull it over here and they could n't reach the other string . Still ca n't reach it . And , basically none of them could solve it . You bring in a second group of people , and you say , " Oh , before we start , I got this box of candy , and I do n't eat candy . Would you like the box of candy ? " And turns out they liked it , and it made them happy , not very happy , but a little bit of happy . And guess what -- they solved the problem . And it turns out that when you 're anxious you squirt neural transmitters in the brain , which focuses you makes you depth-first , And when you 're happy -- what we call positive valence -- you squirt dopamine into the prefrontal lobes , which makes you a breadth-first problem solver you 're more susceptible to interruption , you do out of the box thinking . That 's what brainstorming 's about , right ? With brainstorming we make you happy , we play games , and we say , " No criticism , " and you get all these weird , neat ideas . But in fact , if that 's how you always were you 'd never get any work done because you 'd be working along and say , " Oh , I got a new way of doing it . " So to get work done , you 've got to set a deadline , right ? You 've got be anxious . So the brain works differently and if you 're happy , things work better because you 're more creative You get a little problem , you say , " Ah , I 'll figure it out . " No big deal . There 's something I call the visceral level of processing . Biology -- we have co-adapted through biology to like bright colors . That 's especially good that mammals and primates like fruits and bright plants , because you eat the fruit and you thereby spread the seed . There 's an amazing amount of stuff that 's built into the brain . We dislike bitter tastes , we dislike loud sounds , we dislike hot temperatures , cold temperatures . We dislike scolding voices , we dislike frowning faces , We like symmetrical faces , et cetera , et cetera . So that 's the visceral level and in design you can express visceral in lots of ways , like the choice of type fonts and the red for hot , exciting . Or the 1963 Jaguar . It 's actually a crummy car , falls apart all the time , but the owners love it . And it 's beautiful -- it 's in the Museum of Modern Art . A water bottle . You buy it because of the bottle , not because of the water . And when people are finished , they do n't throw it away they keep it for -- you know , it 's like the old wine bottles , you keep it for decoration or maybe fill it with water again , which proves it 's not the water . It 's all about the visceral experience . The middle level of processing is the behavioral level and that 's actually where most of our stuff gets done . Visceral is subconscious , you 're unaware of it Behavioral is subconscious , you 're unaware of it . Almost everything we do is subconscious . I 'm walking around the stage , I 'm not attending to the control of my legs . I 'm doing a lot , most of my talk is subconscious , it 's been rehearsed and thought about a lot . Most of what we do is subconscious . Automatic behavior -- skilled behavior is subconscious , controlled by the behavioral side . And behavioral design is all about feeling in control , which includes usability , understanding , but also the feel and heft . That 's why the Global knives are so neat . They 're so nicely balanced , so sharp , you really feel you 're in control of the cutting . Or just driving a high-performance sports car over a demanding curb , again feeling that you are in complete control of the environment . Or the sensual feeling . This is a Kohler shower , a waterfall shower , and actually , all those knobs beneath are also shower heads . It will squirt you all around And you can stay in that shower for hours . And not waste water , by the way , it recirculates the same dirty water . ( Laughter ) Or this -- this is a really neat teapot I found at high tea at The Four Seasons Hotel in Chicago . It 's a Ronnefeldt tilting teapot . That 's kind of what the teapot looks like but the way you use it is you lay it on its back , and you put tea in , and then you fill it with water because water then seeps over the tea . And the tea is sitting in this stuff to the right -- the tea is to the right of this line . There 's a little ledge inside , so the tea is sitting there and the water is filling it up like that . And when the tea is ready , or almost ready , you tilt it . And that means the tea is partially covered while it completes the brewing . And when it 's finished , you put it vertically , and now the tea is -- you remember -- above this line and the water only comes to here and so it keeps the tea out And on top of that , it communicates , which is what emotion does . Emotion is all about acting , emotion is really about acting . It 's being safe in the world . Cognition is about understanding the world , emotion is about interpreting it saying good , bad , safe , dangerous , and getting us ready to act , which is why the muscles tense or relax . And that 's why we can tell the emotion of somebody else , because their muscles are acting , subconsciously , except that we 've evolved to make the facial muscles really rich with emotion . Well , this has emotions if you like , because it signals the waiter that , " Hey , I 'm finished . See -- upright . " And the waiter can come by and say , " Would you like more water ? " It 's kind of neat . What a wonderful design . And the third level is reflective , which is , if you like the superego , it 's a little part of the brain that has no control over what you do , no control over the -- does n't see the senses , does n't control the muscles . It looks over what 's going on . It 's that little voice in your head . that 's watching and saying , " That 's good . That 's bad . " or " Why are you doing that ? I do n't understand . " It 's that little voice in your head that 's the seat of consciousness . Here 's a great reflective product . Owners of the Hummer have said , " You know I 've owned many cars in my life all sorts of exotic cars , but never have I had a car that attracted so much attention . " It 's about their image , it 's not about the car . But even if you want a more positive model , this is the GM car . And the reason you might buy it now is because you care about the environment And you 'll buy it to protect the environment , even though the first few cars are going to be really expensive and not perfected . But that 's reflective design as well . Or an expensive watch so you can impress people , who say " Oh gee , I did n't know you had that watch . " As opposed to this one , which is a pure behavioral watch , which probably keeps better time than the 13,000 dollar watch I just showed you . But it 's ugly . This is a clear Don Norman watch . And what 's neat is sometimes you pit one emotion against the other , the visceral fear of falling against the reflective state saying " It 's OK . It 's OK . It 's safe . It 's safe . " If that amusement park were rusty and falling apart , you 'd never go on the ride . So , it 's pitting one against the other . The other neat thing ( Laughter ) So Jake Cress is this furniture maker , and he makes this unbelievable set of furniture . And this is his chair with claw , and the poor little chair has lost its ball and it 's trying to get it back before anybody notices . And what 's so neat about it is how you accept that story . And that 's what 's nice about emotion . So that 's the new me . I 'm only saying positive things from now on . ( Laughter ) ( Applause ) </content>
</text>
<text id="ted/doris_kearns_goodwin_on_learning_from_past_presidents">
So , indeed , I have spent my life looking into the lives of presidents who are no longer alive . Waking up with Abraham Lincoln in the morning , thinking of Franklin Roosevelt when I went to bed at night . But when I try and think about what I 've learned about the meaning in life , my mind keeps wandering back to a seminar that I took when I was a graduate student at Harvard with the great psychologist Erik Erikson . He taught us that the richest and fullest lives attempt to achieve an inner balance between three realms : work , love and play . And that to pursue one realm to the disregard of the other , is to open oneself to ultimate sadness in older age . Whereas to pursue all three with equal dedication , is to make possible a life filled , not only with achievement , but with serenity . So since I tell stories , let me look back on the lives of two of the presidents I 've studied to illustrate this point -- Abraham Lincoln and Lyndon Johnson . As for that first sphere of work , I think what Abraham Lincoln 's life suggests is that fierce ambition is a good thing . He had a huge ambition . But it was n't simply for office or power or celebrity or fame -- what it was for was to accomplish something worthy enough in life so that he could make the world a little better place for his having lived in it . Even as a child , it seemed , Lincoln dreamed heroic dreams . He somehow had to escape that hard-scrabble farm from which he was born . No schooling was possible for him , except a few weeks here , a few weeks there . But he read books in every spare moment he could find . It was said when he got a copy of the King James Bible or " Aesop 's Fables , " he was so excited he could n't sleep . He could n't eat . The great poet Emily Dickinson once said , " There is no frigate like a book to take us lands away . " How true for Lincoln . Though he never would travel to Europe , he went with Shakespeare 's kings to merry England , he went with Lord Byron 's poetry to Spain and Portugal . Literature allowed him to transcend his surroundings . But there were so many losses in his early life that he was haunted by death . His mother died when he was only nine years old . His only sister , Sarah , in childbirth a few years later . And his first love , Ann Rutledge , at the age of 22. Moreover , when his mother lay dying she did not hold out for him the hope that they would meet in an afterworld . She simply said to him , " Abraham , I 'm going away from you now , and I shall never return . " As a result he became obsessed with the thought that when we die our life is swept away , dust to dust . But only as he grew older did he develop a certain consolation from an ancient Greek notion -- but followed by other cultures as well -- that if you could accomplish something worthy in your life , you could live on in the memory of others . Your honor and your reputation would outlive your earthly existence . And that worthy ambition became his lodestar . It carried him through the one significant depression that he suffered when he was in his early 30s . Three things had combined to lay him low . He had broken his engagement with Mary Todd , not certain he was ready to marry her , but knowing how devastating it was to her that he did that . His one intimate friend , Joshua Speed , was leaving Illinois to go back to Kentucky because Speed 's father had died . And his political career in the state legislature was on a downward slide . He was so depressed that friends worried he was suicidal . They took all knives and razors and scissors from his room . And his great friend Speed went to his side and said , " Lincoln , you must rally or you will die . " He said that , " I would just as soon die right now , but I 've not yet done anything to make any human being remember that I have lived . " So fuelled by that ambition , he returned to the state legislature . He eventually won a seat in Congress . He then ran twice for the Senate , lost twice . " Everyone is broken by life , " Ernest Hemingway once said , " but some people are stronger in the broken places . " So then he surprised the nation with an upset victory for the presidency over three far more experienced , far more educated , far more celebrated rivals . And then when he won the general election , he stunned the nation even more by appointing each of these three rivals into his Cabinet . It was an unprecedented act at the time because everybody thought , " He 'll look like a figurehead compared to these people . " They said , " Why are you doing this , Lincoln ? " And he said , " Look , these are the strongest and most able men in the country . The country is in peril . I need them by my side . " But perhaps my old friend , Lyndon Johnson might have put it in less noble fashion , " Better to have your enemies inside the tent pissing out , than outside the tent pissing in . " ( Laughter ) But it soon became clear that Abraham Lincoln would emerge as the undisputed captain of this unruly team . For each of them soon came to understand that he possessed an unparalleled array of emotional strengths and political skills that proved far more important than the thinness of his external résumé . For one thing , he possessed an uncanny ability to empathize with and to think about other peoples ' point of view . He repaired injured feelings that might have escalated into permanent hostility . He shared credit with ease , assumed responsibility for the failure of his subordinates , constantly acknowledged his errors and learned from his mistakes . These are the qualities we should be looking for in our candidates in 2008. ( Applause ) He refused to be provoked by petty grievances . He never submitted to jealousy or brooded over perceived slights . And he expressed his unshakeable convictions in everyday language , in metaphors , in stories . And with a beauty of language , almost as if the Shakespeare and the poetry he had so loved as a child had worked their way into his very soul . In 1863 , when the Emancipation Proclamation was signed , he brought his old friend , Joshua Speed , back to the White House . And remembered that conversation of decades before , when he was so sad . And he , pointing to the Proclamation said , " I believe in this measure my fondest hopes will be realized . " But as he was about to put his signature on the Proclamation his own hand was numb and shaking because he had shaken a thousand hands that morning at a New Year 's reception . So he put the pen down . He said , " If ever my soul were in an act , it is in this act . But if I sign with a shaking hand , posterity will say , 'He hesitated . ' " So he waited until he could take up the pen and sign with a bold and clear hand . But even in his wildest dreams , Lincoln could never have imagined how far his reputation would reach . I was so thrilled to find an interview with the great Russian writer , Leo Tolstoy , in a New York newspaper in the early 1900s . And in it , Tolstoy told of a trip that he 'd recently made to a very remote area of the Caucasus , where there were only wild barbarians , who had never left this part of Russia . Knowing that Tolstoy was in their midst , they asked him to tell stories of the great men of history . So he said , " I told them about Napoleon and Alexander the Great and Frederick the Great and Julius Caesar , and they loved it . But before I finished , the chief of the barbarians stood up and said , " But wait , you have n't told us about the greatest ruler of them all . We want to hear about that man who spoke with a voice of thunder , who laughed like the sunrise , who came from that place called America , which is so far from here , that if a young man should travel there , he would be an old man when he arrived . Tell us of that man . Tell us of Abraham Lincoln . ' " He was stunned . He told them everything he could about Lincoln . And then in the interview he said , " What made Lincoln so great ? Not as great a general as Napoleon , not as great a statesman as Frederick the Great . " But his greatness consisted , and historians would roundly agree , in the integrity of his character and the moral fiber of his being . So in the end that powerful ambition that had carried Lincoln through his bleak childhood had been realized . That ambition that had allowed him to laboriously educate himself by himself , to go through that string of political failures and the darkest days of the war . His story would be told . So as for that second sphere , not of work , but of love -- encompassing family , friends and colleagues -- it , too , takes work and commitment . The Lyndon Johnson that I saw in the last years of his life , when I helped him on his memoirs , was a man who had spent so many years in the pursuit of work , power and individual success , that he had absolutely no psychic or emotional resources left to get him through the days once the Presidency was gone . My relationship with him began on a rather curious level . I was selected as a White House Fellow when I was 24 years old . We had a big dance at the White House . President Johnson did dance with me that night . Not that peculiar -- there were only three women out of the 16 White House Fellows . But he did whisper in my ear that he wanted me to work directly for him in the White House . But it was not to be that simple . For in the months leading up to my selection , like many young people , I 'd been active in the anti-Vietnam War movement , and had written an article against Lyndon Johnson , which unfortunately came out in The New Republic two days after the dance in the White House . ( Laugher ) And the theme of the article was how to remove Lyndon Johnson from power . ( Laughter ) So I was certain he would kick me out of the program . But instead , surprisingly , he said , " Oh , bring her down here for a year , and if I ca n't win her over , no one can . " So I did end up working for him in the White House . Eventually accompanied him to his ranch to help him on those memoirs , never fully understanding why he 'd chosen me to spend so many hours with . I like to believe it was because I was a good listener . He was a great story teller . Fabulous , colorful , anecdotal stories . There was a problem with these stories , however , which I later discovered , which is that half of them were n't true . But they were great , nonetheless . ( Laughter ) So I think that part of his attraction for me was that I loved listening to his tall tales . But I also worried that part of it was that I was then a young woman . And he had had somewhat of a minor league womanizing reputation . So I constantly chatted to him about boyfriends , even when I did n't have any at all . Everything was working perfectly , until one day he said he wanted to discuss our relationship . Sounded very ominous when he took me nearby to the lake , conveniently called Lake Lyndon Baines Johnson . And there was wine and cheese and a red-checked tablecloth -- all the romantic trappings . And he started out , " Doris , more than any other woman I have ever known ... " And my heart sank . And then he said , " You remind me of my mother . " ( Laughter ) It was pretty embarrassing , given what was going on in my mind . But I must say , the older I 've gotten , the more I realize what an incredible privilege it was to have spent so many hours with this aging lion of a man . A victor in a thousand contests , three great civil rights laws , Medicare , aid to education . And yet , roundly defeated in the end by the war in Vietnam . And because he was so sad and so vulnerable , he opened up to me in ways he never would have had I know him at the height of his power -- sharing his fears , his sorrows and his worries . And I 'd like to believe that the privilege fired within me the drive to understand the inner person behind the public figure , that I 've tried to bring to each of my books since then . But it also brought home to me the lessons which Erik Erikson had tried to instill in all of us , about the importance of finding balance in life . For on the surface , Lyndon Johnson should have had everything in the world to feel good about in those last years , in the sense that he had been elected to the Presidency . He had all the money he needed to pursue any leisure activity he wanted . He owned a spacious ranch in the countryside , a penthouse in the city . Sailboats , speedboats . He had servants to answer any whim , and he had a family who loved him deeply . And yet , years of concentration solely on work and individual success meant that in his retirement he could find no solace in family , in recreation , in sports or in hobbies . It was almost as if the hole in his heart was so large that even the love of a family , without work , could not fill it . As his spirits sagged , his body deteriorated until , I believe , he slowly brought about his own death . In those last years , he said he was so sad watching the American people look toward a new President and forgetting him . He spoke with immense sadness in his voice , saying maybe he should have spent more time with his children , and their children in turn . But it was too late . Despite all that power , all that wealth , he was alone when he finally died -- his ultimate terror realized . So as for that third sphere of play , which he never had learned to enjoy , I 've learned over the years that even this sphere requires a commitment of time and energy . Enough so that a hobby , a sport , a love of music , or art , or literature , or any form of recreation , can provide true pleasure , relaxation and replenishment . So deep , for instance , was Abraham Lincoln 's love of Shakespeare , that he made time to spend more than a hundred nights in the theatre , even during those dark days of the war . He said , when the lights went down and a Shakespeare play came on , for a few precious hours he could imagine himself back in Prince Hal 's time . But an even more important form of relaxation for him , that Lyndon Johnson never could enjoy , was a love of , somehow , humor . And feeling out what hilarious parts of life can produce as side light to the sadness . He once said that he laughed so he did not cry . That a good story for him was better than a drop of whiskey . His storytelling powers had first been recognized when he was on the circuit in Illinois . The lawyers and the judges would travel from one county courthouse to the other , and when anyone was knowing Lincoln was in town , they would come from miles around to listen to him tell stories . He would stand with his back against a fire and entertain the crowd for hours with his winding tales . And all these stories became part of his memory bank , so he could call on them whenever he needed to . And they 're not quite what you might expect from our marble monument . One of his favorite stories , for example , had to do with the revolutionary war hero , Ethan Allen . And as Lincoln told the story , Mr. Allen went to Britain after the war . And the British people were still upset about losing the revolution , so they decided to embarrass him a little bit by putting a huge picture of General Washington in the only outhouse , where he 'd have to encounter it . They figured he 'd be upset about the indignity of George Washington being in an outhouse . But he came out of the outhouse not upset at all . And so they said , " Well , did you see George Washington in there ? " " Oh , yes , " he said , " perfectly appropriate place for him . " " What do you mean ? " they said . " Well , " he said , " there 's nothing to make an Englishman shit faster than the sight of General George Washington . " ( Laughter ) ( Applause ) So you can imagine , if you are in the middle of a tense cabinet meeting -- and he had hundreds of these stories -- you would have to relax . So between his nightly treks to the theatre , his story telling , and his extraordinary sense of humor and his love of quoting Shakespeare and poetry , he found that form of play which carried him through his days. In my own life , I shall always be grateful for having found a form of play in my irrational love of baseball . Which allows me from the beginning of spring training to the end of the fall to have something to occupy my mind and heart other than my work . It all began when I was only six years old , and my father taught me that mysterious art of keeping score while listening to baseball games . So that when he went to work in New York during the day , I could record for him the history of that afternoon 's Brooklyn Dodgers game . Now , when you 're only six years old , and your father comes home every single night and listens to you -- as I now realize that I , in excruciating detail , recounted every single play of every inning of the game that had just taken place that afternoon . But he made me feel I was telling him a fabulous story . It makes you think there 's something magic about history to keep your father 's attention . In fact , I 'm convinced I learned the narrative art from those nightly sessions with my father . Because at first , I 'd be so excited I would blurt out , " The Dodgers won ! " or , " The Dodgers lost ! " Which took much of the drama of this two-hour-telling away . ( Laughter ) So I finally learned you had to tell a story from beginning to middle to end . I must say , so fervent was my love of the old Brooklyn Dodgers in those days , that I had to confess in my first confession two sins that related to baseball . The first occurred because the Dodgers ' catcher , Roy Campanella , came to my hometown of Rockville Centre , Long Island , just as I was in preparation for my first Holy Communion . And I was so excited -- first person I 'd ever see outside of Ebbets Field . But it so happened he was speaking in a Protestant Church . When you are brought up as a Catholic , you think that if you ever set foot in a Protestant Church , you 'll be struck dead at the threshold . So I went to my father in tears , " What are we going to do ? " He said , " Do n't worry . He 's speaking in a parish hall . We 're sitting in folding chairs . He 's talking about sportsmanship . It 's not a sin . " But as I left that night , I was certain that somehow I 'd traded the life of my everlasting soul for this one night with Roy Campanella . ( Laughter ) And there were no indulgences around that I could buy . So I had this sin on my soul when I went to my first confession . I told the priest right away . He said , " No problem . It was n't a religious service . " But then , unfortunately , he said , " And what else , my child ? " And then came my second sin . I tried to sandwich it in between talking too much in church , wishing harm to others , being mean to my sisters . And he said , " To whom did you wish harm ? " And I had to say that I wished that various New York Yankees players would break arms , legs and ankles -- ( Laughter ) -- so that the Brooklyn Dodgers could win their first World Series . He said , " How often do you make these horrible wishes ? " And I had to say , every night when I said my prayers . ( Laughter ) So he said , " Look , I 'll tell you something . I love the Brooklyn Dodgers , as you do , but I promise you some day they will win fairly and squarely . You do not need to wish harm on others to make it happen . " " Oh yes , " I said . But luckily , my first confession -- to a baseball-loving priest ! ( Laughter ) Well , though my father died of a sudden heart attack when I was still in my 20s , before I had gotten married and had my three sons , I have passed his memory -- as well as his love of baseball -- on to my boys . Though when the Dodgers abandoned us to come to L. A. , I lost faith in baseball until I moved to Boston and became an irrational Red Socks fan . And I must say , even now , when I sit with my sons with our season tickets , I can sometimes close my eyes against the sun and imagine myself , a young girl once more , in the presence of my father , watching the players of my youth on the grassy fields below . Jackie Robinson , Roy Campanella , Pee Wee Reese , and Duke Snider . I must say there is magic in these moments . When I open my eyes and I see my sons in the place where my father once sat , I feel an invisible loyalty and love linking my sons to the grandfather whose face they never had a chance to see , but whose heart and soul they have come to know through all the stories I have told . Which is why in the end , I shall always be grateful for this curious love of history , allowing me to spend a lifetime looking back into the past . Allowing me to learn from these large figures about the struggle for meaning for life . Allowing me to believe that the private people we have loved and lost in our families , and the public figures we have respected in our history , just as Abraham Lincoln wanted to believe , really can live on , so long as we pledge to tell and to retell the stories of their lives . Thank you for letting me be that storyteller today . ( Applause ) Thank you . </content>
</text>
<text id="ted/elliot_krane_the_mystery_of_chronic_pain">
I 'm a pediatrician and an anesthesiologist , so I put children to sleep for a living . ( Laughter ) And I 'm an academic , so I put audiences to sleep for free . ( Laughter ) But what I actually mostly do is a manage the pain management service at the Packard Children 's Hospital up at Stanford in Palo Alto . And it 's from the experience from about 20 or 25 years of doing that that I want to bring to you the message this morning , that pain is a disease . Now most of the time , you think of pain as a symptom of a disease . And that 's true most of the time . It 's the symptom of a tumor or an infection or an inflammation or an operation . But about 10 percent of the time , after the patient has recovered from one of those events , pain persists . It persists for months and oftentimes for years . And when that happens , it is its own disease . And before I tell you about how it is that we think that happens and what we can do about it , I want to show you how it feels for my patients . So imagine , if you will , that I 'm stroking your arm with this feather , as I 'm stroking my arm right now . Now , I want you to imagine that I 'm stroking it with this . Please keep your seat . ( Laughter ) A very different feeling . Now what does it have to do with chronic pain ? Imagine , if you will , these two ideas together . Imagine what your life would be like if I were to stroke it with this feather , but your brain was telling you that this is what you are feeling -- and that is the experience of my patients with chronic pain . In fact , imagine something even worse . Imagine I were to stroke your child 's arm with this feather , and their brain [ was ] telling them that they were feeling this hot torch . That was the experience of my patient , Chandler , whom you see in the photograph . As you can see , she 's a beautiful , young woman . She was 16 years old last year when I met her , and she aspired to be a professional dancer . And during the course of one of her dance rehearsals , she fell on her outstretched arm and sprained her wrist . Now you would probably imagine , as she did , that a wrist sprain is a trivial event in a person 's life . Wrap it in an ACE bandage , take some ibuprofen for a week or two , and that 's the end of the story . But in Chandler 's case , that was the beginning of the story . This is what her arm looked like when she came to my clinic about three months after her sprain . You can see that the arm is discolored , purplish in color . It was cadaverically cold to the touch . The muscles were frozen , paralyzed -- dystonic is how we refer to that . The pain had spread from her wrist to her hands , to her fingertips , from her wrist up to her elbow , almost all the way to her shoulder . But the worst part was , not the spontaneous pain that was there 24 hours a day . The worst part was that she had allodynia , the medical term for the phenomenon that I just illustrated with the feather and with the torch . The lightest touch of her arm -- the touch of a hand , the touch even of a sleeve , of a garment , as she put it on -- caused excruciating , burning pain . How can the nervous system get this so wrong ? How can the nervous system misinterpret an innocent sensation like the touch of a hand and turn it into the malevolent sensation of the touch of the flame . Well you probably imagine that the nervous system in the body is hardwired like your house . In your house , wires run in the wall , from the light switch to a junction box in the ceiling and from the junction box to the light bulb . And when you turn the switch on , the light goes on . And when you turn the switch off , the light goes off . So people imagine the nervous system is just like that . If you hit your thumb with a hammer , these wires in your arm -- that , of course , we call nerves -- transmit the information into the junction box in the spinal cord where new wires , new nerves , take the information up to the brain where you become consciously aware that your thumb is now hurt . But the situation , of course , in the human body is far more complicated than that . Instead of it being the case that that junction box in the spinal cord is just simple where one nerve connects with the next nerve by releasing these little brown packets of chemical information called neurotransmitters in a linear one-on-one fashion , in fact , what happens is the neurotransmitters spill out in three dimensions -- laterally , vertically , up and down in the spinal cord -- and they start interacting with other adjacent cells . These cells , called glial cells , were once thought to be unimportant structural elements of the spinal cord that did nothing more than hold all the important things together , like the nerves . But it turns out the glial cells have a vital role in the modulation , amplification and , in the case of pain , the distortion of sensory experiences . These glial cells become activated . Their DNA starts to synthesize new proteins , which spill out and interact with adjacent nerves . And they start releasing their neurotransmitters . And those neurotransmitters spill out and activate adjacent glial cells , and so on and so forth , until what we have is a positive feedback loop . It 's almost as if somebody came into your home and rewired your walls , so that the next time you turned on the light switch , the toilet flushed three doors down , or your dishwasher went on , or your computer monitor turned off . That 's crazy , but that 's , in fact , what happens with chronic pain . And that 's why pain becomes its own disease . The nervous system has plasticity . It changes , and it morphs in response to stimuli . Well , what do we do about that ? What can we do in a case like Chandler 's ? We treat these patients in a rather crude fashion at this point in time . We treat them with symptom-modifying drugs -- pain-killers -- which are , frankly , not very effective for this kind of pain . We take nerves that are noisy and active that should be quiet , and we put them to sleep with local anesthetics . And most importantly , what we do is we use a rigorous , and often uncomfortable , process of physical therapy and occupational therapy to retrain the nerves in the nervous system to respond normally to the activities and sensory experiences that are part of everyday life . And we support all of that with an intensive psychotherapy program to address the despondency , despair and depression that always accompanies severe , chronic pain . It 's successful , as you can see from this video of Chandler , who , two months after we first met her , is now doings a back flip . And I had lunch with her yesterday , because she 's a college student studying dance at Long Beach here . And she 's doing absolutely fantastic . But the future is actually even brighter . The future holds the promise that new drugs will be developed that are not symptom-modifying drugs that simply mask the problem , as we have now , but that will be disease-modifying drugs that will actually go right to the root of the problem and attack those glial cells , or those pernicious proteins that the glial cells elaborate , that spill over and cause this central nervous system wind-up , or plasticity , that so is capable of distorting and amplifying the sensory experience that we call pain . So I have hope that in the future , the prophetic words of George Carlin will be realized , who said , " My philosophy : No pain , no pain . " Thank you very much . ( Applause ) </content>
</text>
<text id="ted/eva_zeisel_on_the_playful_search_for_beauty">
So I understand that this meeting was planned , and the slogan was From Was to Still . And I am illustrating Still . Which , of course , I am not agreeing with because , although I am 94 , I am not still working . And anybody who asks me , " Are you still doing this or that ? " I do n't answer because I 'm not doing things still , I 'm doing it like I always did . I still have -- or did I use the word still ? I did n't mean that . ( Laughter ) I have my file which is called To Do . I have my plans . I have my clients . I am doing my work like I always did . So this takes care of my age . I want to show you my work so you know what I am doing and why I am here . This was about 1925. All of these things were made during the last 75 years . ( Laughter ) ( Applause ) But , of course , I 'm working since 25 , doing more or less what you see here . This is Castleton China . This was an exhibition at the Museum of Modern Art . This is now for sale at the Metropolitan Museum . This is still at the Metropolitan Museum now for sale . This is a portrait of my daughter and myself . ( Applause ) These were just some of the things I 've made . I made hundreds of them for the last 75 years . I call myself a maker of things . I do n't call myself an industrial designer because I 'm other things . Industrial designers want to make novel things . Novelty is a concept of commerce , not an aesthetic concept . The industrial design magazine , I believe , is called " Innovation . " Innovation is not part of the aim of my work . Well , makers of things : they make things more beautiful , more elegant , more comfortable than just the craftsmen do . I have so much to say . I have to think what I am going to say . Well , to describe our profession otherwise , we are actually concerned with the playful search for beauty . That means the playful search for beauty was called the first activity of Man . Sarah Smith , who was a mathematics professor at MIT , wrote , " The playful search for beauty was Man 's first activity -- that all useful qualities and all material qualities were developed from the playful search for beauty . " These are tiles . The word , " playful " is a necessary aspect of our work because , actually , one of our problems is that we have to make produce lovely things throughout all of life , and this for me is now 75 years . So how can you , without drying up , make things with the same pleasure , as a gift to others , for so long ? The playful is therefore an important part of our quality as designer . Let me tell you some about my life . As I said , I started to do these things 75 years ago . My first exhibition in the United States was at the Sesquicentennial exhibition in 1926 -- that the Hungarian government sent one of my hand-drawn pieces as part of the exhibit . My work actually took me through many countries , and showed me a great part of the world . This is not that they took me -- the work did n't take me -- I made the things particularly because I wanted to use them to see the world . I was incredibly curious to see the world , and I made all these things , which then finally did take me to see many countries and many cultures . I started as an apprentice to a Hungarian craftsman , and this taught me what the guild system was in Middle Ages . The guild system : that means when I was an apprentice , I had to apprentice myself in order to become a pottery master . In my shop where I studied , or learned , there was a traditional hierarchy of master , journeyman and learned worker , and apprentice , and I worked as the apprentice . The work as an apprentice was very primitive . That means I had to actually learn every aspect of making pottery by hand . We mashed the clay with our feet when it came from the hillside . After that , it had to be kneaded . It had to then go in , kind of , a mangle . And then finally it was prepared for the throwing . And there I really worked as an apprentice . My master took me to set ovens because this was part of oven-making , oven-setting , in the time . And finally , I had received a document that I had accomplished my apprenticeship successfully , that I had behaved morally , and this document was given to me by the Guild of Roof-Coverers , Rail-Diggers , Oven-Setters , Chimney Sweeps and Potters . ( Laughter ) I also got at the time a workbook which explained my rights and my working conditions , and I still have that workbook . First I set up a shop in my own garden , and made pottery which I sold on the marketplace in Budapest . And there I was sitting , and my then-boyfriend -- I did n't mean it was a boyfriend like it is meant today -- but my boyfriend and I sat at the market and sold the pots . My mother thought that this was not very proper , so she sat with us to add propriety to this activity . ( Laughter ) However , after a while there was a new factory being built in Budapest , a pottery factory , a large one . And I visited it with several ladies , and asked all sorts of questions of the director . Then the director asked me , why do you ask all these questions ? I said , I also have a pottery . So he asked me , could he please visit me , and then finally he did , and explained to me that what I did now in my shop was an anachronism , that the industrial revolution had broken out , and that I rather should join the factory . There he made an art department for me where I worked for several months . However , everybody in the factory spent his time at the art department . The director there said there were several women casting and producing my designs now in molds , and this was sold also to America . I remember that it was quite successful . However , the director , the chemist , model maker -- everybody -- concerned himself much more with the art department -- that means , with my work -- than making toilets , so finally they got a letter from the center , from the bank who owned the factory , saying , make toilet-setting behind the art department , and that was my end . So this gave me the possibility because now I was a journeyman , and journeymen also take their satchel and go to see the world . So as a journeyman , I put an ad into the paper that I had studied , that I was a down-to-earth potter 's journeyman and I was looking for a job as a journeyman . And I got several answers , and I accepted the one which was farthest from home and practically , I thought , halfway to America . And that was in Hamburg . Then I first took this job in Hamburg , at an art pottery where everything was done on the wheel , and so I worked in a shop where there were several potters . And the first day , I was coming to take my place at the turntable -- there were three or four turntables -- and one of them , behind where I was sitting , was a hunchback , a deaf-mute hunchback , who smelled very bad . So I doused him in cologne every day , which he thought was very nice , and therefore he brought bread and butter every day , which I had to eat out of courtesy . The first day I came to work in this shop there was on my wheel a surprise for me . My colleagues had thoughtfully put on the wheel where I was supposed to work a very nicely modeled natural man 's organs . ( Laughter ) After I brushed them off with a hand motion , they were very -- I finally was now accepted , and worked there for some six months . This was my first job . If I go on like this , you will be here till midnight . ( Laughter ) ( Applause ) So I will try speed it up a little ( Laughter ) Moderator : Eva , we have about five minutes . ( Laughter ) Eva Zeisel : Are you sure ? Moderator : Yes , I am sure . EZ : Well , if you are sure , I have to tell you that within five minutes I will talk very fast . And actually , my work took me to many countries because I used my work to fill my curiosity . And among other things , other countries I worked , was in the Soviet Union , where I worked from '32 to '37 -- actually , to '36 . I was finally there , although I had nothing to do -- I was a foreign expert . I became art director of the china and glass industry , and eventually under Stalin 's purges -- at the beginning of Stalin 's purges , I did n't know that hundreds of thousands of innocent people were arrested . So I was arrested quite early in Stalin 's purges , and spent 16 months in a Russian prison . The accusation was that I had successfully prepared an attentate on Stalin 's life . This was a very dangerous accusation . And if this is the end of my five minutes , I want to tell you that I actually did survive , which was a surprise . But since I survived and I 'm here , and since this is the end of the five minutes , I will -- Moderator : Tell me when your last trip to Russia was . Were n't you there recently ? EZ : Oh , this summer , in fact , the Lomonosov factory was bought by an American company , invited me . They found out that I had worked in '33 at this factory , and they came to my studio in Rockland County , and brought the 15 of their artists to visit me here . And they invited myself to come to the Russian factory last summer , in July , to make some dishes , design some dishes . And since I do n't like to travel alone , they also invited my daughter , son-in-law and granddaughter , so we had a lovely trip to see Russia today , which is not a very pleasant and happy view . Here I am now , if this is the end ? Thank you . ( Applause ) </content>
</text>
<text id="ted/ex_moonie_diane_benscoter_how_cults_think">
My journey to coming here today started in 1974. That 's me with the funny gloves . I was 17 and going on a peace walk . What I did n't know though , was most of those people , standing there with me , were Moonies . ( Laughter ) And within a week I had come to believe that the second coming of Christ had occurred , that it was Sun Myung Moon , and that I had been specially chosen and prepared by God to be his disciple . Now as cool as that sounds , my family was not that thrilled with this . ( Laughter ) And they tried everything they could to get me out of there . There was an underground railroad of sorts that was going on during those years . Maybe some of you remember it . They were called deprogrammers . And after about five long years my family had me deprogrammed . And I then became a deprogrammer . I started going out on cases . And after about five years of doing [ deprogramming ] I was arrested for kidnapping . Most of the cases I went out on were called involuntary . What happened was that the family had to get their loved ones some safe place somehow . And so they took them to some safe place . And we would come in and talk to them , usually for about a week . And so after [ the arrest ] happened I decided it was a good time to turn my back on this work . And about 20 years went by . There was a burning question though that would not leave me . And that was , " How did this happen to me ? " And in fact , what did happen to my brain ? Because something did . And so I decided to write a book , a memoir , about this decade of my life . And toward the end of writing that book there was a documentary that came out . It was on Jonestown . And it had a chilling effect on me . These are the dead in Jonestown . About 900 people died that day . Most of them taking their own lives . Women gave poison to their babies , and watched foam come from their mouths as they died . The top picture is a group of Moonies that have been blessed by their messiah . Their mates were chosen for them . The bottom picture is Hitler youth . This is the leg of a suicide bomber . The thing I had to admit to myself , with great repulsion , was that I get it . I understand how this could happen . I understand how someone 's brain , how someone 's mind can come to the place where it makes sense , in fact it would be wrong , when your brain is working like that , not to try to save the world through genocide . And so what is this ? How does this work ? And how I 've come to view what happened to me is a viral memetic infection . For those of you who are n't familiar with memetics , a meme has been defined as an idea that replicates in the human brian and moves from brain to brain like a virus , much like a virus . The way a virus works is -- it can infect and do the most damage to someone who has a compromised immune system . In 1974 , I was young , I was naive , and I was pretty lost in my world . I was really idealistic . These easy ideas to complex questions are very appealing when you are emotionally vulnerable . What happens is that circular logic takes over . " Moon is one with God . God is going to fix all the problems in the world . All I have to do is humbly follow . Because God is going to stop war and hunger -- all these things I wanted to do . All I have to do is humbly follow . Because after all , God is [ working through ] the messiah . He 's going to fix all this . " It becomes impenetrable . And the most dangerous part of this is that is creates " us " and " them , " " right " and " wrong , " " good " and " evil . " And it makes anything possible . Makes anything rationalizable . And the thing is , though , if you looked at my brain during those years in the Moonies -- Neuroscience is expanding exponentially , as Ray Kurzweil said yesterday . Science is expanding . We 're beginning to look inside the brain . And so if you looked at my brain , or any brain that 's infected with a viral memetic infection like this , and compared it to anyone in this room , or anyone who uses critical thinking on a regular basis , I am convinced it would look very , very different . And that , strange as it may sound , gives me hope . And the reason that gives me hope is that the first thing is to admit that we have a problem . But it 's a human problem . It 's a scientific problem , if you will . It happens in the human brain . There is no evil force out there to get us . And so this is something that , through research and education , I believe that we can solve . And so the first step is to realize that we can do this together , and that there is no " us " and " them . " Thank you very much . ( Applause ) </content>
</text>
<text id="ted/hans_rosling_at_state">
I 'm going to talk about your mindset . Does your mindset correspond to my dataset ? ( Laughter ) If not , one or the other needs upgrading , is n't it ? When I talk to my students about global issues , and I listen to them in the coffee break , they always talk about " we " and " them . " And when they come back into the lecture room I ask them , " What do you mean with " we " and " them " ? " Oh it 's very easy . It 's the western world and it 's the developing world . " They say . " We learned it in college . " And what is the definition then ? " The definition ? Everyone knows , " they say . But then you know , I press them like this . So one girl said , very cleverly , " It 's very easy . Western world is a long life in a small family . Developing world is a short life in a large family . " And I like that definition because it enabled me to transfer their mindset into the dataset . And here you have the dataset . So you can see that what we have on this axis here is size of family . One , two , three , four , five children per woman on this axis . And here , length of life , life expectancy , 30 , 40 , 50. Exactly what the students said was their concept about the world . And really this is about the bedroom . Whether man and woman decide to have small family , and take care of their kids , and how long they will live . It 's about the bathroom and the kitchen . If you have soap , water and food , you know , you can live long . And the students were right . It was n't that the world consisted -- the world consisted here , of one set of countries over here , which had large families and short life . Developing world . And we had one set of countries up there which was the western world . They had small families and long life . And you are going to see here the amazing thing that has happened in the world during my lifetime . And then the developing countries applied soap and water , vaccination . And all the developing world start to apply family planning . And partly to USA who help to provide technical advice and investment . And you see all the world moves over to a two child family , and a life with 60 to 70 years . But some countries remain back in this area here . And you can see we still have Afghanistan down here . We have Liberia . We have Congo . So we have countries living there . So the problem I had is that the worldview that my students had correspond to reality in the world the year their teachers were born . ( Laughter ) ( Applause ) And we , in fact , when we have played this over the world . I was at the Global Health Conference here in Washington , last week , and I could see that the wrong concept even active people in the United States had . That they did n't realize the improvement of Mexico there , and China , in relation to United States . Look here when I move them forward . Here we go . They catch up . There 's Mexico . It 's on par with United States in these two social dimensions . There was less than five percent of the specialists in global health that was aware of this . This great nation , Mexico , has the problem that arms are coming from north , across the borders . So they had to stop that . Because they have this strange relationship to the United States , you know . But if I would change this axis here , look , and I would instead , here , I would put income per person . Income per person . I can put that here . And we will then see a completely different picture . By the way , I 'm teaching you how to use our website , Gapminder World , while I 'm correcting this because this is a free utility on the net . And when I now finally got it right , I can go back 200 years in history . And I can find United States up there . And I can let the other countries be shown . And now I have income per person on this axis . And the United States only had someone 2,000 dollar , at that time . And the life expectancy was 35 to 40 years , on par with Afghanistan today . And what has happened in the world , I will show now . This is instead of studying history for one year at university . You can watch me for one minute now and you 'll see the whole thing . ( Laughter ) You can see how the brown bubbles , which is west Europe , and the yellow one , which is United States , they get richer and richer and also start to get healthier and healthier . And this is now 100 years ago where the as the rest of the world remains behind . Here we come . And that was the influenza . That 's why we are so scared about flu is n't it ? It 's still remembered . The fall of life expectancy . And then we come up . And not until independence started . Look here you have China over there , you have India over there , and this is what has happened . You note there , that we have Mexico up there . Mexico is not at all on par with the United States . But they are quite close . And especially it 's interesting to see China and the United States , during 200 years . Because I have my oldest son now working for Google , after Google acquired this software . Because in fact this is child labor . My son and his wife sat in a closet for many years and developed this . And my youngest son , who studied Chinese in Beijing . So they come in with the two perspectives I have . You know ? And my son , youngest son who studied in Beijing , in China , he got a long term perspective . Where as when my oldest son , who work in Google , he should develop by quarter , or by half-year . Or , Google is quite generous , so he can have one or two years to go . But in China they look generation after generation because they remember the very embarrassing period , for 100 years , where they went backwards . And then they would remember the first part of the last century , which was really bad . And we could go by this so-called great leap forward . But this was 1963. Mao Tse-Tung eventually brought health to China . And then he died . And then Deng Xiaoping started this amazing move forward . Is n't it strange to see that United States first grew the economy , and then gradually got rich . Where as China could get healthy much early . Because they applied the knowledge of education , nutrition , and then also benefits of penicillin and vaccines , and family planning . And Asia could have social development before they got the economic development . So to me , as a public health professor , it 's not strange that all these countries grow so fast now . Because what you see here , what you see here is the flat world of Thomas Friedman . Is n't it ? It 's not really really flat . But the middle income countries , and this is where I suggest to my students , stop using the concept " developing world . " Because after all , talking about developing world is like having two chapters in the history of United States . The last chapter is about the present , and president Obama . And the other is about the past . Where you cover everything from Washington to Eisenhower . Because Washington to Eisenhower , that is what we find in developing world . We could actually go from Mayflower to Eisenhower , and that would be put together into a developing world . Which is rightly growing its cities in a very amazing way . Which have great entrepreneurs , but also have the collapsing countries , So how could we make a better sense about this ? Well one way of trying is to see whether we could look at income distribution . This is the income distribution of peoples in the world , from one dollar . This is where you have food to eat . These people go to bed hungry . And this is the number of people . This is 10 dollar , whether you have a public or a private health service system . This is where you can provide health service for your family , and school for your children . And this is OECD countries . Green , Latin America , East Europe . This is East Asia . And the light blue there is South Asia . And this is how the world changed . It changed like this . Can you see how it 's growing ? And how hundreds of millions and billions is coming out of poverty in Asia ? And it goes over here . And I come now , into projections . But I have to stop at the door of Lehman Brothers there . You know . Because ... ( Laughter ) Because there the projections are not valid any longer . Probably the world will do this . And then it will continue forward like this . But more or less this is what will happen . And we have a world which can not be looked upon as divided . We have the high income countries here , with United States as a leading power . We have the emerging economies in the middle , that provide a lot of the funding for the bailout . And we have the low income countries here . Yeah this is a fact that from where the money come . They have been saving , you know , over the last decade . And here we have the low income countries where entrepreneurs are . And here we have the countries in collapse and war , like Afghanistan , Somalia , parts of Congo , Darfur . We have all this at the same time . That 's why it 's so problematic to describe what has happened in the developing world . Because it 's so different , what has happened there . And that 's why I suggest a slightly different approach of what you would call it . And you have huge difference within countries also . I heard that your departments here were by regions . Here you have Sub-Saharan Africa , South Asia , East Asia , Arab states , East Europe , Latin America , and OECD . And on this axis GDP . And on this , heath , child survival . And it does n't come as a surprise that Africa , south of Sahara , is at the bottom . But when I split it , when I split it into country bubbles , the size of the bubbles here is the population . Then you see Sierra Leone and Mauritius is completely different . There is such a difference within Sub-Saharan Africa . And I can split the others . Here the South Asian , Arab world . Now all you different departments . East Europe , Latin America , and OECD countries . And here were are . We have a continuum in the world . We can not put it into two parts . It is Mayflower down here . It is Washington here , building , building countries . It 's Lincoln here , advancing them . It 's Eisenhower bringing modernity into the countries . And then it 's United States today , up here . And we have countries all this way . Now this is the important thing of understanding how the world has changed . At this point I decided to make a pause . ( Laughter ) And it is my task , on behalf of the rest of the world , to convey a thank to the U. S. taxpayers , for Demographic Health Survey . Many are not aware of -- no this is not a joke . This is very serious . It is due to USA 's continuous sponsoring during 25 years of the very good methodology for measuring child mortality that we have a grasp of what 's happening in the world . ( Applause ) And it is U. S. government at its best , without advocacy , providing facts , that it 's useful for the society . And providing data free of charge , on the internet , for the world to use . Thank you very much . Quite in the opposite of the World Bank , who compiled data with government money , tax money , and then they sell it to add a little profit , in a very inefficient , Guttenberg way . ( Applause ) But the people doing that at the world bank are among the best in the world . And they are highly skilled professionals . It 's just that we would like to upgrade our international agencies to deal with the world in a modern way , as we do . And when it comes to free data and transparency , United States of America is one of the best . And that does n't come easy from the mouth of a Swedish public health professor . ( Laughter ) And I 'm not paid to come here , no . I would like to show you what happens with the data , what we can show with this data . Look here . This is the world . With income down there , and child mortality . And what has happened in the world ? Since 1950 , during the last 50 years we have had a fall in child mortality . And this is the DHS that makes it possible to know this . And we had an increase in income . And the blue former developing countries are mixing up with the former industrialized western world . And we have a continuum . But we still have , and that is , of course , Congo , up there . We still have as poor countries as we have had , always , in history . And that 's the bottom billion , where we 've heard , today , about a completely new approach to do it . And how fast has this happened ? Well MDG 4. United States have not been so eager to use MDG 4. But you have been the main sponsor that has enabled us to measure it . Because it 's the only child mortality that we can measure . And we used to say that it should fall four percent per year . Let 's see what Sweden have done . We used to boast about fast social progress . That 's where we were , 1900. 1900 , Sweden was there . Same child mortality as Bangladesh had , 1990. Though they had lower income . They started very well . They used the aid well . They vaccinated the kids . They get better water . And they reduced child mortality , with an amazing 4.7 percent per year . They beat Sweden . I run Sweden the same 16 year period . Second round it 's Sweden 1916 , against Egypt 1990. Here we go . Once again USA is part of the reason here . They get safe water . They get food for the poor . And they get malaria eradicated . 5.5 percent . They are faster than millennium development goal . And third chance for Sweden , against Brazil here . And Brazil here has amazing social improvement over the last 16 years . And they go faster than Sweden . This means that the world is converging . The middle income countries , the emerging economy , they are catching up . They are moving to cities , where they will also get better assistance for that . What the Swedish do is protest at this time . They say , " This is not fair . because these countries had vaccine and antibiotic that was not available for Sweden . We have to do real-time competition . " Okay . I give you Singapore , the year I was born . Singapore had twice the child mortality of Sweden . It 's the most tropical country in the world . A marshland on the equator . And here we go . It took a little time for them to get independent . But then they started to grow their economy . And they made the social investment . They got away malaria . They got a magnificent health system that beat both U. S. and Sweden . We never thought it would happen that they would win over Sweden ! ( Applause ) All these green countries are achieving millennium development goals . These yellow are just about to doing this . These red countries that does n't do it , and the policy has to be improved . Not simplistic extrapolation . We have to really find a way of supporting those countries in a better way . We have to respect the middle income countries on what they are doing . And we have to fact-base the whole way we look at the world . This is dollar per person . This is HIV in the countries . The blue is Africa . The size of the bubbles is how many are HIV affected . You see the tragedy in South Africa there . About 20 percent of the adult population are infected . And in spite of them having quite a high income they have a huge number of HIV infected . But you also see that there are African countries down here . There is no such thing as an HIV epidemic in Africa . There 's a number , 5 to 10 countries in Africa that has the same level as Sweden and United States . And there are others who are extremely high . And I will show you that what has happened in one of the best countries , with the most vibrant economy in Africa , and a good governance , is Botswana . They have a very high level . It 's coming down . But now it 's not falling . Because there , with help from PEPFAR it 's working with treatment . And people are not dying . And you can see it 's not that easy , that it is war which caused this . Because here , in Congo , there is war . And here , in Zambia , there is peace . And it 's not the economy . Richer country has a little higher . And if I split Tanzania in its income . The richer 20 percent in Tanzania has more HIV than the poorest one . And it 's really different within country . Look at the provinces of Kenya . They are very different . And this is the situation you see . It 's not deep poverty . It 's the special situation . Probably of concurrent sexual partnership among part of the heterosexual population in some countries , or some parts of countries , in south and eastern Africa . Do n't make it Africa . Do n't make it a race issue . Make it a local issue . And do prevention at each place , in the way it can be done there . So to just end up . There are things of suffering in the one billion poorest , which we do n't know . Those who live beyond the cellphone , those who have yet to see a computer , those who have no electricity at home . This is the disease Konzo , I spent 20 years elucidating in Africa . It 's caused by fast processing of toxic cassava root , in famine situation . It 's similar to the pellagra epidemic in Mississippi , in the '30s . It 's similar to other nutritional diseases . It will never affect a rich person We have seen it here in Mozambique . This is the epidemic in Mozambique . This is an epidemic in northern Tanzania . You never heard about the disease . But it 's much more than ebola that has been affected by this disease . Cause crippling throughout the world . And over the last two years 2,000 people has been crippled in the southern tip of Bandunda region . That used to be the illegal diamond trade , from the UNITA-dominated area in Angola . That has now disappeared . And they are now in great economical problem . And one week ago , for the first time , there were four lines on the Internet . Do n't get confused of the progress of the emerging economies , and the great capacity of people in the middle income countries , and in peaceful low income countries . There is still mystery in one billion . And we have to have more concept than just developing countries and developing world . We need a new mindset . The world is converging . But , but , but , not the bottom billion . They are still as poor as they 've ever been . It 's not sustainable . And it will not happen around one superpower . But you will remain one of the most important superpower . And the most hopeful superpower , for the time to be . And this institution will have a very crucial role , not for United States , but for the world . So you have a very bad name , State Department , this is not the State Department . It 's the World Department . And we have a high hope in you . Thank you very much . ( Applause ) </content>
</text>
<text id="ted/helen_fisher_tells_us_why_we_love_cheat">
I 'd like to talk today about the two biggest social trends in the coming century , and perhaps in the next 10,000 years . But I want to start with my work on romantic love , because that 's my most recent work . What I and my colleagues did was to put 32 people , who were madly in love , into a functional MRI brain scanner . 17 who were madly in love and their love was accepted ; and 15 who were madly in love and they had just been dumped . And so I want to tell you about that first , and then go on into where I think love is going . " What 'tis to love ? " Shakespeare said . I think our ancestors -- I think human beings have been wondering about this question since they sat around their campfires or lay and watched the stars a million years ago . I started out by trying to figure out what romantic love was by looking at the last 45 years of research on -- just the psychological research , and as it turns out , there 's a very specific group of things that happen when you fall in love . The first thing that happens is what I call -- a person begins to take on what I call , " special meaning . " As a truck driver once said to me , he said , " The world had a new center , and that center was Mary Anne . " George Bernard Shaw said it a little differently . He said , " Love consists of overestimating the differences between one woman and another . " And indeed , that 's what we do . ( Laughter ) And then you just focus on this person . You can list what you do n't like about them , but then you sweep that aside and focus on what you do . As Chaucer said , " Love is blind . " In trying to understand romantic love , I decided I would read poetry from all over the world , and I just want to give you one very short poem from eighth-century China , because it 's an almost perfect example of a man who is focused totally on a particular woman . It 's a little bit like when you are madly in love with somebody and you walk into a parking lot . Their car is different from every other car in the parking lot . Their wine glass at dinner is different from every other wine glass at the dinner party . And in this case , a man got hooked on a bamboo sleeping mat . And it goes like this . It 's by a guy called Yuan Chen : " I cannot bear to put away the bamboo sleeping mat . The night I brought you home , I watched you roll it out . " He became hooked on a sleeping mat , probably because of elevated activity of dopamine in his brain , just like with you and me . But anyway , not only does this person take on special meaning , you focus your attention on them . You aggrandize them . But you have intense energy . As one Polynesian said , he said , " I felt like jumping in the sky . " You 're up all night . You 're walking till dawn . You feel intense elation when things are going well , mood swings into horrible despair when things are going poorly . Real dependence on this person . As one businessman in New York said to me , he said , " Anything she liked , I liked . " Simple . Romantic love is very simple . You become extremely sexually possessive . You know , if you 're just sleeping with somebody casually , you do n't really care if they 're sleeping with somebody else . But the moment you fall in love , you become extremely sexually possessive of them . I think that that is a Darwinian -- there 's a Darwinian purpose to this . The whole point of this is to pull two people together strongly enough to begin to rear babies as a team . But the main characteristics of romantic love are craving : an intense craving to be with a particular person , not just sexually , but emotionally . You 'd much rather -- it would be nice to go to bed with them , but you want them to call you on the telephone , to invite you out , et cetera . To tell you that they love you . The other main characteristic is motivation . The motor in your brain begins to crank , and you want this person . And last but not least , it is an obsession . When I put these people in the machine , before I put them in the MRI machine , I would ask them all kinds of questions . But my most important question was always the same . It was : " What percentage of the day and night do you think about this person ? " And indeed , they would say , " All day . All night . I can never stop thinking about him or her . " And then , the very last question I would ask them -- I would always have to work myself up to this question , because I am not a psychologist . I do n't work with people in any kind of traumatic situation . And my final question was always the same . I would say , " Would you die for him or her ? " And , indeed , these people would say " Yes ! , " as if I had asked them to pass the salt . I was just staggered by it . So we scanned their brains , looking at a photograph of their sweetheart and looking at a neutral photograph , with a distraction task in between . So we could find -- look at the same brain when it was in that heightened state and when it was in a resting state . And we found activity in a lot of brain regions . In fact , one of the most important was a brain region that becomes active when you feel the rush of cocaine . And indeed , that 's exactly what happens . I began to realize that romantic love is not an emotion . In fact , I had always thought it was a series of emotions , from very high to very low . But actually , it 's a drive . It comes from the motor of the mind , the wanting part of the mind , the craving part of the mind . The kind of mind -- part of the mind -- when you 're reaching for that piece of chocolate , when you want to win that promotion at work . The motor of the brain . It 's a drive . And in fact , I think it 's more powerful than the sex drive . You know , if you ask somebody to go to bed with you , and they say , " No thank you , " you certainly do n't kill yourself or slip into a clinical depression . But certainly , around the world , people who are rejected in love will kill for it . People live for love . They kill for love . They die for love . They have songs , poems , novels , sculptures , paintings , myths , legends . In over 175 societies , people have left their evidence of this powerful brain system . I have come to think it 's one of the most powerful brain systems on earth for both great joy and great sorrow . And I 've also come to think that it 's one of three , basically different brain systems that evolved from mating and reproduction . One is the sex drive : the craving for sexual gratification . W. H. Auden called it an " intolerable neural itch , " and indeed , that 's what it is . It keeps bothering you a little bit , like being hungry . The second of these three brain systems is romantic love : that elation , obsession of early love . And the third brain system is attachment : that sense of calm and security you can feel for a long-term partner . And I think that the sex drive evolved to get you out there , looking for a whole range of partners . You know , you can feel it when you 're just driving along in your car . It can be focused on nobody . I think romantic love evolved to enable you to focus your mating energy on just one individual at a time , thereby conserving mating time and energy . And I think that attachment , the third brain system , evolved to enable you to tolerate this human being -- ( Laughter ) -- at least long enough to raise a child together as a team . So with that preamble , I want to go into discussing the two most profound social trends . One of the last 10,000 years and the other -- certainly of the last 25 years -- that are going to have an impact on these three different brain systems : lust , romantic love and deep attachment to a partner . The first is women working , moving into the workforce . I 've looked at 150 -- 130 societies through the demographic yearbooks of the United Nations . And everywhere in the world , 129 out of 130 of them , women are not only moving into the job market -- sometimes very , very slowly , but they are moving into the job market -- and they are very slowly closing that gap between men and women in terms of economic power , health and education . It 's very slow . For every trend in -- on this planet , there 's a counter-trend . We all know of them , but nevertheless -- the old Arab saying . The Arabs say , " The dogs may bark , but the caravan moves on . " And , indeed , that caravan is moving on . Women are moving back into the job market . And I say back into the job market , because this is not new . For millions of years , on the grasslands of Africa , women commuted to work to gather their vegetables . They came home with 60 to 80 percent of the evening meal . The double income family was the standard . And women were regarded as just as economically , socially and sexually powerful as men . In short , we 're really moving forward to the past . Then , women 's worst invention was the plow . With the beginning of plow agriculture , men 's roles became extremely powerful . Women lost their ancient jobs as collectors , but then with the industrial revolution and the post-industrial revolution they 're moving back into the job market . In short , they are acquiring the status that they had a million years ago , 10,000 years ago , 100,000 years ago . We are seeing now one of the most remarkable traditions in the history of the human animal . And it 's going to have an impact . I generally give a whole lecture on the impact of women on the business community . I 'll only just say a couple of things , and then go on to sex and love . There 's a lot of gender differences ; anybody who thinks men and women are alike simply never had a boy and a girl child . I do n't know why it is that they want to think that men and women are alike . There 's much we have in common , but there 's a whole lot that we are not -- do not have in common . We are -- in the words of Ted Hughes , " I think that we were built to be -- we 're like two feet . We need each other to get ahead . " But we did not evolve to have the same brain . And we 're finding more and more and more gender differences in the brain . I 'll only just use a couple and then move on to sex and love . One of them is women 's verbal ability . Women can talk . Women 's ability to find the right word rapidly , basic articulation goes up in the middle of the menstrual cycle , when estrogen levels peak . But even at menstruation , they 're better than the average man . Women can talk . They 've been doing it for a million years ; words were women 's tools . They held that baby in front of their face , cajoling it , reprimanding it , educating it with words . And , indeed , they 're becoming a very powerful force . Even in places like India and Japan , where women are not moving rapidly into the regular job market , they 're moving into journalism . And I think that the television is like the global campfire . We sit around it and it shapes our minds . Almost always , when I 'm on TV , the producers who call me , who negotiate what we 're going to say , is a woman . In fact , Solzhenitsyn once said , " To have a great writer is to have another government . " Today 54 percent of people who are writers in America are women . It 's one of many , many characteristics that women have that they will bring into the job market . They 've got incredible people skills , negotiating skills . They 're highly imaginative . We now know the brain circuitry of imagination , of long-term planning . They tend to be web thinkers . Because the female parts of the brain are better connected , they tend to collect more pieces of data when they think , put them into more complex patterns , see more options and outcomes . They tend to be contextual , holistic thinkers , what I call web thinkers . Men tend to -- and these are averages -- tend to get rid of what they regard as extraneous , focus on what they do , and move in a more step-by-step thinking pattern . They 're both perfectly good ways of thinking . We need both of them to get ahead . In fact , there 's many more male geniuses in the world . When the -- and there 's also many more male idiots in the world . ( Laughter ) When the male brain works well , it works extremely well . And I -- what I really think that we 're doing is , we 're moving towards a collaborative society , a society in which the talents of both men and women are becoming understood and valued and employed . But in fact , women moving into the job market is having a huge impact on sex and romance and family life . Foremost , women are starting to express their sexuality . I 'm always astonished when people come to me and say , " Why is it that men are so adulterous ? " And I say , " Why do you think more men are adulterous than women ? " " Oh , well -- men are more adulterous ! " And I say , " Who do you think these men are sleeping with ? " And -- basic math ! ( Laughter ) Anyway . In the Western world , little girls start -- women start sooner at sex , have more partners , express less remorse for the partners that they do , marry later , have fewer children , leave bad marriages in order to get good ones . We are seeing the rise of female sexual expression . And , indeed , once again we 're moving forward to the kind of sexual expression that we probably saw on the grasslands of Africa a million years ago , because this is the kind of sexual expression that we see in hunting and gathering societies today . We 're also returning to an ancient form of marriage equality . They 're now saying that the 21st century is going to be the century of what they call the " symmetrical marriage , " or the " pure marriage , " or the " companionate marriage . " This is a marriage between equals , moving forward to a pattern that is highly compatible with the ancient human spirit . We 're also seeing a rise of romantic love . 91 percent of American women and 86 percent of American men would not marry somebody who had every single quality they were looking for in a partner , if they were not in love with that person . People around the world , in a study of 37 societies , want to be in love with the person that they marry . Indeed , arranged marriages are on their way off this braid of human life . I even think that marriages might even become more stable because of the second great world trend . The first one being women moving into the job market , the second one being the aging world population . They 're now saying that in America , that middle age should be regarded as up to age 85. Because in that highest age category of 76 to 85 , only -- as much as 40 percent of people have nothing really wrong with them . So we 're seeing there 's a real extension of middle age . And I looked -- for one of my books , I looked at divorce data in 58 societies . And as it turns out , the older you get , the less likely you are to divorce . So the divorce rate right now is stable in America , and it 's actually beginning to decline . It may decline some more . I would even say that with Viagra , estrogen replacement , hip replacements and the incredibly interesting women -- women have never been as interesting as they are now . Not at any time on this planet have women been so educated , so interesting , so capable . And so I honestly think that if there really was ever a time in human evolution when we have the opportunity to make good marriages , that time is now . However , there 's always kinds of complications in this . In these three brain systems : lust , romantic love and attachment -- do n't always go together . They can go together , by the way . That 's why casual sex is n't so casual . With orgasm you get a spike of dopamine . Dopamine 's associated with romantic love , and you can just fall in love with somebody who you 're just having casual sex with . With orgasm , then you get a real rush of oxytocin and vasopressin -- those are associated with attachment . This is why you can feel such a sense of cosmic union with somebody after you 've made love to them . But these three brain systems : lust , romantic love and attachment , are n't always connected to each other . You can feel deep attachment to a long-term partner while you feel intense romantic love for somebody else , while you feel the sex drive for people unrelated to these other partners . In short , we 're capable of loving more than one person at a time . In fact , you can lie in bed at night and swing from deep feelings of attachment for one person to deep feelings of romantic love for somebody else . It 's as if there 's a committee meeting going on in your head as you are trying to decide what to do . So I do n't think , honestly , we 're an animal that was built to be happy ; we are an animal that was built to reproduce . I think the happiness we find , we make . And I think , however , we can make good relationships with each other . So I want to conclude with two things . I want to conclude with a worry . I have a worry -- and with a wonderful story . The worry is about antidepressants . Over 100 million prescriptions of antidepressants are written every year in the United States . And these drugs are going generic . They are seeping around the world . I know one girl who 's been on these antidepressants , serotonin-enhancing -- SSRI , serotonin-enhancing antidepressants -- since she was 13. She 's 23. She 's been on them ever since she was 13. I 've got nothing against people who take them short term , when they 're going through something perfectly horrible . They want to commit suicide or kill somebody else . I would recommend it . But more and more people in the United States are taking them long term . And indeed , what these drugs do is raise levels of serotonin . And by raising levels of serotonin , you suppress the dopamine circuit . Everybody knows that . Dopamine is associated with romantic love . Not only do they suppress the dopamine circuit , but they kill the sex drive . And when you kill the sex drive , you kill orgasm . And when you kill orgasm , you kill that flood of drugs associated with attachment . The things are connected in the brain . And when you tamper with one brain system , you 're going to tamper with another . I 'm just simply saying that a world without love is a deadly place . So now -- ( Applause ) -- thank you . I want to end with a story . And then , just a comment . I 've been studying romantic love and sex and attachment for 30 years . I 'm an identical twin ; I am interested in why we 're all alike . Why you and I are alike , why the Iraqis and the Japanese and the Australian Aborigines and the people of the Amazon River are all alike . And about a year ago , an Internet dating service , Match . com , came to me and asked me if I would design a new dating site for them . I said , " I do n't know anything about personality . You know ? I do n't know . Do you think you 've got the right person ? " They said , " Yes . " It got me thinking about why it is that you fall in love with one person rather than another . That 's my current project ; it will be my next book . There 's all kinds of reasons that you fall in love with one person rather than another . Timing is important . Proximity is important . Mystery is important . You fall in love with somebody who 's somewhat mysterious , in part because mystery elevates dopamine in the brain , probably pushes you over that threshold to fall in love . You fall in love with somebody who fits within what I call your " love map , " an unconscious list of traits that you build in childhood as you grow up . And I also think that you become -- gravitate to certain people , actually , with somewhat complementary brain systems . And that 's what I 'm now contributing to this . But I want to tell you a story about -- to illustrate . I 've been carrying on here about the biology of love . I wanted to show you a little bit about the culture of it , too -- the magic of it . It 's a story that was told to me by somebody who had heard it just from one of the -- probably a true story . It was a graduate student at -- I 'm at Rutgers and my two colleagues -- Art Aron is at SUNY Stony Brook . That 's where we put our people in the MRI machine . And this graduate student was madly in love with another graduate student , and she was not in love with him . And they were all at a conference in Beijing . And he knew from our work that if you go and do something very novel with somebody , you can drive up the dopamine in the brain . And perhaps trigger this brain system for romantic love . ( Laughter ) So he decided he 'd put science to work , and he invited this girl to go off on a rickshaw ride with him . And sure enough -- I 've never been in one , but apparently they go all around the buses and the trucks and it 's crazy and it 's noisy and it 's exciting . And he figured that this would drive up the dopamine , and she would fall in love with him . So off they go and she 's squealing and squeezing him and laughing and having a wonderful time . An hour later they get down off of the rickshaw , and she throws her hands up and she says , " Was n't that wonderful ? " And , " Was n't that rickshaw driver handsome ! " ( Laughter ) ( Applause ) There 's magic to love ! But I will end by saying that millions of years ago , we evolved three basic drives : the sex drive , romantic love and attachment to a long-term partner . These circuits are deeply embedded in the human brain . They 're going to survive as long as our species survives on what Shakespeare called " this mortal coil . " Thank you . ( Applause ) </content>
</text>
<text id="ted/isabel_allende_tells_tales_of_passion">
Thank you so much . It 's really scary to be here among the smartest of the smart . I 'm here to tell you a few tales of passion . There 's a Jewish saying that I love . What is truer than truth ? Answer : The story . I 'm a storyteller . I want to convey something that is truer than truth about our common humanity . All stories interest me , and some haunt me until I end up writing them . Certain themes keep coming up : justice , loyalty , violence , death , political and social issues , freedom . I 'm aware of the mystery around us , so I write about coincidences , premonitions , emotions , dreams , the power of nature , magic . In the last 20 years I have published a few books , but I have lived in anonymity until February of 2006 , when I carried the Olympic flag in the Winter Olympics in Italy . That made me a celebrity . Now people recognize me in Macy 's , and my grandchildren think that I 'm cool . ( Laughter ) Allow me to tell you about my four minutes of fame . One of the organizers of the Olympic ceremony , of the opening ceremony , called me and said that I had been selected to be one of the flag-bearers . I replied that surely this was a case of mistaken identity because I 'm as far as you can get from being an athlete . Actually , I was n't even sure that I could go around the stadium without a walker . ( Laughter ) I was told that this was no laughing matter . This would be the first time that only women would carry the Olympic flag . Five women , representing five continents , and three Olympic gold medal winners . My first question was , naturally , what was I going to wear ? ( Laughter ) A uniform , she said , and asked for my measurements . My measurements . I had a vision of myself in a fluffy anorak , looking like the Michelin Man . ( Laughter ) By the middle of February , I found myself in Turin , where enthusiastic crowds cheered when any of the 80 Olympic teams was in the street . Those athletes had sacrificed everything to compete in the games . They all deserved to win , but there 's the element of luck . A speck of snow , an inch of ice , the force of the wind , can determine the result of a race or a game . However , what matters most -- more than training or luck -- is the heart . Only a fearless and determined heart will get the gold medal . It is all about passion . The streets of Turin were covered with red posters announcing the slogan of the Olympics . Passion lives here . Is n't it always true ? Heart is what drives us and determines our fate . That is what I need for my characters in my books : a passionate heart . I need mavericks , dissidents , adventurers , outsiders and rebels , who ask questions , bend the rules and take risks . People like all of you in this room . Nice people with common sense do not make interesting characters . ( Laughter ) They only make good former spouses . ( Laughter ) ( Applause ) In the green room of the stadium , I met the other flag bearers : three athletes , and the actresses Susan Sarandon and Sophia Loren . Also , two women with passionate hearts . Wangari Maathai , the Nobel prizewinner from Kenya who has planted 30 million trees . And by doing so , she has changed the soil , the weather , in some places in Africa , and of course the economic conditions in many villages . And Somaly Mam , a Cambodian activist who fights passionately against child prostitution . When she was 14 years old , her grandfather sold her to a brothel . She told us of little girls raped by men who believe that having sex with a very young virgin will cure them from AIDS . And of brothels where children are forced to receive five , 15 clients per day , and if they rebel , they are tortured with electricity . In the green room I received my uniform . It was not the kind of outfit that I normally wear , but it was far from the Michelin Man suit that I had anticipated . Not bad , really . I looked like a refrigerator . ( Laughter ) But so did most of the flag-bearers , except Sophia Loren , the universal symbol of beauty and passion . Sophia is over 70 and she looks great . She 's sexy , slim and tall , with a deep tan . Now , how can you have a deep tan and have no wrinkles ? I do n't know . When asked in a TV interview , " How could she look so good ? " She replied , " Posture . My back is always straight , and I do n't make old people 's noises . " ( Laughter ) So , there you have some free advice from one of the most beautiful women on earth . No grunting , no coughing , no wheezing , no talking to yourselves , no farting . ( Laughter ) Well , she did n't say that exactly . ( Laughter ) At some point around midnight , we were summoned to the wings of the stadium , and the loudspeakers announced the Olympic flag , and the music started -- by the way , the same music that starts here , the Aida March . Sophia Loren was right in front of me -- she 's a foot taller than I am , not counting the poofy hair . ( Laughter ) She walked elegantly , like a giraffe on the African savannah , holding the flag on her shoulder . I jogged behind -- ( Laughter ) -- on my tiptoes , holding the flag on my extended arm , so that my head was actually under the damn flag . ( Laughter ) All the cameras were , of course , on Sophia . That was fortunate for me , because in most press photos I appear too , although often between Sophia 's legs . ( Laughter ) A place where most men would love to be . ( Laughter ) ( Applause ) The best four minutes of my entire life were those in the Olympic stadium . My husband is offended when I say this -- although I have explained to him that what we do in private usually takes less than four minutes -- ( Laughter ) -- so he should n't take it personally . I have all the press clippings of those four magnificent minutes , because I do n't want to forget them when old age destroys my brain cells . I want to carry in my heart forever the key word of the Olympics -- passion . So here 's a tale of passion . The year is 1998 , the place is a prison camp for Tutsi refugees in Congo . By the way , 80 percent of all refugees and displaced people in the world are women and girls . We can call this place in Congo a death camp , because those who are not killed will die of disease or starvation . The protagonists of this story are a young woman , Rose Mapendo , and her children . She 's pregnant and a widow . Soldiers have forced her to watch as her husband was tortured and killed . Somehow she manages to keep her seven children alive , and a few months later , she gives birth to premature twins . Two tiny little boys . She cuts the umbilical cord with a stick , and ties it with her own hair . She names the twins after the camp 's commanders to gain their favor , and feeds them with black tea because her milk cannot sustain them . When the soldiers burst in her cell to rape her oldest daughter , she grabs hold of her and refuses to let go , even when they hold a gun to her head . Somehow , the family survives for 16 months , and then , by extraordinary luck , and the passionate heart of a young American man , Sasha Chanoff , who manages to put her in a U. S. rescue plane , Rose Mapendo and her nine children end up in Phoenix , Arizona , where they 're now living and thriving . Mapendo , in Swahili , means great love . The protagonists of my books are strong and passionate women like Rose Mapendo . I do n't make them up . There 's no need for that . I look around and I see them everywhere . I have worked with women and for women all my life . I know them well . I was born in ancient times , at the end of the world , in a patriarchal Catholic and conservative family . No wonder that by age five I was a raging feminist -- although the term had not reached Chile yet , so nobody knew what the heck was wrong with me . ( Laughter ) I would soon find out that there was a high price to pay for my freedom , and for questioning the patriarchy . But I was happy to pay it , because for every blow that I received , I was able to deliver two . ( Laughter ) Once , when my daughter Paula was in her twenties , she said to me that feminism was dated , that I should move on . We had a memorable fight . Feminism is dated ? Yes , for privileged women like my daughter and all of us here today , but not for most of our sisters in the rest of the world who are still forced into premature marriage , prostitution , forced labor -- they have children that they do n't want or they cannot feed . They have no control over their bodies or their lives . They have no education and no freedom . They are raped , beaten up and sometimes killed with impunity , For most Western young women of today , being called a feminist is an insult . Feminism has never been sexy , but let me assure you that it never stopped me from flirting , and I have seldom suffered from lack of men . ( Laughter ) Feminism is not dead , by no means . It has evolved . If you do n't like the term , change it , for Goddess ' sake . Call it Aphrodite , or Venus , or bimbo , or whatever you want , the name does n't matter , as long as we understand what it is about , and we support it . So here 's another tale of passion , and this is a sad one . The place is a small women 's clinic in a village in Bangladesh . The year is 2005. Jenny is a young American dental hygienist who has gone to the clinic as a volunteer during her three-week vacation . She 's prepared to clean teeth , but when she gets there , she finds out that there are no doctors , no dentists , and the clinic is just a hut full of flies . Outside , there is a line of women who have waited several hours to be treated . The first patient is in excruciating pain because she has several rotten molars . Jenny realizes that the only solution is to pull out the bad teeth . She 's not licensed for that , she has never done it . She risks a lot and she 's terrified . She does n't even have the proper instruments , but fortunately she has brought some Novocaine . Jenny has a brave and passionate heart . She murmurs a prayer and she goes ahead with the operation . At the end , the relieved patient kisses her hands . That day the hygienist pulls out many more teeth . The next morning , when she comes again to the so-called clinic , her first patient is waiting for her with her husband . The woman 's face looks like a watermelon . It is so swollen that you ca n't even see the eyes . The husband , furious , threatens to kill the American . Jenny is horrified at what she has done , but then the translator explains that the patient 's condition has nothing to do with the operation . The day before , her husband beat her up because she was not home in time to prepare dinner for him . Millions of women live like this today . They are the poorest of the poor . Although women do two-thirds of the world 's labor , they own less than one percent of the world 's assets . They are paid less than men for the same work if they 're paid at all , and they remain vulnerable because they have no economic independence , and they are constantly threatened by exploitation , violence and abuse . It is a fact that giving women education , work , the ability to control their own income , inherit and own property , benefits the society . If a woman is empowered , her children and her family will be better off . If families prosper , the village prospers , and eventually so does the whole country . Wangari Maathai goes to a village in Kenya . She talks with the women , and explains that the land is barren because they have cut and sold the trees . She gets the women to plant new trees and water them , drop by drop . In a matter of five or six years , they have a forest , the soil is enriched , and the village is saved . The poorest and most backward societies are always those that put women down . Yet this obvious truth is ignored by governments , and also by philanthropy . For every dollar given to a women 's program , 20 dollars are given to men 's programs . Women are 51 percent of humankind . Empowering them will change everything -- more than technology and design and entertainment . I can promise you that women working together -- linked , informed and educated -- can bring peace and prosperity to this forsaken planet . In any war today , most of the casualties are civilians , mainly women and children . They are collateral damage . Men run the world , and look at the mess we have . What kind of world do we want ? This is a fundamental question that most of us are asking . Does it make sense to participate in the existing world order ? We want a world where life is preserved , and the quality of life is enriched for everybody , not only for the privileged . In January I saw an exhibit of Fernando Botero 's paintings at the UC Berkeley library . No museum or gallery in the United States , except for the New York gallery that carries Botero 's work , has dared to show the paintings because the theme is the Abu Ghraib prison . They are huge paintings of torture and abuse of power , in the voluminous Botero style . I have not been able to get those images out of my mind or my heart . What I fear most is power with impunity . I fear abuse of power , and the power to abuse . In our species , the alpha males define reality , and force the rest of the pack to accept that reality and follow the rules . The rules change all the time , but they always benefit them , and in this case , the trickle-down effect , which does not work in economics , works perfectly . Abuse trickles down from the top of the ladder to the bottom . Women and children , especially the poor , are at the bottom . Even the most destitute of men have someone they can abuse -- a woman or a child . I 'm fed up with the power that a few exert over the many through gender , income , race , and class . I think that the time is ripe to make fundamental changes in our civilization . But for real change , we need feminine energy in the management of the world . We need a critical number of women in positions of power , and we need to nurture the feminine energy in men . I 'm talking about men with young minds , of course . Old guys are hopeless , we have to wait for them to die off . ( Laughter ) Yes , I would love to have Sophia Loren 's long legs and legendary breasts . But given a choice , I would rather have the warrior heart of Wangari Maathai , Somaly Mam , Jenny , and Rose Mapendo . I want to make this world good . Not better , but to make it good . Why not ? It is possible . Look around in this room -- all this knowledge , energy , talent , and technology . Let 's get off our fannies , roll up our sleeves and get to work , passionately , in creating an almost perfect world . Thank you . </content>
</text>
<text id="ted/jessi_arrington_wearing_nothing_new">
I 'm Jessi , and this is my suitcase . But before I show you what I 've got inside , I 'm going to make a very public confession , and that is , I 'm outfit obsessed . I love finding , wearing , and more recently , photographing and blogging a different colorful , crazy outfit for every single occasion . But I do n't buy anything new . I get all my clothes secondhand from flee markets and thrift stores . Aww , thank you . Secondhand shopping allows me to reduce the impact my wardrobe has on the environment and on my wallet . I get to meet all kinds of great people ; my dollars usually go to a good cause ; I look pretty unique ; and it makes shopping like my own personal treasure hunt . I mean , what am I going to find today ? Is it going to be my size ? Will I like the color ? Will it be under $20 ? If all the answers are yes , I feel as though I 've won . I want to get back to my suitcase and tell you what I packed for this exciting week here at TED . I mean , what does somebody with all these outfits bring with her ? So I 'm going to show you exactly what I brought . I brought seven pairs of underpants and that 's it . Exactly one week 's worth of undies is all I put in my suitcase . I was betting that I 'd be able to find everything else I could possible want to wear once I got here to Palm Springs . And since you do n't know me as the woman walking around TED in her underwear -- ( Laughter ) that means I found a few things . And I 'd really love to show you my week 's worth of outfits right now . Does that sound good ? ( Applause ) So as I do this , I 'm also going to tell you a few of the life lessons that , believe it or not , I have picked up in these adventures wearing nothing new . So let 's start with Sunday . I call this shiny tiger . You do not have to spend a lot of money to look great . You can almost always look phenomenal for under $50 . This whole outfit , including the jacket , cost me 55 , and it was the most expensive thing that I wore the entire week . Monday : Color is powerful . It is almost physiologically impossible to be in a bad mood when you 're wearing bright red pants . ( Laughter ) If you are happy , you are going to attract other happy people to you . Tuesday : Fitting in is way overrated . I 've spent a whole lot of my life trying to be myself and at the same time fit in . Just be who you are . If you are surrounding yourself with the right people , they will not only get it , they will appreciate it . Wednesday : Embrace your inner child . Sometimes people tell me that I look like I 'm playing dress-up , or that I remind them of their seven year-old . I like to smile and say , " Thank you . " Thursday : Confidence is key . If you think you look good in something , you almost certainly do . And if you do n't think you look good in something , you 're also probably right . I grew up with a mom who taught me this day-in and day-out . But it was n't until I turned 30 that I really got what this meant . And I 'm going to break it down for you for just a second . If you believe you 're a beautiful person inside and out , there is no look that you ca n't pull off . So there is no excuse for any of us here in this audience . We should be able to rock anything we want to rock . Thank you . ( Applause ) Friday : A universal truth -- five words for you : Gold sequins go with everything . And finally , Saturday : Developing your own unique personal style is a really great way to tell the world something about you without having to say a word . It 's been proven to me time and time again as people have walked up to me this week simply because of what I 'm wearing . And we 've had great conversations . So obviously this is not all going to fit back in my tiny suitcase . So before I go home to Brooklyn , I 'm going to donate everything back . Because the lesson I 'm trying to learn myself this week is that it 's okay to let go . I do n't need to get emotionally attached to these things , because around the corner , there is always going to be another crazy , colorful , shiny outfit just waiting for me , if I put a little love in my heart and look . Thank you very much . ( Applause ) Thank you . ( Applause ) </content>
</text>
<text id="ted/john_underkoffler_drive_3d_data_with_a_gesture">
We 're 25 , 26 years after the advent of the Macintosh , which was an astoundingly seminal event in the history of human-machine interface , and in computation in general . It fundamentally changed the way that people thought about computation , thought about computers , how they used them and who and how many people were able to use them . It was such a radical change , in fact , that the early Macintosh development team in '82 , '83 , '84 , had to write an entirely new operating system from the ground up . Now , this is an interesting little message , and it 's a lesson that has since , I think , been forgotten or lost or something . And that is , namely , that the OS is the interface . The interface is the OS . It 's like the land and the king ( i. e. Arthur ) they 're inseparable , they are one . And to write a new operating system was not a capricious matter . It was n't just a matter of tuning up some graphics routines . There were no graphics routines . There were no mouse drivers . So it was a necessity . But in the quarter century since then , we 've seen all of the fundamental supporting technologies go berserk . So memory capacity and disk capacity have been multiplied by something between 10,000 and a million . Same thing for processor speeds . Networks , we did n't have networks at all at the time of the Macintosh 's introduction . And that has become the single most salient aspect of how we live with computers . And , of course , graphics : today $84.97 at Best Buy buys you more graphics power than you could have gotten for a million bucks from SGI only a decade ago . So we 've got that incredible ramp-up . Then , on the side , we 've got the Web and , increasingly , the cloud , which is fantastic , but also -- in the regard in which an interface is fundamental -- kind of a distraction . So we 've forgotten to invent new interfaces . Certainly we 've seen , in recent years , a lot of change in the regard . And people are starting to wake up about that . So what happens next ? Where do we go from there ? The problem , as we see it , has to do with a single , simple word , " space " or a single , simple phrase , " real world geometry . " Computers and the programming languages that we talk to them in , that we teach them in , are hideously insensate when it comes to space . They do n't understand real world space . It 's a funny thing because the rest of us occupy it quite frequently and quite well . They also do n't understand time , but that 's a matter for a separate talk . So what happens if you start to explain space to them ? One thing you might get is something like the Luminous Room . The Luminous Room is a system in which it 's considered that input and output spaces are co-located . That 's a strangely simple , and yet unexplored idea , right ? When you use a mouse , your hand is down here on the mouse pad . It 's not even on the same plane as what you 're talking about : the pixels are up on the display . So here was a room in which all the walls , floors , ceilings , pets , potted plants , whatever was in there , were capable , not only , of display , but of sensing as well . And that means input and output are in the same space enabling stuff like this . That 's a digital storage in a physical container . The contract is the same as with real word objects in real world containers . Has to come back out , whatever you put in . This little design experiment that was a small office here knew a few other tricks as well . If you presented it with a chess board , it tried to figure out what you might mean by that . And if there was nothing for them to do , the chess pieces eventually got bored and hopped away . The academics who were overseeing this work thought that was too frivolous , so we then built deadly serious applications like this optics prototyping workbench in which a toothpaste cap on a cardboard box becomes a laser . The beam splitters and lenses are represented by physical objects , and the system projects down the laser beam path . So you 've got an interface that has no interface . You operate the world as you operate the real world , which is to say , with your hands . Similarly , a digital wind tunnel with digital wind flowing from right to left . Not that remarkable in a sense ; we did n't invent the mathematics . But if you displayed that on a CRT or flat panel display , it would be meaningless to hold up an arbitrary object , a real world object on it . Here , the real world merges with the simulation . And finally , to pull out all the stops , this is a system called Urp , for urban planners , in which we give architects and urban planners back the models that we confiscated when we insisted that they use CAD systems . And we make the machine meet them half way . Urp projects down digital shadows , as you see here . And if you introduce tools like this inverse clock , then you can control the sun 's position in the sky . That 's 8:00 AM shadows . They get a little shorter at 9:00 AM . There you are , swinging the sun around . Short shadows at noon and so forth . And we built up a series of tools like this . There are inter-shadowing studies that children can operate , even though they do n't know anything about urban planning , to move a building , you simply reach out your hand and you move the building . A material wand makes the building into a sort of Frank Gehry thing that reflects light in all directions . Are you blinding passers by and motorists on the freeways ? A zoning tool connects distant structures , a building and a roadway . Are you going to get sued by the zoning commission ? and so forth . Now , if these ideas seem familiar or perhaps even a little dated , that 's great ; they should seem familiar . This work is 15 years old . This stuff was undertaken at MIT and the Media Lab under the incredible direction of Prof. Hiroshi Ishii , director of the Tangible Media Group . And it was that work that was seen by Alex McDowell , one of the world 's legendary production designers . Alex was preparing a little , sort of obscure , indie , arthouse film called " Minority Report " for Steven Spielberg , and invited us to come out from MIT and design the interfaces that would appear in that film . And the great thing about it was that Alex was so dedicated to the idea of verisimilitude , the idea that the putative 2054 that we were painting in the film be believable , that he allowed us to take on that design work as if it were an R&D effort . And the result is sort of gratifyingly perpetual . People still reference those sequences in " Minority Report " when they talk about new UI design . So this led full circle , in a strange way , to build these ideas into what we believe is the necessary future of human machine interface : the Spatial Operating Environment , we call it . So here we have a bunch of stuff , some images . And , using a hand , we can actually exercise six degrees of freedom , six degrees of navigational control . And it 's fun to fly through Mr. Beckett 's eye . And you can come back out through the scary orangutan . And that 's all well and good . Let 's do something a little more difficult . Here , we have a whole bunch of disparate images . We can fly around them . So navigation is a fundamental issue . You have to be able to navigate in 3D . Much of what we want computers to help us with in the first place is inherently spatial . And the part that is n't spatial can often be spatialized to allow our wetware to make greater sense of it . Now we can distribute this stuff in many different ways . So we can throw it out like that . Let 's reset it . We can organize it this way . And , of course , it 's not just about navigation , but about manipulation as well . So if we do n't like something , or we 're intensely curious about Ernst Haeckel 's scientific falsifications , we can pull them out like that . And then if it 's time for analysis , we can pull back a little bit and ask for a different distribution . Let 's just come down a bit and fly around . So that 's a different way to look at stuff . If you 're of a more analytical nature then you might want , actually , to look at this as a color histogram . So now we 've got the stuff color-sorted , angle maps onto color . And now , if we want to select things , 3D , space , the idea that we 're tracking hands in real space becomes really important because we can reach in , not in 2D , not in fake 2D , but in actual 3D . Here are some selection planes . And we 'll perform this Boolean operation because we really love yellow and tapirs on green grass . So , from there to the world of real work . Here 's a logistics system , a small piece of one that we 're currently building . There 're a lot of elements . And one thing that 's very important is to combine traditional tabular data with three-dimensional and geospatial information . So here 's a familiar place . And we 'll bring this back here for a second . Maybe select a little bit of that . And bring out this graph . And we should , now , be able to fly in here and have a closer look . These are logistics elements that are scattered across the United States . One thing that three-dimensional interactions and the general idea of imbuing computation with space affords you is a final destruction of that unfortunate one to one pairing between human beings and computers . That 's the old way ; that 's the old mantra , one machine , one human , one mouse , one screen . Well , that does n't really cut it anymore . In the real world , we have people who collaborate ; we have people who have to work together . And we have many different displays . And we might want to look at these various images . We might want to ask for some help . The author of this new pointing device is sitting over there , so I can pull it from here to there . These are unrelated machines , right ? So the computation is space soluble and network soluble . So I 'm going to leave that over there because I have a question for Paul . Paul is the designer of the wand , and maybe its easiest for him to come over here and tell me in person what 's going on . So let me get some of these out of the way . Let 's pull this apart : I 'll go ahead and explode it . Kevin , can you help ? Let me see if I can help us find the circuit board . Mind you , it 's a sort of gratuitous field-stripping exercise , but we do it in the lab all the time . All right . So collaborative work , whether it 's immediately co-located or distant and distinct , is always important . And again , that stuff needs to be undertaken in the context of space . And finally , I 'd like to leave you with a glimpse that takes us back to the world of imagery . This is a system called TAMPER , which is a slightly whimsical look at what the future of editing and media manipulation systems might be . We at Oblong believe that media should be accessible in much more fine-grained form . So we have a large number of movies stuck inside here . And let 's just pick out a few elements . We can zip through them as a possibility . We can grab elements off the front , where upon they reanimate , come to life , and drag them down onto the table here . We 'll go over to Jacques Tati here and grab our blue friend and put him down on the table as well . We may need more than one . And we probably need , well , we probably need a cowboy to be quite honest . ( Laughter ) Yeah , let 's take that one . ( Laughter ) You see , cowboys and French farce people do n't go well together , and the system knows that . Let me leave with one final thought , and that is that one of the greatest English language writers of the last three decades suggested that great art is always a gift . And he was n't talking about whether the novel costs 24.95 , or whether you have to spring 70 million bucks to buy the stolen Vermeer ; he was talking about the circumstances of its creation and of its existence . And I think that it 's time that we asked for the same from technology . Technology is capable of expressing and being imbued with a certain generosity , and we need to demand that , in fact . For some of this kind of technology , ground center is a combination of design , which is crucially important . We ca n't have advances in technology any longer unless design is integrated from the very start . And , as well , of efficacy , agency . We 're , as human beings , the creatures that create , and we should make sure our machines aid us in that task and are built in that same image . So I will leave you with that . Thank you . ( Applause ) Chris Anderson : So to ask the obvious question -- actually this is from Bill Gates -- when ? ( John Underkoffler : When ? ) CA : When real ? When for us , not just in a lab and on a stage ? Can it be for every man , or is this just for corporations and movie producers ? JU : No , it has to be for every human being . That 's our goal entirely . We wo n't have succeeded unless we take that next big step . I mean it 's been 25 years . Can there really be only one interface ? There ca n't . CA : But does that mean that , at your desk or in your home , you need projectors , cameras ? You know , how can it work ? JU : No , this stuff will be built into the bezel of every display . It 'll be built into architecture . The gloves go away in a matter of months or years . So this is the inevitability about it . CA : So , in your mind , five years time , someone can buy this as part of a standard computer interface ? JU : I think in five years time when you buy a computer , you 'll get this . CA : Well that 's cool . ( Applause ) The world has a habit of surprising us as to how these things are actually used . What do you think , what in your mind is the first killer app for this ? JU : That 's a good question , and we ask ourselves that every day . At the moment , our early-adopter customers -- and these systems are deployed out in the real world -- do all the big data intensive , data heavy problems with it . So , whether it 's logistics and supply chain management or natural gas and resource extraction , financial services , pharmaceuticals , bioinformatics , those are the topics right now , but that 's not a killer app . And I understand what you 're asking . CA : C'mon , c'mon . Martial arts , games . C'mon . ( Laughter ) John , thank you for making science-fiction real . JU : It 's been a great pleasure . Thank you to you all . ( Applause ) </content>
</text>
<text id="ted/joseph_lekuton_tells_a_parable_for_kenya">
My name is Joseph , a Member of Parliament in Kenya . And picture a Masai village . And one evening , government soldiers come , surround the village , and ask each elder to bring one boy to school . That 's how I went to school -- pretty much a government guy pointing a gun , and told my father , " You have to make a choice . " So I walked very comfortably to this missionary school , that was run by an American missionary , and the first thing the American missionary gave me was a candy . I had never in my life ever tasted candy . So I said to myself , with all these hundred other boys , this is where I belong . Stayed -- ( Laughter ) -- when everybody else was dropping out . My family moved . We 're nomads . Every time school closed -- it was a boarding school , and I was seven -- you had to travel until you find them . 50 miles , 40 miles , it does n't matter . You slept in the bush , but you kept going . And I stayed . I do n't know why I stayed , but I stayed . And all of a sudden , I passed the national examination , found myself in a very beautiful high school in Kenya . And I finished high school . And just walking , and found a man who gave me a full scholarship to the United States . My mother still lives in a cow-dung hut , none of my brothers are going to school and this man told me , " Here , go . " So I got a scholarship to St. Lawrence University , upstate New York . Finished that , and then after that I went to Harvard Graduate School . Finished that , and then I worked in DC a little bit . I wrote a book for National Geographic , and taught history , US history . And every time I kept going back home , listening to the problems of these people , sick people , people with no water , all the stuff . And every time I go back to America , I kept thinking about them . Then one day , an elder gave me a story , and this story went like this . Long time ago , there was a big war between tribes . And there was this specific tribe that was really afraid of this other Luhya tribe . And every time , they sent scouts out there to make sure no one attacked them . So one day , the scouts came running , and told the villagers , " The enemies are coming , only half an hour away -- they 'll be here . " So people scrambled , took their things and ready to go , move out . But there were two men , one man was blind , one man had no legs -- he was born like that . The leader of the chiefs said , " No , sorry , we ca n't take you , you 'll slow us down . We have to flee our women and children , we have to run . " And they were left behind , waiting to die . But these two people worked something out . The blind man said , " Look , I 'm a very strong man , but I ca n't see . " The man with no legs says , " I can see as far as the end of the world , but I ca n't save myself from a cat , or whatever , animals . " So the blind man went down on his knees , down like this , and told the man with no legs to go over his back , and stood up . The man on top can see , the blind man can walk . And these guys took off , followed the footsteps of the villagers , until they found and passed them . So this was told to me in a set-up of elders . And it 's a really poor area , I represent Northern Kenya -- most nomadic , remote areas you can even find . And that man told me , " So , here you are , you 've got a good education from America , you have a good life in America , what are you going to do for us ? We want you to be our eyes , we 'll give you the legs . We 'll walk you , you lead us . " So the opportunity came , and I was always thinking about that , what can I do to help my people ? Every time you go to an area where for 43 years of independence , we still do n't have basic health facilities . A man has to be transported in a wheelbarrow to 20 , 30 kilometers for hospital . No clean drinking water . So I said , " I 'm going to dedicate myself , I 'm leaving America . I 'm going to run for office . " So last July -- I moved from America in June , ran in July election and won . And I came for them , and that 's my goal . And right now , I have in place for the last nine months a plan that in five years , every nomad will have clean drinking water . We 're building dispensaries across that constituency . I 'm asking my friends from America to help with bringing nurses or doctors to help us out . I 'm trying to improve infrastructure . I 'm using the knowledge I received from the United States and from my community to move them forward . I 'm trying to develop homegrown solutions to our issues . Because we know , we realize that people outside can come and help us , but if we do n't help ourselves , there 's nothing we can do . So my plan right now , as I continue with introducing students to different fields -- some become doctors , some lawyers -- we want to produce a comprehensive group of people , students , who can come back and help us see a community grow that is in the middle of a huge economic recession . So as I continue to be a Member of Parliament , and as I continue listening to all of you talking about botany , talking about health , talking about democracy , talking about new inventions , I 'm hoping that one day , in my own little community -- which is 26,000 square kilometers , maybe five times the size of Rhode Island , with no roads -- we 'll be able to become a model to help others develop . Thank you very much . </content>
</text>
<text id="ted/julia_sweeney_has_the_talk">
I have a daughter , Mulan . And when she was eight , last year , she was doing a report for school , or she had some homework about frogs . And we were at this restaurant . And she said , " So , basically , frogs lay eggs and the eggs turn into tadpoles , and tadpoles turn into frogs . " And I said , " Yeah . You know , I 'm not really up on my frog reproduction that much . It 's the females , I think , that lay the eggs . And then the males fertilize them . And then they become tadpoles and frogs . " And she says , " What ? Only the females have eggs ? " And I said , " Yeah . " And she goes , " And what 's this fertilizing ? " So I kind of said , " Oh , it 's this extra ingredient , you know , that you need to create a new frog from the mom and dad frog . " And she said , " Oh , so is that true for humans too ? " And I thought , " Okay , here we go . " I did n't know it would happen so quick , at eight . I was trying to remember all the guidebooks , and all I could remember was , " Only answer the question they 're asking . Do n't give any more information . " So I said , " Yes . " And she said , " And where do , where do human women , where do women lay their eggs ? " And I said , " Well , funny you should ask . We have evolved to have our own pond . We have our very own pond inside our bodies . And we lay our eggs there . We do n't have to worry about other eggs or anything like that . It 's our own pond . And that 's how it happens . " And she goes , " Then how do they get fertilized ? " And I said , " Well , Men , through their penis , they fertilize the eggs by the sperm coming out . And you go through the woman 's vagina . " And so we 're just eating , and her jaw just drops , and she goes , " Mom ! Like where you go to the bathroom ? " And I said , " I know . I know . " ( Laughter ) That 's how we evolved . It does seem odd . It is a little bit like having a waste treatment plant right next to an amusement park . Bad zoning . But ... She 's like , " What ? " And she goes , " But Mom , but men and women ca n't ever see each other naked , Mom . So how could that ever happen ? " And then I put my Margaret Mead hat on . " Human males and females develop a special bond , and when they 're much older , much , much older than you , and they have a very special feeling , then they can be naked together . " And she said , " Mom , have you done this before ? " And I said , " Yes . " And she said , " But Mom , you ca n't have kids . " Because she knows that I adopted her and that I ca n't have kids . And I said , " Yes . " And she said , " Well , you do n't have to do that again . " And then I said , " ... " And then she said , " But how does it happen when a man and woman are together ? Like , how do they know that 's the time ? Mom , does the man just say , 'Is now the time to take off my pants ? ' " ( Laughter ) And I said , " Yes . " ( Laughter ) " That is exactly right . That 's exactly how it happens . " So then we 're driving home , and she 's looking out the window , and she goes , " Mom , what if two people just saw each other on the street , like a man and a woman , and they just started doing it . Would that ever happen ? " And I said , " Oh , no . Humans are so private . Oh no . " And then she goes , " What if there was like a party . And there was just like a whole bunch of girls and a whole bunch of boys . And there was a bunch of men and women and they just started doing it , Mom ? Would that ever happen ? " And I said , " Oh , no , no . That 's not how we do it . " Then we got home and we see the cat . And she goes , " Mom , how do cats do it ? " And I go , " Oh , it 's the same . It 's basically the same . " And then she got all caught up in the legs . " But how would the legs go , Mom . I do n't understand the legs . " She goes , " Mom , everyone ca n't do the splits . " And I go , " I know , but the legs ... " I 'm like , " The legs get worked out . " And she goes , " But I just ca n't understand it . " So I go , " You know , why do we go on the Internet , and maybe we can see ... " like on Wikipedia . So we go online , and we put in cats mating . And , unfortunately , on Youtube , there 's many cats mating videos . And we watched them , and I 'm so thankful , because she 's just like , " Wow ! This is so amazing . " She goes , " What about dogs ? " So we put in dogs mating , and , you know , we 're watching it , and she 's totally absorbed . And then she goes , " Mom , do you think they would have on the Internet , any humans mating ? " ( Laughter ) And then I realized that I had taken my little eight year-old 's hand , and taken her right into Internet porn . And I looked into this trusting , loving face , and I said , " Oh , no . That would never happen . " Thank you . ( Applause ) Thank you . ( Applause ) Thank you . I 'm so happy to be here . </content>
</text>
<text id="ted/ken_robinson_says_schools_kill_creativity">
Good morning . How are you ? It 's been great , has n't it ? I 've been blown away by the whole thing . In fact , I 'm leaving . ( Laughter ) There have been three themes , have n't there , running through the conference , which are relevant to what I want to talk about . One is the extraordinary evidence of human creativity in all of the presentations that we 've had and in all of the people here . Just the variety of it and the range of it . The second is that it 's put us in a place where we have no idea what 's going to happen , in terms of the future . No idea how this may play out . I have an interest in education -- actually , what I find is everybody has an interest in education . Do n't you ? I find this very interesting . If you 're at a dinner party , and you say you work in education -- actually , you 're not often at dinner parties , frankly , if you work in education . ( Laughter ) You 're not asked . And you 're never asked back , curiously . That 's strange to me . But if you are , and you say to somebody , you know , they say , " What do you do ? " and you say you work in education , you can see the blood run from their face . They 're like , " Oh my God , " you know , " Why me ? My one night out all week . " ( Laughter ) But if you ask about their education , they pin you to the wall . Because it 's one of those things that goes deep with people , am I right ? Like religion , and money and other things . I have a big interest in education , and I think we all do . We have a huge vested interest in it , partly because it 's education that 's meant to take us into this future that we ca n't grasp . If you think of it , children starting school this year will be retiring in 2065. Nobody has a clue -- despite all the expertise that 's been on parade for the past four days -- what the world will look like in five years ' time . And yet we 're meant to be educating them for it . So the unpredictability , I think , is extraordinary . And the third part of this is that we 've all agreed , nonetheless , on the really extraordinary capacities that children have -- their capacities for innovation . I mean , Sirena last night was a marvel , was n't she ? Just seeing what she could do . And she 's exceptional , but I think she 's not , so to speak , exceptional in the whole of childhood . What you have there is a person of extraordinary dedication who found a talent . And my contention is , all kids have tremendous talents . And we squander them , pretty ruthlessly . So I want to talk about education and I want to talk about creativity . My contention is that creativity now is as important in education as literacy , and we should treat it with the same status . ( Applause ) Thank you . That was it , by the way . Thank you very much . ( Laughter ) So , 15 minutes left . Well , I was born ... no . ( Laughter ) I heard a great story recently -- I love telling it -- of a little girl who was in a drawing lesson . She was six and she was at the back , drawing , and the teacher said this little girl hardly ever paid attention , and in this drawing lesson she did . The teacher was fascinated and she went over to her and she said , " What are you drawing ? " And the girl said , " I 'm drawing a picture of God . " And the teacher said , " But nobody knows what God looks like . " And the girl said , " They will in a minute . " ( Laughter ) When my son was four in England -- actually he was four everywhere , to be honest . ( Laughter ) If we 're being strict about it , wherever he went , he was four that year . He was in the Nativity play . Do you remember the story ? No , it was big . It was a big story . Mel Gibson did the sequel . You may have seen it : " Nativity II . " But James got the part of Joseph , which we were thrilled about . We considered this to be one of the lead parts . We had the place crammed full of agents in T-shirts : " James Robinson IS Joseph ! " ( Laughter ) He did n't have to speak , but you know the bit where the three kings come in . They come in bearing gifts , and they bring gold , frankincense and myrhh . This really happened . We were sitting there and I think they just went out of sequence , because we talked to the little boy afterward and we said , " You OK with that ? " And he said , " Yeah , why ? Was that wrong ? " They just switched , that was it . Anyway , the three boys came in -- four-year-olds with tea towels on their heads -- and they put these boxes down , and the first boy said , " I bring you gold . " And the second boy said , " I bring you myrhh . " And the third boy said , " Frank sent this . " ( Laughter ) What these things have in common is that kids will take a chance . If they do n't know , they 'll have a go . Am I right ? They 're not frightened of being wrong . Now , I do n't mean to say that being wrong is the same thing as being creative . What we do know is , if you 're not prepared to be wrong , you 'll never come up with anything original . If you 're not prepared to be wrong . And by the time they get to be adults , most kids have lost that capacity . They have become frightened of being wrong . And we run our companies like this , by the way . We stigmatize mistakes . And we 're now running national education systems where mistakes are the worst thing you can make . And the result is that we are educating people out of their creative capacities . Picasso once said this . He said that all children are born artists . The problem is to remain an artist as we grow up . I believe this passionately , that we do n't grow into creativity , we grow out of it . Or rather , we get educated out if it . So why is this ? I lived in Stratford-on-Avon until about five years ago . In fact , we moved from Stratford to Los Angeles . So you can imagine what a seamless transition that was . ( Laughter ) Actually , we lived in a place called Snitterfield , just outside Stratford , which is where Shakespeare 's father was born . Are you struck by a new thought ? I was . You do n't think of Shakespeare having a father , do you ? Do you ? Because you do n't think of Shakespeare being a child , do you ? Shakespeare being seven ? I never thought of it . I mean , he was seven at some point . He was in somebody 's English class , was n't he ? How annoying would that be ? ( Laughter ) " Must try harder . " Being sent to bed by his dad , you know , to Shakespeare , " Go to bed , now , " to William Shakespeare , " and put the pencil down . And stop speaking like that . It 's confusing everybody . " ( Laughter ) Anyway , we moved from Stratford to Los Angeles , and I just want to say a word about the transition , actually . My son did n't want to come . I 've got two kids . He 's 21 now ; my daughter 's 16. He did n't want to come to Los Angeles . He loved it , but he had a girlfriend in England . This was the love of his life , Sarah . He 'd known her for a month . Mind you , they 'd had their fourth anniversary , because it 's a long time when you 're 16. Anyway , he was really upset on the plane , and he said , " I 'll never find another girl like Sarah . " And we were rather pleased about that , frankly , because she was the main reason we were leaving the country . ( Laughter ) But something strikes you when you move to America and when you travel around the world : Every education system on earth has the same hierarchy of subjects . Every one . Does n't matter where you go . You 'd think it would be otherwise , but it is n't . At the top are mathematics and languages , then the humanities , and the bottom are the arts . Everywhere on Earth . And in pretty much every system too , there 's a hierarchy within the arts . Art and music are normally given a higher status in schools than drama and dance . There is n't an education system on the planet that teaches dance every day to children the way we teach them mathematics . Why ? Why not ? I think this is rather important . I think math is very important , but so is dance . Children dance all the time if they 're allowed to , we all do . We all have bodies , do n't we ? Did I miss a meeting ? ( Laughter ) Truthfully , what happens is , as children grow up , we start to educate them progressively from the waist up . And then we focus on their heads . And slightly to one side . If you were to visit education , as an alien , and say " What 's it for , public education ? " I think you 'd have to conclude -- if you look at the output , who really succeeds by this , who does everything that they should , who gets all the brownie points , who are the winners -- I think you 'd have to conclude the whole purpose of public education throughout the world is to produce university professors . Is n't it ? They 're the people who come out the top . And I used to be one , so there . ( Laughter ) And I like university professors , but you know , we should n't hold them up as the high-water mark of all human achievement . They 're just a form of life , another form of life . But they 're rather curious , and I say this out of affection for them . There 's something curious about professors in my experience -- not all of them , but typically -- they live in their heads . They live up there , and slightly to one side . They 're disembodied , you know , in a kind of literal way . They look upon their body as a form of transport for their heads , do n't they ? ( Laughter ) It 's a way of getting their head to meetings . If you want real evidence of out-of-body experiences , by the way , get yourself along to a residential conference of senior academics , and pop into the discotheque on the final night . ( Laughter ) And there you will see it -- grown men and women writhing uncontrollably , off the beat , waiting until it ends so they can go home and write a paper about it . Now our education system is predicated on the idea of academic ability . And there 's a reason . The whole system was invented -- around the world , there were no public systems of education , really , before the 19th century . They all came into being to meet the needs of industrialism . So the hierarchy is rooted on two ideas . Number one , that the most useful subjects for work are at the top . So you were probably steered benignly away from things at school when you were a kid , things you liked , on the grounds that you would never get a job doing that . Is that right ? Do n't do music , you 're not going to be a musician ; do n't do art , you wo n't be an artist . Benign advice -- now , profoundly mistaken . The whole world is engulfed in a revolution . And the second is academic ability , which has really come to dominate our view of intelligence , because the universities designed the system in their image . If you think of it , the whole system of public education around the world is a protracted process of university entrance . And the consequence is that many highly talented , brilliant , creative people think they 're not , because the thing they were good at at school was n't valued , or was actually stigmatized . And I think we ca n't afford to go on that way . In the next 30 years , according to UNESCO , more people worldwide will be graduating through education than since the beginning of history . More people , and it 's the combination of all the things we 've talked about -- technology and its transformation effect on work , and demography and the huge explosion in population . Suddenly , degrees are n't worth anything . Is n't that true ? When I was a student , if you had a degree , you had a job . If you did n't have a job it 's because you did n't want one . And I did n't want one , frankly . ( Laughter ) But now kids with degrees are often heading home to carry on playing video games , because you need an MA where the previous job required a BA , and now you need a PhD for the other . It 's a process of academic inflation . And it indicates the whole structure of education is shifting beneath our feet . We need to radically rethink our view of intelligence . We know three things about intelligence . One , it 's diverse . We think about the world in all the ways that we experience it . We think visually , we think in sound , we think kinesthetically . We think in abstract terms , we think in movement . Secondly , intelligence is dynamic . If you look at the interactions of a human brain , as we heard yesterday from a number of presentations , intelligence is wonderfully interactive . The brain is n't divided into compartments . In fact , creativity -- which I define as the process of having original ideas that have value -- more often than not comes about through the interaction of different disciplinary ways of seeing things . The brain is intentionally -- by the way , there 's a shaft of nerves that joins the two halves of the brain called the corpus callosum . It 's thicker in women . Following off from Helen yesterday , I think this is probably why women are better at multi-tasking . Because you are , are n't you ? There 's a raft of research , but I know it from my personal life . If my wife is cooking a meal at home -- which is not often , thankfully . ( Laughter ) But you know , she 's doing -- no , she 's good at some things -- but if she 's cooking , you know , she 's dealing with people on the phone , she 's talking to the kids , she 's painting the ceiling , she 's doing open-heart surgery over here . If I 'm cooking , the door is shut , the kids are out , the phone 's on the hook , if she comes in I get annoyed . I say , " Terry , please , I 'm trying to fry an egg in here . Give me a break . " ( Laughter ) Actually , you know that old philosophical thing , if a tree falls in the forest and nobody hears it , did it happen ? Remember that old chestnut ? I saw a great t-shirt really recently which said , " If a man speaks his mind in a forest , and no woman hears him , is he still wrong ? " ( Laughter ) And the third thing about intelligence is , it 's distinct . I 'm doing a new book at the moment called " Epiphany , " which is based on a series of interviews with people about how they discovered their talent . I 'm fascinated by how people got to be there . It 's really prompted by a conversation I had with a wonderful woman who maybe most people have never heard of , she 's called Gillian Lynne , have you heard of her ? Some have . She 's a choreographer and everybody knows her work . She did " Cats , " and " Phantom of the Opera . " She 's wonderful . I used to be on the board of the Royal Ballet , in England , as you can see . Anyway , Gillian and I had lunch one day and I said , " Gillian , how 'd you get to be a dancer ? " And she said it was interesting , when she was at school , she was really hopeless . And the school , in the '30s , wrote to her parents and said , " We think Gillian has a learning disorder . " She could n't concentrate , she was fidgeting . I think now they 'd say she had ADHD . Would n't you ? But this was the 1930s , and ADHD had n't been invented at this point . It was n't an available condition . ( Laughter ) People were n't aware they could have that . Anyway , she went to see this specialist . So , this oak-paneled room , and she was there with her mother , and she was led and sat on a chair at the end , and she sat on her hands for 20 minutes while this man talked to her mother about all the problems Gillian was having at school . And at the end of it -- because she was disturbing people , her homework was always late , and so on , little kid of eight -- in the end , the doctor went and sat next to Gillian and said , " Gillian , I 've listened to all these things that your mother 's told me , and I need to speak to her privately . " He said , " Wait here , we 'll be back , we wo n't be very long . " and they went and left her . But as they went out the room , he turned on the radio that was sitting on his desk . And when they got out the room , he said to her mother , " Just stand and watch her . " And the minute they left the room , she said , she was on her feet , moving to the music . And they watched for a few minutes and he turned to her mother and said , " Mrs. Lynne , Gillian is n't sick , she 's a dancer . Take her to a dance school . " I said , " What happened ? " She said , " She did . I ca n't tell you how wonderful it was . We walked in this room and it was full of people like me . People who could n't sit still . People who had to move to think . " Who had to move to think . They did ballet , they did tap , they did jazz , they did modern , they did contemporary . She was eventually auditioned for the Royal Ballet School , she became a soloist , she had a wonderful career at the Royal Ballet . She eventually graduated from the Royal Ballet School and founded her own company -- the Gillian Lynne Dance Company -- met Andrew Lloyd Weber . She 's been responsible for some of the most successful musical theater productions in history , she 's given pleasure to millions , and she 's a multi-millionaire . Somebody else might have put her on medication and told her to calm down . Now , I think ... ( Applause ) What I think it comes to is this : Al Gore spoke the other night about ecology , and the revolution that was triggered by Rachel Carson . I believe our only hope for the future is to adopt a new conception of human ecology , one in which we start to reconstitute our conception of the richness of human capacity . Our education system has mined our minds in the way that we strip-mine the earth : for a particular commodity . And for the future , it wo n't serve us . We have to rethink the fundamental principles on which we 're educating our children . There was a wonderful quote by Jonas Salk , who said , " If all the insects were to disappear from the earth , within 50 years all life on Earth would end . If all human beings disappeared from the earth , within 50 years all forms of life would flourish . " And he 's right . What TED celebrates is the gift of the human imagination . We have to be careful now that we use this gift wisely , and that we avert some of the scenarios scenarios that we 've talked about . And the only way we 'll do it is by seeing our creative capacities for the richness they are , and seeing our children for the hope that they are . And our task is to educate their whole being , so they can face this future . By the way -- we may not see this future , but they will . And our job is to help them make something of it . Thank you very much . </content>
</text>
<text id="ted/marcin_jakubowski">
Hi , my name is Marcin -- farmer , technologist . I was born in Poland , now in the U. S. I started a group called Open Source Ecology . We 've identified the 50 most important machines that we think it takes for modern life to exist -- things from tractors , bread ovens , circuit makers . Then we set out to create an open source , DIY , do it yourself version that anyone can build and maintain at a fraction of the cost . We call this the Global Village Construction Set . So let me tell you a story . So I finished my 20s with a Ph. D. in fusion energy , and I discovered I was useless . I had no practical skills . The world presented me with options , and I took them . I guess you can call it the consumer lifestyle . So I started a farm in Missouri and learned about the economics of farming . I bought a tractor -- then it broke . I paid to get it repaired -- then it broke again . Then pretty soon I was broke too . I realized that the truly appropriate , low-cost tools that I needed to start a sustainable farm and settlement just did n't exist yet . I needed tools that were robust , modular , highly efficient and optimized , low-cost , made from local and recycled materials that would last a lifetime , not designed for obsolescence . I found that I would have to build them myself . So I did just that . And I tested them . And I found that industrial productivity can be achieved on a small scale . So then I published the 3D designs , schematics , instructional videos and budgets on a wiki . Then contributors from all over the world began showing up , prototyping new machines during dedicated project visits . So far , we have prototyped eight of the 50 machines . And now the project is beginning to grow on its own . We know that open source has succeeded with tools for managing knowledge and creativity . And the same is starting to happen with hardware too . We 're focusing on hardware because it is hardware that can change people 's lives in such tangible material ways . If we can lower the barriers to farming , building , manufacturing , then we can unleash just massive amounts of human potential . That 's not only in the developing world . Our tools are being made for the American farmer , builder , entrepreneur , maker . We 've seen lots of excitement from these people , who can now start a construction business , parts manufacturing , organic CSA or just selling power back to the grid . Our goal is a repository of published designs so clear , so complete , that a single burned DVD is effectively a civilization starter kit . I 've planted a hundred trees in a day . I 've pressed 5,000 bricks in one day from the dirt beneath my feet and built a tractor in six days. From what I 've seen , this is only the beginning . If this idea is truly sound , then the implications are significant . A greater distribution of the means of production , environmentally sound supply chains , and a newly-relevant DIY maker culture can hope to transcend artificial scarcity . We 're exploring the limits of what we all can do to make a better world with open hardware technology . Thank you . ( Applause ) </content>
</text>
<text id="ted/mary_roach_10_things_you_didn_t_know_about_orgasm">
Alright . I 'm going to show you a couple of images from a very diverting paper in The Journal of Ultrasound in Medicine . I 'm going to go way out on a limb and say that it is the most diverting paper ever published in The Journal of Ultrasound in Medicine . The title is " Observations of In-Utero Masturbation . " ( Laughter ) Okay . Now on the left you can see the hand . That 's the big arrow . And the penis on the right . The hand hovering . And over here we have , in the words of radiologist Israel Meisner , " The hand grasping the penis in a fashion resembling masturbation movements . " Bear in mind this was an ultrasound . So it would have been moving images . Orgasm is a reflex of the autonomic nervous system . Now this is the part of the nervous system that deals with the things that we do n't consciously control . Like digestion , heart rate , sexual arousal . And the orgasm reflex can be triggered by a surprisingly broad range of input . Genital stimulation . Duh . But also Kinsey interviewed a woman who could be brought to orgasm by having someone stroke her eyebrow . People with spinal cord injuries , like parapligias , quadriplegias , will often develop a very very sensitive area right above the level of their injury . Wherever that is . There is such a thing as a knee orgasm , in the literature . I think the most curious one that I came across was a case report of a woman who had an orgasm every time she brushed her teeth . ( Laughter ) This was something in the complex sensory-motor action of brushing her teeth was triggering orgasm . And she went to a neurologist who was fascinated . He checked to see if it was something in the toothpaste . But no , it happened with any brand . They stimulated her gums with a toothpick , to see if that was doing it . No. It was the whole , you know , motion . And the amazing thing to me is that now you would think this woman would like have excellent oral hygiene . ( Laughter ) Sadly she -- this is what it said in the journal paper -- " She believed that she was possessed by demons and switched to mouthwash for her oral care . " It 's so sad . ( Laughter ) I interviewed , when I was working on the book , I interviewed a woman who can think herself to orgasm . She was part of a study at Rutgers University . You gotta love that . Rutgers . So I interviewed her in Oakland , in a sushi restaurant . And I said , " So , could you do it right here ? " And she said , " Yeah , but I 'd rather finish my meal if you do n't mind . " ( Laughter ) But afterwards she was kind enough to demonstrate on a bench outside . It was remarkable . It took about one minute . And I said to her , " Are you just doing this all the time ? " ( Laughter ) She said , " No. Honestly when I get home I 'm usually too tired . " ( Laughter ) She said that the last time she had done it was on the Disneyland tram . ( Laughter ) The headquarters for orgasm , along the spinal nerve , is something called the sacral nerve root . Which is back here . And if you trigger , if you stimulate with an electrode , the precise spot , you will trigger an orgasm . And it is a fact that you can trigger spinal reflexes in dead people . A certain kind of dead person , a beating-heart cadaver . Now this is somebody who is braindead , legally dead , definitely checked out , but is being kept alive on a respirator , so that their organs will be oxygenated for transplantation . Now in one of these braindead people , if you trigger the right spot you will see something every now and then . There is a reflex called the Lazarus reflex . And this is -- I 'll demonstrate as best I can , not being dead . It 's like this . You trigger the spot . The dead guy , or gal , goes ... like that . Very unsettling for people working in pathology labs . ( Laughter ) Now if you can trigger the Lazarus reflex in a dead person , why not the orgasm reflex ? I asked this question to a brain death expert , Stephanie Mann , who was foolish enough to return my emails . ( Laughter ) I said , " So , could you concievably trigger an orgasm in a dead person ? " She said , " Yes , if the sacral nerve is being oxygenated . You conceivably could . " Obviously it would n't be as much fun for the person . But it would be an orgasm -- ( Laughter ) nonetheless . I actually suggested to -- there is a researcher at the University of Alabama who does orgasm research . I said to her , " You should do an experiment . You know ? You can get cadavers if you work at a university . " I said , " You should actually do this . " She said , " You get the human subjects review board approval for this one . " ( Laughter ) According to 1930s marriage manual author , Theodoor Van de Velde , a slight seminal odor can be detected on the breath of a woman within about an hour after sexual intercourse . Theodore Van de Velde was something of a semen connoisseur . ( Laughter ) This is a guy writing a book , " Ideal Marriage , " you know . Very heavy hetero guy . But he wrote in this book , " Ideal Marriage , " he said that he could differentiate between the semen of a young man , which he said had a fresh , exhilarating smell , and the semen of mature men , whose semen smelled quote , " Remarkably like that of the flowers of the Spanish chestnut . Sometimes quite freshly floral , and then again sometimes extremely pungent . " ( Laughter ) Okay . 1999 , in the state of Israel , a man began hiccuping . And this was one of those cases that went on and on . He tried everything his friends suggested . Nothing seemed to help . Days went by . At a certain point , the man , still hiccuping , had sex with his wife . And lo and behold , the hiccups went away . He told his doctor , who published a case report in a Canadian medical journal under the title , " Sexual Intercourse as a Potential Treatment for Intractable Hiccups . " I love this article because at a certain point they suggested that unattached hiccupers could try masturbation . ( Laughter ) I love that because there is like a whole demographic . Unattached hiccupers . ( Laughter ) Married . Single . Unattached hiccuper . In the 1900s , early 1900s gynecologists , a lot of gynecologists believed that when a woman has an orgasm the contractions serve to suck the semen up through the cervix and sort of deliver it really quickly to the egg . Thereby upping the odds of conception . It was called the " upsuck " theory . ( Laughter ) If you go all the way back to Hippocrates , physicians believed that orgasm in women was not just helpful for conception , but necessary . Doctors back then were routinely telling men the importance of pleasuring their wives . Marriage manual author and semen sniffer Theodore Van de Velde -- ( Laughter ) has a line in his book . I loved this guy . I got a lot of mileage out of Theodore Van de Velde . He had this line in his book , that supposedly comes from the Habsburg Monarchy . Where there was an empress Maria Theresa , who was having trouble conceiving . And apparently the royal court physician said to her , " I am of the opinion that the vulva of your most sacred majesty be titillated for some time prior to intercourse . " ( Laughter ) It 's apparently , I do n't know , on the record somewhere . Masters and Johnson : now we 're moving forward to the 1950s . Masters and Johnson were upsuck skeptics . Which is also really fun to say . They did n't buy it . And they decided , being Masters and Johnson , that they would get to the bottom of it . They brought women into the lab . I think it was five women . And outfitted them with cervical caps containing artificial semen . And in the artificial semen was a radio-opaque substance , such that it would show up on an X-ray . This is the 1950s . Anyway these women sat in front of an X-ray device . And they masturbated . And Masters and Johnson looked to see if the semen was being sucked up . Did not find any evidence of upsuck . You may be wondering , " How do you make artificial semen ? " ( Laughter ) I have an answer for you . I have two answers . You can use flour and water , or cornstarch and water . I actually found three separate recipes in the literature . ( Laughter ) My favorite being the one that says -- you know , they have the ingredients listed , and then in a recipe it will say , for example , " Yield : two dozen cupcakes . " This one said , " Yield : one ejaculate . " ( Laughter ) There 's another way that orgasm might boost fertility . This one involves men . Sperm that sit around in the body for a week or more start to develop abnormalities that make them less effective at head banging their way into the egg . British sexologist Roy Levin has speculated that this is perhaps why men evolved to be such enthusiastic and frequent masturbators . He said , " If I keep tossing myself off I get fresh sperm being made . " Which I thought was an interesting idea , theory . So now you have an evolutionary excuse . ( Laughter ) Okay . ( Laughter ) Alrighty . There is considerable evidence for upsuck in the animal kingdom . Pigs , for instance . In Denmark , the Danish National Committee for Pig Production found out that if you sexually stimulate a sow while you artificially inseminate her , you will see a six-percent increase in the farrowing rate , which is the number of piglets produced . So they came up with this plan . This five-point stimulation plan for the sows . And they had the farmers -- there is posters they put in the barn , and they have a DVD . And I got a copy of this DVD . ( Laughter ) This is my unveiling . Because I am going to show you a clip . ( Laughter ) So uh , okay . Now here we go in to the -- la la la , off to work . It all looks very innocent . He 's going to be doing things with his hands that the boar would use his snout , lacking hands . Okay . ( Laughter ) This is it . The boar has a very odd courtship repertoire . ( Laughter ) This is to mimic the weight of the boar . ( Laughter ) You should know , the clitoris of the pig , inside the vagina . So this may be sort of titillating for her . Here we go . ( Laughter ) And the happy result . ( Applause ) I love this video . There is a point in this video , towards the beginning where they zoom in for a close up of his hand with his wedding ring , as if to say , " It 's okay , it 's just his job . He really does like women . " ( Laughter ) Okay . Now I said -- when I was in Denmark , my host was named Anne Marie . And I said , " So why do n't you just stimulate the clitoris of the pig ? Why do n't you have the farmers do that ? That 's not one of your five steps . " She said -- I have to read you what she said , because I love it . She said , " It was a big hurdle just to get farmers to touch underneath the vulva . So we thought let 's not mention the clitoris right now . " ( Laughter ) Shy but ambitious pig farmers , however , can purchase a -- this is true -- a sow vibrator , that hangs on the sperm feeder tube to vibrate . Because , as I mentioned , the clitoris is inside the vagina . So possibly , you know , a little more arousing than it looks . And I also said to her , " Now these sows . I mean , you may have noticed there , The sow does n't look to be in the throes of ecstasy . " And she said , " You ca n't make that conclusion . " Because animals do n't register pain or pleasure on their faces , in the same way that we do . They tend to -- pigs , for example , are more like dogs . They use the upper half of the face . The ears are very expressive . So you 're not really sure what 's going on with the pig . Primates , on the other hand , we use our mouths more . This is the ejaculation face of the stump-tailed macaque . ( Laughter ) And , interestingly , this has been observed in female macaques . But only when mounting another female . ( Laughter ) Masters and Johnson , in the 1950s , they decided , okay , we 're going to figure out the entire human sexual response cycle . From arousal , all the way through orgasm , in men and women . Everything that happens in the human body . Okay , with women , a lot of this is happening inside . This did not stop Masters and Johnson . They developed an artificial coition machine . This is basically a penis camera on a motor . There is a phallus , clear acrylic phallus , with a camera and a light source , attached to a motor that is kind of going like this . And the woman would have sex with it . That is what they would do . Pretty amazing . Sadly , this device has been dismantled . This just kills me . Not because I wanted to use it . I wanted to see it . ( Laughter ) One fine day Alfred Kinsey decided to calculate the average distance traveled by ejaculated semen . This was not idle curiosity . Doctor Kinsey had heard -- and there was a theory kind of going around at the time , this being the 1940s , that the force with which semen is thrown against the cervix was a factor in fertility . Kinsey thought it was bunk . So he got to work . He got together in his lab 300 men , a measuring tape , and a movie camera . ( Laughter ) And in fact he found that in three quarters of the men the stuff just kind of slopped out . It was n't spurted or thrown or ejected under great force . However , the record holder landed just shy of the eight foot mark . Which is impressive . ( Laughter ) ( Applause ) Yes . Exactly . ( Laughter ) Sadly , he 's anonymous . His name is not mentioned . In his write up , in his write up of this experiment in his book , Kinsey wrote , " Two sheets were laid down to protect the oriental carpets . " ( Laughter ) Which is my second favorite line in the entire ouevre of Alfred Kinsey . My favorite being , " Cheese crumbs spread before a pair of copulating rats will distract the female , but not the male . " ( Laughter ) Thank you very much . ( Applause ) Thanks ! </content>
</text>
<text id="ted/michael_sandel_the_lost_art_of_democratic_debate">
One thing the world needs , one thing this country desperately needs is a better way of conducting our political debates . We need to rediscover the lost art of democratic argument . ( Applause ) If you think about the arguments we have , most of the time it 's shouting matches on cable television , ideological food fights on the floor of Congress . I have a suggestion . Look at all the arguments we have these days over health care , over bonuses and bailouts on Wall Street , over the gap between rich and poor , over affirmative action and same-sex marriage . Lying just beneath the surface of those arguments , with passions raging on all sides , are big questions of moral philosophy , big questions of justice . But we too rarely articulate and defend and argue about those big moral questions in our politics . So what I would like to do today is have something of a discussion . First , let me take a famous philosopher who wrote about those questions of justice and morality , give you a very short lecture on Aristotle of ancient Athens , Aristotle 's theory of justice , and then have a discussion here to see whether Aristotle 's ideas actually inform the way we think and argue about questions today . So , are you ready for the lecture ? According to Aristotle justice means giving people what they deserve . That 's it ; that 's the lecture . ( Laughter ) Now , you may say , well , that 's obvious enough . The real questions begin when it comes to arguing about who deserves what and why . Take the example of flutes . Suppose we 're distributing flutes . Who should get the best ones ? Let 's see what people -- What would you say ? Who should get the best flute ? You can just call it out . ( Audience : Random . ) Michael Sandel : At random . You would do it by lottery . Or by the first person to rush into the hall to get them . Who else ? ( Audience : The best flute players . ) MS : The best flute players . ( Audience : The worst flute players . ) MS : The worst flute players . How many say the best flute players ? Why ? Actually , that was Aristotle 's answer too . ( Laughter ) But here 's a harder question . Why do you think , those of you who voted this way , that the best flutes should go to the best flute players ? Peter : The greatest benefit to all . MS : The greatest benefit to all . We 'll hear better music if the best flutes should go to the best flute players . That 's Peter ? ( Audience : Peter . ) MS : All right . Well , it 's a good reason . We 'll all be better off if good music is played rather than terrible music . But Peter , Aristotle does n't agree with you that that 's the reason . That 's all right . Aristotle had a different reason for saying the best flutes should go to the best flute players . He said , that 's what flutes are for -- to be played well . He says that to reason about just distribution of a thing , we have to reason about , and sometimes argue about , the purpose of the thing , or the social activity , in this case , musical performance . And the point , the essential nature , of musical performance is to produce excellent music . It 'll be a happy byproduct that we 'll all benefit . But when we think about justice , Aristotle says , what we really need to think about is the essential nature of the activity in question and the qualities that are worth honoring and admiring and recognizing . One of the reasons that the best flute players should get the best flutes is that musical performance is not only to make the rest of us happy , but to honor and recognize the excellence of the best musicians . Now , flutes may seem ... the distribution of flutes may seem a trivial case . Let 's take a contemporary example of the dispute about justice . It had to do with golf . Casey Martin -- a few years ago , Casey Martin -- did any of you hear about him ? He was a very good golfer , but he had a disability . he had a bad leg , a circulatory problem , that made it very painful for him to walk the course . In fact , it carried risk of injury . He asked the PGA , the Professional Golfers ' Association , for permission to use a golf cart in the PGA tournaments . They said , " No. Now that would give you an unfair advantage . " He sued , and his case went all the way to the Supreme Court , believe it or not , the case over the golf cart . Because the law says that the disabled must be accommodated , provided the accommodation does not change the essential nature of the activity . He says , " I 'm a great golfer . I want to compete . But I need a golf cart to get from one hole to the next . " Suppose you were on the Supreme Court . Suppose you were deciding the justice of this case . How many here would say that Casey Martin does have a right to use a golf cart ? And how many say , no , he does n't ? All right , let 's take a poll , show of hands . How many would rule in favor of Casey Martin ? And how many would not ? How many would say he does n't ? All right , we have a good division of opinion here . Someone who would not grant Casey Martin the right to a golf cart , what would be your reason ? Raise your hand , and we 'll try to get you a microphone . What would be your reason ? ( Audience : It 'd be an unfair advantage . ) MS : It would be an unfair advantage if he gets to ride in a golf cart . All right , those of you , I imagine most of you who would not give him the golf cart worry about an unfair advantage . What about those of you who say he should be given a golf cart ? How would you answer the objection ? Yes , all right . Audience : The cart 's not part of the game . MS : What 's your name ? ( Audience : Charlie . ) MS : Charlie says -- We 'll get Charlie a microphone in case someone wants to reply . Tell us , Charlie , why would you say he should be able to use a golf cart ? Charlie : The cart 's not part of the game . MS : But what about walking from hole to hole ? Charlie : It does n't matter ; it 's not part of the game . MS : Walking the course is not part of the game of golf ? Charlie : Not in my book , it is n't . MS : All right . Stay there , Charlie . ( Laughter ) Who has an answer for Charlie ? All right , who has an answer for Charlie ? What would you say ? Audience : The endurance element is a very important part of the game , walking all those holes . MS : Walking all those holes ? That 's part of the game of golf ? ( Audience : Absolutely . ) MS : What 's your name ? ( Audience : Warren . ) MS : Warren . Charlie , what do you say to Warren ? Charley : I 'll stick to my original thesis . ( Laughter ) MS : Warren , are you a golfer ? Warren : I am not a golfer . Charley : And I am . ( MS : Okay . ) ( Laughter ) ( Applause ) You know , it 's interesting . In the case , in the lower court , they brought in golfing greats to testify on this very issue . Is walking the course essential to the game ? And they brought in Jack Nicklaus and Arnold Palmer . And what do you suppose they all said ? Yes . They agreed with Warren . They said , yes , walking the course is strenuous physical exercise . The fatigue factor is an important part of golf . And so it would change the fundamental nature of the game to give him the golf cart . Now , notice , something interesting -- Well , I should tell you about the Supreme Court first . The Supreme Court decided . What do you suppose they said ? They said yes , that Casey Martin must be provided a golf cart . Seven to two , they ruled . What was interesting about their ruling and about the discussion we 've just had is that the discussion about the right , the justice , of the matter depended on figuring out what is the essential nature of golf . And the Supreme Court justices wrestled with that question . And Justice Stevens , writing for the majority , said he had read all about the history of golf , and the essential point of the game is to get very small ball from one place into a hole in as few strokes as possible , and that walking was not essential , but incidental . Now , there were two dissenters , one of whom was Justice Scalia . He would n't have granted the cart , and he had a very interesting dissent . It 's interesting because he rejected the Aristotelian premise underlying the majority 's opinion . He said it 's not possible to determine the essential nature of a game like golf . Here 's how he put it . " To say that something is essential is ordinarily to say that it is necessary to the achievement of a certain object . But since it is the very nature of a game to have no object except amusement , ( Laughter ) that is , what distinguishes games from productive activity , ( Laughter ) it is quite impossible to say that any of a game 's arbitrary rules is essential . " So there you have Justice Scalia taking on the Aristotelian premise of the majority 's opinion . Justice Scalia 's opinion is questionable for two reasons . First , no real sports fan would talk that way . ( Laughter ) If we had thought that the rules of the sports we care about are merely arbitrary , rather than designed to call forth the virtues and the excellences that we think are worthy of admiring , we would n't care about the outcome of the game . It 's also objectionable on a second ground . On the face of it , it seemed to be -- this debate about the golf cart -- an argument about fairness , what 's an unfair advantage . But if fairness were the only thing at stake , there would have been an easy and obvious solution . What would it be ? ( Audience : Let everyone use the cart . ) Let everyone ride in a golf cart if they want to . Then the fairness objection goes away . But letting everyone ride in a cart would have been , I suspect , more anathema to the golfing greats and to the PGA , even than making an exception for Casey Martin . Why ? Because what was at stake in the dispute over the golf cart was not only the essential nature of golf , but , relatedly , the question , what abilities are worthy of honor and recognition as athletic talents ? Let me put the point as delicately as possible : Golfers are a little sensitive about the athletic status of their game . ( Laughter ) After all , there 's no running or jumping , and the ball stands still . ( Laughter ) So if golfing is the kind of game that can be played while riding around in a golf cart , it would be hard to confer on the golfing greats the status that we confer , the honor and recognition that goes to truly great athletes . That illustrates that with golf , as with flutes , it 's hard to decide the question of what justice requires , without grappling with the question " What is the essential nature of the activity in question , and what qualities , what excellences connected with that activity , are worthy of honor and recognition ? " Let 's take a final example that 's prominent in contemporary political debate : same-sex marriage . There are those who favor state recognition only of traditional marriage between one man and one woman , and there are those who favor state recognition of same-sex marriage . How many here favor the first policy : the state should recognize traditional marriage only ? And how many favor the second , same-sex marriage ? Now , put it this way , what ways of thinking about justice and morality underlie the arguments we have over marriage ? The opponents of same-sex marriage say that the purpose of marriage , fundamentally , is procreation , and that 's what 's worthy of honoring and recognizing and encouraging . And the defenders of same-sex marriage say no , procreation is not the only purpose of marriage . What about a lifelong , mutual , loving commitment ? That 's really what marriage is about . So with flutes , with golf carts , and even with a fiercely contested question like same-sex marriage , Aristotle has a point . Very hard to argue about justice without first arguing about the purpose of social institutions and about what qualities are worthy of honor and recognition . So let 's step back from these cases and see how they shed light on the way we might improve , elevate , the terms of political discourse in the United States , and for that matter , around the world . There is a tendency to think that if we engage too directly with moral questions in politics , that 's a recipe for disagreement , and for that matter , a recipe for intolerance and coercion . So better to shy away from , to ignore , the moral and the religious convictions that people bring to civic life . It seems to me that our discussion reflects the opposite , that a better way to mutual respect is to engage directly with the moral convictions citizens bring to public life , rather than to require that people leave their deepest moral convictions outside politics before they enter . That , it seems to me , is a way to begin to restore the art of democratic argument . Thank you very much . ( Applause ) Thank you . ( Applause ) Thank you . ( Applause ) Thank you very much . Thanks . Thank you . Chris . Thanks , Chris . Chris Anderson : From flutes to golf courses to same-sex marriage . That was a genius link . Now look , you 're a pioneer of open education . Your lecture series was one of the first to do it big . What 's your vision for the next phase of this ? MS : Well , I think that it is possible . In the classroom , we have arguments on some of the most fiercely held moral convictions that students have about big public questions . And I think we can do that in public life more generally . And so my real dream would be to take the public television series that we 've created of the course -- it 's available now , online , free for everyone anywhere in the world -- and to see whether we can partner with institutions , at universities in China , in India , in Africa , around the world , to try to promote civic education and also a richer kind of democratic debate . CA : So you picture , at some point , live , in real time , you could have this kind of conversation , inviting questions , but with people from China and India joining in ? MS : Right . We did a little bit of it here with 1,500 people in Long Beach , and we do it in a classroom at Harvard with about 1,000 students . Would n't it be interesting to take this way of thinking and arguing , engaging seriously with big moral questions , exploring cultural differences and connect through a live video hookup , students in Beijing and Mumbai and in Cambridge , Massachusetts and create a global classroom . That 's what I would love to do . ( Applause ) CA : So , I would imagine that there are a lot of people who would love to join you in that endeavor . Michael Sandel . Thank you so much . ( MS : Thanks so much . ) </content>
</text>
<text id="ted/michael_shermer_on_believing_strange_things">
Hey , I am Michael Shermer , the director of the Skeptics Society , the publisher of Skeptic magazine . We investigate claims of the paranormal , pseudo-science , and fringe groups and cults and claims of all kinds between -- science and pseudo-science and non-science and junk science , voodoo science , pathological science , bad science , non-science and plain old nonsense . And unless you 've been on Mars recently , you know there 's a lot of that out there . Some people call us debunkers , which is kind of a negative term . But let 's face it -- there 's a lot of bunk , and we are like the bunko squads of the police departments out there , flushing out . Well , we 're sort of like the Ralph Naders of bad ideas -- ( Laughter ) -- trying to replace bad ideas with good ideas . I 'll show you an example of a bad idea . I brought this with me . This was given to us by NBC Dateline to test . It 's the -- it 's produced by the Quadro Corporation of West Virginia . It 's called the Quadro 2000 Dowser Rod . ( Laughter ) This was being sold to high school administrators for 900 dollars a piece . It 's a piece of plastic with a Radio Shack antenna attached to it . You could dowse for all sorts of things , but this particular one was built to dowse for marijuana in students ' lockers . ( Laughter ) So the way it works is , you go down the hallway and you see if it tilts toward a particular locker , and then you open the locker . So it looks something like this . I 'll show you . ( Laughter ) No , it -- well , it has kind of a right-leaning bias . So , I 'll show -- well , this is science , so we 'll do a controlled experiment . It 'll go this way for sure . ( Laughter ) Sir , you want to empty your pockets . Please , sir ? ( Laughter ) So the question was , can it actually find marijuana in students ' lockers ? And the answer is , If you open enough of them -- yes . ( Laughter ) ( Applause ) But in science , we have to keep track of the misses , not just the hits . And that 's probably the key lesson to my short talk here , is that this is how psychics work , astrologers , and tarot card readers and so on . People remember the hits ; they forget the misses . In science we have to keep the whole database , and look to see if the number of hits is somehow stands out from the total number that you would expect by chance . In this case , we tested it . We had two opaque boxes , one with government-approved THC marijuana , and one with nothing . And it got it 50 percent of the time -- -- which is exactly what you 'd expect with a coin flip model . So that 's just a fun little example here of the sorts of things we do . Skeptic is the quarterly publication . Each one has a particular theme , like this one is on the future of intelligence . Are people getting smarter or dumber ? I have an opinion of this myself because the business I 'm in . But , in fact , people , it turns out , are getting smarter . Three IQ points per 10 years , going up . Sort of an interesting thing . With science , do n't think of skepticism as a thing or even science as a thing . Are science and religion compatible ? It 's like , are science and plumbing compatible ? These -- they 're just two different things . Science is not a thing . It 's a verb . It 's a way of thinking about things . It 's a way of looking for natural explanations for all phenomena . I mean , what 's more likely -- that extraterrestrial intelligences or multi-dimensional beings travel across the vast distances of interstellar space to leave a crop circle in Farmer Bob 's field in Puckerbrush , Kansas to promote skeptic . com , our webpage ? Or is it more likely that a reader of Skeptic did this with Photoshop ? And in all cases we have to ask -- ( Laughter ) -- what 's the more likely explanation ? And before we say something is out of this world , we should first make sure that it 's not in this world . What 's more likely -- that Arnold had a little extraterrestrial help in his run for the governorship ? Or that the World Weekly News makes stuff up ? ( Laughter ) And part of that -- the same theme is expressed nicely here in this Sidney Harris cartoon . For those of you in the back , it says here " Then a miracle occurs . I think you need to be more explicit here in step two . " This single slide completely dismantles the intelligent design arguments . There 's nothing more to it than that . ( Applause ) You can say a miracle occurs . It 's just that it does n't explain anything . It does n't offer anything . There 's nothing to test . It 's the end of the conversation for intelligent design creationists . Whereas -- and it 's true , scientists sometimes throw terms out as linguistic place fillers -- dark energy or dark matter or something like that . Until we figure out what it is , we 'll just call it this . It 's the beginning of the causal chain for science . For intelligent design creationists , it 's the end of the chain . So again , we can ask this -- what 's more likely -- are UFOs alien spaceships or perceptual cognitive mistakes , or even fakes ? This is a UFO shot from my house in Altadena , California , looking down over Pasadena . And if it looks a lot like a Buick hubcap , it 's because it is . You do n't even need Photoshop , you do n't need high-tech equipment , you do n't need computers . This was shot with a throw-away Kodak Instamatic camera . You just have somebody off on the side with a hubcap ready to go . Camera 's ready -- that 's it . ( Laughter ) So , although it 's possible that most of these things are fake or illusions or so on and that some of them are real , it 's more likely that all of them are fake , like the crop circles . On a more serious note , in all of science we 're looking for a balance between data and theory . In the case of Galileo , he had two problems when he turned his telescope to Saturn . First of all , there was no theory of planetary rings . And second of all , his data was grainy and fuzzy , and he could n't quite make out what it was he was looking at . So he wrote that he had seen -- " I have observed that the furthest planet has three bodies . " And this is what he ended up concluding that he saw . So without a theory of planetary rings and with only grainy data , you ca n't have a good theory . And it was n't solved until 1655. This is Christiaan Huygens 's book in which he cataloged all the mistakes that people made in trying to figure out what was going on with Saturn . It was n't till -- Huygens had two things . He had a good theory of planetary rings and how the solar system operated . And then , he had better telescopic , more fine-grain data in which he could figure out that as the Earth is going around faster -- according to Kepler 's Laws -- than Saturn , then we catch up with it . And we see the angles of the rings at different angles , there . And that , in fact , turns out to be true . The problems with having a theory is that your theory may be loaded with cognitive biases . So one of the problems of explaining why people believe weird things is that we have things on a simple level . And then I 'll go to more serious ones . Like , we have a tendency to see faces . This is the face on Mars which was -- in 1976 , where there was a whole movement to get NASA to photograph that area because people thought this was monumental architecture made by Martians . Well , it turns out -- here 's the close-up of it from 2001. If you squint , you can still see the face . And when you 're squinting , what you 're doing is you 're turning that from fine-grain to coarse-grain . And so , you 're reducing the quality of your data . And if I did n't tell you what to look for , you 'd still see the face , because we 're programmed by evolution to see faces . Faces are important for us socially . And , of course , happy faces . Faces of all kinds are easy to see . ( Laughter ) You can see the happy face on Mars , there . If astronomers were frogs perhaps they 'd see Kermit the Frog . Do you see him there ? Little froggy legs . Or if geologists were elephants ? Religious iconography . ( Laughter ) Discovered by a Tennessee baker in 1996. He charged five bucks a head to come see the nun bun till he got a cease-and-desist from Mother Teresa 's lawyer . Here 's Our Lady of Guadalupe and Our Lady of Watsonville , just down the street . Or is it up the street from here ? Tree bark is particularly good because it 's nice and grainy , branchy , black-and-white splotchy and you can get the pattern-seeking -- humans are pattern-seeking animals . Here 's the Virgin Mary on the side of a glass window in Sao Paulo . Now , here 's the Virgin Mary made her appearance on a cheese sandwich -- which I got to actually hold in a Las Vegas casino , of course , this being America . ( Laughter ) This casino paid 28,500 dollars on eBay for the cheese sandwich . ( Laughter ) But who does it really look like , the Virgin Mary ? ( Laughter ) It has that sort of puckered lips , 1940s-era look . Virgin Mary in Clearwater , Florida . I actually went to see this one . There was a lot of people there -- the faithful come to be in their -- wheelchairs and crutches , and so on . And we went down , investigated . Just to give you a size -- that 's Dawkins , me and The Amazing Randi , next to this two , two and a half story size image . All these candles , so many thousands of candles people had lit in tribute to this . So we walked around the backside , just to see what was going on here , where it turns out wherever there 's a sprinkler head and a palm tree , you get the effect . Here 's the Virgin Mary on the backside , which they started to wipe off . I guess you can only have one miracle per building . ( Laughter ) So is it really a miracle of Mary , or is it a miracle of Marge ? ( Laughter ) And then I 'm going to finish up with another example of this with audio -- auditory illusions . There is this film , " White Noise , " with Michael Keaton about the dead talking back to us . By the way , this whole business of talking to the dead , it 's not that big a deal . Anybody can do it , turns out . It 's getting the dead to talk back that 's the really hard part . ( Laughter ) In this case , supposedly , these messages are hidden in electronic phenomena . There 's a ReverseSpeech . com web page on which I downloaded this stuff . Here is the forward -- this is the most famous one of all of these . Here 's the forward version of the very famous song . Boy , coudl n't you just listen to that all day ? ( Laughter ) All right , here it is backwards , and see if you can hear the hidden messages that are supposedly in there . What did you get ? ( Audience : Satan . ) Michael Shermer : Satan ? OK , well , at least we got Satan . Now , I 'll prime your auditory part of your brain to tell you what you 're supposed to hear , and then hear it again . ( Laughter ) ( Applause ) You ca n't miss it when I tell you what 's there . ( Laughter ) All right , I 'm going to just end with a positive , nice , little story about -- the Skeptics is a nonprofit educational organization . We 're always looking for little , good things that people do . And in England , there 's a pop singer . Very -- one of the top popular singers in England today , Katie Melua . And she wrote a beautiful song . It was in the top five in 2005 , called , " Nine Million Bicycles in Beijing . " It 's a love story -- she 's sort of the Norah Jones of the U. K. -- about how she much loves her guy , and compared to nine million bicycles , and so forth . And she has this one passage here . ♫ We are 12 billion light-years from the edge ♫ ♫ That 's a guess ♫ ♫ No one can ever say it 's true ♫ ♫ But I know that I will always be with you ♫ Well , that 's nice . At least she got it close . In America it would be , " We 're 6,000 light years from the edge . " ( Laughter ) But my friend , Simon Singh , the particle physicist , now turned science educator , and he wrote the book " The Big Bang , " and so on . He uses every chance he gets to promote good science . And so , he wrote an op-ed piece in The Guardian about Katie 's song , in which he said , well , we know exactly how old , how far from the edge . You know , it 's 12 -- it 's 13.7 billion light years , and it 's not a guess . We know within precise error bars there how close it is . And so , we can say , although not absolutely true , that it 's pretty close to being true . And , to his credit , Katie called him up after this op-ed piece came out . And said , " I 'm so embarrassed . I was a member of the astronomy club , and I should have known better . " And she re-cut the song . So I 'll end with the new version . ♫ We are 13.7 billion light years ♫ ♫ from the edge of the observable universe ♫ ♫ That 's a good estimate with well-defined error bars ♫ ♫ And with the available information ♫ ♫ I predict that I will always be with you ♫ ( Applause ) How cool is that ? ( Applause ) </content>
</text>
<text id="ted/misha_glenny_investigates_global_crime_networks">
These are grim economic times fellow TEDsters , grim economic times indeed . And so , I would like to cheer you up with one of the great , albeit largely unknown , commercial success stories of the past 20 years . Comparable , in its own very peculiar way , to the achievements of Microsoft or Google . And it 's an industry which has bucked the current recession with equanimity . I refer to organized crime . Now organized crime has been around for a very long time , I hear you say . And these would be wise words , indeed . But in the last two decades it has experienced an unprecedented expansion . Now accounting for roughly 15 percent of the world 's GDP . I like to call it the Global Shadow Economy , or McMafia , for short . So what triggered this extraordinary growth in cross-border crime ? Well , of course , there is globalization , technology , communications , all that stuff , which we 'll talk about a little bit later . But first , I would like to take you back to this event . The collapse of communism . All across Eastern Europe , a most momentous episode in our post-war history . Now it 's time for full disclosure . This event meant a great deal to me personally . I had started smuggling books across the iron curtain to Democratic opposition groups in Eastern Europe , like Solidarity in Poland , when I was in my teens . I then started writing about Eastern Europe , and eventually I became the BBC 's chief correspondent for the region . Which is what I was doing in 1989. And so when 425 million people finally won the right to chose their own governments I was ecstatic . But I was also a touch worried about some of the nastier things lurking behind the wall . It was n't long , for example , before ethnic nationalism reared its bloody head in Yugoslavia . And amongst the chaos , amidst the euphoria , it took me a little while to understand that some of the people who had wielded power before 1989 , in Eastern Europe , continued to do so after the revolutions there . Obviously there were characters like this . But there were also more unexpected people who played a critical role in what was going on in Eastern Europe . Like this character . Remember these guys ? They used to win the gold medals in weightlifting and wrestling , every four years in the Olympics . And they were the great celebrities of communism . With a fabulous lifestyle to go with it . The used to get great apartments in the center of town . Casual sex on tap . And they could travel to the West very freely , which was a great luxury at the time . It may come as a surprise , but they played a critical role in the emergence of the market economy in Eastern Europe . Or as I like to call them , they are the midwives of capitalism . Here are some of those same wieghtlifters after their 1989 makeover . Now in Bulgaria , this photograph was taken in Bulgaria , when communism collapsed all over Eastern Europe it was n't just communism , it was the state that collapsed as well . That means your police force was n't working . The court system was n't functioning properly . So what was a business man in the brave new world of East European capitalism going to do to make sure that his contracts would be honored ? Well , he would turn to people who were called , rather prosaically by sociologists , privatized law enforcement agencies . We prefer to know them as the mafia . And in Bulgaria , the mafia was soon joined with 14 thousand people who were sacked from their jobs in the security services between 1989 and 1991. Now , when your state is collapsing , your economy is heading south at a rate of knots , the last people you want coming on to the labor market are 14 thousand men and women whose chief skills are surveillance , are smuggling , building underground networks , and killing people . But that 's what happened all over Eastern Europe . Now , when I was working in the 1990s I spent most of the time covering the appalling conflict in Yugoslavia . And I could n't help notice that the people who were perpetrating the appalling atrocities , the paramilitary organizations , were actually the same people running the organized criminal syndicates . And I came to think that behind the violence lay a sinister criminal enterprise . And so I resolved to travel around the world examining this global criminal underworld by talking to policemen , by talking to victims , by talking to consumers of illicit goods and services . But above all else , by talking to the gangsters themselves . And the Balkans was a fabulous place to start . Why ? Well of course there was the issue of law and order collapsing . But also , as they say in the retail trade , it 's location location location . And what I noticed at the beginning of my research that the Balkans had turned into a vast transit zone for illicit goods and services coming from all over the world . Heroin , cocaine , women being trafficked into prostitution and precious minerals . And where were they heading ? The European Union , which by now was beginning to reap the benefits of globalization . Transforming it into the most affluent consumer market in history . Eventually comprising some 500 million people . And a significant minority of those 500 million people like to spend some of their leisure time and spare cash sleeping with prostitutes , sticking 50 Euro notes up their nose and employing illegal migrant laborers . Now , organized crime in a globalizing world operates in the same way as any other business . It has zones of production , like Afghanistan and Columbia . It has zones of distribution , like Mexico and the Balkans . And then , of course , it has zones of consumption , like the European Union , Japan and of course , the United States . The zones of production and distribution tend to lie in the developing world . And they are often threatened by appalling violence and bloodshed . Take Mexico for example . Six thousand people killed there in the last 18 months as a direct consequence of the cocaine trade . But what about the Democratic Republic of Congo ? Since 1998 , five million people have died there . It 's not a conflict you read about much in the newspapers . But it 's the biggest conflict on this planet since the Second World War . And why is it ? Because mafias from all around the world cooperate with local paramilitaries in order to seize the supplies of the rich mineral resources of the region . In the year 2000 , 80 percent of the world 's coltan was sourced to the killing fields of the eastern Democratic Republic of Congo . Now coltan you will find in almost every mobile phone , in almost every laptop and games console . The Cogolese war lords were selling this stuff to the mafia in exchange for weapons . And the mafia would then sell it on to Western markets . And it is this Western desire to consume that is the primary driver of international organized crime . Now , let me show you some of my friends in action , caught conveniently on film by the Italian police and smuggling duty-not-paid cigarettes . Now , cigarettes out the factory gate are very cheap . The European Union then imposes the highest taxes on them in the world . So if you can smuggle them into the E. U. there are very handsome profits to be made . And I want to show you this to demonstrate the type of resources available to these groups . This boat is worth one million Euros when it 's new . And it 's the fastest thing on European waters . From 1994 , for seven years , 20 of these boats made the trip across the Adriatic , from Montenegro to Italy , every single night . And as a consequence of this trade Britain alone lost eight billion dollars in revenue . And instead that money went to underwrite the wars in Yugoslavia and line the pockets of unscrupulous individuals . Now Italian police , when this trade started , had just two boats which could go at the same speed . And this is very important , because the only way you can catch these guys is if they run out of gas . Sometimes the gangsters would bring with them women being trafficked into prostitution . And if the police intervened , they would hurl the women into the sea so that the police had to go and save them from drowning , rather than chasing the bad guys . So I have shown you this to demonstrate how many boats , how many vessels it takes to catch one of these guys . And the answer is six vessels . And remember , 20 of these speed boats were coming across the Adriatic every single night . So what were these guys doing with all the money they were making ? Well , this is where we come to globalization because that was not just the deregulation of global trade . It was the liberalization of international financial markets . And boy did that make it easy for the money launderers . The last two decades have been the champagne era for dirty lucre . In the 1990s we saw financial centers around the world competing for their business . And there was simply no effective mechanism to prevent money laundering . And a lot of licit banks were also happy to accept deposits from very dubious sources without questions being asked . But at the heart of this , is the offshore banking network . Now these things are an essential part of the money laundering parade . And if you want to do something about illegal tax evasion and transnational organized crime , money laundering , you have to get rid of them . On a positive note , we at last have someone in the White House who has consistently spoken out against these corrosive entities . And if anyone is concerned about what I believe is the necessity for new legislation , regulation , effective regulation , I say , let 's take a look at Bernie Madoff , who is now going to be spending the rest of his life in jail . Bernie Madoff stole 65 billion dollars . That puts him up there on the Olympus of gangsters with the Colombian cartels , and the major Russian crime syndicates . But he did this for decades in the very heart of Wall Street . And no regulator picked up on it . So how many other Madoffs are there on Wall street , or in the city of London , fleecing ordinary folk , and money laundering ? Well I can tell you , it 's quite a few of them . Let me go on to the 101 of international organized crime now . And that is narcotics . Our second marijuana farm photograph for the morning . This one , however , is in central British Columbia where I photographed it . It 's one of the tens of thousands of mom-and-pop grow-ops in B. C. which ensure that over five percent of the province 's GDP is accounted for by this trade . Now I was taken by inspector Brian Cantera , of the Royal Canadian Mounted Police , to a cavernous warehouse east of Vancouver to see some of the goods which are regularly confiscated by the RCMP from the smugglers who are sending it , of course , down south to the United States where there is an insatiable market for B. C. Bud , as it 's called , in part because it 's marketed as organic , which of course goes down very well in California . ( Laughter ) ( Applause ) Now even by the police 's asmission this makes not a dent in the profits , really , of the major exporters . Since the beginning of globalization the global narcotics market has expanded enormously . There has , however , been no concomitant increase in the resources available to police forces . This , however , may all be about to change . Because something very strange is going on . The United Nations recognized earlier this , it was last month actually , that Canada has become a key area of distribution and production of ecstasy and other synthetic drugs . Interestingly , the market share of heroin and cocaine is going down because the pills are getting ever better at reproducing their highs . Now that is a game changer . Because it shifts production away from the developing world and into the Western world . When that happens it is a trend which is set to overwhelm our policing capacity in the West . The drugs policy which we 've had in place for 40 years is long overdue for a very serious rethink , in my opinion . Now , the recession . Well , organized crime has already adapted very well to the recession . Not surprising , the most opportunistic industry in the whole world . And it has no rules to its regulatory system . Except , of course , it has two business risks , arrest by law enforcement , which is , frankly , the least of their worries , and competition from other groups , i. e. a bullet in the back of the head . What they 've done is they 've shifted their operations . People do n't smoke as much dope , or visit prostitutes quite so frequently during a recession . And so instead they have invaded financial and corporate crime in a big way , but above all , two sectors , and that is counterfeit goods and cybercrime . And its been terribly successful . I would like to introduce you to Mr. Pringle . Or perhaps I should say , more accurately , Señor Pringle . I was introduced to this bit of kit by a Brazilian cybercriminal . We sat in a car on the Avenue Paulista in São Paulo , together . Hooked it up to my laptop , and within about five minutes he had penetrated the computer security system of a major Brazilian bank . It 's really not that difficult . And it 's actually much easier because the fascinating thing about cybercrime is that it 's not so much the technology . The key to cybercrime is what we call social engineering . Or to use the technical term for it , there 's one born every minute . You would not believe how easy it is to persuade people to do things with their computers which are objectively not in their interest . And it was very soon when the cybercriminals learned that the quickest way to do this , of course , the quickest way to a person 's wallet is through the promise sex and love . I expect some of you remember the I-Love-You virus , one of the very great worldwide viruses that came . I was very fortunate when the ILOVEYOU virus came out . Because the first person I received it from was an ex-girlfriend of mine . Now she harbored all sorts of sentiments and emotions towards me at the time , but love was not amongst them . ( Laughter ) And so as soon as I saw this drop into my inbox I dispatched it hastily to the recycle bin , and spared myself a very nasty infection . So , cybercrime , do watch out for it . One thing that we do know that the internet is doing is , the internet is assisting these guys . These are mosquitos who carry the malarial parasite which infests our blood when the mosy has had a free meal at our expense . Now , Artesunate is a very effective drug at destroying the parasite in the early days of infection . But over the past year or so researchers in Cambodia have discovered that what 's happening is the malarial parasite is developing a resistance . And they fear that the reason it 's developing a resistance is because Cambodians ca n't afford the drugs on the commercial market , and so they buy it from the Internet . And these pills contain only low doses of the active ingredient . Which is why things are , the parasite is beginning to develop a resistance . The reason I say this is because we have to know that organized crime impacts all sorts of areas of our lives . You do n't have to sleep with prostitutes or take drugs in order to have a relationship with organized crime . They affect our bank accounts . They affect our communications , our pension funds . They even affect the food that we eat and our governments . This is no longer an issue of Sicilians from Palermo and New York . There is no romance involved with gangsters in the 21st Century . This is a mighty industry and it creates instability and violence wherever it goes . It is a major economic force and we need to take it very , very seriously . It 's been a privilege talking to you . Thank you very much . ( Applause ) </content>
</text>
<text id="ted/oliver_sacks_what_hallucination_reveals_about_our_minds">
We see with the eyes . But we see with the brain as well . And seeing with the brain is often called imagination . And we are familiar with the landscapes of our own imagination , our inscapes . We 've lived with them all our lives . But there are also hallucinations as well . And hallucinations are completely different . They do n't seem to be of our creation . They do n't seem to be under our control . They seem to come from the outside , and [ seem ] to mimic perception . So I am going to be talking about hallucinations . And a particular sort of visual hallucination which I see among my patients . A few months ago I got a phone call from a nursing home where I work . They told me that one of the residents , an old lady in her 90s , was seeing things . And they wondered if she 'd gone bonkers . Or , because she was an old lady , whether she 'd had a stroke , or whether she had Alzheimer 's . And so they asked me if I would come and see Rosalie , the old lady . I went in to see her . It was evident straight away that she was perfectly sane and lucid and of good intelligence . But she 'd been very startled , and very bewildered because she 'd been seeing things . And she told me -- the nurses had n't mentioned this -- that she was blind , that she had been completely blind , from macular degeneration , for five years . But now , for the last few days , she 'd been seeing things . So I said , " What sort of things ? " And she said , " People in Eastern dress , in drapes , walking up and down stairs . A man who turns towards me and smiles . But he has huge teeth on one side of his mouth . Animals too . I see a white building . It 's snowing , a soft snow . I see this horse , with a harness , dragging the snow away . Then , one night , the scene changes . I see cats and dogs walking towards me . They come to a certain point and then stop . Then it changes again . I see a lot of children . They are walking up and down stairs . They wear bright colors , rose and blue , like Eastern dress . " Sometimes , she said , before the people come on she may hallucinate pink and blue squares on the floor , which seem to go up to the ceiling . I said , " Is this like a dream ? " And she said , " No , it 's not like a dream . It 's like a movie . " She said , " It 's got color . It 's got motion . But it 's completely silent , like a silent movie . " And she said that it 's a rather boring movie . She said , " All these people with Eastern dress , walking up and down , very repetitive , very limited . " ( Laughter ) And she has a sense of humor . She knew it was a hallucination . But she was frightened . She 'd lived 95 years and she 'd never had a hallucination before . She said that the hallucinations were unrelated to anything she was thinking or feeling or doing . That they seemed to come on by themselves , or disappear [ by themselves ] . She had no control over them . She said she did n't recognize any of the people or places in the hallucinations . And none of the people or the animals , well , they all seemed oblivious of her . And she did n't know what was going on . She wondered if she was going mad , or losing her mind . Well , I examined her carefully . She was a bright old lady . Perfectly sane . She had no medical problems . She was n't on any medications which could produce hallucinations . But she was blind . And I then said to her , " I think I know what you have . " I said , " There is a special form of visual hallucination which may go with deteriorating vision , or blindness . " " This was originally described , " I said , " back in the 18th century , by a man called Charles Bonnet . And you have Charles Bonnet syndrome . There is nothing wrong with your brain . There is nothing wrong with your mind . You have Charles Bonnet syndrome . " And she was very relieved at this , that there was nothing seriously the matter , and also rather curious . She said , " Who is this Charles Bonnet ? " She said , " Did he have them himself ? " And she said , " Tell all the nurses that I have Charles Bonnet syndrome . " ( Laughter ) " I 'm not crazy . I 'm not demented . I have Charles Bonnet syndrome . " Well , so I did tell the nurses . Now this , for me , is a common situation . I work in old-age homes , largely . I see a lot of elderly people who are hearing impaired or visually impaired . About 10 percent of the hearing impaired people get musical hallucinations . And about 10 percent of the visually impaired people get visual hallucinations . You do n't have to be completely blind , only sufficiently impaired . Now with the original description in the 18th century , Charles Bonnet did not have them . His grandfather had these hallucinations . His grandfather was a magistrate , an elderly man . He 'd had cataract surgery . His vision was pretty poor . And in 1759 he described to his grandson various things he was seeing . The first thing he said was he saw a handkerchief in midair . It was large blue handkerchief with four orange circles . And he knew it was a hallucination . You do n't have handkerchiefs in midair . And then he saw a big wheel in midair . But sometimes he was n't sure whether he was hallucinating or not . Because the hallucinations would fit in the context of the visions . So on one occasion , when his granddaughters were visiting them , he said , " And who are these handsome young men with you ? " And they said , " Alas , Grandpapa , there are no handsome young men . " And then the handsome young men disappeared . It 's typical of these hallucinations that they may come in a flash and disappear in a flash . They do n't usually fade in and out . They are rather sudden . And they change suddenly . Charles Lullin , the grandfather , saw hundreds of different figures , different landscapes of all sorts . On one occasion he saw a man in a bathrobe smoking a pipe , and realized it was himself . That was the only figure he recognized . On one occasion when he was walking in the streets of Paris , he saw -- this was real -- a scaffolding . But when he got back home he saw a miniature of the scaffolding six inches high , on his study table . This repetition of perception is sometimes called palinopsia . With him , and with Rosalie , what seems to be going on -- and Rosalie said , " What 's going on ? " -- and I said that as you lose vision , as the visual parts of the brain are no longer getting any input , they become hyperactive and excitable . And they start to fire spontaneously . And you start to see things . The things you see can be very complicated indeed . With another patient of mine , who , [ like Charles Lullin , still ] had some vision , the vision she had could be disturbing . On one occasion she said she saw a man in a striped shirt in a restaurant . And he turned around . And then he divided into six identical figures in striped shirts , who started walking towards her . And then the six figures came together again , like a concertina . Once , when she was driving , or rather , her husband was driving , the road divided into four . And she felt herself going simultaneously up four roads . She had very mobile hallucinations as well . A lot of them had to do with a car . Sometimes she would see a teenage boy sitting on the hood of the car . He was very tenacious and he moved rather gracefully when the car turned . And then when they came to a stop , the boy would do a sudden vertical take off , 100 foot in the air , and then disappear . Another patient of mine had a different sort of hallucination . This was a woman who did n't have trouble with her eyes , but the visual parts of her brain . A little tumor in the occipital cortex . And , above all , she would see cartoons . These cartoons would be transparent and would cover half the visual field , like a screen . And especially she saw cartoons of Kermit the Frog . ( Laughter ) Now , I do n't watch Sesame Street . But she made a point of saying , " Why Kermit ? " She said , " Kermit the Frog means nothing to me . You know , I was wondering about Freudian determinants . Why Kermit ? Kermit the Frog means nothing to me . " She did n't mind the cartoons too much . But what did disturb her was she got very persistent images or hallucinations of faces and as with Rosalie , the faces were often deformed , with very large teeth , or very large eyes . And these frightened her . Well , what is going on with these people ? As a physician , I have to try and define what 's going on , and to reassure people . Especially to reassure them that they 're not going insane . Something like 10 percent , as I said , of visually impaired people get these . But no more than one percent of the people acknowledge them . Because they are afraid they will be seen as insane , or something . And if they do mention them to their own doctors they may be misdiagnosed . In particular , the notion is that if you see things or hear things , you 're going mad . But the psychotic hallucinations are quite different . Psychotic hallucinations , whether they are visual or vocal , they address you . They accuse you . They seduce you . They humiliate you . They jeer at you . You interact with them . There is none of this quality of being addressed with these Charles Bonnet hallucinations . There is a film . You 're seeing a film which has nothing to do with you . Or that 's how people think about it . There is also a rare thing called temporal lobe epilepsy . And sometimes , if one has this , one may feel oneself transported back to a time and place in the past . You 're at a particular road junction . You smell chestnuts roasting . You hear the traffic . All the senses are involved . And you 're waiting for your girl . And it 's that Tuesday evening back in 1982. And the temporal lobe hallucinations are all multisensory hallucinations , full of feeling , full of familiarity , located in space and time , coherent , dramatic . The Charles Bonnet ones are quite different . So in the Charles Bonnet hallucinations , you have all sorts of levels , from the geometrical hallucinations , the pink and blue squares the woman had , up to quite elaborate hallucinations with figures and especially faces . Faces , and sometimes deformed faces , are the single commonest thing in these hallucinations . And one of the second commonest is cartoons . So , what is going on ? Fascinatingly , in the last few years , it 's been possible to do functional brain imagery , to do fMRI on people as they are hallucinating . And in fact , to find that different parts of the visual brain are activated as they are hallucinating . When people have these simple geometrical hallucinations , the primary visual cortex is activated . This is the part of the brain which perceives edges and patterns . You do n't form images with your primary visual cortex . When images are formed , a higher part of the visual cortex is involved in the temporal lobe . And in particular , one area of the temporal lobe is called the fusiform gyrus . And it 's known that if people have damage in the fusiform gyrus , they maybe lose the ability to recognize faces . But if there is an abnormal activity in the fusiform gyrus , they may hallucinate faces . And this is exactly what you find in some of these people . There is an area in the anterior part of this gyrus where teeth and eyes are represented . And that part of the gyrus is activated when people get the deformed hallucinations . There is another part of the brain which is especially activated when one sees cartoons . It 's activated when one recognizes cartoons , when one draws cartoons , and when one hallucinates them . It 's very interesting that that should be specific . There are other parts of the brain which are specifically involved with the recognition and hallucination of buildings and landscapes . Around 1970 it was found that there were not only particular parts of the brain [ involved ] , but particular cells . " Face cells " were discovered around 1970. And now we know that there are hundreds of other sorts of cells , which can be very very specific . So you may not only have " car " cells , you may have " Aston Martin " cells . ( Laughter ) I saw an Aston Martin this morning . I had to bring it in . And now it 's in there somewhere . ( Laughter ) Now , at this level , in what 's called the inferotemporal cortex , there are only visual images , or figments or fragments . It 's only at higher levels that the other senses join in and there are connections with memory and emotion . And in the Charles Bonnet syndrome you do n't go to those higher levels . You 're in these levels of inferior visual cortex where you have thousands and tens of thousands and millions of images , or figments , or fragmentary figments , all neurally encoded , in particular cells or small clusters of cells . Normally these are all part of the integrated stream of perception , or imagination . And one is not conscious of them . It is only if one is visually impaired , or blind , that the process is interrupted . And instead of getting normal perception , you 're getting an anarchic , convulsive stimulation , or release , of all of these visual cells , in the inferotemporal cortex . So , suddenly you see a face . Suddenly you see a car . Suddenly this , and suddenly that . The mind does its best to organize , and to give some sort of coherence to this . But not terribly successfully . When these were first described it was thought that they could be interpreted like dreams . But in fact people say , " I do n't recognize the people . I ca n't form any associations . " " Kermit means nothing to me . " You do n't get anywhere thinking of them as dreams . Well , I 've more or less said what I wanted . I think I just want to recapitulate and say this is common . Think of the number of blind people . There must be hundreds of thousands of blind people who have these hallucinations , but are too scared to mention them . So this sort of thing needs to be brought into notice , for patients , for doctors , for the public . Finally , I think they are infinitely interesting , and valuable , for giving one some insight as to how the brain works . Charles Bonnet said , 250 years ago -- he wondered how , thinking these hallucinations , how , as he put it , the theater of the mind could be generated by the machinery of the brain . Now , 250 years later , I think we 're beginning to glimpse how this is done . Thanks very much . ( Applause ) Chris Anderson : That was superb . Thank you so much . You speak about these things with so much insight and empathy for your patients . Have you yourself experienced any of the syndromes you write about ? Oliver Sacks : I was afraid you 'd ask that . ( Laughter ) Well , yeah , a lot of them . And actually I 'm a little visually impaired myself . I 'm blind in one eye , and not terribly good in the other . And I see the geometrical hallucinations . But they stop there . C. A. : And they do n't disturb you ? Because you understand what 's doing it . It does n't make you worried ? O. S. : Well they do n't disturb me any more than my tinnitus . Which I ignore . They occasionally interest me . And I have many pictures of them in my notebooks . I 've gone and had an FMRI myself to see how my visual cortex is taking over . And when I see all these hexagons and complex things , which I also have , in visual migraine , I wonder whether everyone sees things like this , and whether things like cave art , or ornamental art may have been derived from them a bit . C. A. : That was an utterly utterly fascinating talk . Thank you so much for sharing . O. S. : Thank you . Thank you . ( Applause ) </content>
</text>
<text id="ted/rebecca_saxe_how_brains_make_moral_judgments">
Today I 'm going to talk to you about the problem of other minds . And the problem I 'm going to talk about is not the familiar one from philosophy , which is , " How can we know whether other people have minds ? " That is , maybe you have a mind , and everyone else is just a really convincing robot . So that 's a problem in philosophy . But for today 's purposes I 'm going to assume that many people in this audience have a mind , and that I do n't have to worry about this . There is a second problem that is maybe even more familiar to us as parents and teachers and spouses , and novelists . Which is , " Why is it so hard to know what somebody else wants or believes ? " Or perhaps , more relevantly , " Why is it so hard to change what somebody else wants or believes ? " I think novelists put this best . Like Philip Roth , who said , " And yet , what are we to do about this terribly significant business of other people ? So ill equipped are we all , to envision one another 's interior workings and invisible aims . " So as a teacher , and as a spouse , this is , of course , a problem I confront every day . But as a scientist , I 'm interested in a different problem of other minds , and that is the one I 'm going to introduce to you today . And that problem is , " How is it so easy to know other minds ? " So to start with an illustration , you need almost no information , one snapshot of a stranger , to guess what this woman is thinking , or what this man is . And put another way , the crux of the problem is the machine that we use for thinking about other minds , our brain , is made up of pieces , brain cells , that we share with all other animals , with monkeys , and mice , and even sea slugs . And yet , you put them together in a particular network , and what you get is the capacity to write Romeo and Juliet . Or to say , as Alan Greenspan did , " I know you think you understand what you thought I said , but I 'm not sure you realize that what you heard is not what I meant . " ( Laughter ) So the job of my field of cognitive neuroscience is to stand with these ideas , one in each hand . And to try to understand how you can put together simple units , simple messages over space and time , in a network , and get this amazing human capacity to think about minds . So I 'm going to tell you three things about this today . Obviously the whole project here is huge . And I 'm going to tell you just our first few steps about the discovery of a special brain region for thinking about other people 's thoughts . Some observations on the slow development of this system as we learn how to do this difficult job . And then finally , to show that some of the differences between people , in how we judge others , can be explained by differences in this brain system . So first , the first thing I want to tell you is that there is a brain region in the human brain , in your brains , whose job it is to think about other people 's thoughts . This is a picture of it . It 's called the Right Temporo-Parietal Junction . It 's above and behind your right ear . And this is the brain region you used when you saw the pictures I showed you , or when you read Romeo and Juliet , or when you tried to understand Alan Greenspan . And you do n't use it for solving any other kinds of logical problems . So this brain region is called the RTPJ . And this picture shows the average activation in a group of what we call typical human adults . They 're MIT undergraduates . ( Laughter ) The second thing I want to say about this brain system is that although we human adults are really good at understanding other minds , we were n't always that way . It takes children a long time to break into the system . I 'm going to show you a little bit of that long , extended process . The first thing I 'm going to show you is a change between age three and five , as kids learn to understand that somebody else can have beliefs that are different from their own . So I 'm going to show you a five-year-old who is getting a standard kind of puzzle that we call the false belief task . Video : This is the first pirate . His name is Ivan . And you know what pirates really like ? Pirates really like cheese sandwiches . Child : Cheese ? I love cheese ! R. S. : Yeah . So Ivan has this cheese sandwich . and he says " Yum yum yum yum yum ! I really love cheese sandwiches . " And Ivan puts his sandwich over here , on top of the pirate chest . And Ivan says , " You know what ? I need a drink with my lunch . " And so Ivan goes to get a drink . And while Ivan is away the wind comes , and it blows the sandwich down onto the grass . And now , here comes the other pirate . This pirate is called Joshua . And Joshua also really loves cheese sandwiches . So Joshua has a cheese sandwich and he says , " Yum yum yum yum yum ! I love cheese sandwiches . " And he puts his cheese sandwich over here on top of the pirate chest . Child : So , that one is his . R. S. : That one is Joshua 's . That 's right . Child : And then his went on the ground . R. S. : That 's exactly right . Child : So he wo n't know which one is his . R. S. : Oh . So now Joshua goes off to get a drink . Ivan comes back and he says , " I want my cheese sandwich . " So which one do you think Ivan is going to take ? Child : I think he is going to take that one . R. S. : Yeah , you think he 's going to take that one ? Alright . Let 's see . Oh yeah , you were right . He took that one . So that 's a five-year-old who clearly understands that other people can have false beliefs and what the consequences are for their actions . Now I 'm going to show you a three-year-old who got the same puzzle . Video : R. S. : And Ivan says , " I want my cheese sandwich . " Which sandwich is he going to take ? Do you think he 's going to take that one ? Let 's see what happens . Let 's see what he does . Here comes Ivan . And he says , " I want my cheese sandwich . " And he takes this one . Uh-oh . Why did he take that one ? Child : His was on the grass . R. S. So the three-year-old does two things differently . First he predicts Ivan will take the sandwich that 's really his . And second , when he sees Ivan taking the sandwich where he left his , where we would say he 's taking that one because he thinks it 's his , the three-year-old comes up with another explanation . He 's not taking his own sandwich because he does n't want it , because now it 's dirty , on the ground . So that 's why he 's taking the other sandwich . Now of course , development does n't end at five . And we can see the continuation of this process of learning to think about other people 's thoughts by upping the ante and asking children now , not for an action prediction , but for a moral judgement . So first I 'm going to show you the three-year-old again . Video : R. S. : So is Ivan being mean and naughty for taking Joshua 's sandwich ? Child : Yeah . R. S. : Should Ivan get in trouble for taking Joshua 's sandwich ? Child : Yeah . R. S. : So it 's maybe not surprising he thinks it was mean of Ivan to take Joshua 's sandwich . Since he thinks Ivan only took Joshua 's sandwich to avoid having to eat his own dirty sandwich . But now I 'm going to show you the five-year-old . Remember the five-year-old completely understood why Ivan took Joshua 's sandwich . Video : R. S. : Was Ivan being mean and naughty for taking Joshua 's sandwich ? Child : Um , yeah . R. S. : And so , it is not until age seven that we get what looks more like an adult response . Video : R. S. : Should Ivan get in trouble for taking Joshua 's sandwich ? Child : No , because the wind should get in trouble . R. S. He says the wind should get in trouble for switching the sandwiches . ( Laughter ) And now what we 've started to do in my lab is to put children into the brain scanner and ask what 's going on in their brain as they develop this ability to think about other people 's thoughts . So the first thing is that in children we see this same brain region , the RTPJ , being used while children are thinking about other people . But it 's not quite like the adult brain . So where as in the adults , as I told you , this brain region is almost completely specialized . It does almost nothing else , except for thinking about other people 's thoughts . In children it 's much less so , when they are age five to eight , the age range of the children I just showed you . And actually if we even look at eight to 11-year-olds , getting into early adolescence , they still do n't have quite an adult-like brain region . And so , what we can see is that over the course of childhood and even into adolescence , both the cognitive system , our mind 's ability to think about other minds , and the brain system that supports it , are continuing , slowly , to develop . But of course , as you 're probably aware , even in adulthood , people differ from one another in how good they are at thinking of other minds , how often they do it , and how accurately . And so what we wanted to know was , could differences among adults , in how they think about other people 's thoughts be explained in terms of differences in this brain region . So the first thing that we did is we gave adults a version of the pirate problem that we gave to the kids . And I 'm going to give that to you now . So Grace and her friend are on a tour of a chemical factory and they take a break for coffee . And Grace 's friend asks for some sugar in her coffee . Grace goes to make the coffee and finds by the coffee a pot containing a white powder , which is sugar . But the powder is labeled " Deadly Poison " . So Grace thinks that the powder is a deadly poison . And she puts it in her friend 's coffee . And her friend drinks the coffee , and is fine . How many people think it was morally permissible for Grace to put the powder in the coffee ? Okay . Good . ( Laughter ) So we ask people how much should Grace be blamed in this case , which we call a failed attempt to harm . And we can compare that to another case where everything in the real world is the same . The powder is still sugar , but what 's different is what Grace thinks . Now she thinks the powder is sugar . And perhaps unsurprisingly , if Grace thinks the powder is sugar and puts it in her friend 's coffee , people say she deserves no blame at all . Whereas if she thinks the powder was poison , even though it 's really sugar , now people say she deserves a lot of blame , even though what happened in the real world was exactly the same . And in fact they say she deserves more blame in this case , the failed attempt to harm , than in another case , which we call an accident . Where Grace thought the powder was sugar , because it was labeled " sugar " and by the coffee machine , but actually the powder was poison . So even though when the powder was poison , the friend drank the coffee and died , people say Grace deserves less blame in that case , when she innocently thought it was sugar , than in the other case , where she thought it was poison , and no harm occurred . People , though , disagree a little bit about exactly how much blame Grace should get in the accident case . Some people think she should deserve more blame , and other people less . And what I 'm going to show you is what happened when we look inside the brains of people while they 're making that judgment . So what I 'm showing you , from left to right , is how much activity there was in this brain region . and from top to bottom , how much blame people said that Grace deserved . And what you can see is , on the left when there as very little activity in this brain region , people paid little attention to her innocent belief and said she deserved a lot of blame for the accident . Whereas , on the right , where there was a lot of activity , people payed a lot more attention to her innocent belief , and said she deserved a lot less blame for causing the accident . So that 's good , but of course what we 'd rather is have a way to interfere with function in this brain region , and see if we could change people 's moral judgment . And we do have such a tool . It 's called Trans-Cranial Magnetic Stimulation , or TMS . This is a tool that lets us pass a magnetic pulse through somebody 's skull , into a small region of their brain , and temporarily disorganize the function of the neurons in that region . So I 'm going to show you a demo of this . First I 'm going to show you , to show you that this is a magnetic pulse , I 'm going to show you what happens when you put a quarter on the machine . When you hear clicks we 're turning the machine on . So now I 'm going to apply that same pulse to my brain , to the part of my brain that controls my hand . So there is not physical force , just a magnetic pulse . Video : Woman : Ready ? Rebecca Saxe : Yes . Okay , so it causes a small involuntary contraction in my hand by putting a magnetic pulse in my brain . And we can use that same pulse , now applied to the RTPJ , to ask if we can change people 's moral judgments . So these are the judgments I showed you before , people 's normal moral judgments . And then we can apply TMS to the RTPJ and ask how people 's judgments change . And the first thing is , people can still do this task overall . So their judgments of the case when everything was fine remain the same . They say she deserves no blame . But in the case of a failed attempt to harm , where Grace thought that it was poison , although it was really sugar , people now say it was more okay , she deserves less blame for putting the powder in the coffee . And in the case of the accident , where she thought that it was sugar , but it was really poison and so she caused a death , people say that it was less okay , she deserves more blame . So what I 've told you today is that people come , actually , especially well equipped to think about other people 's thoughts . We have a special brain system that lets us think about what other people are thinking . This system takes a long time to develop , slowly throughout the course of childhood , and into early adolescence . And even in adulthood , differences in this brain region can explain differences among adults in how we think about and judge other people . But I want to give the last word back to the novelists . And to Philip Roth , who ended by saying , " The fact remains that getting people right is not what living is all about anyway . It 's getting them wrong that is living . Getting them wrong and wrong and wrong , and then on careful reconsideration , getting them wrong again . " Thank you . ( Applause ) Chris Anderson : When you start talking about using magnetic pulses to change people 's moral judgments , that sounds alarming . ( Laughter ) Please tell me that you 're not taking phone calls from the Pentagon , say . Rebecca Saxe : I 'm not . I mean , they 're calling , but I 'm not taking the call . ( Laughter ) C. A. : They really are calling ? So , then seriously , then seriously , you must lie awake at night sometimes wondering where this work leads . I mean you 're clearly an incredible human being . But someone could take this knowledge and in some future not torture chamber , do acts that people here might be worried about . R. S. : Yeah , we worry about this . So , there is a couple of things to say about TMS . One is that you ca n't be TMSed with out knowing it . So it 's not a surreptitious technology . It 's quite hard actually to get those very small changes . The changes I showed you are impressive to me because of what they tell us about the function of the brain . But they 're small on the scale of the moral judgments that we actually make . And what we changed was not people 's moral judgments when they 're deciding what to do , when they 're making action choices . We change their ability to judge other people 's actions . And so I think of what I 'm doing not so much as studying the defendant in a criminal trial , but studying the jury . C. A. : Is your work going to lead to any recommendations in education , to perhaps bring up a generation of kids able to make fairer moral judgments ? R. S. : That 's one of the idealistic hopes . The whole research program here , of studying the distinctive parts of the human brain , is brand new . Until recently what we knew about the brain were the things that any other animal 's brain could do too . So we could study it in animal models . We knew how brains see , and how they control the body , and how they hear and sense . And the whole project of understanding how brains do the uniquely human things , learn language , and abstract concepts , and thinking about other people 's thoughts , that 's brand new . And we do n't know yet , what the implications will be of understanding it . C. A. : So I 've got one last question . There is this thing called the hard problem of consciousness , that puzzles a lot of people . The notion that you can understand why a brain works , perhaps . But why does anyone have to feel anything ? Why does it seem to require these beings who sense things for us to operate ? You 're a brilliant young neuroscientist . I mean , what chances do you think there are that at some time in your career someone , you or someone else , is going to come up with some paradigm shift in understanding what seems an impossible problem . R. S. : I hope they do . And I think they probably wo n't . C. A. : Why ? R. S. : It 's not called the hard problem of consciousness for nothing . ( Laughter ) C. A. : That 's a great answer . Rebecca Saxe , thank you very much . That was fantastic . ( Applause ) </content>
</text>
<text id="ted/robert_thurman_on_compassion">
I want to open by quoting Einstein 's wonderful statement , just so people will feel at ease that the great scientist of the 20th century also agrees with us , and also calls us to this action . He said , " A human being is a part of the whole , called by us , universe , a part limited in time and space . He experiences himself , his thoughts and feelings , as something separated from the rest , a kind of optical delusion of his consciousness , that separation . This delusion is a kind of prison for us , restricting us to our personal desires and to affection for a few persons nearest to us . Our task must be to free ourselves from this prison by widening our circle of compassion , to embrace all living creatures and the whole of nature in its beauty . " This insight of Einstein 's is uncannily close to that of Buddhist psychology , wherein compassion , karuna , it is called , is defined as , " The sensitivity to another 's suffering and the corresponding will to free the other from that suffering . " It pairs closely with love . Which is the will for the other to be happy . Which requires , of course , that one feels some happiness oneself and wishes to share it . This is perfect in that it clearly opposes self-centeredness and selfishness to compassion , the concern for others , and , further , it indicates that those caught in the cycle of self-concern , suffer helplessly , while the compassionate are more free and implicitly more happy . The Dalai Lama often states that compassion is his best friend . It helps him when he is overwhelmed with grief and despair . Compassion helps him turn away from the feeling of his suffering as the most absolute , most terrible suffering anyone has ever had and broadens his awareness of the sufferings of others , even of the perpetrators of his misery and the whole mass of beings . In fact , suffering is so huge and enormous , his own becomes less and less monumental . And he begins to move beyond his self-concern into the broader concern for others . And this immediately cheers him up , as his courage is stimulated to rise to the occasion . Thus , he uses his own suffering as a doorway to widening his circle of compassion . He is a very good colleague of Einstein 's , we must say . Now , I want to tell a story , which is a very famous story in the Indian and Buddhist tradition , of the great Saint Asanga who lived -- contemporary of Augustine in the West and was sort of like the Buddhist Augustine . And Asanga lived 800 years after the Buddha 's time . And he was discontented with the state of people 's practice of the Buddhist religion in India at that time . And so he said , " I 'm sick of all this . Nobody 's really living the doctrine . They 're talking about love and compassion and wisdom and enlightenment , but they are acting selfish and pathetic . So Buddha 's teaching has lost its momentum . I know next Buddha will come a few thousand years from now , but exists currently in a certain heaven , that 's Maitreya . So , I 'm going to go on a retreat , and I 'm going to meditate and pray until the Buddha Maitreya reveals himself to me , and gives me a teaching or something to revive the practice of compassion in the world today . " So he went on this retreat . And he meditated for three years and he did not see the future Buddha Maitreya . And he left in disgust . And as he was leaving , he saw a man -- a funny little man -- sitting sort of part way down the mountain . And he had a lump of iron . And he was rubbing it with a cloth . And he became became interested in that . He said , " Well what are you doing ? " And the man said , " I 'm making a needle . " And he said , " That 's ridiculous . you ca n't make a needle by rubbing a lump of iron with a cloth . " And the man said , " Really ? " And he showed him a dish full of needles . So he said , " Okay , I get the point . " He went back to his cave . He meditated again . Another three years , no vision . He leaves again . This time , he comes down . And as he 's leaving , he sees a bird making a nest on a cliff ledge . And where it 's landing to bring the twigs to the cliff , its feathers brushes the rock , and it had cut the rock in , inches , six to eight inches in , there was a cleft in the rock by the brushing of the feathers of generations of the birds . So he said , " All right . I get the point . " He went back . Another three years . Again , no vision of Maitreya after nine years . And , he again leaves , and this time water dripping , making a giant bowl in the rock where it drips in a stream . And so , again , he goes back . And after 12 there is still no vision . And he 's freaked out . And he wo n't even look left or right to see any encouraging vision . And he comes to the town . He 's a broken person . And there , in the town , he 's approached by a dog who comes like this -- one of these terrible dogs you can see in some poor countries , even in America , I think , in some areas -- and he 's looking just terrible . And he becomes interested in this dog because it 's so pathetic , and it 's trying to attract his attention . And he sits down looking at the dog . And the dog 's whole hindquarters are a complete open sore . And some of it is like gangrenous . And there 's like maggots in the flesh . And it 's terrible . He thinks , " What can I do to fix up this dog ? Well , at least I can clean this wound and wash it . " So he takes it to some water , he 's about to clean , then his awareness focuses on the maggots . And he sees the maggots , and the maggots are kind of looking a little cute . And they 're maggoting happily in the dog 's hindquarters there . " Well , if I clean the dog , I 'll kill the maggots . So how can that be ? That 's it . I 'm a useless person and there 's no Buddha , no Maitreya , and everything is all hopeless . And now I 'm going to kill the maggots ? " So , he had a brilliant idea . And he took a shard of something , and cut a piece of flesh from his thigh , and he placed it on ground . He was not really thinking too carefully about the ASPCA . He was just immediately caught with the situation . So he thought , " I will take the maggots and put them on this piece of flesh , then clean the dog 's wounds , and then , you know , I 'll figure out what to do with the maggots . " So he starts to do that . He ca n't grab the maggots . Apparently they wriggle around . They 're kind of hard to grab , these maggots . So he says , " Well , I 'll put my tongue on the dog 's flesh . And then the maggots will jump on my warmer tongue . The dog is kind of used up . And then I 'll spit them one by one down on the thing . " So he goes down , and he 's sticking his tongue out like this . And he had to close his eyes , it 's so disgusting , and the smell and everything . And then , suddenly , there 's a pfft , a noise like that . He jumps back and there , of course , is the future Buddha Maitreya . In a beautiful vision like rainbow lights , golden , jeweled , plasma body , like exquisite mystic vision , he sees . And he says , " Oh . " He bows . But , being human , he 's immediately thinking of his next complaint . So as he comes up from his first bow he says , " My Lord , I 'm so happy to see you , but where have you been for 12 years ? What is this ? " And Maitreya says , " I was with you . Who do you think was making needles and making nests and dripping on rocks for you , mister dense ? " ( Laughter ) " Looking for the Buddha in person . " he said . And he said , " You did n't have , until this moment , real compassion . And , until you have real compassion , you cannot recognize love . " Maitreya means love , the loving one , you know , in Sanskrit . And so he looked very dubious , Asanga did . And he said , " If you do n't believe me , just take me with you . " And so he took the Maitreya -- it shrunk into a globe , a ball -- took him on his shoulder . And he ran into town in the marketplace , and he said , " Rejoice . Rejoice . The future Buddha has come ahead of all predictions . Here he is . " And then pretty soon they started throwing rocks and stones at him -- It was n't Chautauqua . It was some other town -- because they saw a demented looking , scrawny looking yogi man , like some kind of hippie , with a bleeding leg and a rotten dog on his shoulder , shouting that the future Buddha had come . So , naturally , they chased him out of town . But on the edge of town , one elderly lady , a char woman in the charnel ground , saw a jeweled foot on a jeweled lotus on his shoulder and then the dog , but she saw the jewel foot of the Maitreya , and she offered a flower . So that encouraged him , and he went with Maitreya . With Maitreya then took him to a certain heaven , the way the Buddhist myth unfolds in a typical way . And Maitreya then kept him in heaven for five years , dictating to him five complicated tomes of the methodology of how you cultivate compassion . And then I thought I would share with you what that method is , or one of them . Famous one , it 's called the " Sevenfold Causal Method of Developing Compassion . " And it begins first by one meditating and visualizing that all beings are with one , and all -- even animals too -- but everyone is in human form . The animals are in one of their human lives . The humans are human . And then , among them , you think of your friends and loved ones , the circle at the table . And you think of your enemies , and you think of the neutral ones . And then you try to say , " Well , the loved ones I love . But , you know , after all , they 're nice to me . I had fights with them . Sometimes they were unfriendly . I got mad . Brothers can fight . Parents and children can fight . So , in a way , I like them so much because they 're nice to me . While the neutral ones I do n't know . They could all be just fine . And then the enemies I do n't like because they 're mean to me . But they are nice to somebody . I could be them . " And then the Buddhists , of course , think , because we 've all had infinite previous lives , the Buddhists think that we 've all been each other 's relatives , actually , and everyone , therefore all of you , in the Buddhist view in some previous life , although you do n't remember it and neither do I , have been my mother , for which I do apologize for the trouble I caused you . And also , actually , I 've been your mother . I 've been female , and I 've been every single one of you , your mother in a previous life , the way the Buddhists reflect . So , my mother is this life is really great . But all of you in a way are part of the eternal mother . You gave me that expression , the eternal mama , you said . That 's wonderful . So , that 's the way the Buddhists do it . A theist , Christian , can think that all beings , even my enemies , are God 's children . So , in that sense , we 're related . So , they first create this foundation of equality . So , we sort of reduce a little of the clinging to the ones we love -- just in the meditation -- and we open our mind to those we do n't know . And we definitely reduce the hostility and " I do n't want to be compassionate to them " to the ones we think of as the bad guys , the ones we hate and we do n't like . And we do n't hate anyone therefore . So we equalize . That 's very important . And then the next thing we do is what is called mother recognition . And that is , we think of every being as familiar , as family . We expand . We take the feeling about remembering a mama , and we defuse that to all beings in this meditation . And we see the mother in every being . We see that look that the mother has on her face , this looking at this child that is a miracle that she has produced from her own body , being a mammal , where she has true compassion , truly is the other , and identifies completely . Often the life of that other will be more important to her than her own life . And that 's why it 's the most powerful form of -- altruism . The mother is what is the model of all altruism for human beings , in spiritual traditions . And so , we reflect until we can sort of see that motherly expression in all beings . People laugh at me because , you know , I used to say that I used to meditate on mama Cheney as my mom , when , of course , I was annoyed with him about all of his evil doings in Iraq . I used to meditate on George Bush . He 's quite a cute mom in a female form . Has his little ears and he smiles and he rocks you in his arms . And you think of him as nursing you . And then Saddam Hussein 's serious mustache is a problem . But you think of him as a mom . And this is the way you do it . You take any being who looks weird to you , and you see how they could be familiar to you . And you do that for awhile until you really feel that . You can feel the familiarity of all beings . Nobody seems alien . They 're not " other . " You reduce the feeling of otherness about beings . Then you move from there to remembering the kindness of mothers in general , if you can remember the kindness of your own mother , if you can remember the kindness of your spouse , or , if you are a mother yourself , how you were with your children . And you begin to get very sentimental , you cultivate sentimentality intensely . You will even weep , perhaps , with gratitude and kindness . And then you connect that with your feeling that everyone has that motherly possibility . Every being , even the most mean looking ones , can be motherly . And then , third , you step from there to what is called a feeling of gratitude . You want to repay that kindness that all beings have shown to you . And then the fourth step , you go to what is called lovely love . In each one of these you can take some weeks , or months , or days depending on how you do it , or you can do them in a run , this meditation . And then you think of how lovely beings are when they are happy , when they are satisfied . And every being looks beautiful when they are internally feeling a happiness . Their face does n't look like this . When they 're angry , they look ugly , every being , but when they 're happy they look beautiful . And so you see beings in their potential happiness . And you feel a love toward them that you want them to be happy , even the enemy . And , actually , it 's very logical to want to -- we think Jesus is being unrealistic when he says love thine enemy . He does say that , and we think he 's being unrealistic and sort of spiritual and highfalutin and , " Nice for him to say it , but I ca n't do that . " But , actually , that 's practical . If you love your enemy that means you want your enemy to be happy . If your enemy was really happy , why would they bother to be your enemy ? How boring to run around chasing you . They would be relaxing somewhere having a good time . So it makes sense to want your enemy to be happy because they 'll stop being your enemy because that 's too much trouble . But anyway , that 's the lovely love . And then finally , the fifth step is compassion , universal compassion . And that is where you then look at the reality of all the beings you can think of . And you look at them , and you see how they are . And you realize how unhappy they are actually , mostly , most of the time . You see that furrowed brow in people . And then you realize they do n't even have compassion on themselves . They 're driven by this duty and this obligation . " I have to get that . I need more . I 'm not worthy . And I should do something . " And they 're rushing around all stressed out . And they think of it as somehow macho , hard discipline on themselves . But actually they are cruel to themselves . And , of course , they are cruel and ruthless toward others . And they , then , never get any positive feedback . And the more they succeed , and the more power they have , the more unhappy they are . And this is where you feel real compassion for them . And you then feel you must act . And it 's the motivation -- And the choice of action , of course , hopefully will be more practical than poor Asanga who was fixing the maggots on the dog , because he had that motivation , and whoever was in front of him , he wanted to help . But , of course , that is impractical . He should have founded the ASPCA in the town and gotten some scientific help for dogs and maggots . And I 'm sure he did that later . But that just indicates the state of mind , you know . And so the next step -- the sixth step beyond universal compassion -- which then is this thing where you 're linked with the needs of others in a true way , and you have compassion for yourself also , and you do n't -- it is n't sentimental only . You might be in fear of something . Some bad guy is making himself more and more unhappy being more and more mean to other people and getting punished in the future for it in various ways . And in Buddhism , they catch it in the future life . Of course in theistic religion they 're punished by God or whatever . And materialism , they think they get out of it just by not existing , by dying , but they do n't . And so they get reborn as whatever , you know . Never mind . I wo n't get into that . But the next step is called universal responsibility . And that is very important -- the Charter of Compassion must lead us to develop through true compassion , what is called universal responsibility . And that means that the great teaching of his holiness , the Dalai Lama , that he always teaches everywhere , and he says that is the common religion of humanity , kindness , But kindness means universal responsibility . And that means whatever happens to other beings is happening to us , that we are responsible for that , and we should take it and do whatever we can at whatever little level and small level that we can do it . We absolutely must do that . There is no way not to do it . And then , finally , that leads to a new orientation in life where we live equally for ourselves and others , and we realize that happiness for ourselves -- and we are joyful and happy . One thing we must n't think is compassion makes you miserable . Compassion makes you happy . The first person who is happy , when you get great compassion , is yourself , even if you have n't done anything yet for anybody else . Although , the change in your mind already does something for other beings . They can sense this new quality in yourself , and it helps them already , and gives them an example . And that uncompassionate clock has just showed me that it 's all over . So , practice compassion , read the charter , disseminate it and develop it within yourself . Do n't just think , oh well , I 'm compassionate , or I 'm not compassionate , and sort of think you 're stuck there . You can develop this . You can diminish the non-compassion , the cruelty , the callousness , the neglect of others . Take universal responsibility for them , and then , not only will God smile and the eternal mama will smile , but Karen Armstrong will smile . Thank you very much . </content>
</text>
<text id="ted/rory_sutherland_life_lessons_from_an_ad_man">
This is my first time at TED . Normally , as an advertising man , I actually speak at TED Evil , which is TED 's secret sister organization -- the one that pays all the bills . It 's held every two years in Burma . And I particularly remember a really good speech by Kim Jong Il on how to get teens smoking again . ( Laughter ) But , actually , it 's suddenly come to me after years working in the business , that what we create in advertising , which is intangible value -- you might call it perceived value , you might call it badge value , subjective value , intangible value of some kind -- gets rather a bad rap . If you think about it , if you want to live in a world in the future where there are fewer material goods , you basically have two choices . You can either live in a world which is poorer , which people in general do n't like . Or you can live in a world where actually intangible value constitutes a greater part of overall value , that actually intangible value , in many ways is a very , very fine substitute for using up labor or limited resources in the creation of things . Here is one example . This is a train which goes from London to Paris . The question was given to a bunch of engineers , about 15 years ago , " How do we make the journey to Paris better ? " And they came up with a very good engineering solution , which was to spend six billion pounds building completely new tracks from London to the coast , and knocking about 40 minutes off a three-and-half-hour journey time . Now , call me Mister Picky . I 'm just an ad man ... ... but it strikes me as a slightly unimaginative way of improving a train journey merely to make it shorter . Now what is the hedonic opportunity cost on spending six billion pounds on those railway tracks ? Here is my naive advertising man 's suggestion . What you should in fact do is employ all of the world 's top male and female supermodels , pay them to walk the length of the train , handing out free Chateau Petrus for the entire duration of the journey . ( Laughter ) ( Applause ) Now , you 'll still have about three billion pounds left in change , and people will ask for the trains to be slowed down . ( Laughter ) Now , here is another naive advertising man 's question again . And this shows that engineers , medical people , scientific people , have an obsession with solving the problems of reality , when actually most problems , once you reach a basic level of wealth in society , most problems are actually problems of perception . So I 'll ask you another question . What on earth is wrong with placebos ? The seem fantastic to me . They cost very little to develop . They work extraordinarily well . They have no side effects , or if they do , they 're imaginary , so you can safely ignore them . ( Laughter ) So I was discussing this . And I actually went to the Marginal Revolution blog by Tyler Cowen . I do n't know if anybody knows it . Someone was actually suggesting that you can take this concept further , and actually produce placebo education . The point is that education does n't actually work by teaching you things . It actually works by giving you the impression that you 've had a very good education , which gives you an insane sense of unwarranted self confidence , which then makes you very , very successful in later life . So , welcome to Oxford , ladies and gentlemen . ( Laughter ) ( Applause ) But , actually , the point of placebo education is interesting . How many problems of life can be solved actually by tinkering with perception , rather than that tedious , hardworking and messy business of actually trying to change reality ? Here 's a great example from history . I 've heard this attributed to several other kings , but doing a bit of historical research it seems to be Fredrick the Great . Fredrick the Great of Prussia was very very keen for the Germans to adopt the potato , and to eat it . Because he realized that if you had two sources of carbohydrate , wheat and potatoes , you get less price volatility in bread . And you get a far lower risk of famine , because you actually had two crops to fall back on , not one . The only problem is : potatoes , if you think about it , look pretty disgusting . And also , 18th century Prussians ate very , very few vegetables -- rather like contemporary Scottish people . ( Laughter ) So , actually , he tried making it compulsory . The Prussian peasantry said , " We ca n't even get the dogs to eat these damn things . They are absolutely disgusting and they 're good for nothing . " There are even records of people being executed for refusing to grow potatoes . So he tried plan B. He tried the marketing solution , which is he declared the potato as a royal vegetable . And none but the royal family could consume it . And he planted it in a royal potato patch , with guards who had instructions to guard over it , night and day , but with secret instructions not to guard it very well . ( Laughter ) Now 18th century peasants know that there is one pretty safe rule in life , which is if something is worth guarding , it 's worth stealing . Before long , there was a massive underground potato-growing operation in Germany . What he 'd effectively done is he 'd re-branded the potato . It was an absolute masterpiece . I told this story and a gentleman from Turkey came up to me and said , " Very , very good marketer , Fredrick the Great . But not a patch on Ataturk . " Ataturk , rather like Nicolas Sarkozy , was very keen to discourage the wearing of a veil , in Turkey , to modernize it . Now , boring people would have just simply banned the veil . But that would have ended up with a lot of awful kickback and a hell of a lot of resistance . Ataturk was a lateral thinker . He made it compulsory for prostitutes to wear the veil . ( Laughter ) ( Applause ) I ca n't verify that fully . But it does not matter . There is your environmental problem solved , by the way , guys : All convicted child molesters have to drive a Porsche Cayenne . ( Laughter ) What Ataturk realized actually is two very fundamental things . Which is that , actually , first one , all value is actually relative . All value is perceived value . For those of you who do n't speak Spanish , jugo de naranja -- it 's actually the Spanish for " orange juice . " Because actually it 's not the dollar . It 's actually the peso in Buenos Aires . Very clever Buenos Aires street vendors decided to practice price discrimination to the detriment to any passing gringo tourists . As an advertising man , I have to admire that . But the first thing this all shows is that all value is subjective . Second point is that persuasion is often better than compulsion . These funny signs that flash your speed at you , some of the new ones , on the bottom right , now actually show a smiley face or a frowny face , to act as an emotional trigger . What 's fascinating about these signs is they cost about 10 percent of the running cost of a conventional speed camera . But they prevent twice as many accidents . So , the bizarre thing which is baffling to conventional , classically trained economists , is that a weird little smiley face has a better effect on changing your behavior than the threat of a £60 fine and three penalty points . Tiny little behavioral economics detail : in Italy , penalty points go backwards . You start with 12 and they take them away . Because the found that loss aversion is a more powerful influence on people 's behavior . In Britain we tend to feel , " Whoa ! Got another three ! " Not so in Italy . Another fantastic case of creating intangible value to replace actual or material value , which remember , is what , after all , the environmental movement needs to be about : This , again , is from Prussia , from , I think , about 1812 , 1813. The wealthy Prussians , to help in war against the French , were encouraged to give in all their jewelry . And it was replaced with replica jewelry made of cast iron . Here 's one : " Gold gab ich für Eisen , 1813. " The interesting thing is that for 50 years hence , the highest status jewelry you could wear in Prussia was n't made of gold or diamonds . It was made of cast iron . Because actually , never mind the actual intrinsic value of having gold jewelry . This actually had symbolic value , badge value . It said that your family had made a great sacrifice in the past . So , the modern equivalent would of course be this . ( Laughter ) But , actually , there is a thing , just as there are Veblen goods , where the value of the good depends on it being expensive and rare -- there are opposite kind of things where actually the value in them depends on them being ubiquitous , classless and minimalistic . If you think about it , Shakerism was a proto-environmental movement . Adam Smith talks about 18th century America where the prohibition against visible displays of wealth was so great , it was almost a block in the economy in New England , because even wealthy farmers could find nothing to spend their money on , without incurring the displeasure of their neighbors . It 's perfectly possible to create these social pressures which lead to more egalitarian societies . What 's also interesting , if you look at products that have a high component of what you might call messaging value , a high component of intangible value , versus their intrinsic value : They are often quite egalitarian . In terms of dress , denim is perhaps the perfect example of something which replaces material value with symbolic value . Coca-Cola . A bunch of you may be a load of pinkos , and you may not like the Coca-Cola company . But it 's worth remembering Andy Warhol 's point about Coke . What Warhol said about Coke is , he said , " What I really like about Coca-Cola is the president of the United States ca n't get a better Coke than the bum on the corner of the street . " Now , that is , actually , when you think about it , we take it for granted -- it 's actually a remarkable achievement , to produce something that 's so democratic . Now , we basically have to change our views slightly . There is a basic view that real value involves making things , involves labor . It involves engineering . It involves limited raw materials . And that what we add on top is kind of false . It 's a fake version . And there is a reason for some suspicion and uncertainly about it . It patently veers toward propaganda . However , what we do have now is a much more variegated media ecosystem in which to kind of create this kind of value . And it 's much fairer . When I grew up , this was basically the media environment of my childhood as translated into food . You had a monopoly supplier . On the left , you have Rupert Murdoch , or the BBC . ( Laughter ) And on your right you have a dependent public which is pathetically grateful for anything you give it . ( Laughter ) Nowadays , the user is actually involved . This is actually what 's called , in the digital world , " user-generated content . " Although it 's called agriculture , in the world of food . ( Laughter ) This is actually called a mash-up , where you take content that someone else has produced and you do something new with it . In the world of food we call it cooking . This is food 2.0 , which is food you produce for the purpose of sharing it with other people . This is mobile food . British are very good at that . Fish and chips in newspaper , the Cornish Pastie , the pie , the sandwich . We invented the whole lot of them . We 're not very good at food in general . Italians do great food , but it 's not very portable , generally . ( Laughter ) I only learned this the other day . The Earl of Sandwich did n't invent the sandwich . He actually invented the toasty . But then , the Earl of Toasty would be a ridiculous name . ( Laughter ) Finally , we have contextual communication . Now , the reason I show you Pernod -- it 's only one example . Every country has a contextual alcoholic drink . In France it 's Pernod . It tastes great within the borders of that country . But absolute shite if you take it anywhere else . ( Laughter ) Unicum in Hungary , for example . The Greeks have actually managed to produce something called Retsina , which even tastes shite when you 're in Greece . ( Laughter ) But so much communication now is contextual that the capacity for actually nudging people , for giving them better information -- B. J. Fogg , at the University of Stanford , makes the point that actually the mobile phone is -- He 's invented the phrase , " persuasive technologies . " He believes the mobile phone , by being location-specific , contextual , timely and immediate , is simply the greatest persuasive technology device ever invented . Now , if we have all these tools at our disposal , we simply have to ask the question , and Thaler and Sunstein have , of how we can use these more intelligently . I 'll give you one example . If you had a large red button of this kind , on the wall of your home , and every time you pressed it it saved 50 dollars for you , put 50 dollars into your pension , you would save a lot more . The reason is that the interface fundamentally determines the behavior . Okay ? Now , marketing has done a very very good job of creating opportunities for impulse buying . Yet we 've never created the opportunity for impulse saving . If you did this , more people would save more . It 's simply a question of changing the interface by which people make decisions . And the very nature of the decisions changes . Obviously , I do n't want people to do this , because as an advertising man I tend to regard saving as just consumerism needlessly postponed . ( Laughter ) But if anybody did want to do that , that 's the kind of thing we need to be thinking about , actually : fundamental opportunities to change human behavior . Now , I 've got an example here from Canada . There was a young intern at Ogilvy Canada called Hunter Somerville , who was working in improv in Toronto , and got a part-time job in advertising , and was given the job of advertising Shreddies . Now this is the most perfect case of creating intangible added value , without changing the product in the slightest . Shreddies is a strange , square , whole-grain cereal , only available in New Zealand , Canada and Britain . It 's Kraft 's peculiar way of rewarding loyalty to the crown . ( Laughter ) In working out how you could relaunch Shreddies , he came up with this . Video : ( Buzzer ) Man : Shreddies is supposed to be square . ( Laughter ) Woman : Have any of these diamond shapes gone out ? ( Laughter ) Voiceover : New Diamond Shreddies cereal . Same 100 percent whole-grain wheat in a delicious diamond shape . ( Applause ) Rory Sutherland : I 'm not sure this is n't the most perfect example of intangible value creation . All it requires is photons , neurons , and a great idea to create this thing . I would say it 's a work of genius . But , naturally , you ca n't do this kind of thing without a little bit of market research . Man : So , Shreddies is actually producing a new product , which is something very exciting for them . So they are introducing new Diamond Shreddies . ( Laughter ) So I just want to get your first impressions when you see that , when you see the Diamond Shreddies box there . ( Laughter ) Woman : Were n't they square ? Woman #2 : I 'm a little bit confused . Woman #3 : They look like the squares to me . Man : They -- Yeah , it 's all in the appearance . But it 's kind of like flipping a six or a nine like a six . If you flip it over it looks like a nine . But a six is very different from a nine . Woman # 3 : Or an " M " and a " W " . Man : An " M " and a " W " , exactly . Man #2 : [ unclear ] You just looked like you turned it on its end . But when you see it like that it 's more interesting looking . Man : Just try both of them . Take a square one there , first . ( Laughter ) Man : Which one did you prefer ? Man #2 : The first one . Man : The first one ? ( Laughter ) Rory Sutherland : Now , naturally , a debate raged . There were conservative elements in Canada , unsurprisingly , who actually resented this intrusion . So , eventually , the manufacturers actually arrived at a compromise , which was the combo pack . ( Laughter ) ( Applause ) ( Laughter ) If you think it 's funny , bear in mind there is an organization called the American Institute of Wine Economics , which actually does extensive research into perception of things , and discovers that except for among perhaps five or ten percent of the most knowledgeable people , there is no correlation between quality and enjoyment in wine , except when you tell the people how expensive it is , in which case they tend to enjoy the more expensive stuff more . So drink your wine blind in the future . But this is both hysterically funny -- but I think an important philosophical point , which is , going forward , we need more of this kind of value . We need to spend more time appreciating what already exists , and less time agonizing over what else we can do . Two quotations to more or less end with . One of them is , " Poetry is when you make new things familiar and familiar things new . " Which is n't a bad definition of what our job is , to help people appreciate what is unfamiliar , but also to gain a greater appreciation , and place a far higher value on those things which are already existing . There is some evidence , by the way , that things like social networking help do that . Because they help people share news . They give badge value to everyday little trivial activities . So they actually reduce the need for actually spending great money on display , and increase the kind of third-party enjoyment you can get from the smallest , simplest things in life . Which is magic . The second one is the second G. K. Chesterton quote of this session , which is , " We are perishing for want of wonder , not for want of wonders , " which I think for anybody involved in technology , is perfectly true . And a final thing : When you place a value on things like health , love , sex and other things , and learn to place a material value on what you 've previously discounted for being merely intangible , a thing not seen , you realize you 're much much wealthier than you ever imagined . Thank you very much indeed . ( Applause ) </content>
</text>
<text id="ted/sean_gourley_on_the_mathematics_of_war">
We look around the media , as we see on the news from Iraq , Afghanistan , Sierra Leone , and the conflict seems incomprehensible to us . And that 's certainly how it seemed to me when I started this project . But as a physicist , I thought , well if you give me some data , I could maybe understand this . You know , give us a go . So as a naive New Zealander I thought , well I 'll go to the Pentagon . Can you get me some information ? ( Laughter ) No. So I had to think a little harder . And I was watching the news one night in Oxford . And I looked down at the chattering heads on my channel of choice . And I saw that there was information there . There was data within the streams of news that we consume . All this noise around us actually has information . So what I started thinking was , perhaps there is something like open source intelligence here . If we can get enough of these streams of information together we can perhaps start to understand the war . So this is exactly what I did . We started bringing a team together , an interdisciplinary team of scientists , of economists , mathematicians . We brought these guys together and we started to try and solve this . We did it in three steps . The first step we did was to collect . We did 130 different sources of information -- from NGO reports to newspapers and cable news . We brought this raw data in and we filtered it . We extracted the key bits on information to build the database . That database contained the timing of attacks , the location , the size and the weapons used . It 's all in the streams of information we consume daily , we just have to know how to pull it out . And once we had this we could start doing some cool stuff . What if we were to look at the distribution of the sizes of attacks ? What would that tell us ? So we started doing this . And you can see here on the horizontal axis you 've got the number of people killed in an attack or the size of the attack . And on the vertical axis you 've got the number of attacks . So we plot data for sample on this . You see some sort of random distribution -- perhaps 67 attacks , one person was killed , or 47 attacks where seven people were killed . We did this exact same thing for Iraq . And we did n't know , for Iraq what we were going to find . It turns out what we found was pretty surprising . You take all of the conflict , all of the chaos , all of the noise , and out of that comes this precise mathematical distribution of the way attacks are ordered in this conflict . This blew our mind . Why should a conflict like Iraq have this as its fundamental signature ? Why should there be order in war ? We did n't really understand that . We thought maybe there is something special about Iraq . So we looked at a few more conflicts . We looked at Colombia , we looked at Afghanistan , and we looked at Senegal . And the same pattern emerged in each conflict . This was n't supposed to happen . These are different wars , with different religious factions , different political factions , and different socioeconomic problems . And yet the fundamental patterns underlying them are the same . So we went a little wider . We looked around the world at all the data we could get our hands on . From Peru to Indonesia , we studied this same pattern again . And we found that not only were the distributions these straight lines , but the slope of these lines , they clustered around this value of Alpha equals 2.5 . And we could generate an equation that could predict the likelihood of an attack . What we 're saying here is the probability of an attack killing X number of people in a country like Iraq , is equal to a constant , times the size of that attack , raised to the power of negative Alpha . And negative Alpha is the slope of that line I showed you before . So what ? This is data , statistics . What does it tell us about these conflicts ? That was a challenge we had to face as physicists . How do we explain this ? And what we really found was that Alpha if we really think about it , is the organizational structure of the insurgency . Alpha is the distribution of the sizes of attacks , which is really the distribution of the group strength carrying out the attacks . So we look at a process of group dynamics -- coalescence and fragmentation . Groups coming together . Groups breaking apart . And we start running the numbers on this . Can we simulate it ? Can we create the kind of patterns that we 're seeing in places like Iraq ? Turns out we kind of do a reasonable job . We can run these simulations . We can recreate this using a process of group dynamics to explain the patterns that we see all around the conflicts around the world . So what 's going on ? Why should these different -- seemingly different conflicts have the same patterns ? Now what I believe is going on is that the insurgent forces , they evolve over time . They adapt . And it turns out there is only one solution to fight a much stronger enemy . And if you do n't find that solution as an insurgent force , you do n't exist . So every insurgent force that is ongoing , every conflict that is ongoing , it 's going to look something like this . And that is what we think is happening . Taking it forward , how do we change it ? How do we end a war like Iraq ? What does it look like ? Alpha is the structure . It 's got a stable state at 2.5 . This is what wars look like when they continue . We 've got to change that . We can push it up . The forces become more fragmented . There is more of them , but they are weaker . Or we push it down . They 're more robust . There is less groups . But perhaps you can sit and talk to them . So this graph here , I 'm going to show you now . No one has seen this before . This is literally stuff that we 've come through last week . And we see the evolution of Alpha through time . We see it start . And we see it grow up to the stable state the wars around the world look like . And it stays there through the invasion of Falusia until the Samarra bombings in the Iraqi elections of '06 . And the system gets perturbed . It moves upwards to a fragmented state . This is when the surge happens . And depending on who you ask , the surge was supposed to push it up even further . The opposite happened . The groups became stronger . They became more robust . And so I 'm thinking , right , great , it 's going to keep going down . We can talk to them . We can get a solution . The opposite happened . It 's moved up again . The groups are more fragmented . And this tells me one of two things . Either we 're back where we started , and the surge has had no effect . Or finally the groups have been fragmented to the extent that we can start to think about maybe moving out . I do n't know what the answer is to that . But I know that we should be looking at the structure of the insurgency to answer that question . Thank you . ( Applause ) </content>
</text>
<text id="ted/siegfried_woldhek_shows_how_he_found_the_true_face_of_leonardo">
Good morning . Let 's look for a minute at the greatest icon of all , Leonardo da Vinci . We 're all familiar with his fantastic work -- his drawings , his paintings , his inventions , his writings . But we do not know his face . Thousands of books have been written about him , but there 's controversy , and it remains , about his looks . Even this well-known portrait is not accepted by many art historians . So what do you think ? Is this the face of Leonardo da Vinci or is n't it ? Let 's find out . Leonardo was a man that drew everything around him . He drew people , anatomy , plants , animals , landscapes , buildings , water , everything . But no faces ? I find that hard to believe . His contemporaries made faces , like the ones you see here . En face or three quarters . So surely a passionate drawer like Leonardo must have made self-portraits from time to time . So let 's try to find them . I think that if we were to scan all of his work and look for self-portraits , we would find his face looking at us . So I looked at all of his drawings , more than 700 , and looked for male portraits . There are about 120 , you see them here . Which ones of these could be self-portraits ? Well , for that they have to be done as we just saw , en face or three-quarters . So we can eliminate all the profiles . It also has to be sufficiently detailed . So we can also eliminate the ones that are very vague or very stylized . And we know from his contemporaries that Leonardo was a very handsome , even beautiful man . So we can also eliminate the ugly ones or the caricatures . ( Laughter ) And look what happens -- only three candidates remain that fit the bill . And here they are . Yes indeed , the old man is there , as is this famous pen drawing of the Homo Vitruvianos . And lastly , the only portrait of a male that Leonardo painted , " The Musician . " Before we go into these faces , I should explain why I have some right to talk about them . I 've made more than 1,100 portraits myself for newspapers , over the course of 300 -- 30 years , sorry , 30 years only . ( Laughter ) But there are 1,100 , and very few artists have drawn so many faces . So I know a little about drawing and analyzing faces . OK , now let 's look at these three portraits . And hold onto your seats , because if we zoom in on those faces , remark how they have the same broad forehead , the horizontal eyebrows , the long nose , the curved lips and the small , well-developed chin . I could n't believe my eyes when I first saw that . There is no reason why these portraits should look alike . All we did was look for portraits that had the characteristics of a self-portrait , and look , they are very similar . Now , are they made in the right order ? The young man should be made first . And as you see here from the years that they were created , it is indeed the case . They are made in the right order . What was the age of Leonardo at the time ? Does that fit ? Yes it does . He was 33 , 38 and 63 when these were made . So we have three pictures , potentially of the same person of the same age as Leonardo at the time . But how do we know it 's him , and not someone else ? Well , we need a reference . And here 's the only picture of Leonardo that 's widely accepted . It 's a statue made by Verrocchio , of David , for which Leonardo posed as a boy of 15. And if we now compare the face of the statue , with the face of the musician , you see the very same features again . The statue is the reference , and it connects the identity of Leonardo to those three faces . Ladies and gentlemen , this story has not yet been published . It 's only proper that you here at TED hear and see it first . The icon of icons finally has a face . Here he is -- Leonardo da Vinci . ( Applause ) </content>
</text>
<text id="ted/stephen_wolfram_computing_a_theory_of_everything">
So I want to talk today about an idea . It 's a big idea . Actually , I think it 'll eventually be seen as probably the single biggest idea that 's emerged in the past century . It 's the idea of computation . Now , of course , that idea has brought us all of the computer technology we have today and so on . But there 's actually a lot more to computation than that . It 's really a very deep , very powerful , very fundamental idea , whose effects we 've only just begun to see . Well , I myself have spent the past 30 years of my life working on three large projects that really try to take the idea of computation seriously . So I started off at a young age as a physicist using computers as tools . Then , I started sort of drilling down , thinking about the computations I might want to do , trying to figure out what primitives they could be built up from and how they could be automated as much as possible . Eventually , I created a whole structure based on symbolic programming and so on that let me build Mathematica . And for the past 23 years , at an increasing rate , we 've been pouring more and more ideas and capabilities and so on into Mathematica , and I 'm happy to say that 's led to many good things in R and D and education , lots of other areas . Well , I have to admit , actually , that I also had a very selfish reason for building Mathematica . I wanted to use it myself , a bit like Galileo got to use his telescope 400 years ago . But I wanted to look , not at the astronomical universe , but at the computational universe . So we normally think of programs as being complicated things that we build for very specific purposes . But what about the space of all possible programs ? Here 's a representation of a really simple program . So , if we run this program , this is what we get . Very simple . So let 's try changing the rule for this program a little bit . Now we get another result , still very simple . Try changing it again . You get something a little bit more complicated , but if we keep running this for awhile , we find out that , although the pattern we get is very intricate , it has a very regular structure . So the question is : Can anything else happen ? Well , we can do a little experiment . Let 's just do a little mathematical experiment , try and find out . Let 's just run all possible programs of the particular type that we 're looking at . They 're called cellular automata . You can see a lot of diversity in the behavior here . Most of them do very simple things . But if you look along all these different pictures , at rule number 30 , you start to see something interesting going on . So let 's take a closer look at rule number 30 here . So here it is . We 're just following this very simple rule at the bottom here , but we 're getting all this amazing stuff . It 's not at all what we 're used to , and I must say that , when I first saw this , it came as a huge shock to my intuition , and , in fact , to understand it , I eventually had to create a whole new kind of science . ( Laughter ) This science is different , more general , than the mathematics-based science that we 've had for the past 300 or so years . You know , it 's always seemed like a big mystery how nature , seemingly so effortlessly manages to produce so much that seems to us so complex . Well , I think we 've found its secret . It 's just sampling what 's out there in the computational universe and quite often getting things like Rule 30 or like this . And knowing that , starts to explain a lot of long-standing mysteries in science . It also brings up new issues though , like computational irreducibility . I mean , we 're used to having science let us predict things , but something like this is fundamentally irreducible . The only way to find its outcome is , effectively , just to watch it evolve . It 's connected to , what I call , the principle of computational equivalence , which tells us that even incredibly simple systems can do computations as sophisticated as anything . It does n't take lots of technology or biological evolution to be able to do arbitrary computation , just something that happens , naturally , all over the place . Things with rules as simple as these can do it . Well , this has deep implications about the limits of science , about predictability and controllability of things like biological processes or economies , about intelligence in the universe , about questions like free will and about creating technology . You know , working on this science for many years , I kept wondering , " What will be its first killer app ? " Well , ever since I was a kid , I 'd been thinking about systematizing knowledge and somehow making it computable . People like Leibniz had wondered about that too 300 years earlier . But I 'd always assumed that to make progress , I 'd essentially have to replicate a whole brain . Well , now I got to thinking : This scientific paradigm of mine suggests something different . And , by the way , I 've now got huge computation capabilities in Mathematica , and I 'm a CEO with some worldly resources to do large , seemingly crazy , projects . So I decided to just try to see how much of the systematic knowledge that 's out there in the world we can make computable . So , it 's been a big , very complex project , which I was not sure was going to work at all . But I 'm happy to say that it 's actually going really well . And last year we were able to release the first website version of Wolfram Alpha . It 's purpose is to be a serious knowledge engine that computes answers to questions . So let 's give it a try . Let 's start off with something really easy . Hope for the best . Very good . Okay . So far so good . ( Laughter ) Let 's try something a little bit harder . Let 's say ... Let 's do some mathy thing and with luck it 'll work out the answer and try and tell us some interesting things things about related math . We could ask it something about the real world . Let 's say -- I do n't know -- What 's the GDP of Spain ? And it should be able to tell us that . Now we could compute something related to this , let 's say the GDP of Spain divided by , I do n't know , the -- hmmm ... let 's say the revenue of Microsoft . ( Laughter ) The idea is that we can sort of just type this in , this kind of question in however we think of it . So let 's try asking a question , like a health related question . So let 's say we have a lab finding that -- you know , we have an LDL level of 140 for a male aged 50. So let 's type that in , and now Wolfram Alpha will go and use available public health data and try to figure out what part of the population that corresponds to and so on . Or let 's try asking about , I do n't know , the international space station . And what 's happening here is that Wolfram Alpha is not just looking up something ; it 's computing , in real time , where the international space station is right now , at this moment , how fast it 's going and so on . So Wolfram Alpha knows about lots and lots of kinds of things . It 's got by now , pretty good coverage of everything you might find in a standard reference library and so on . But the goal is to go much further and , very broadly , to democratize all of this kind of knowledge , and to try and be an authoritative source in all areas , to be able to compute answers to specific questions that people have , not by searching what other people may have written down before , but by using built in knowledge to compute fresh new answers to specific question . Now , of course , Wolfram Alpha is a monumentally huge , long term project with lots and lots of challenges . For a start , one has to curate a zillion different sources of facts and data , and we built quite a pipeline of Mathematica automation and human domain experts for doing this . But that 's just the beginning . Given raw facts or data to actually answer questions , one has to compute , one has to implement all those methods and models and algorithms and so on that science and other areas have built up over the centuries . Well , even starting from Mathematica , this is still a huge amount of work . So far , there are about 8 million lines of Mathematica code in Wolfram Alpha built by experts from many , many different fields . Well , a crucial idea of Wolfram Alpha is that you can just ask it questions using ordinary human language , which means that we 've got to be able to take all those strange utterances that people type into the input field and understand them . And I must say that I thought that step might just be plain impossible . Two big things happened . First , a bunch of new ideas about linguistics that came from studying the computational universe . And second , the realization that having actual computable knowledge completely changes how one can set about understanding language . And , of course , now with Wolfram Alpha actually out in the wild , we can learn from its actual usage . And , in fact , there 's been an interesting coevolution that 's been going on between Wolfram Alpha and its human users . And it 's really encouraging . Right now , if we look at web queries , more than 80 percent of them get handled successfully the first time . And if you look at things like the iPhone app , the fraction is considerably larger . So , I 'm pretty pleased with it all . But , in many ways , we 're still at the very beginning with Wolfram Alpha . I mean , everything is scaling up very nicely . We 're getting more confident . You can expect to see Wolfram Alpha technology showing up in more and more places , working both with this kind of public data , like on the website , and with private knowledge for people and companies and so on . You know , I 've realized that Wolfram Alpha actually gives one a sort of whole new kind of computing that one can call knowledge-based computing , in which one 's starting , not just from raw computation , but from a vast amount of built-in knowledge . And when one does that , one really changes the economics of delivering computational things , whether it 's on the web or elsewhere . You know , we have a fairly interesting situation right now . On the one hand , we have Mathematica , with its sort of precise , formal language and a huge network of carefully designed capabilities able to get a lot done in just a few lines . Let me show you a couple of examples here . So here 's a trivial piece of Mathematica programming . Here 's something where we 're sort of integrating a bunch of different capabilities here . Here we 'll just create in this line a little user interface that allows us to do something fun there . If you go on , that 's a slightly more complicated program that 's now doing all sorts of algorithmic things and creating user interface and so on . But it 's something that 's very precise stuff . It 's a precise specification with a precise formal language that causes Mathematica to know what to do here . Well , then on the other hand , we have Wolfram Alpha , with all the sort of messiness of the world and human language and so on built into it . So what happens when you put these things together ? I think it 's actually rather wonderful . With Wolfram Alpha inside Mathematica , you can , for example , make precise programs that call on real-world data . Here 's a really simple example . You can also just sort of give vague input and then try and have Wolfram Alpha figure out what you 're talking about . Let 's try this here . But actually I think sort of the most exciting thing about this is that it really gives one the chance to democratize programming . I mean , anyone will be able to just sort of say what they want in plain language , then , the idea is , that Wolfram Alpha will be able to figure out what precise pieces of code can do what they 're asking for and then show them examples that will let them pick what they need to build up bigger and bigger , precise programs . So , sometimes , Wolfram Alpha will be able to do the whole thing immediately and just give back a whole big program that you can then compute with . So here 's a big website where we 've been collecting lots of educational and other demonstrations about lots of kinds of things . So , I do n't know , I 'll show you one example , maybe here . This is just an example of one of these computable documents . This is probably a fairly small piece of Mathematica code that 's able to be run here . Okay . Let 's zoom out again . So , given our new kind of science , is there a general way to use it to make technology ? So , with physical materials , we 're used to kind of going around the world and discovering that particular materials are useful for particular technological purposes and so on . Well , it turns out , we can do very much the same kind of thing in the computational universe . There 's an inexhaustible supply of programs out there . The challenge is to see how to harness them for human purposes . Something like Rule 30 , for example , turns out to be a really good randomness generator . Other simple programs are good models for processes in the natural or social world . And , for example , Wolfram Alpha and Mathematica are actually now full of algorithms that we discovered by searching the computational universe . And , for example , this -- we go back here -- This has become surprisingly popular among composers finding musical forms by searching the computational universe . In a sense , we can use the computational universe to get mass customized creativity . I 'm hoping we can , for example , use that even to get Wolfram Alpha to routinely sort of do invention and discovery on the fly and to find all sorts of wonderful stuff that no engineer and no process of incremental evolution would ever come up with . Well , so , that leads to sort of an ultimate question . Could it be that someplace out there in the computational universe we might find our physical universe ? Perhaps there 's even some quite simple rule , some simple program for our universe . Well , the history of physics would have us believe that the rule for the universe must be pretty complicated . But in the computational universe we 've now seen how rules that are incredibly simple can produce incredibly rich and complex behavior . So could that be what 's going on with our whole universe ? If the rules for the universe are simple , it 's kind of inevitable that they have to be very abstract and very low level , operating , for example , far below the level of space or time , which makes it hard to represent things . But in at least a large class of cases , one can think of the universe as being like some kind of network , which , when it gets big enough , behaves like continuous space in much the same way as having lots of molecules can behave like a continuous fluid . Well , then the universe has to evolve by applying little rules that progressively update this network . And each possible rule , in a sense , corresponds to a candidate universe . Actually , I have n't shown these before , but here are a few of the candidate universes that I 've looked at . Some of these are hopeless universes , completely sterile , with other kinds of pathologies like no notion of space , no notion of time , no matter , other problems like that . But the exciting thing that I 've found in the last few years is that you actually do n't have to go very far in the computational universe before you start finding candidate universes that are n't obviously not our universe . Here 's the problem : Any serious candidate for our universe , is inevitably full of computational irreducibility , which means that it is irreducibly difficult to find out how it will really behave , and whether it matches our physical universe . A few years ago , I was pretty excited to discover that there are candidate universes with incredibly simple rules that successfully reproduce special relativity and even general relativity and gravitation and at least give hints of quantum mechanics . So , will we find the whole of physics ? I do n't know for sure . But I think at this point it 's sort of almost embarrassing not to at least try . Not an easy project . One has got to build a lot of technology . One 's got to build a structure that 's probably at least as deep as existing physics . And I 'm not sure what the best way to organize the whole thing is . Build a team , open it up , offer prizes and so on . But I 'll tell you here today that I 'm committed to seeing this project done , to see if , within this decade , we can finally hold in our hands the rule for our universe and know where our universe lies in the space of all possible universes -- and be able to type into Wolfram Alpha " the theory of the universe , " and have it tell us . ( Laughter ) So I 've been working on the idea of computation now for more than 30 years , building tools and methods and turning sort of intellectual ideas into millions of lines of code and grist for server farms and so on . With every passing year , I realize how much more powerful the idea of computation really is . It 's taken us a long way already , but there 's so much more to come . From the foundations of science to the limits of technology to the very definition of the human condition , I think computation is destined to be the defining idea of our future . Thank you . ( Applause ) Chris Anderson : That was astonishing . Stay here . I 've got a question . ( Applause ) So , that was , fair to say , an astonishing talk . Are you able to say in a sentence or two how this type of thinking could integrate at some point to things like string theory or the kind of things that people think of as the fundamental explanations of the universe ? Stephen Wolfram : Well , the parts of physics that we kind of know to be true , things like the standard model of physics . What I 'm trying to do better reproduce the standard model of physics or it 's simply wrong . The things that people have tried to do in the last 25 years or so with string theory and so on have been an interesting exploration that has tried to get back to the standard model , but has n't quite gotten there . My guess is that some great simplifications of what I 'm doing may actually have considerable resonance with what 's been done in string theory , but that 's a complicated math thing that I do n't yet know how it 's going to work out . CA : Benoit Mandlebrot is in the audience . He has also shown how complexity can arise from a simple start . Does your work relate to his ? SW : I think so . I view Benoit Mandlebrot 's work as kind of one of the founding contributions to this kind of area . Benoit has been particularly interested in nested patterns , in fractals and so on , where the structure is something that 's kind of tree-like , and where there 's sort of a big branch that makes little branches , and even smaller branches and so on . That 's kind of one of the ways that you get towards true complexity . I think things like the Rule 30 cellular automaton get us to a different level . In fact , in a very precise way they get us to a different level because they seem to be things that are capable of complexity that 's sort of as great as complexity can ever get ... I could go on about this at great length , but I wo n't . CA : Stephen Wolfram , thank you . ( Applause ) </content>
</text>
<text id="ted/tom_wujec_build_a_tower">
Several years ago , here at TED , Peter Skillman introduced a design challenge called the marshmallow challenge . And the idea 's pretty simple . Teams of four have to build the tallest free-standing structure out of 20 sticks of spaghetti , one yard of tape , one yard of string and a marshmallow . The marshmallow has to be on top . And , though it seems really simple , it 's actually pretty hard , because it forces people to collaborate very quickly . And so I thought that this was an interesting idea , and I incorporated it into a design workshop . And it was a huge success . And since then , I 've conducted about 70 design workshops across the world with students and designers and architects , even the CTOs of the Fortune 50 , and there 's something about this exercise that reveals very deep lessons about the nature of collaboration , and I 'd like to share some of them with you . So , normally , most people begin by orienting themselves to the task . They talk about it , they figure out what it 's going to look like , they jockey for power , then they spend some time planning , organizing . They sketch and they lay out spaghetti They spend the majority of their time assembling the sticks into ever-growing structures and then , finally , just as they 're running out of time , someone takes out the marshmallow , and then they gingerly put it on top , and then they stand back , and Ta-da ! they admire their work . But what really happens , most of the time , is that the " ta-da " turns into an " uh-oh , " because the weight of the marshmallow causes the entire structure to buckle and to collapse . So there are a number of people who have a lot more " uh-oh " moments than others , and among the worst are recent graduates of business school . ( Laughter ) They lie , they cheat , they get distracted , and they produce really lame structures . And of course there are teams that have a lot more " ta-da " structures , and , among the best , are recent graduates of kindergarten . ( Laughter ) And it 's pretty amazing . As Peter tells us , not only do they produce the tallest structures , but they 're the most interesting structures of them all . So the question you want to ask is : How come ? Why ? What is it about them ? And Peter likes to say that , " None of the kids spend any time trying to be CEO of Spaghetti Inc. " Right . They do n't spend time jockeying for power . But there 's another reason as well . And the reason is that business students are trained to find the single right plan , right . And then they execute on it . And then what happens is , when they put the marshmallow on the top , they run out of time , and what happens ? It 's a crisis . Sound familiar ? Right . What kindergarteners do differently , is that they start with the marshmallow , and they build prototypes , successive prototypes , always keeping the marshmallow on top , so they have multiple times to fix ill built prototypes along the way . So designers recognize this type of collaboration as the essence of the iterative process . And with each version , kids get instant feedback about what works and what does n't work . So the capacity to play in prototype is really essential , but let 's look at how different teams perform . So the average for most people is around 20 inches , business schools students , about half of that , lawyers , a little better , but not much better than that , kindergarteners , better than most adults . Who does the very best ? Architects and engineers , thankfully . ( Laughter ) 39 inches is the tallest structure I 've seen . And why is it ? Because they understand triangles and self-re-enforcing geometrical patterns are the key to building stable structures . So CEOs , a little bit better than average . But here 's where it gets interesting . If you put you put an executive admin . on the team , they get significantly better . ( Laughter ) It 's incredible . You know , you look around , you go , " Oh , that team 's going to win . " You can just tell beforehand . And why is that ? Because they have special skills of facilitation . They manage the process , they understand the process . And any team who manages and pays a close attention to work will significantly improve the team 's performance . Specialized skills and facilitation skills are the combination [ that ] leads to strong success . If you have 10 teams that typically perform , you 'll get maybe six or so that have standing structures . And I tried something interesting . I thought , let 's up the ante once . So I offered a 10,000 dollar prize of software to the winning team . So what do you think happened to these design students ? What was the result ? Here 's what happened . Not one team had a standing structure . If anyone had built , say , a one inch structure , they could have taken home the prize . So , is n't it interesting that high stakes have a strong impact . We did the exercise again with the same students . What do you think happened then ? So now they understand the value of prototyping . So the same team went from being the very worst to being among the very best . They produced the tallest structures in the least amount of time . So there 's deep lessons for us about the nature of incentives and success . So , you might ask : Why would anyone actually spend time writing a marshmallow challenge ? And the reason is , I help create digital tools and processes to help teams build cars and video games and visual effects . And what the marshmallow challenge does is it helps them identify the hidden assumptions . Because , frankly , every project has its own marshmallow , does n't it . The challenge provides a shared experience , a common language , common stance to build the right prototype . And so , this is the value of the experience , of this so simple exercise . And those of you who are interested , may want to go to marshmallowchallenge . com . It 's a blog that you can look at how to build the marshmallows . There 's step-by-step instructions on this . There are crazy examples from around the world of how people tweak and adjust the system . There 's world records on this as well . And the fundamental lesson , I believe , is that design truly is a contact sport . It demands that we bring all of our senses to the task , and that we apply the very best of our thinking , our feeling and our doing to the challenge that we have at hand . And , sometimes , a little prototype of this experience is all that it takes to turn us from an " uh-oh " moment to a " ta-da " moment . And that can make a big difference . Thank you very much . ( Applause ) </content>
</text>
<text id="ted/tom_wujec_on_3_ways_the_brain_creates_meaning">
Last year at TED we aimed to try to clarify the overwhelming complexity and richness that we experience at the conference in a project called Big Viz . And the Big Viz is a collection of 650 sketches that were made by two visual artists . David Sibbet from The Grove , and Kevin Richards from Autodesk made 650 sketches that strive to capture the essence of each presenter 's ideas . And the consensus was , it really worked . These sketches brought to life the key ideas , the portraits , the magic moments that we all experienced last year . This year we were thinking , " Why does it work ? " What is it about animation , graphics , illustrations , that create meaning ? And this is an important question to ask and answer because the more we understand how the brain creates meaning , the better we can communicate , and I also think , the better we can think and collaborate together . So this year we 're going to visualize how the brain visualizes . Cognitive psychologists now tell us that the brain does n't actually see the world as it is , but instead , creates a series of mental models through a collection of " Ah-ha moments , " or moments of discovery , through various processes . The processing , of course , begins with the eyes . Light enters , hits the back of the retina , and is circulated , most of which is streamed to the very back of the brain , at the primary visual cortex . And primary visual cortex sees just simple geometry , just the simplest of shapes . But it also acts like a kind of relay station that re-radiates and redirects information to many other parts of the brain . As many as 30 other parts that selectively make more sense , create more meaning through the kind of " Ah-ha " experiences . We 're only going to talk about three of them . So the first one is called the ventral stream . It 's on this side of the brain . And this is the part of the brain that will recognize what something is . It 's the " what " detector . Look at a hand . Look at a remote control . Chair . Book . So that 's the part of the brain that is activated when you give a word to something . A second part of the brain is called the dorsal stream . And what it does is locates the object in physical body space . So if you look around the stage here you 'll create a kind of mental map of the stage . And if you closed your eyes you 'd be able to mentally navigate it . You 'd be activating the dorsal stream if you did that . The third part that I 'd like to talk about is the limbic system . And this is deep inside of the brain . It 's very old , evolutionarily . And it 's the part that feels . It 's the kind of gut center , where you see an image and you go , " Oh ! I have a strong or emotional reaction to whatever I 'm seeing . " So the combination of these processing centers help us make meaning in very different ways . So what can we learn about this ? How can we apply this insight ? Well , again , the schematic view is that the eye visually interrogates what we look at . The brain processes this in parallel , the figments of information asking a whole bunch of questions to create a unified mental model . So , for example , when you look at this image a good graphic invites the eye to dart around , to selectively create a visual logic . So the act of engaging , and looking at the image creates the meaning . It 's the selective logic . Now we 've augmented this and spatialized this information . Many of you may remember the magic wall that we built in conjunction with Perceptive Pixel where we quite literally create an infinite wall . And so we can compare and contrast the big ideas . So the act of engaging and creating interactive imagery enriches meaning . It activates a different part of the brain . And then the limbic system is activated when we see motion , when we see color . and there are primary shapes and pattern detectors that we 've heard about before . So the point of this is what ? We make meaning by seeing , by an act of visual interrogation . The lessons for us are three-fold . First , use images to clarify what we 're trying to communicate . Secondly make those images interactive so that we engage much more fully . And the third is to augment memory by creating a visual persistence . These are techniques that can be used to be -- that can be applied in a wide range of problem solving . So the low-tech version looks like this . And , by the way , this is the way in which we develop and formulate strategy within Autodesk , in some of our organizations and some of our divisions . What we literally do is have the teams draw out the entire strategic plan on one giant wall . And it 's very powerful because everyone gets to see everything else . There 's always a room , always a place to be able to make sense of all of the components in the strategic plan . This is a time-lapse view of it . You can ask the question , " Who 's the boss ? " You 'll be able to figure that out . So the act of collectively and collaboratively building the image transforms the collaboration . No Powerpoint is used in two days. But instead the entire team creates a shared mental model that they can all agree on and move forward on . And this can be enhanced and augmented with some emerging digital technology . And this is our great unveiling for today . And this is an emerging set of technologies that use large-screen displays with intelligent calculation in the background to make the invisible visible . Here what we can do is look at sustainability , quite literally . So a team can actually look at all the key components that heat the structure and make choices and then see the end result that is visualized on this screen . So making images meaningful has three components . The first again , is making ideas clear by visualizing them . Secondly , making them interactive . And then thirdly , making them persistent . And I believe that these three principles can be applied to solving some of the very tough problems that we face in the world today . Thanks so much . ( Applause ) </content>
</text>
<text id="ted/william_li">
Good afternoon . There 's a medical revolution happening all around us , and it 's one that 's going to help us conquer some of society 's most dreaded conditions , including cancer . And the revolution is called angiogenesis , and it 's based on the process that our bodies use to grow blood vessels . So why should we care about blood vessels ? Well , the human body is literally packed with them , 60,000 miles worth in a typical adult . End to end , that would form a line that would circle the earth twice . The smallest blood vessels are called capillaries . We 've got 19 billion of them in our bodies . And these are the vessels of life , and , as I 'll show you , they can also be the vessels of death . Now the remarkable thing about blood vessels is that they have this ability to adapt to whatever environment they 're growing in . For example , in the liver they form channels to detoxify the blood . In the lung , they line air sacs for gas exchange . In muscle , they corkscrew so that muscles can contract without cutting off circulation . And in nerves , they course along like power lines , keeping those nerves alive . And we get most of these blood vessels when we 're actually still in the womb . And what that means is that , as adults , blood vessels do n't normally grow , except in a few special circumstances . In women , blood vessels grow every month to build the lining of the uterus . During pregnancy , they form the placenta , which connects mom and baby . And after injury , blood vessels actually have to grow under the scab in order to heal a wound . And this is actually what it looks like . Hundreds of blood vessels all growing to the center of the wound . So the body has the ability to regulate the amount of blood vessels that are present at any given time . And it does this through an elaborate and elegant system of checks and balances , stimulators and inhibitors of angiogenesis , such that , when we need a brief burst of blood vessels , the body can do this by releasing stimulators , proteins called angiogenic factors that act as natural fertilizer and stimulate new blood vessels to sprout . And when those excess vessels are no longer needed , the body prunes them back to baseline using naturally occurring inhibitors of angiogenesis . Now there are other situations where we start beneath the baseline , and we need to grow more blood vessels just to get back to normal levels . For example , after an injury . And a body can do that too , but only to that normal level , that set point . But what we now know is , for a number of diseases , there are defects in the system , where the body ca n't prune back extra blood vessels or ca n't grow enough new ones in the right place at the right time . And in these situations , angiogenesis is out of balance . And when angiogenesis is out of balance , a myriad of diseases result . For example , insufficient angiogenesis , not enough blood vessels , leads to wounds that do n't heal , heart attacks , legs without circulation , death from stroke , nerve damage . And on the other end , excessive angiogenesis , too many blood vessels , drives disease . And we see this in cancer , blindness , arthritis , obesity , Alzheimer 's disease . In total , there are more than 70 major diseases , affecting more than a billion people worldwide , that all look on the surface to be different from one another , but all actually share abnormal angiogenesis as their common denominator . And this realization is allowing us to reconceptualize the way that we actually approach these diseases by controlling angiogenesis . Now I 'm going to focus on cancer because angiogenesis is a hallmark of cancer , every type of cancer . So here we go . This is a tumor , dark , gray , ominous mass growing inside a brain . And under the microscope , you can see hundreds of these brown staining blood vessels , capillaries that are feeding cancer cells , bringing oxygen and nutrients . But cancers do n't start out like this . And , in fact , cancers do n't start out with a blood supply . They start out as small , microscopic nests of cells That can only grow to one half a cubic millimeter in size . That 's the tip of a ballpoint pen . Then they ca n't get any larger because they do n't have a blood supply , so they do n't have enough oxygen or nutrients . And in fact , we 're probably forming these microscopic cancers all the time in our body . Autopsy studies from people who died in car accidents have shown that about 40 percent of women between the ages of 40 and 50 actually have microscopic cancers in their breasts . About 50 percent of men in their 50s and 60s have microscopic prostate cancers . And virtually 100 percent of us , by the time we reach our 70s , will have microscopic cancers growing in our thyroid . Yet , without a blood supply , most of these cancers will never become dangerous . Dr. Judah Folkman , who was my mentor , and who was the pioneer of the angiogenesis field , once called this " cancer without disease . " So the body 's ability to balance angiogenesis , when it 's working properly , prevents blood vessels from feeding cancers . And this turns out to be one of our most important defense mechanisms against cancer . In fact , if you actually block angiogenesis and prevent blood vessels from ever reaching cancer cells , tumors simply ca n't grow up . But once angiogenesis occurs , cancers can grow exponentially . And this is actually how a cancer goes from being harmless to deadly . Cancer cells mutate and they gain the ability to release lots of those angiogenic factors , natural fertilizer , that tip the balance in favor of blood vessels invading the cancer . And once those vessels invade the cancer , it can expand , it can invade local tissues . And the same vessels that are feeding tumors , allow cancer cells to exit into the circulation as metastases . And , unfortunately , this late stage of cancer is the one at which it 's most likely to be diagnosed , when angiogenesis is already turned on , and cancer cells are growing like wild . So , if angiogenesis is a tipping point between a harmless cancer and a harmful one , then one major part of the angiogenesis revolution is a new approach to treating cancer by cutting off the blood supply . We call this antiangiogenic therapy , and it 's completely different from chemotherapy because it selectively aims at the blood vessels that are feeding the cancers . And we can do this because tumor blood vessels are unlike normal , healthy vessels we see in other places of the body . They 're abnormal ; they 're very poorly constructed ; and , because of that , they 're highly vulnerable to treatments that target them . In effect , when we give cancer patients antiangiogenic therapy -- here , an experimental drug for a glioma , which is a type of brain tumor -- you can see that there are dramatic changes that occur when the tumor is being starved . Here 's a woman with a breast cancer being treated with the antiangiogenic drug called Avastin , which is FDA approved . And you can see that the halo of blood flow disappears after treatment . Well , I 've just shown you two very different types of cancer that both responded to antiangiogenic therapy . So , a few years ago , I asked myself , " Can we take this one step further , and treat other cancers , even in other species ? " So here is a nine year-old boxer named Milo who had a very agressive tumor called a malignant neurofibroma growing on his shoulder . It invaded into his lungs . His veterinarian only gave him three months to live . So we created a cocktail of antiangiogenic drugs that could be mixed into his dog food as well as an antiangiogenic cream that could be applied on the surface of the tumor . And within a few weeks of treatment , we were able to slow down that cancer 's growth such that we were ultimately able to extend milo 's survival to six times what the veterinarian had initially predicted , all with a very good quality of life . And we subsequently treated more than 600 dogs . We have about a 60 percent response rate and improved survival for these pets that were about to be euthanized . So let me show you a couple of even more interesting examples . This is 20 year old dolphin living in Florida , and she had these lesions in her mouth that , over the course of three years , developed into invasive squamous cell cancers . So we created an antiangiogenic paste . We had it painted on top of the cancer three times a week . And over the course of seven months , the cancers completely disappeared , and the biopsies came back as normal . Here 's a cancer growing on the lip of a quarter horse named Guiness . It 's a very , very deadly type of cancer called an angiosarcoma . It had already spread to his lymph nodes , so we used an antiangiogenic skin cream for the lip and an oral cocktail , so we could treat from the inside as well as the outside . And over the course of six months , he experienced a complete remission . And here he is six years later , Guiness , with his very happy owner . ( Applause ) Now , obviously , antiangiogenic therapy could be used for a wide range of cancers . And , in fact , the first pioneering treatments , for people , as well as dogs , are already becoming available . There 's 12 different drugs , 11 different cancer types , but the real question is : How well do these work in practice ? So here 's actually the patient survival data from eight different types of cancer . And the bars represent survival time taken from the era in which there was only chemotherapy , or surgery , or radiation available . But starting in 2004 , when antiangiogenic therapies first became available , well you can see that there has been a 70 to 100 percent improvement in survival for people with kidney cancer , multiple myeloma , colorectal cancer , and gastrointestinal stromal tumors . That 's impressive . But for other tumors and cancer types , the improvements have only been modest . So I started asking myself , " Why have n't we been able to do better ? " And the answer , to me , is obvious ; we 're treating cancer too late in the game , when it 's already established , and , oftentimes , it 's already spread or metastasized . And as a doctor , I know that , once a disease progresses to an advanced stage , achieving a cure can be difficult , if not impossible . So I went back to the biology of angiogenesis and started thinking : Could the answer to cancer be preventing angiogenesis , beating cancer at its own game so the cancers could never become dangerous ? This could help healthy people as well as people who 've already beaten cancer once or twice and want to find a way to keep it from coming back . So to look for a way to prevent angiogenesis in cancer , I went back to look at cancer 's causes . And what really intrigued me was when I saw that diet accounts for 30 to 35 percent of environmentally caused cancers . Now , the obvious thing is to think about what we could remove from our diet , what what to strip out , take away . But I actually took a completely opposite approach and began asking : What could we be adding to our diet that 's naturally antiangiogenic , that could boost the body 's defense system and beat back those blood vessels that are feeding cancers ? In other words , can we eat to starve cancer ? Well , the answer 's yes . And I 'm going to show you how . And our search for this has taken us to the market , the farm and to the spice cabinet because what we 've discovered is that mother nature has laced a large number of foods and beverages and herbs with naturally occurring inhibitors of angiogenesis . So here 's a test system we developed . At the center is a ring from which hundreds of blood vessels are growing out in a star burst fashion . And we can use this system to test dietary factors at concentrations that are obtainable by eating . So let me show you what happens when we put in an extract from red grapes . The active ingredient 's resveratrol . It 's also found in red wine . This inhibits abnormal angiogenesis by 60 percent . Here 's what happens when we add an extract from strawberries . It potently inhibits angiogenesis . And extract from soy beans . And here is a growing list of our antiangiogenic foods and beverages that we 're interested in studying . And for each food type , we believe there is different potencies within different strains and varietals . And we want to measure this because , well , while you 're eating a strawberry or drinking tea , why not select the one that 's most potent for preventing cancer . So here are four different teas that we 've tested . They 're all common ones , Chinese jasmine , Japanese sencha , Earl Grey and a special blend that we prepared . And you can see clearly that the teas vary in their potency from less potent to more potent . But what 's very cool is when we actually combined the two less potent teas together , the combination , the blend , is more potent than either one alone . This means there 's food synergy . Here 's some more data from our testing . Now , in the lab , we can simulate tumor angiogenesis represented here in a black bar . And using this system , we can test the potency of cancer drugs . So the shorter the bar , less angiogenesis , that 's good . And here are some common drugs that have been associated with reducing the risk of cancer in people . Statins , nonsteroidal anti-inflammatory drugs and a few others , they inhibit angiogenesis too . And here are the dietary factors going head to head against these drugs . You can see , they clearly hold their own and , in some cases , they 're more potent than the actual drugs . Soy , parsley , garlic , grapes , berries , I could go home and cook a tasty meal using these ingredients . So imagine if we could create the world 's first rating system in which we could score foods according to their antiangiogenic cancer-preventative properties . And that 's what we 're doing right now . Now , I 've shown you a bunch of lab data , and so the real question is : What is the evidence in people that eating certain foods can reduce angiogenesis in cancer ? Well , the best example I know is a study of 79,000 men , followed over 20 years , in which it was found that men whom consumed cooked tomatoes two to three times a week had up to a 50 percent reduction in their risk of developing prostate cancer . Now , we know that tomatoes are a good source of lycopene , and lycopene is antiangiogenic . But what 's even more interesting from this study is that those men who did develop prostate cancer , those who ate more servings of tomato sauce actually had fewer blood vessels feeding their cancer . So this human study is a prime example of how antiangiogenic substances present in food and consumed at practical levels can impact on cancer . And we 're now studying the role of a healthy diet with Dean Ornish at UCSF and Tufts University on the role of this healthy diet on markers of angiogenesis that we can find in the bloodstream . Now , obviously , what I 've shared with you has some far-ranging implications even beyond cancer research . Because if we 're right , it could impact on consumer education , food services , public health and even the insurance industry . And , in fact , some insurance companies are already beginning to think along these lines . Check out this ad from Blue Cross Blue Shield of Minnesota . And for many people around the world , dietary cancer prevention may be the only practical solution because not everybody can afford expensive end-stage cancer treatments , but everybody could benefit from a healthy diet based on local , sustainable , antiangiogenic crops . Now , finally , I 've talked to you about food , and I 've talked to you about cancer , so there 's just one more disease that I have to tell you about and that 's obesity . Because it turns out that adipose tissue , fat , is highly angiogenesis dependent . And , like a tumor , fat grows when blood vessels grow . So the question is : Can we shrink fat by cutting off its blood supply ? So the top curve shows the body weight of a genetically obese mouse that eats nonstop , until it turns fat like this furry tennis ball . And the bottom curve is the weight of a normal mouse . If you take the obese mouse and give it an angiogenesis inhibitor , it loses weight . Stop the treatment , gains the weight back . Restart the treatment , loses the weight again . Stop the treatment , it gains the weight back . And , in fact , you can cycle the weight up and down simply by inhibiting angiogenesis . So this approach that we 're taking for cancer prevention may also have an application for obesity . The really , truly interesting thing about this is that we ca n't take these obese mice and make them lose more weight than what the normal mouse 's weight is supposed to be . In other words , we ca n't create supermodel mice . ( Laughter ) And this speaks to the role of angiogenesis in regulating healthy set points . Albert Szent-Gyorgi once said that , " Discovery consists of seeing what everyone has seen , and thinking what no one has thought . " I hope I 've convinced you that , for diseases like cancer , obesity and other conditions , that there may be a great power in attacking their common denominator , angiogenesis . And that 's what I think the world needs now . Thank you . ( Applause ) June Cohen : So these drugs are n't exactly -- they 're not exactly in mainstream cancer treatments right now . For anyone out here who has cancer , what would you recommend ? Do you recommend pursuing these treatments now , for most cancer patients ? William Li : So there are antiangiogenic treatments that are FDA approved . And if you 're a cancer patient or working for one or advocating for one , you should ask about them . And there are many clinical trials . The Angiogenesis Foundation is following almost 300 companies , and there 's about 100 more drugs in that pipeline . So consider the approved ones , look for clinical trials , but then between what the doctor can do for you , we need to start asking what can we do for ourselves . And this is one of the themes that I 'm talking about is we can empower ourselves to do the things that doctors ca n't do for us , which is to use knowledge and take action . And if mother nature has given us some clues , we think that there might be a new future in the value of how we eat . And what we eat is really our chemotherapy three times a day . JC : Right . And along those lines , for people who might have risk factors for cancer , would you recommend pursuing any treatments sort of prophylactically or simply pursuing the right diet with lots of tomato sauce ? WL : Well , you know , there 's an abundant epidemiological evidence . And I think in the information age , it does n't take long to go to a credible source like Pubmed , the National Library of Medicine , to look for epidemiological studies for cancer risk reduction based on diet and based on common medications . And that 's certainly something that anybody can look into . JC : Okay . Well , thank you so much . ( Applause ) </content>
</text>
<text id="un/A_AC252_L13">
Ad Hoc Committee established by General Assembly resolution 51/210 of 17 December 1996 Eighth session 28 June-2 July 2004 Consolidated text prepared by the Bureau of the Committee Draft International Convention for the Suppression of Acts of Nuclear Terrorism The States Parties to this Convention , Having in mind the purposes and principles of the Charter of the United Nations concerning the maintenance of international peace and security and the promotion of good-neighbourliness and friendly relations and cooperation among States , Recalling the Declaration on the Occasion of the Fiftieth Anniversary of the United Nations of 24 October 1995 , Recognizing the right of all States to develop and apply nuclear energy for peaceful purposes and their legitimate interests in the potential benefits to be derived from the peaceful application of nuclear energy , Bearing in mind the Convention on the Physical Protection of Nuclear Material of 1980 , Deeply concerned about the worldwide escalation of acts of terrorism in all its forms and manifestations , Recalling also the Declaration on Measures to Eliminate International Terrorism , annexed to General Assembly resolution 49/60 of 9 December 1994 , in which , inter alia , the States Members of the United Nations solemnly reaffirm their unequivocal condemnation of all acts , methods and practices of terrorism as criminal and unjustifiable , wherever and by whomever committed , including those which jeopardize the friendly relations among States and peoples and threaten the territorial integrity and security of States , Noting that the Declaration also encouraged States to review urgently the scope of the existing international legal provisions on the prevention , repression and elimination of terrorism in all its forms and manifestations , with the aim of ensuring that there is a comprehensive legal framework covering all aspects of the matter , Recalling General Assembly resolution 51/210 of 17 December 1996 and the Declaration to Supplement the 1994 Declaration on Measures to Eliminate International Terrorism annexed thereto , Recalling also that , pursuant to General Assembly resolution 51/210 , an ad hoc committee was established to elaborate , inter alia , an international convention for the suppression of acts of nuclear terrorism to supplement related existing international instruments , Noting that acts of nuclear terrorism may result in the gravest consequences and may pose a threat to international peace and security , Noting also that existing multilateral legal provisions do not adequately address those attacks , Being convinced of the urgent need to enhance international cooperation between States in devising and adopting effective and practical measures for the prevention of such acts of terrorism and for the prosecution and punishment of their perpetrators , Noting that the activities of military forces of States are governed by rules of international law outside of the framework of this Convention and that the exclusion of certain actions from the coverage of this Convention does not condone or make lawful otherwise unlawful acts , or preclude prosecution under other laws , Have agreed as follows : Article 1 For the purposes of this Convention : “ Radioactive material ” means nuclear material and other radioactive substances which contain nuclides which undergo spontaneous disintegration ( a process accompanied by emission of one or more types of ionizing radiation , such as alpha- , beta- , neutron particles and gamma rays ) and which may , owing to their radiological or fissile properties , cause death , serious bodily injury or substantial damage to property or to the environment . “ Nuclear material ” means plutonium , except that with isotopic concentration exceeding 80 per cent in plutonium-238 ; uranium-233 ; uranium enriched in the isotopes 235 or 233 ; uranium containing the mixture of isotopes as occurring in nature other than in the form of ore or ore residue ; or any material containing one or more of the foregoing ; Whereby “ uranium enriched in the isotope 235 or 233 ” means uranium containing the isotope 235 or 233 or both in an amount such that the abundance ratio of the sum of these isotopes to the isotope 238 is greater than the ratio of the isotope 235 to the isotope 238 occurring in nature . “ Nuclear facility ” means : ( a ) Any nuclear reactor , including reactors installed on vessels , vehicles , aircraft or space objects for use as an energy source in order to propel such vessels , vehicles , aircraft or space objects or for any other purpose ; ( b ) Any plant or conveyance being used for the production , storage , processing or transport of radioactive material . “ Device ” means : ( a ) Any nuclear explosive device ; or ( b ) Any radioactive material dispersal or radiation-emitting device which may , owing to its radiological properties , cause death , serious bodily injury or substantial damage to property or the environment . “ State or government facility ” includes any permanent or temporary facility or conveyance that is used or occupied by representatives of a State , members of Government , the legislature or the judiciary or by officials or employees of a State or any other public authority or entity or by employees or officials of an intergovernmental organization in connection with their official duties . “ Military forces of a State ” means the armed forces of a State which are organized , trained and equipped under its internal law for the primary purpose of national defence or security and persons acting in support of those armed forces who are under their formal command , control and responsibility . Article 2 Any person commits an offence within the meaning of this Convention if that person unlawfully and intentionally : ( a ) Possesses radioactive material or makes or possesses a device : ( i ) With the intent to cause death or serious bodily injury ; or ( ii ) With the intent to cause substantial damage to property or the environment ; ( b ) Uses in any way radioactive material or a device , or uses or damages a nuclear facility in a manner which releases or risks the release of radioactive material : ( i ) With the intent to cause death or serious bodily injury ; or ( ii ) With the intent to cause substantial damage to property or the environment ; or ( iii ) With the intent to compel a natural or legal person , an international organization or a State to do or refrain from doing an act . Any person also commits an offence if that person : ( a ) Threatens , under circumstances which indicate the credibility of the threat , to commit an offence as set forth in subparagraph 1 ( b ) of the present article ; or ( b ) Demands unlawfully and intentionally radioactive material , a device or a nuclear facility by threat , under circumstances which indicate the credibility of the threat , or by use of force . Any person also commits an offence if that person attempts to commit an offence as set forth in paragraph 1 of the present article . Any person also commits an offence if that person : ( a ) Participates as an accomplice in an offence as set forth in paragraph 1 , 2 or 3 of the present article ; or ( b ) Organizes or directs others to commit an offence as set forth in paragraph 1 , 2 or 3 of the present article ; or ( c ) In any other way contributes to the commission of one or more offences as set forth in paragraph 1 , 2 or 3 of the present article by a group of persons acting with a common purpose ; such contribution shall be intentional and either be made with the aim of furthering the general criminal activity or purpose of the group or be made in the knowledge of the intention of the group to commit the offence or offences concerned . Article 3 This Convention shall not apply where the offence is committed within a single State , the alleged offender and the victims are nationals of that State , the alleged offender is found in the territory of that State and no other State has a basis under article 9 , paragraph 1 or paragraph 2 , to exercise jurisdiction , except that the provisions of articles 7 , 12 , 14 , 15 , 16 and 17 shall , as appropriate , apply in those cases . Article 4 Nothing in this Convention shall affect other rights , obligations and responsibilities of States and individuals under international law , in particular the purposes and principles of the Charter of the United Nations and international humanitarian law . The activities of armed forces during an armed conflict , as those terms are understood under international humanitarian law , which are governed by that law are not governed by this Convention , and the activities undertaken by military forces of a State in the exercise of their official duties , inasmuch as they are governed by other rules of international law , are not governed by this Convention . The provisions of paragraph 2 of the present article shall not be interpreted as condoning or making lawful otherwise unlawful acts , or precluding prosecution under other laws . This Convention does not address , nor can it be interpreted as addressing , in any way , the issue of the legality of the use or threat of use of nuclear weapons by States . Article 5 Each State Party shall adopt such measures as may be necessary : ( a ) To establish as criminal offences under its national law the offences set forth in article 2 ; ( b ) To make those offences punishable by appropriate penalties which take into account the grave nature of these offences . Article 6 Each State Party shall adopt such measures as may be necessary , including , where appropriate , domestic legislation , to ensure that criminal acts within the scope of this Convention , in particular where they are intended or calculated to provoke a state of terror in the general public or in a group of persons or particular persons , are under no circumstances justifiable by considerations of a political , philosophical , ideological , racial , ethnic , religious or other similar nature and are punished by penalties consistent with their grave nature . Article 7 States Parties shall cooperate by : ( a ) Taking all practicable measures , including , if necessary , adapting their national law , to prevent and counter preparations in their respective territories for the commission within or outside their territories of the offences set forth in article 2 , including measures to prohibit in their territories illegal activities of persons , groups and organizations that encourage , instigate , organize , knowingly finance or knowingly provide technical assistance or information or engage in the perpetration of those offences ; ( b ) Exchanging accurate and verified information in accordance with their national law and in the manner of and subject to the conditions specified herein , and coordinating administrative and other measures taken as appropriate to detect , prevent , suppress and investigate the offences set forth in article 2 and also in order to institute criminal proceedings against persons alleged to have committed those crimes . In particular , a State Party shall take appropriate measures in order to inform without delay the other States referred to in article 9 in respect of the commission of the offences set forth in article 2 as well as preparations to commit such offences about which it has learned , and also to inform , where appropriate , international organizations . States Parties shall take appropriate measures consistent with their national law to protect the confidentiality of any information which they receive in confidence by virtue of the provisions of this Convention from another State Party or through participation in an activity carried out for the implementation of this Convention . If States Parties provide information to international organizations in confidence , steps shall be taken to ensure that the confidentiality of such information is protected . States Parties shall not be required by this Convention to provide any information which they are not permitted to communicate pursuant to national law or which would jeopardize the security of the State concerned or the physical protection of nuclear material . States Parties shall inform the Secretary-General of the United Nations of their competent authorities and liaison points responsible for sending and receiving the information referred to in the present article . The Secretary-General of the United Nations shall communicate such information regarding competent authorities and liaison points to all States Parties and the International Atomic Energy Agency . Such authorities and liaison points must be accessible on a continuous basis . Article 8 For purposes of preventing offences under this Convention , States Parties shall make every effort to adopt appropriate measures to ensure the protection of radioactive material , taking into account relevant recommendations and functions of the International Atomic Energy Agency . Article 9 Each State Party shall take such measures as may be necessary to establish its jurisdiction over the offences set forth in article 2 when : ( a ) The offence is committed in the territory of that State ; or ( b ) The offence is committed on board a vessel flying the flag of that State or an aircraft which is registered under the laws of that State at the time the offence is committed ; or ( c ) The offence is committed by a national of that State . A State Party may also establish its jurisdiction over any such offence when : ( a ) The offence is committed against a national of that State ; or ( b ) The offence is committed against a State or government facility of that State abroad , including an embassy or other diplomatic or consular premises of that State ; or ( c ) The offence is committed by a stateless person who has his or her habitual residence in the territory of that State ; or ( d ) The offence is committed in an attempt to compel that State to do or abstain from doing any act ; or ( e ) The offence is committed on board an aircraft which is operated by the Government of that State . Upon ratifying , accepting , approving or acceding to this Convention , each State Party shall notify the Secretary-General of the United Nations of the jurisdiction it has established under its national law in accordance with paragraph 2 of the present article . Should any change take place , the State Party concerned shall immediately notify the Secretary-General . Each State Party shall likewise take such measures as may be necessary to establish its jurisdiction over the offences set forth in article 2 in cases where the alleged offender is present in its territory and it does not extradite that person to any of the States Parties which have established their jurisdiction in accordance with paragraph 1 or 2 of the present article . This Convention does not exclude the exercise of any criminal jurisdiction established by a State Party in accordance with its national law . Article 10 Upon receiving information that an offence set forth in article 2 has been committed or is being committed in the territory of a State Party or that a person who has committed or who is alleged to have committed such an offence may be present in its territory , the State Party concerned shall take such measures as may be necessary under its national law to investigate the facts contained in the information . Upon being satisfied that the circumstances so warrant , the State Party in whose territory the offender or alleged offender is present shall take the appropriate measures under its national law so as to ensure that person 's presence for the purpose of prosecution or extradition . Any person regarding whom the measures referred to in paragraph 2 of the present article are being taken shall be entitled to : ( a ) Communicate without delay with the nearest appropriate representative of the State of which that person is a national or which is otherwise entitled to protect that person 's rights or , if that person is a stateless person , the State in the territory of which that person habitually resides ; ( b ) Be visited by a representative of that State ; ( c ) Be informed of that person 's rights under subparagraphs ( a ) and ( b ) . The rights referred to in paragraph 3 of the present article shall be exercised in conformity with the laws and regulations of the State in the territory of which the offender or alleged offender is present , subject to the provision that the said laws and regulations must enable full effect to be given to the purposes for which the rights accorded under paragraph 3 are intended . The provisions of paragraphs 3 and 4 of the present article shall be without prejudice to the right of any State Party having a claim to jurisdiction in accordance with article 9 , subparagraph 1 ( c ) or 2 ( c ) , to invite the International Committee of the Red Cross to communicate with and visit the alleged offender . When a State Party , pursuant to the present article , has taken a person into custody , it shall immediately notify , directly or through the Secretary-General of the United Nations , the States Parties which have established jurisdiction in accordance with article 9 , paragraphs 1 and 2 and , if it considers it advisable , any other interested States Parties , of the fact that that person is in custody and of the circumstances which warrant that person 's detention . The State which makes the investigation contemplated in paragraph 1 of the present article shall promptly inform the said States Parties of its findings and shall indicate whether it intends to exercise jurisdiction . Article 11 The State Party in the territory of which the alleged offender is present shall , in cases to which article 9 applies , if it does not extradite that person , be obliged , without exception whatsoever and whether or not the offence was committed in its territory , to submit the case without undue delay to its competent authorities for the purpose of prosecution , through proceedings in accordance with the laws of that State . Those authorities shall take their decision in the same manner as in the case of any other offence of a grave nature under the law of that State . Whenever a State Party is permitted under its national law to extradite or otherwise surrender one of its nationals only upon the condition that the person will be returned to that State to serve the sentence imposed as a result of the trial or proceeding for which the extradition or surrender of the person was sought , and this State and the State seeking the extradition of the person agree with this option and other terms they may deem appropriate , such a conditional extradition or surrender shall be sufficient to discharge the obligation set forth in paragraph 1 of the present article . Article 12 Any person who is taken into custody or regarding whom any other measures are taken or proceedings are carried out pursuant to this Convention shall be guaranteed fair treatment , including enjoyment of all rights and guarantees in conformity with the law of the State in the territory of which that person is present and applicable provisions of international law , including international law of human rights . Article 13 The offences set forth in article 2 shall be deemed to be included as extraditable offences in any extradition treaty existing between any of the States Parties before the entry into force of this Convention . States Parties undertake to include such offences as extraditable offences in every extradition treaty to be subsequently concluded between them . When a State Party which makes extradition conditional on the existence of a treaty receives a request for extradition from another State Party with which it has no extradition treaty , the requested State Party may , at its option , consider this Convention as a legal basis for extradition in respect of the offences set forth in article 2. Extradition shall be subject to the other conditions provided by the law of the requested State . States Parties which do not make extradition conditional on the existence of a treaty shall recognize the offences set forth in article 2 as extraditable offences between themselves , subject to the conditions provided by the law of the requested State . If necessary , the offences set forth in article 2 shall be treated , for the purposes of extradition between States Parties , as if they had been committed not only in the place in which they occurred but also in the territory of the States that have established jurisdiction in accordance with article 9 , paragraphs 1 and 2. The provisions of all extradition treaties and arrangements between States Parties with regard to offences set forth in article 2 shall be deemed to be modified as between States Parties to the extent that they are incompatible with this Convention . Article 14 States Parties shall afford one another the greatest measure of assistance in connection with investigations or criminal or extradition proceedings brought in respect of the offences set forth in article 2 , including assistance in obtaining evidence at their disposal necessary for the proceedings . States Parties shall carry out their obligations under paragraph 1 of the present article in conformity with any treaties or other arrangements on mutual legal assistance that may exist between them . In the absence of such treaties or arrangements , States Parties shall afford one another assistance in accordance with their national law . Article 15 None of the offences set forth in article 2 shall be regarded , for the purposes of extradition or mutual legal assistance , as a political offence or as an offence connected with a political offence or as an offence inspired by political motives . Accordingly , a request for extradition or for mutual legal assistance based on such an offence may not be refused on the sole ground that it concerns a political offence or an offence connected with a political offence or an offence inspired by political motives . Article 16 Nothing in this Convention shall be interpreted as imposing an obligation to extradite or to afford mutual legal assistance if the requested State Party has substantial grounds for believing that the request for extradition for offences set forth in article 2 or for mutual legal assistance with respect to such offences has been made for the purpose of prosecuting or punishing a person on account of that person 's race , religion , nationality , ethnic origin or political opinion or that compliance with the request would cause prejudice to that person 's position for any of these reasons . Article 17 A person who is being detained or is serving a sentence in the territory of one State Party whose presence in another State Party is requested for purposes of testimony , identification or otherwise providing assistance in obtaining evidence for the investigation or prosecution of offences under this Convention may be transferred if the following conditions are met : ( a ) The person freely gives his or her informed consent ; and ( b ) The competent authorities of both States agree , subject to such conditions as those States may deem appropriate . For the purposes of the present article : ( a ) The State to which the person is transferred shall have the authority and obligation to keep the person transferred in custody , unless otherwise requested or authorized by the State from which the person was transferred ; ( b ) The State to which the person is transferred shall without delay implement its obligation to return the person to the custody of the State from which the person was transferred as agreed beforehand , or as otherwise agreed , by the competent authorities of both States ; ( c ) The State to which the person is transferred shall not require the State from which the person was transferred to initiate extradition proceedings for the return of the person ; ( d ) The person transferred shall receive credit for service of the sentence being served in the State from which he was transferred for time spent in the custody of the State to which he was transferred . Unless the State Party from which a person is to be transferred in accordance with the present article so agrees , that person , whatever his or her nationality , shall not be prosecuted or detained or subjected to any other restriction of his or her personal liberty in the territory of the State to which that person is transferred in respect of acts or convictions anterior to his or her departure from the territory of the State from which such person was transferred . Article 18 Upon seizing or otherwise taking control of radioactive material , devices or nuclear facilities , following the commission of an offence set forth in article 2 , the State Party in possession of it shall : ( a ) Take steps to render harmless the radioactive material , device or nuclear facility ; ( b ) Ensure that any nuclear material is held in accordance with applicable International Atomic Energy Agency safeguards ; and ( c ) Have regard to physical protection recommendations and health and safety standards published by the International Atomic Energy Agency . Upon the completion of any proceedings connected with an offence set forth in article 2 , or sooner if required by international law , any radioactive material , device or nuclear facility shall be returned , after consultations ( in particular , regarding modalities of return and storage ) with the States Parties concerned to the State Party to which it belongs , to the State Party of which the natural or legal person owning such radioactive material , device or facility is a national or resident , or to the State Party from whose territory it was stolen or otherwise unlawfully obtained . 3(1 ) Where a State Party is prohibited by national or international law from returning or accepting such radioactive material , device or nuclear facility or where the States Parties concerned so agree , subject to paragraph 3(2 ) of the present article , the State Party in possession of the radioactive material , devices or nuclear facilities shall continue to take the steps described in paragraph 1 of the present article ; such radioactive material , devices or nuclear facilities shall be used only for peaceful purposes . 3(2 ) Where it is not lawful for the State Party in possession of the radioactive material , devices or nuclear facilities to possess them , that State shall ensure that they are as soon as possible placed in the possession of a State for which such possession is lawful and which , where appropriate , has provided assurances consistent with the requirements of paragraph 1 of the present article in consultation with that State , for the purpose of rendering it harmless ; such radioactive material , devices or nuclear facilities shall be used only for peaceful purposes . If the radioactive material , devices or nuclear facilities referred to in paragraphs 1 and 2 of the present article do not belong to any of the States Parties or to a national or resident of a State Party or was not stolen or otherwise unlawfully obtained from the territory of a State Party , or if no State is willing to receive such item pursuant to paragraph 3 of the present article , a separate decision concerning its disposition shall , subject to paragraph 3(2 ) of the present article , be taken after consultations between the States concerned and any relevant international organizations . For the purposes of paragraphs 1 , 2 , 3 and 4 of the present article , the State Party in possession of the radioactive material , device or nuclear facility may request the assistance and cooperation of other States Parties , in particular the States Parties concerned , and any relevant international organizations , in particular the International Atomic Energy Agency . States Parties and the relevant international organizations are encouraged to provide assistance pursuant to this paragraph to the maximum extent possible . The States Parties involved in the disposition or retention of the radioactive material , device or nuclear facility pursuant to the present article shall inform the Director General of the International Atomic Energy Agency of the manner in which such an item was disposed of or retained . The Director General of the International Atomic Energy Agency shall transmit the information to the other States Parties . In the event of any dissemination in connection with an offence set forth in article 2 , nothing in the present article shall affect in any way the rules of international law governing liability for nuclear damage , or other rules of international law . Article 19 The State Party where the alleged offender is prosecuted shall , in accordance with its national law or applicable procedures , communicate the final outcome of the proceedings to the Secretary-General of the United Nations , who shall transmit the information to the other States Parties . Article 20 States Parties shall conduct consultations with one another directly or through the Secretary-General of the United Nations , with the assistance of international organizations as necessary , to ensure effective implementation of this Convention . Article 21 The States Parties shall carry out their obligations under this Convention in a manner consistent with the principles of sovereign equality and territorial integrity of States and that of non-intervention in the domestic affairs of other States . Article 22 Nothing in this Convention entitles a State Party to undertake in the territory of another State Party the exercise of jurisdiction and performance of functions which are exclusively reserved for the authorities of that other State Party by its national law . Article 23 Any dispute between two or more States Parties concerning the interpretation or application of this Convention which cannot be settled through negotiation within a reasonable time shall , at the request of one of them , be submitted to arbitration . If , within six months from the date of the request for arbitration , the parties are unable to agree on the organization of the arbitration , any one of those parties may refer the dispute to the International Court of Justice , by application , in conformity with the Statute of the Court . Each State may , at the time of signature , ratification , acceptance or approval of this Convention or accession thereto , declare that it does not consider itself bound by paragraph 1 of the present article . The other States Parties shall not be bound by paragraph 1 with respect to any State Party which has made such a reservation . Any State which has made a reservation in accordance with paragraph 2 of the present article may at any time withdraw that reservation by notification to the Secretary-General of the United Nations . Article 24 This Convention shall be open for signature by all States from ____________ until ____________ at United Nations Headquarters in New York . This Convention is subject to ratification , acceptance or approval . The instruments of ratification , acceptance or approval shall be deposited with the Secretary-General of the United Nations . This Convention shall be open to accession by any State . The instruments of accession shall be deposited with the Secretary-General of the United Nations . Article 25 This Convention shall enter into force on the thirtieth day following the date of the deposit of the twenty-second instrument of ratification , acceptance , approval or accession with the Secretary-General of the United Nations . For each State ratifying , accepting , approving or acceding to the Convention after the deposit of the twenty-second instrument of ratification , acceptance , approval or accession , the Convention shall enter into force on the thirtieth day after deposit by such State of its instrument of ratification , acceptance , approval or accession . Article 26 A State Party may propose an amendment to this Convention . The proposed amendment shall be submitted to the Depositary , who circulates it immediately to all States Parties . If the majority of the States Parties request the Depositary to convene a Conference to consider the proposed amendments , the Depositary shall invite all States Parties to attend such a Conference to begin not sooner than three months after the invitations are issued . The Conference shall make every effort to ensure amendments are adopted by consensus . Should this not be possible , amendments shall be adopted by a two-thirds majority of all States Parties . Any amendment adopted at the Conference shall be promptly circulated by the Depositary to all States Parties . The amendment adopted pursuant to paragraph 3 of the present article shall enter into force for each State Party that deposits its instrument of ratification , acceptance , accession or approval of the amendment on the thirtieth day after the date on which two thirds of the States Parties have deposited their relevant instrument . Thereafter , the amendment shall enter into force for any State Party on the thirtieth day after the date on which that State deposits its relevant instrument . Article 27 Any State Party may denounce this Convention by written notification to the Secretary-General of the United Nations . Denunciation shall take effect one year following the date on which notification is received by the Secretary-General of the United Nations . Article 28 The original of this Convention , of which the Arabic , Chinese , English , French , Russian and Spanish texts are equally authentic , shall be deposited with the Secretary-General of the United Nations , who shall send certified copies thereof to all States . In witness whereof , the undersigned , being duly authorized thereto by their respective Governments , have signed this Convention , opened for signature at United Nations Headquarters in New York on __________________ . General Assembly resolution 50/6 of 24 October 1995. </text>
<text id="un/A_C3_61_L17">
Sixty-first session Third Committee Agenda item 68 Report of the Human Rights Council Andorra , Argentina , Austria , Bangladesh , Belgium , Benin , Bolivia , Brazil , Bulgaria , Burundi , Cameroon , Cape Verde , Chile , Congo , Croatia , Cuba , Cyprus , Czech Republic , Ecuador , Estonia , Finland , France , Gabon , Georgia , Germany , Greece , Guinea-Bissau , Haiti , Honduras , Hungary , Iceland , Ireland , Italy , Latvia , Liechtenstein , Lithuania , Luxembourg , Madagascar , Malawi , Mali , Malta , Mauritius , Mexico , Monaco , Morocco , Netherlands , Nigeria , Norway , Panama , Paraguay , Peru , Poland , Portugal , Republic of Korea , Romania , Slovakia , Slovenia , South Africa , Spain , Switzerland , Uganda , United Republic of Tanzania and Venezuela ( Bolivarian Republic of ) : draft resolution* International Convention for the Protection of All Persons from Enforced Disappearance The General Assembly , Taking note of Human Rights Council resolution 1/1 of 29 June 2006 , by which the Council adopted the International Convention for the Protection of All Persons from Enforced Disappearance , Hails the Council 's adoption of the International Convention for the Protection of All Persons from Enforced Disappearance ; 1 Adopts and opens for signature , ratification and accession the International Convention for the Protection of All Persons from Enforced Disappearance , the text of which is annexed to the present resolution ; Recommends that the Convention be opened for signature at a signing ceremony in Paris . Annex International Convention for the Protection of All Persons from Enforced Disappearance Preamble The States Parties to this Convention , Considering the obligation of States under the Charter of the United Nations to promote universal respect for , and observance of , human rights and fundamental freedoms , Having regard to the Universal Declaration of Human Rights , Recalling the International Covenant on Economic , Social and Cultural Rights , the International Covenant on Civil and Political Rights and the other relevant international instruments in the fields of human rights , humanitarian law and international criminal law , Also recalling the Declaration on the Protection of All Persons from Enforced Disappearance adopted by the General Assembly of the United Nations in its resolution 47/133 of 18 December 1992 , Aware of the extreme seriousness of enforced disappearance , which constitutes a crime and , in certain circumstances defined in international law , a crime against humanity , Determined to prevent enforced disappearances and to combat impunity for the crime of enforced disappearance , Considering the right of any person not to be subjected to enforced disappearance , the right of victims to justice and to reparation , Affirming the right of any victim to know the truth about the circumstances of an enforced disappearance and the fate of the disappeared person , and the right to freedom to seek , receive and impart information to this end , Have agreed on the following articles : Part I Article 1 No one shall be subjected to enforced disappearance . No exceptional circumstances whatsoever , whether a state of war or a threat of war , internal political instability or any other public emergency , may be invoked as a justification for enforced disappearance . Article 2 For the purposes of this Convention , “ enforced disappearance ” is considered to be the arrest , detention , abduction or any other form of deprivation of liberty by agents of the State or by persons or groups of persons acting with the authorization , support or acquiescence of the State , followed by a refusal to acknowledge the deprivation of liberty or by concealment of the fate or whereabouts of the disappeared person , which places such a person outside the protection of the law . Article 3 Each State Party shall take appropriate measures to investigate acts defined in article 2 committed by persons or groups of persons acting without the authorization , support or acquiescence of the State and to bring those responsible to justice . Article 4 Each State Party shall take the necessary measures to ensure that enforced disappearance constitutes an offence under its criminal law . Article 5 The widespread or systematic practice of enforced disappearance constitutes a crime against humanity as defined in applicable international law and shall attract the consequences provided for under such applicable international law . Article 6 Each State Party shall take the necessary measures to hold criminally responsible at least : ( a ) Any person who commits , orders , solicits or induces the commission of , attempts to commit , is an accomplice to or participates in an enforced disappearance ; ( b ) A superior who : ( i ) Knew , or consciously disregarded information which clearly indicated , that subordinates under his or her effective authority and control were committing or about to commit a crime of enforced disappearance ; ( ii ) Exercised effective responsibility for and control over activities which were concerned with the crime of enforced disappearance ; and ( iii ) Failed to take all necessary and reasonable measures within his or her power to prevent or repress the commission of an enforced disappearance or to submit the matter to the competent authorities for investigation and prosecution ; ( c ) Subparagraph ( b ) above is without prejudice to the higher standards of responsibility applicable under relevant international law to a military commander or to a person effectively acting as a military commander . No order or instruction from any public authority , civilian , military or other , may be invoked to justify an offence of enforced disappearance . Article 7 Each State Party shall make the offence of enforced disappearance punishable by appropriate penalties which take into account its extreme seriousness . Each State Party may establish : ( a ) Mitigating circumstances , in particular for persons who , having been implicated in the commission of an enforced disappearance , effectively contribute to bringing the disappeared person forward alive or make it possible to clarify cases of enforced disappearance or to identify the perpetrators of an enforced disappearance ; ( b ) Without prejudice to other criminal procedures , aggravating circumstances , in particular in the event of the death of the disappeared person or the commission of an enforced disappearance in respect of pregnant women , minors , persons with disabilities or other particularly vulnerable persons . Article 8 Without prejudice to article 5 , A State Party which applies a statute of limitations in respect of enforced disappearance shall take the necessary measures to ensure that the term of limitation for criminal proceedings : ( a ) Is of long duration and is proportionate to the extreme seriousness of this offence ; ( b ) Commences from the moment when the offence of enforced disappearance ceases , taking into account its continuous nature . Each State Party shall guarantee the right of victims of enforced disappearance to an effective remedy during the term of limitation . Article 9 Each State Party shall take the necessary measures to establish its competence to exercise jurisdiction over the offence of enforced disappearance : ( a ) When the offence is committed in any territory under its jurisdiction or on board a ship or aircraft registered in that State ; ( b ) When the alleged offender is one of its nationals ; ( c ) When the disappeared person is one of its nationals and the State Party considers it appropriate . Each State Party shall likewise take such measures as may be necessary to establish its competence to exercise jurisdiction over the offence of enforced disappearance when the alleged offender is present in any territory under its jurisdiction , unless it extradites or surrenders him or her to another State in accordance with its international obligations or surrenders him or her to an international criminal tribunal whose jurisdiction it has recognized . This Convention does not exclude any additional criminal jurisdiction exercised in accordance with national law . Article 10 Upon being satisfied , after an examination of the information available to it , that the circumstances so warrant , any State Party in whose territory a person suspected of having committed an offence of enforced disappearance is present shall take him or her into custody or take such other legal measures as are necessary to ensure his or her presence . The custody and other legal measures shall be as provided for in the law of that State Party but may be maintained only for such time as is necessary to ensure the person 's presence at criminal , surrender or extradition proceedings . A State Party which has taken the measures referred to in paragraph 1 of this article shall immediately carry out a preliminary inquiry or investigations to establish the facts . It shall notify the States Parties referred to in article 9 , paragraph 1 , of the measures it has taken in pursuance of paragraph 1 of this article , including detention and the circumstances warranting detention , and of the findings of its preliminary inquiry or its investigations , indicating whether it intends to exercise its jurisdiction . Any person in custody pursuant to paragraph 1 of this article may communicate immediately with the nearest appropriate representative of the State of which he or she is a national , or , if he or she is a stateless person , with the representative of the State where he or she usually resides . Article 11 The State Party in the territory under whose jurisdiction a person alleged to have committed an offence of enforced disappearance is found shall , if it does not extradite that person or surrender him or her to another State in accordance with its international obligations or surrender him or her to an international criminal tribunal whose jurisdiction it has recognized , submit the case to its competent authorities for the purpose of prosecution . These authorities shall take their decision in the same manner as in the case of any ordinary offence of a serious nature under the law of that State Party . In the cases referred to in article 9 , paragraph 2 , the standards of evidence required for prosecution and conviction shall in no way be less stringent than those which apply in the cases referred to in article 9 , paragraph 1. Any person against whom proceedings are brought in connection with an offence of enforced disappearance shall be guaranteed fair treatment at all stages of the proceedings . Any person tried for an offence of enforced disappearance shall benefit from a fair trial before a competent , independent and impartial court or tribunal established by law . Article 12 Each State Party shall ensure that any individual who alleges that a person has been subjected to enforced disappearance has the right to report the facts to the competent authorities , which shall examine the allegation promptly and impartially and , where necessary , undertake without delay a thorough and impartial investigation . Appropriate steps shall be taken , where necessary , to ensure that the complainant , witnesses , relatives of the disappeared person and their defence counsel , as well as persons participating in the investigation , are protected against all ill-treatment or intimidation as a consequence of the complaint or any evidence given . Where there are reasonable grounds for believing that a person has been subjected to enforced disappearance , the authorities referred to in paragraph 1 of this article shall undertake an investigation , even if there has been no formal complaint . Each State Party shall ensure that the authorities referred to in paragraph 1 of this article : ( a ) Have the necessary powers and resources to conduct the investigation effectively , including access to the documentation and other information relevant to their investigation ; ( b ) Have access , if necessary with the prior authorization of a judicial authority , which shall rule promptly on the matter , to any place of detention or any other place where there are reasonable grounds to believe that the disappeared person may be present . Each State Party shall take the necessary measures to prevent and sanction acts that hinder the conduct of an investigation . It shall ensure in particular that persons suspected of having committed an offence of enforced disappearance are not in a position to influence the progress of an investigation by means of pressure or acts of intimidation or reprisal aimed at the complainant , witnesses , relatives of the disappeared person or their defence counsel , or at persons participating in the investigation . Article 13 For the purposes of extradition between States Parties , the offence of enforced disappearance shall not be regarded as a political offence or as an offence connected with a political offence or as an offence inspired by political motives . Accordingly , a request for extradition based on such an offence may not be refused on these grounds alone . The offence of enforced disappearance shall be deemed to be included as an extraditable offence in any extradition treaty existing between States Parties before the entry into force of this Convention . States Parties undertake to include the offence of enforced disappearance as an extraditable offence in any extradition treaty subsequently to be concluded between them . If a State Party which makes extradition conditional on the existence of a treaty receives a request for extradition from another State Party with which it has no extradition treaty , it may consider this Convention as the necessary legal basis for extradition in respect of the offence of enforced disappearance . States Parties which do not make extradition conditional on the existence of a treaty shall recognize the offence of enforced disappearance as an extraditable offence between themselves . Extradition shall , in all cases , be subject to the conditions provided for by the law of the requested State Party or by applicable extradition treaties , including , in particular , conditions relating to the minimum penalty requirement for extradition and the grounds upon which the requested State Party may refuse extradition or make it subject to certain conditions . Nothing in this Convention shall be interpreted as imposing an obligation to extradite if the requested State Party has substantial grounds for believing that the request has been made for the purpose of prosecuting or punishing a person on account of that person 's sex , race , religion , nationality , ethnic origin , political opinions or membership of a particular social group , or that compliance with the request would cause harm to that person for any one of these reasons . Article 14 States Parties shall afford one another the greatest measure of mutual legal assistance in connection with criminal proceedings brought in respect of an offence of enforced disappearance , including the supply of all evidence at their disposal that is necessary for the proceedings . Such mutual legal assistance shall be subject to the conditions provided for by the domestic law of the requested State Party or by applicable treaties on mutual legal assistance , including , in particular , the conditions in relation to the grounds upon which the requested State Party may refuse to grant mutual legal assistance or may make it subject to conditions . Article 15 States Parties shall cooperate with each other and shall afford one another the greatest measure of mutual assistance with a view to assisting victims of enforced disappearance , and in searching for , locating and releasing disappeared persons and , in the event of death , in exhuming and identifying them and returning their remains . Article 16 No State Party shall expel , return ( “ refouler ” ) , surrender or extradite a person to another State where there are substantial grounds for believing that he or she would be in danger of being subjected to enforced disappearance . For the purpose of determining whether there are such grounds , the competent authorities shall take into account all relevant considerations , including , where applicable , the existence in the State concerned of a consistent pattern of gross , flagrant or mass violations of human rights or of serious violations of international humanitarian law . Article 17 No one shall be held in secret detention . Without prejudice to other international obligations of the State Party with regard to the deprivation of liberty , each State Party shall , in its legislation : ( a ) Establish the conditions under which orders of deprivation of liberty may be given ; ( b ) Indicate those authorities authorized to order the deprivation of liberty ; ( c ) Guarantee that any person deprived of liberty shall be held solely in officially recognized and supervised places of deprivation of liberty ; ( d ) Guarantee that any person deprived of liberty shall be authorized to communicate with and be visited by his or her family , counsel or any other person of his or her choice , subject only to the conditions established by law , or , if he or she is a foreigner , to communicate with his or her consular authorities , in accordance with applicable international law ; ( e ) Guarantee access by the competent and legally authorized authorities and institutions to the places where persons are deprived of liberty , if necessary with prior authorization from a judicial authority ; ( f ) Guarantee that any person deprived of liberty or , in the case of a suspected enforced disappearance , since the person deprived of liberty is not able to exercise this right , any persons with a legitimate interest , such as relatives of the person deprived of liberty , their representatives or their counsel , shall , in all circumstances , be entitled to take proceedings before a court , in order that the court may decide without delay on the lawfulness of the deprivation of liberty and order the person 's release if such deprivation of liberty is not lawful . Each State Party shall assure the compilation and maintenance of one or more up-to-date official registers and/or records of persons deprived of liberty , which shall be made promptly available , upon request , to any judicial or other competent authority or institution authorized for that purpose by the law of the State Party concerned or any relevant international legal instrument to which the State concerned is a party . The information contained therein shall include , as a minimum : ( a ) The identity of the person deprived of liberty ; ( b ) The date , time and place where the person was deprived of liberty and the identity of the authority that deprived the person of liberty ; ( c ) The authority that ordered the deprivation of liberty and the grounds for the deprivation of liberty ; ( d ) The authority responsible for supervising the deprivation of liberty ; ( e ) The place of deprivation of liberty , the date and time of admission to the place of deprivation of liberty and the authority responsible for the place of deprivation of liberty ; ( f ) Elements relating to the state of health of the person deprived of liberty ; ( g ) In the event of death during the deprivation of liberty , the circumstances and cause of death and the destination of the remains ; ( h ) The date and time of release or transfer to another place of detention , the destination and the authority responsible for the transfer . Article 18 Subject to articles 19 and 20 , each State Party shall guarantee to any person with a legitimate interest in this information , such as relatives of the person deprived of liberty , their representatives or their counsel , access to at least the following information : ( a ) The authority that ordered the deprivation of liberty ; ( b ) The date , time and place where the person was deprived of liberty and admitted to the place of deprivation of liberty ; ( c ) The authority responsible for supervising the deprivation of liberty ; ( d ) The whereabouts of the person deprived of liberty , including , in the event of a transfer to another place of deprivation of liberty , the destination and the authority responsible for the transfer ; ( e ) The date , time and place of release ; ( f ) Elements relating to the state of health of the person deprived of liberty ; ( g ) In the event of death during the deprivation of liberty , the circumstances and cause of death and the destination of the remains . Appropriate measures shall be taken , where necessary , to protect the persons referred to in paragraph 1 of this article , as well as persons participating in the investigation , from any ill-treatment , intimidation or sanction as a result of the search for information concerning a person deprived of liberty . Article 19 Personal information , including medical and genetic data , which is collected and/or transmitted within the framework of the search for a disappeared person shall not be used or made available for purposes other than the search for the disappeared person . This is without prejudice to the use of such information in criminal proceedings relating to an offence of enforced disappearance or the exercise of the right to obtain reparation . The collection , processing , use and storage of personal information , including medical and genetic data , shall not infringe or have the effect of infringing the human rights , fundamental freedoms or human dignity of an individual . Article 20 Only where a person is under the protection of the law and the deprivation of liberty is subject to judicial control may the right to information referred to in article 18 be restricted , on an exceptional basis , where strictly necessary and where provided for by law , and if the transmission of the information would adversely affect the privacy or safety of the person , hinder a criminal investigation , or for other equivalent reasons in accordance with the law , and in conformity with applicable international law and with the objectives of this Convention . In no case shall there be restrictions on the right to information referred to in article 18 that could constitute conduct defined in article 2 or be in violation of article 17 , paragraph 1. Without prejudice to consideration of the lawfulness of the deprivation of a person 's liberty , States Parties shall guarantee to the persons referred to in article 18 , paragraph 1 , the right to a prompt and effective judicial remedy as a means of obtaining without delay the information referred to in article 18 , paragraph 1. This right to a remedy may not be suspended or restricted in any circumstances . Article 21 Each State Party shall take the necessary measures to ensure that persons deprived of liberty are released in a manner permitting reliable verification that they have actually been released . Each State Party shall also take the necessary measures to assure the physical integrity of such persons and their ability to exercise fully their rights at the time of release , without prejudice to any obligations to which such persons may be subject under national law . Article 22 Without prejudice to article 6 , each State Party shall take the necessary measures to prevent and impose sanctions for the following conduct : ( a ) Delaying or obstructing the remedies referred to in article 17 , paragraph 2 ( f ) , and article 20 , paragraph 2 ; ( b ) Failure to record the deprivation of liberty of any person , or the recording of any information which the official responsible for the official register knew or should have known to be inaccurate ; ( c ) Refusal to provide information on the deprivation of liberty of a person , or the provision of inaccurate information , even though the legal requirements for providing such information have been met . Article 23 Each State Party shall ensure that the training of law enforcement personnel , civil or military , medical personnel , public officials and other persons who may be involved in the custody or treatment of any person deprived of liberty includes the necessary education and information regarding the relevant provisions of this Convention , in order to : ( a ) Prevent the involvement of such officials in enforced disappearances ; ( b ) Emphasize the importance of prevention and investigations in relation to enforced disappearances ; ( c ) Ensure that the urgent need to resolve cases of enforced disappearance is recognized . Each State Party shall ensure that orders or instructions prescribing , authorizing or encouraging enforced disappearance are prohibited . Each State Party shall guarantee that a person who refuses to obey such an order will not be punished . Each State Party shall take the necessary measures to ensure that the persons referred to in paragraph 1 of this article who have reason to believe that an enforced disappearance has occurred or is planned report the matter to their superiors and , where necessary , to the appropriate authorities or bodies vested with powers of review or remedy . Article 24 For the purposes of this Convention , “ victim ” means the disappeared person and any individual who has suffered harm as the direct result of an enforced disappearance . Each victim has the right to know the truth regarding the circumstances of the enforced disappearance , the progress and results of the investigation and the fate of the disappeared person . Each State Party shall take appropriate measures in this regard . Each State Party shall take all appropriate measures to search for , locate and release disappeared persons and , in the event of death , to locate , respect and return their remains . Each State Party shall ensure in its legal system that the victims of enforced disappearance have the right to obtain reparation and prompt , fair and adequate compensation . The right to obtain reparation referred to in paragraph 4 of this article covers material and moral damages and , where appropriate , other forms of reparation such as : ( a ) Restitution ; ( b ) Rehabilitation ; ( c ) Satisfaction , including restoration of dignity and reputation ; ( d ) Guarantees of non-repetition . Without prejudice to the obligation to continue the investigation until the fate of the disappeared person has been clarified , each State Party shall take the appropriate steps with regard to the legal situation of disappeared persons whose fate has not been clarified and that of their relatives , in fields such as social welfare , financial matters , family law and property rights . Each State Party shall guarantee the right to form and participate freely in organizations and associations concerned with attempting to establish the circumstances of enforced disappearances and the fate of disappeared persons , and to assist victims of enforced disappearance . Article 25 Each State Party shall take the necessary measures to prevent and punish under its criminal law : ( a ) The wrongful removal of children who are subjected to enforced disappearance , children whose father , mother or legal guardian is subjected to enforced disappearance or children born during the captivity of a mother subjected to enforced disappearance ; ( b ) The falsification , concealment or destruction of documents attesting to the true identity of the children referred to in subparagraph ( a ) above . Each State Party shall take the necessary measures to search for and identify the children referred to in paragraph 1 ( a ) of this article and to return them to their families of origin , in accordance with legal procedures and applicable international agreements . States Parties shall assist one another in searching for , identifying and locating the children referred to in paragraph 1 ( a ) of this article . Given the need to protect the best interests of the children referred to in paragraph 1 ( a ) of this article and their right to preserve , or to have re-established , their identity , including their nationality , name and family relations as recognized by law , States Parties which recognize a system of adoption or other form of placement of children shall have legal procedures in place to review the adoption or placement procedure , and , where appropriate , to annul any adoption or placement of children that originated in an enforced disappearance . In all cases , and in particular in all matters relating to this article , the best interests of the child shall be a primary consideration , and a child who is capable of forming his or her own views shall have the right to express those views freely , the views of the child being given due weight in accordance with the age and maturity of the child . Part II Article 26 A Committee on Enforced Disappearances ( hereinafter referred to as “ the Committee ” ) shall be established to carry out the functions provided for under this Convention . The Committee shall consist of ten experts of high moral character and recognized competence in the field of human rights , who shall serve in their personal capacity and be independent and impartial . The members of the Committee shall be elected by the States Parties according to equitable geographical distribution . Due account shall be taken of the usefulness of the participation in the work of the Committee of persons having relevant legal experience and of balanced gender representation . The members of the Committee shall be elected by secret ballot from a list of persons nominated by States Parties from among their nationals , at biennial meetings of the States Parties convened by the Secretary General of the United Nations for this purpose . At those meetings , for which two thirds of the States Parties shall constitute a quorum , the persons elected to the Committee shall be those who obtain the largest number of votes and an absolute majority of the votes of the representatives of States Parties present and voting . The initial election shall be held no later than six months after the date of entry into force of this Convention . Four months before the date of each election , the Secretary-General of the United Nations shall address a letter to the States Parties inviting them to submit nominations within three months . The Secretary-General shall prepare a list in alphabetical order of all persons thus nominated , indicating the State Party which nominated each candidate , and shall submit this list to all States Parties . The members of the Committee shall be elected for a term of four years . They shall be eligible for re-election once . However , the term of five of the members elected at the first election shall expire at the end of two years ; immediately after the first election , the names of these five members shall be chosen by lot by the chairman of the meeting referred to in paragraph 2 of this article . If a member of the Committee dies or resigns or for any other reason can no longer perform his or her Committee duties , the State Party which nominated him or her shall , in accordance with the criteria set out in paragraph 1 of this article , appoint another candidate from among its nationals to serve out his or her term , subject to the approval of the majority of the States Parties . Such approval shall be considered to have been obtained unless half or more of the States Parties respond negatively within six weeks of having been informed by the Secretary-General of the United Nations of the proposed appointment . The Committee shall establish its own rules of procedure . The Secretary-General of the United Nations shall provide the Committee with the necessary means , staff and facilities for the effective performance of its functions . The Secretary-General of the United Nations shall convene the initial meeting of the Committee . The members of the Committee shall be entitled to the facilities , privileges and immunities of experts on mission for the United Nations , as laid down in the relevant sections of the Convention on the Privileges and Immunities of the United Nations . Each State Party shall cooperate with the Committee and assist its members in the fulfilment of their mandate , to the extent of the Committee 's functions that the State Party has accepted . Article 27 A Conference of the States Parties will take place at the earliest four years and at the latest six years following the entry into force of this Convention to evaluate the functioning of the Committee and to decide , in accordance with the procedure described in article 44 , paragraph 2 , whether it is appropriate to transfer to another body — without excluding any possibility — the monitoring of this Convention , in accordance with the functions defined in articles 28 to 36. Article 28 In the framework of the competencies granted by this Convention , the Committee shall cooperate with all relevant organs , offices and specialized agencies and funds of the United Nations , with the treaty bodies instituted by international instruments , with the special procedures of the United Nations and with the relevant regional intergovernmental organizations or bodies , as well as with all relevant State institutions , agencies or offices working towards the protection of all persons against enforced disappearances . As it discharges its mandate , the Committee shall consult other treaty bodies instituted by relevant international human rights instruments , in particular the Human Rights Committee instituted by the International Covenant on Civil and Political Rights , with a view to ensuring the consistency of their respective observations and recommendations . Article 29 Each State Party shall submit to the Committee , through the Secretary-General of the United Nations , a report on the measures taken to give effect to its obligations under this Convention , within two years after the entry into force of this Convention for the State Party concerned . The Secretary-General of the United Nations shall make this report available to all States Parties . Each report shall be considered by the Committee , which shall issue such comments , observations or recommendations as it may deem appropriate . The comments , observations or recommendations shall be communicated to the State Party concerned , which may respond to them , on its own initiative or at the request of the Committee . The Committee may also request States Parties to provide additional information on the implementation of this Convention . Article 30 A request that a disappeared person should be sought and found may be submitted to the Committee , as a matter of urgency , by relatives of the disappeared person or their legal representatives , their counsel or any person authorized by them , as well as by any other person having a legitimate interest . If the Committee considers that a request for urgent action submitted in pursuance of paragraph 1 of this article : ( a ) Is not manifestly unfounded ; ( b ) Does not constitute an abuse of the right of submission of such requests ; ( c ) Has already been duly presented to the competent bodies of the State Party concerned , such as those authorized to undertake investigations , where such a possibility exists ; ( d ) Is not incompatible with the provisions of this Convention ; and ( e ) The same matter is not being examined under another procedure of international investigation or settlement of the same nature ; it shall request the State Party concerned to provide it with information on the situation of the persons sought , within a time limit set by the Committee . In the light of the information provided by the State Party concerned in accordance with paragraph 2 of this article , the Committee may transmit recommendations to the State Party , including a request that the State Party should take all the necessary measures , including interim measures , to locate and protect the person concerned in accordance with this Convention and to inform the Committee , within a specified period of time , of measures taken , taking into account the urgency of the situation . The Committee shall inform the person submitting the urgent action request of its recommendations and of the information provided to it by the State as it becomes available . The Committee shall continue its efforts to work with the State Party concerned for as long as the fate of the person sought remains unresolved . The person presenting the request shall be kept informed . Article 31 A State Party may at the time of ratification of this Convention or at any time afterwards declare that it recognizes the competence of the Committee to receive and consider communications from or on behalf of individuals subject to its jurisdiction claiming to be victims of a violation by this State Party of provisions of this Convention . The Committee shall not admit any communication concerning a State Party which has not made such a declaration . The Committee shall consider a communication inadmissible where : ( a ) The communication is anonymous ; ( b ) The communication constitutes an abuse of the right of submission of such communications or is incompatible with the provisions of this Convention ; ( c ) The same matter is being examined under another procedure of international investigation or settlement of the same nature ; or where ( d ) All effective available domestic remedies have not been exhausted . This rule shall not apply where the application of the remedies is unreasonably prolonged . If the Committee considers that the communication meets the requirements set out in paragraph 2 of this article , it shall transmit the communication to the State Party concerned , requesting it to provide observations and comments within a time limit set by the Committee . At any time after the receipt of a communication and before a determination on the merits has been reached , the Committee may transmit to the State Party concerned for its urgent consideration a request that the State Party will take such interim measures as may be necessary to avoid possible irreparable damage to the victims of the alleged violation . Where the Committee exercises its discretion , this does not imply a determination on admissibility or on the merits of the communication . The Committee shall hold closed meetings when examining communications under the present article . It shall inform the author of a communication of the responses provided by the State Party concerned . When the Committee decides to finalize the procedure , it shall communicate its views to the State Party and to the author of the communication . Article 32 A State Party to this Convention may at any time declare that it recognizes the competence of the Committee to receive and consider communications in which a State Party claims that another State Party is not fulfilling its obligations under this Convention . The Committee shall not receive communications concerning a State Party which has not made such a declaration , nor communications from a State Party which has not made such a declaration . Article 33 If the Committee receives liable information indicating that a State Party is seriously violating the provisions of this Convention , it may , after consultation with the State Party concerned , request one or more of its members to undertake a visit and report back to it without delay . The Committee shall notify the State Party concerned , in writing , of its intention to organize a visit , indicating the composition of the delegation and the purpose of the visit . The State Party shall answer the Committee within a reasonable time . Upon a substantiated request by the State Party , the Committee may decide to postpone or cancel its visit . If the State Party agrees to the visit , the Committee and the State Party concerned shall work together to define the modalities of the visit and the State Party shall provide the Committee with all the facilities needed for the successful completion of the visit . Following its visit , the Committee shall communicate to the State Party concerned its observations and recommendations . Article 34 If the Committee receives information which appears to it to contain well-founded indications that enforced disappearance is being practised on a widespread or systematic basis in the territory under the jurisdiction of a State Party , it may , after seeking from the State Party concerned all relevant information on the situation , urgently bring the matter to the attention of the General Assembly of the United Nations , through the Secretary-General of the United Nations . Article 35 The Committee shall have competence solely in respect of enforced disappearances which commenced after the entry into force of this Convention . If a State becomes a party to this Convention after its entry into force , the obligations of that State vis-à-vis the Committee shall relate only to enforced disappearances which commenced after the entry into force of this Convention for the State concerned . Article 36 The Committee shall submit an annual report on its activities under this Convention to the States Parties and to the General Assembly of the United Nations . Before an observation on a State Party is published in the annual report , the State Party concerned shall be informed in advance and shall be given reasonable time to answer . This State Party may request the publication of its comments or observations in the report . Part III Article 37 Nothing in this Convention shall affect any provisions which are more conducive to the protection of all persons from enforced disappearance and which may be contained in : ( a ) The law of a State Party ; ( b ) International law in force for that State . Article 38 This Convention is open for signature by all Member States of the United Nations . This Convention is subject to ratification by all Member States of the United Nations . Instruments of ratification shall be deposited with the Secretary-General of the United Nations . This Convention is open to accession by all Member States of the United Nations . Accession shall be effected by the deposit of an instrument of accession with the Secretary-General . Article 39 This Convention shall enter into force on the thirtieth day after the date of deposit with the Secretary-General of the United Nations of the twentieth instrument of ratification or accession . For each State ratifying or acceding to this Convention after the deposit of the twentieth instrument of ratification or accession , this Convention shall enter into force on the thirtieth day after the date of the deposit of that State 's instrument of ratification or accession . Article 40 The Secretary-General of the United Nations shall notify all States Members of the United Nations and all States which have signed or acceded to this Convention of the following : ( a ) Signatures , ratifications and accessions under article 38 ; ( b ) The date of entry into force of this Convention under article 39. Article 41 The provisions of this Convention shall apply to all parts of federal States without any limitations or exceptions . Article 42 Any dispute between two or more States Parties concerning the interpretation or application of this Convention which cannot be settled through negotiation or by the procedures expressly provided for in this Convention shall , at the request of one of them , be submitted to arbitration . If within six months from the date of the request for arbitration the Parties are unable to agree on the organization of the arbitration , any one of those Parties may refer the dispute to the International Court of Justice by request in conformity with the Statute of the Court . A State may , at the time of signature or ratification of this Convention or accession thereto , declare that it does not consider itself bound by paragraph 1 of this article . The other States Parties shall not be bound by paragraph 1 of this article with respect to any State Party having made such a declaration . Any State Party having made a declaration in accordance with the provisions of paragraph 2 of this article may at any time withdraw this declaration by notification to the Secretary-General of the United Nations . Article 43 This Convention is without prejudice to the provisions of international humanitarian law , including the obligations of the High Contracting Parties to the four Geneva Conventions of 12 August 1949 and the two Additional Protocols thereto of 8 June 1977 , or to the opportunity available to any State Party to authorize the International Committee of the Red Cross to visit places of detention in situations not covered by international humanitarian law . Article 44 Any State Party to this Convention may propose an amendment and file it with the Secretary General of the United Nations . The Secretary-General shall thereupon communicate the proposed amendment to the States Parties to this Convention with a request that they indicate whether they favour a conference of States Parties for the purpose of considering and voting upon the proposal . In the event that within four months from the date of such communication at least one third of the States Parties favour such a conference , the Secretary-General shall convene the conference under the auspices of the United Nations . Any amendment adopted by a majority of two thirds of the States Parties present and voting at the conference shall be submitted by the Secretary-General of the United Nations to all the States Parties for acceptance . An amendment adopted in accordance with paragraph 1 of this article shall enter into force when two thirds of the States Parties to this Convention have accepted it in accordance with their respective constitutional processes . When amendments enter into force , they shall be binding on those States Parties which have accepted them , other States Parties still being bound by the provisions of this Convention and any earlier amendment which they have accepted . Article 45 This Convention , of which the Arabic , Chinese , English , French , Russian and Spanish texts are equally authentic , shall be deposited with the Secretary-General of the United Nations . The Secretary-General of the United Nations shall transmit certified copies of this Convention to all States referred to in article 38. * Text recommended by the Human Rights Council for adoption by the General Assembly ( see Official Records of the General Assembly , Sixty-first Session , Supplement No. 53 ( A/61/53 ) , part one , chap . Official Records of the General Assembly , Sixty-first Session , Supplement No. 53 ( A/61/53 ) , part one , chap . II . A , resolution 1/1 , annex . </text>
<text id="un/APLC_MSP2_2000_1">
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 . </text>
<text id="un/CCW_APII_CONF4_SR2">
Geneva , 11 December 2002 SUMMARY RECORD OF THE 2nd MEETING Held at the Palais des Nations , Geneva , on Wednesday , 11 December 2002 , at 4.25 p. m. President : Mr. FAESSLER ( Switzerland ) GENERAL EXCHANGE OF VIEWS ( PLENARY ) ( continued ) The meeting was called to order at 4.25 p. m. GENERAL EXCHANGE OF VIEWS ( PLENARY ) ( agenda item 8 ) ( continued ) Mr. DOĞAN ( Turkey ) , reiterating his country 's commitment to the elimination of all anti-personnel mines , said that Turkey welcomed any measures adopted to that end , whether at the bilateral or multilateral level . In January 2002 , it had decided to extend indefinitely its moratorium on the export and transfer of anti-personnel landmines , thereby demonstrating its genuine wish to become party to the Ottawa Convention . In addition to concluding bilateral agreements with its neighbouring countries to demine frontier areas , it had also contributed $50,000 to the demining activities conducted in Bosnia and Herzegovina with the assistance of Turkish troops and had provided financial support for demining projects conducted on the northern frontier of Albania , following the Kosovo conflict . By August 2002 , Turkey had already cleared more than 10,000 mines . In addition , it had set up demining and coordination centres and had trained demining teams . Turkey had suffered a great deal from terrorism and from the extensive use by terrorists of anti-personnel and anti-vehicle mines . Regrettably , terrorists did not consider themselves bound by existing legal instruments and attached scant importance to the increasing support enjoyed by such instruments . The international community should fight terrorism in a concerted manner and should use every possible means to bring terrorists and their accomplices to justice . Mr. SEETHARAM ( India ) said that he was obliged to refute the allegations made against his country by the organization Human Rights Watch . India strictly respected Amended Protocol II . Furthermore , the casualty figures cited by Human Rights Watch were unfounded and had clearly not been verified with the authorities , an omission which reflected badly on the organization . CONSIDERATION OF THE DEVELOPMENT OF TECHNOLOGIES TO PROTECT CIVILIANS AGAINST THE INDISCRIMINATE EFFECTS OF MINES ( agenda item 11 ) The PRESIDENT said that no delegation wished to take the floor on the agenda item . OTHER MATTERS ( agenda item 12 ) The PRESIDENT said that no delegation wished to take the floor on the agenda item . CONSIDERATION AND ADOPTION OF THE FINAL DOCUMENTS ( agenda item 13 ) ( CCW/AP . II/CONF.4/CRP.1 , English only ) The PRESIDENT drew attention to the draft report of the Fourth Annual Conference of the States Parties to Amended Protocol II , issued under symbol CCW/AP . II/CONF.4/CRP.1 , in English only , and invited the Conference to take it up paragraph by paragraph before adopting it in its entirety . Paragraphs 1-6 Paragraphs 1-6 were adopted . Paragraph 7 The PRESIDENT said that Morocco should be added to the list of States which had notified the depository of their consent to be bound by Amended Protocol II and had participated in the work of the Conference , bringing the number of such States to 46. Paragraph 7 , as completed , was adopted . Paragraph 8 Paragraph 8 was adopted . Paragraph 9 The PRESIDENT said that the secretariat had informed him that the Islamic Republic of Iran should be removed from the list of States not parties to Amended Protocol II which had participated as observers . Mr. HORUMBA ( Observer from Romania ) said that his country should be added to that list . Paragraph 9 , as amended and completed , was adopted . Paragraph 10 Paragraph 10 was adopted . Paragraph 11 Ms. WALKER ( International Campaign to Ban Landmines ) requested that the names of all the member organizations of the International Campaign to Ban Landmines which had attended the public meetings of the Conference should be listed in the paragraph . Paragraph 11 , as completed , was adopted . Paragraph 12 Increasing the number of vice-presidents of the Annual Conference Mr. WENSLEY ( South Africa ) suggested that the number of vice-presidents of the Annual Conference should be increased to three , to ensure the representation of each group of countries and China in the General Committee of the Conference , which would therefore also be more balanced . That would also entail amending rules 3 and 7 of the rules of procedure . The PRESIDENT said he took it that the Conference wished to increase the number of vice-presidents to three . It was so decided . Mr. WENSLEY ( South Africa ) suggested that the following text should therefore be added to paragraph 12 of the draft report under consideration : “ The Conference decided to amend rules 3 and 7 of the rules of procedure in order to increase the number of vice-presidents from two to three to secure a balanced representation of geographical groups in the General Committee of the Conference . Amended rule 3 will read as follows : ` The Conference shall elect from among the States parties participating in the Conference a president and three vice-presidents . These officers shall be elected so as to ensure the representative character of the General Committee provided for in rule 7. ' Amended rule 7 will read as follows : ` The General Committee shall be composed of the President , who shall preside , three vice-presidents and the chairs of any other subsidiary organs . ' ” Paragraph 12 , as completed , was adopted . Paragraphs 13 and 14 Paragraphs 13 and 14 were adopted . New paragraph 15 The PRESIDENT said that a new paragraph 15 should be added , to read as follows : “ At the same meeting , the Conference heard a message from the Secretary-General of the United Nations , which was read out by Mr. Enrique Román-Moray , Deputy Secretary-General of the Conference on Disarmament and Director of the Geneva Branch of the Department for Disarmament Affairs . ” New paragraph 15 was adopted . New paragraph 16 ( old paragraph 15 ) New paragraph 16 was adopted . New paragraph 17 ( old paragraph 16 ) The PRESIDENT said that the secretariat had informed him that Croatia and the United States of America should be added to the list of States which had submitted their annual reports . Mr. WENSLEY ( South Africa ) said that his country should also be added to the list . New paragraph 17 , as completed , was adopted . New paragraph 18 ( old paragraph 17 ) Mr. DAHINDEN ( Switzerland ) said that the following text should be added to new paragraph 18 : “ Switzerland suggested that a cover page should be added to the national annual reports , to simplify the transmission of information . This suggestion should be taken up in a decision to be adopted at the next Annual Conference ( see annex I ) . ” The thinking behind the suggestion was that , where the information was unchanged from one year to the next , there would be no need to submit a full new report : instead a mention on the cover page would suffice . New paragraph 18 , as completed , was adopted . New paragraph 19 ( old paragraph 18 ) Draft appeal issued by States parties to Amended Protocol II on the occasion of their Fourth Annual Conference ( CCW/AP . II/CONF.4/CRP.2 ) The PRESIDENT invited the Conference to consider and adopt the draft appeal by the States parties on the occasion of their Fourth Annual Conference , contained in document CCW/AP . II/CONF.4/CRP.2 and referred to in new paragraph 19 , before proceeding to the adoption of the paragraph . Recalling that the draft had been inspired by the appeal submitted by the States parties at their Third Annual Conference , held immediately prior to the Second Review Conference , he said that , in the informal consultations which he had held before the current meeting , one delegation had suggested that the text should be updated by deleting the paragraph which read : “ [ We ] welcome the opportunity provided by the Second Review Conference of the States parties to the Convention on Conventional Weapons to examine the operation and status of Amended Protocol II . ” The draft appeal issued under symbol CCW/AP . II/CONF.4/CRP.2 , as amended , was adopted . New paragraph 19 was adopted . New paragraph 20 ( old paragraph 19 ) New paragraph 20 was adopted with a minor editorial change to the English text . New paragraph 21 ( old paragraph 20 ) Designation of the president and vice-presidents of the Fifth Annual Conference Mr. HOLZENBERGER ( Germany ) said that several delegations , including his own , had put forward the idea of designating the president and the vice-presidents of the Fifth Annual Conference at the end of the Fourth Conference , so that the incoming president and vice-presidents could themselves take charge of the preparations for the Conference and would then be able to conduct their work on the basis of those preparations . That approach seemed more rational than requesting the outgoing president and vice-presidents to carry out the preparatory work and more conducive to the smooth running of the Conference . Mr. PETÖCZ ( Slovakia ) , speaking on behalf of the group of Eastern European States , said that his group supported the idea . Mr. DOROSIN ( United States of America ) wondered whether it would be valid to designate the president and the vice-presidents of the Fifth Annual Conference at the current Conference . The PRESIDENT explained that the designation at the current stage of the president and vice-presidents of the Fifth Annual Conference would have to be confirmed by their election at that Conference . He took it that the Conference wished to designate the president and the vice-presidents of the Fifth Annual Conference at the current stage . It was so decided . The PRESIDENT invited groups of States to put forward candidates for the posts of president and vice-presidents of the Fifth Annual Conference . Mr. PETÖCZ ( Slovakia ) , speaking on behalf of the group of Eastern European States , said that the group proposed Ambassador Tzantchev of Bulgaria as President of the Fifth Annual Conference . Mr. WENSLEY ( South Africa ) , speaking on behalf of the group of non-aligned and other countries , said that the group proposed the representative of South Africa as Vice-President of the Fifth Conference . It was not possible , at the current stage , to give the name of the South African representative who would perform those functions since the tour of duty of the ambassador currently serving in Geneva would end during the coming few months . Mr. FU Zhigang ( China ) said that China proposed that one of its representatives should also be designated Vice-President of the Fifth Annual Conference . Mr. HOLZENBERGER ( Germany ) , speaking on behalf of the group of Western countries , said that the group also proposed the Swiss Ambassador , Mr. Faessler as Vice-President of the Fifth Annual Conference . The PRESIDENT said that , if he heard no objection , he would take it that the Conference wished to designate the Bulgarian Ambassador , Mr. Tzantchev , as President of the Fifth Annual Conference and the representatives of South Africa and China , as well as the Ambassador of Switzerland , Mr. Faessler , as Vice-Presidents of the Conference . It was so decided . The PRESIDENT suggested that new paragraph 21 should be amended and completed in the light of the decision which the Conference had just adopted . It would therefore read as follows : “ The Conference decided that the incoming president and vice-presidents would be designated at the end of the current Conference , so as to ensure the continuity of the preparatory work of the presidency . Accordingly , the Conference decided to designate the Bulgarian Ambassador , Mr. Tzantchev , as President of the Annual Conference of States Parties to be held in 2003 and the representatives of South Africa and China , and the Ambassador of Switzerland , Mr. Faessler , as Vice-Presidents . ” New paragraph 21 , as modified and completed , was adopted . New paragraph 22 ( old paragraph 21 ) The PRESIDENT drew attention to the estimated costs which would be contained in document CCW/AP . II/CONF.4/3 and which were referred to in new paragraph 22. He pointed out that , in effect , there had been two sets of estimates , depending on whether the Conference lasted one or two days. He explained that the dates given in the estimates were very tentative and recalled that the dates and duration of the Fifth Annual Conference would be decided , as indicated in the paragraph under consideration , at the Meeting of States Parties to the Convention to be held on 12 and 13 December 2002. New paragraph 22 was adopted with a minor editorial change to the English text . New paragraph 23 ( old paragraph 22 ) Mr. FU Zhigang ( China ) questioned the wording of the paragraph , which stated that the President was requested to present the report of the Fourth Annual Conference of the States Parties to Amended Protocol II to the Meeting of States Parties to the Convention , to be held on 12 and 13 December 2002 , and wondered whether the States parties to Amended Protocol II were not themselves empowered to adopt the report of their own Fourth Annual Conference and why the report needed to be endorsed by the Meeting of States Parties . It had been his understanding that the Meeting of States Parties would have the sole purpose of considering the procedural report of the Group of Governmental Experts and deciding on follow-up to its work , as agreed by the Second Review Conference of the Convention . Mr. WENSLEY ( South Africa ) pointed out that , in 2001 , the States parties to Amended Protocol II had concluded that they should submit the report of their Third Annual Conference to the forthcoming Second Conference of States Parties , which would be responsible for reviewing the status and the operation of the Convention and its annexed protocols as a whole , including Amended Protocol II . He agreed with the representative of China that the mandate of the Meeting of States Parties on 12 and 13 December was quite different , since it had been tasked with considering the report of the Group of Governmental Experts and deciding on follow-up to its work . While he had no objection in principle to the President of the Fourth Annual Conference reporting to that Meeting , he did not believe that there was any real necessity for such a report . Mr. DA SILVA ( Brazil ) shared that view : the Meeting of States Parties on 12 and 13 December had been called with a view to considering the procedural report of the Group of Governmental Experts and it would be as well to confine it to that task . The PRESIDENT said he took it that all delegations agreed on that point . Accordingly , the second part of new paragraph 23 should be deleted and the paragraph should read as follows : “ At its final meeting , on 11 December 2002 , the Fourth Annual Conference adopted its report . ” New paragraph 23 , as amended , was adopted . The draft report of the Fourth Annual Conference of the States Parties to Amended Protocol II was adopted in its entirety . The PRESIDENT said that the Conference had concluded the consideration of its agenda . The PRESIDENT thanked all delegations and the staff of the secretariat and of Conference Services for their assistance and declared the Fourth Annual Conference of the States Parties to Amended Protocol II closed . The meeting rose at 5.30 p. m. This record is subject to correction . Corrections should be submitted in one of the working languages . They should be set forth in a memorandum and also incorporated in a copy of the record . They should be sent within one week of the date of this document to the Official Records Editing Section , room E.4108 , Palais des Nations , Geneva . Any corrections to the records of the meetings of this Conference will be consolidated in a single corrigendum , to be issued shortly after the end of the Conference . </text>
<text id="un/CD_1605">
27 January 2000 Original : ARABIC , CHINESE , ENGLISH , FRENCH , On 9 and 10 December 1999 , the President of the People 's Republic of China , Mr. Jiang Zemin and the President of the Russian Federation , Mr. Boris Yeltsin , held a second informal summit during which they had an in-depth exchange of views on issues of common interest . The two leaders issued a joint statement on 10 December 1999. Please find attached the text of the aforementioned joint statement in the Chinese and Russian languages . We would be grateful if the joint statement could be issued and ciruclated as an official document of the Conference on Disarmament . ( Signed ) HU Xiaodi ( Signed ) Vasily SIDOROV Ambassador Ambassador Deputy Permanent Representative Permanent Representative Head of delegation of the Head of delegation of the People 's Republic of China to the Russian Federation to the Conference on Disarmament Conference on Disarmament Annex Joint Chinese-Russian statement adopted on 10 December 1999 In the course of their second informal meeting , held in Beijing on 9 and 10 December 1999 , Mr. Jiang Zemin , President of the People 's Republic of China , and Mr. B. N. Yeltsin , President of the Russian Federation , held an in-depth exchange of views on questions of mutual interest . Afterwards , the two heads of State adopted the following statement : The two heads of State emphasize the importance and timeliness of the conclusions and assessments contained in the Russian-Chinese Joint Declaration on a Multipolar World and the Establishment of a New International Order of 23 April 1997 , the joint Russian-Chinese statement of 10 November 1997 , the joint statement on the results of the Russian-Chinese summit meeting on Russian-Chinese relations on the threshold of the twenty-first century , and the joint communiqué on the results of the Russian-Chinese summit meeting of 23 November 1998. The leaders of China and the Russian Federation reaffirm that they will strictly adhere to the principled approaches to international questions set forth in the above-mentioned documents . They advocate the establishment in the twenty-first century of a multipolar world based on the Charter of the United Nations and the applicable norms of international law , the strengthening of the leading role of the United Nations in international affairs , the peaceful settlement of international disputes by political means , equitable relations among all members of the international community and equal security for all , respect for each other 's choice of the path of development and each other 's sovereignty , non-interference in internal affairs and the creation of a just , equitable and mutually advantageous international political and economic order . The two sides appeal to all countries of the world to make concerted efforts for the creation of a democratic and balanced multipolar world structure in which the different cultures would exist harmoniously , cooperate constructively and enrich each other , and in which the equality of all sovereign States would be ensured . The two sides feel obliged to note the recent growth of unfavourable trends in the sphere of international security . The two sides consider that the creation , in violation of the Anti-Ballistic Missile Treaty of 1972 , of a national anti-ballistic-missile defence system by one of the States which signed that Treaty will have a destructive effect on strategic stability and on the entire structure of key international agreements relating to disarmament and the non-proliferation of weapons of mass destruction and means of their delivery , and will mar prospects for achieving further progress in these directions . The two sides reaffirm that they consider unacceptable any attempts to violate the Anti-Ballistic Missile Treaty of 1972 and emphasize that the Treaty has been and must remain a cornerstone of strategic stability . The two sides hold the view that the 1972 Treaty must be strictly and fully implemented . In this connection , the sides note in particular the importance of General Assembly resolution 54/54 A , of 1 December 1999 , entitled “ Preservation of and compliance with the Treaty on the Limitation of Anti-Ballistic Missile Systems ” , submitted by China , the Russian Federation and Belarus . The two sides point out that the plans of certain Governments to develop a regional anti-ballistic-missile defence system are liable to undermine peace and stability in the Asia and Pacific region . The Russian side supports the position of the Chinese side to the effect that the inclusion of the Chinese province of Taiwan in these plans in any form by any Government whatsoever is unacceptable . The two sides express deep regret over the refusal by the United States of America to ratify the Comprehensive Nuclear-Test-Ban Treaty . The two countries stress that they share identical or similar positions on a number of key issues , and this is a major prerequisite for joint or coordinated efforts to maintain strategic stability . These key issues include the prevention of an arms race in outer space or through the use of information technology , implementation of the treaty on the Non-Proliferation of Nuclear Weapons and the Chemical Weapons Convention , the elaboration of a protocol to the Biological Weapons Convention and the drafting of an agenda for the Conference on Disarmament . The Chinese side expresses its understanding of the position of the Russian side with regard to the further reduction of the strategic offensive weapons of the United States of America and the Russian Federation . The two sides consider that full responsibility for the consequences of any undermining of strategic stability and international security would rest with those States which caused the collapse of fundamental agreements in the field of disarmament . The sides maintain that , in the present situation , there is a growing need for close coordination of actions in the maintenance of global strategic stability . The two sides observe that certain adverse trends are increasingly discernible in international relations . These include the endeavour to foist on the international community a unipolar global structure and a single system of culture , values and ideology ; attempts to weaken the role of the United Nations and its Security Council ; the search for grounds to justify the irresponsible interpretation or revision of the fundamental contents and principles of the Charter of the United Nations ; the strengthening and expansion of military blocs ; the replacement of international law by pressure tactics and even the resort to military force ; the use of the concept which holds that “ human rights take precedence over sovereignty ” and of the theories of “ humanitarian intervention ” to infringe the sovereign rights of independent States . The two sides express their readiness , together with other countries , to oppose such trends , which prevent the establishment of an equitable , multipolar structure of international relationsIV The two sides emphasize that a major priority of the foreign-policy efforts of China and the Russian Federation is the affirmation of the leading role of the United Nations in world affairs . The two sides agree that the rational and carefully administered reform of the Organization will help to strengthen its authority and role . At the same time , the two sides express the conviction that the status and role of the Security Council , as the principal organ responsible for the maintenance of international peace and security , must under no circumstances be placed in doubt or weakened . The sides once again declare that the retention unchanged of the powers vested under the Charter in the existing permanent members of the Security Council is essential for maintaining the effectiveness and stability of the United Nations . China and the Russian Federation attach great importance to their admission to membership in the World Trade Organization ( WTO ) under conditions that would enable them to occupy an equitable and worthy place in the world-trade system , which would be in keeping with the interests of all members of that Organization . Negotiations on the admission of China and the Russian Federation into the WTO have reached a decisive stage . The two sides consider that the WTO should be universal in character and that , with regard to the conditions for the admission of new members , a balance should be maintained between rights and obligations , with consideration also being given to their level of socio-economic development . The two sides maintain that international terrorism , religious extremism and national separatism in all its forms , as well as transnational criminal activities ( such as illicit trafficking in arms , narcotic drugs and psychotropic and explosive substances , and economic offences ) have now become serious threats to the security of sovereign States and to international peace and security . The two sides reaffirm their determination to take practical , coordinated steps to combat those phenomena on both a bilateral and a multilateral basis . China and the Russian Federation express their satisfaction at the pace of implementation of the Bishkek Declaration , adopted by the heads of States members of the “ Shanghai Five ” ( the People 's Republic of China , the Republic of Kazakhstan , the Kyrgyz Republic , the Russian Federation and the Republic of Tajikistan ) on 25 August 1999 ( A/54/314-S/1999/942 , annex ) . The meeting of the senior law-enforcement officials of the five States held in Bishkek on 1 and 2 December 1999 was a significant practical step in that direction . The two sides consider that the meeting of ministers of defence of the countries of the “ Shanghai Five ” to be held in the year 2000 will be an important step towards implementing the agreements reached by the five heads of State . The two sides consider that the time is now ripe to begin preparations for a meeting of ministers for foreign affairs of the five States . The sides support the idea of conducting consultations among experts of the Five on questions of multilateral economic cooperation ( including cooperation in the transport field and in the extraction and transport of oil and gas ) . Such talks could become an important and integral part of preparations for a meeting of the heads of State of the People 's Republic of China , the Republic of Kazakhstan , the Kyrgyz Republic , the Russian Federation and the Republic of Tajikistan . The two sides underscore the need for the earliest possible resolution of the question of Iraq exclusively through political means in strict accordance with the norms of international law , in keeping with the central role of the Security Council and on the basis of the resolutions it has adopted . The resumption by Iraq of cooperation with the United Nations must be accompanied by the lifting of the economic sanctions imposed on that country . The two sides expressed serious concern about the development of the situation in and around Kosovo and the escalation of inter-ethnic tension in the region , particularly in connection with the unsatisfactory level of implementation of Security Council resolution 1244 ( 1999 ) and the growing trend towards separating Kosovo from the Federal Republic of Yugoslavia . China and the Russian Federation , as two permanent members of the Security Council , urge all interested parties to ensure the full and unconditional implementation of all provisions of resolution 1244 ( 1999 ) , full respect for the sovereignty and territorial integrity of the Federal Republic of Yugoslavia , the comprehensive and consistent observance of the Charter of the United Nations and of the universally recognized principles of international law , and respect for the legitimate rights of all nationalities in the Kosovo region . The two sides reaffirm their mutual support for the maintenance of each other 's national unity , sovereignty and territorial integrity . The Russian side , in supporting the important issue of the reunification of China , reaffirmed its position on the question of Taiwan set forth in earlier documents adopted jointly by the two sides , and declared that it could not accept affirmations that relations between the two sides situated on the opposing shores of the Taiwan Strait were “ relations between States ” . The Chinese side expressed satisfaction regarding the above-mentioned position of the Russian side . The Chinese side again declared that the Chechen problem was entirely an internal affair of the Russian Federation . The Chinese side supports the actions being taken by the Government of the Russian Federation to combat terrorist and separatist forces . The Russian side expressed satisfaction with regard to the above-mentioned position of the Chinese side . China and the Russian Federation , in pursuance of their goal of achieving an equitable and trusting strategic partnership , and also on the basis of the convergence or similarity of their positions both on questions of principle relating to the building of a multipolar , democratic and equitable world order and on specific current international problems , will strengthen cooperation in those directions . The cooperation of the two sides in international affairs is not directed against third countries ; rather , it is aimed at protecting their own fundamental national interests , but also at strengthening peace and stability in the Asia and Pacific region and throughout the world . Previously issued as document A/54/681-S/1999/1264 dated 20 December 1999. </text>
<text id="un/CD_1606">
9 February 2000 Original : CHINESE LETTER DATED 9 FEBRUARY 2000 FROM THE PERMANENT REPRESENTATIVE OF CHINA TO THE CONFERENCE ON DISARMAMENT ADDRESSED TO THE SECRETARY-GENERAL OF THE CONFERENCE TRANSMITTING A WORKING PAPER ENTITLED “ CHINA'S POSITION ON AND SUGGESTIONS FOR WAYS TO ADDRESS THE ISSUE OF PREVENTION OF AN ARMS RACE IN OUTER SPACE AT THE CONFERENCE ON DISARMAMENT ” On instructions from the Chinese Government , I have the honour to attach herewith a working paper entitled “ China 's position on and Suggestions for Ways to Address the Issue of Prevention of an Arms Race in Outer Space at the Conference on Disarmament ” . I would be grateful if this document could be issued and circulated as an official document of the Conference on Disarmament . ( Signed ) Hu Xiaodi Ambassador for Disarmament Affairs Head of the Delegation of China to the Conference on Disarmament China Working Paper CHINA'S POSITION ON AND SUGGESTIONS FOR WAYS TO ADDRESS Outer space belongs to all mankind . All countries have equal rights in the exploration and use of outer space for peaceful purposes although their levels of economic and scientific development may differ . It is the shared desire of all mankind to forestall the spread of weapons and an arms race in outer space . Some people believe that since currently there is no arms race in outer space , the CD has no need to discuss its prevention or negotiate the conclusion of international legal instruments in this regard . However , history and reality have both shown not only that there are indeed attempts , programmes and moves unilaterally to seek military and strategic superiority in or control over outer space but that there have been new developments in this respect . Such development , if unchecked , may lead to the weaponization of outer space in the near future or even to a multilateral arms race in outer space . Therefore , it is a present and pressing necessity for the international community to take effective measures to stop such negative developments . As the single multilateral disarmament negotiating forum , the Conference on Disarmament ( Conference ) should concentrate on the most pressing and prominent issues in international arms control and disarmament , the ones that have the greatest bearing on global peace and security in the twenty-first century . PAROS is one such important issue , and should therefore be a top priority at the Conference . The Conference should play a primary role in the negotiations to prevent any form of arms race in outer space . At its fifty-fourth session the United Nations General Assembly once again adopted , by an overwhelming majority , a resolution on PAROS . It was reaffirmed that negotiating an international agreement or agreements to prevent an arms race in outer space remains a priority task of the CD 's Ad Hoc Committee . The fact that the resolution was adopted without opposition reflects the common aspiration and insistent demand of the international community to prevent an arms race in outer space . The General Assembly also adopted at its fifty-fourth session , and also by an overwhelming majority , a resolution on preservation of and compliance with the Anti-Ballistic Missile Treaty , an issue that is related to the prevention of an arms race in outer space . In the resolution the General Assembly recognizes the historical role of the 1972 Treaty as a cornerstone for maintaining global peace and security and strategic stability , reaffirms its continued validity and relevance in the current international situation and supports further efforts by the international community in the light of emerging developments with the goal of safeguarding the inviolability and integrity of the ABM Treaty in which the international community bears strong interest . Since PAROS was put on the CD agenda in 1982 , the Conference has , through the establishment of the Ad Hoc Committee and other means , held discussions on definitions , principles , existing treaties and confidence-building measures , and accumulated experience in this field , preparing the ground for future work in this area . With the accelerated development of outer space weapons , anti-ballistic missiles and other weapon systems , individual countries have stepped up efforts to secure military superiority in outer space and have mapped out and are pursuing plans to secure military superiority on the ground from space . In these circumstances , preventing outer space from becoming a new venue for an arms race without prejudice to its peaceful uses has obviously become the most important and pressing task of the Conference . To accomplish this , the Conference must first re-establish the Ad Hoc Committee under agenda item 3 to negotiate and conclude an international legal instrument prohibiting the testing , deployment and use of weapons , weapon systems and components in outer space so as to prevent the weaponization of , and an arms race in , outer space . In carrying out its mandate , the Ad Hoc Committee must take into account all relevant developments and specific proposals , present and future . As a preliminary step towards the negotiation of an international legal instrument , it might discuss and review all pertinent issues , including current military activities in outer space and related developments , their influence on the prevention of an arms race in outer space ; shortcomings in the existing international instruments ; and the basic elements of the future international legal instrument . The Chinese delegation has taken note of the various ideas and suggestions on PAROS put forward in the CD . China believes that the re-established Ad Hoc Committee should be an open-ended , all-embracing mechanism where all participants may air and discuss different views . It should set as its ultimate goal and clear mandate the negotiation and conclusion of one or several international legal instruments to prevent the weaponization of and an arms race in outer space . A number of international legal instruments on the peaceful uses of outer space and the prevention of an arms race in outer space have been concluded . The 1963 Treaty Banning Nuclear Weapon Tests in the Atmosphere , in Outer Space and Under Water prohibits any nuclear weapon test explosion in outer space . The 1996 Comprehensive Nuclear Test Ban Treaty prohibits any nuclear weapon test explosion in any circumstances . According to the 1967 Treaty on Principles Governing the Activities of States in the Exploration and Use of Outer Space , including the Moon and other Celestial Bodies , outer space , including the moon and other celestial bodies , is not subject to national appropriation by claim of sovereignty , by means of use or occupation , or by any other means . States Parties to the Treaty undertake not to place in orbit around the Earth any objects carrying nuclear weapons or any other kinds of weapons of mass destruction , install such weapons on celestial bodies , or station such weapons in outer space in any other manner . The establishment of military bases , installations and fortifications , the testing of any type of weapons and the conduct of military manoeuvres on celestial bodies is forbidden . The 1972 Treaty between the United States and the Union of Soviet Socialist Republics on the Limitation of Anti-Ballistic Missile Systems prohibits the development , testing and deployment of space-based ABM systems or components . Besides these , the 1972 Convention on International Liability for Damage Caused by Space Objects , the 1975 Convention on Registration of Objects Launched into Outer Space and the 1979 Agreement Governing the Activities of States on the Moon and other Celestial Bodies all contain provisions on outer space activities which have helped to constrain some aspects of military activities in outer space to some extent . However , these instruments have been ineffective in preventing the weaponization of and an arms race in outer space . Some have imposed limited prohibitions and contained many loopholes and ambiguities . Some have not been fully complied with or are in danger of being violated , amended or even abrogated . Most crucially , as they have failed to reflect the latest developments in aerospace technology they cannot prevent the potential weaponization of outer space or an arms race in outer space in the twenty-first century . The Chinese delegation believes that the most direct and effective way to prevent the weaponization of and an arms race in outer space is to negotiate and conclude new international legal instruments while strictly observing the existing bilateral and multilateral agreements . CHINA'S BASIC POSITION ON PAROS China has always opposed arms races , in outer space and elsewhere . It maintains that the exploration and use of outer space should only serve to promote countries ' economic , scientific and cultural development and benefit all mankind . With the use of military satellites , outer space has already been militarized to some extent . Military satellites involve rather complex issues and their role should not be all together negated . Therefore , the primary goal at present in our efforts to prevent the weaponization of and an arms race in outer space is to ban the testing , deployment and use of weapons , weapon systems and components in outer space . What should be particularly emphasized is that the Powers with the greatest space capabilities bear a special responsibility for preventing the weaponization of and an arms race in outer space and ensuring the use of space for peaceful purposes . Pending the conclusion of a new multilateral legal instrument on the prevention of an arms race in outer space , all countries concerned should undertake not to test , deploy or use any weapons , weapon systems or components in outer space . The Chinese delegation tentatively suggests that the new international legal instruments to prevent the weaponization of and an arms race in outer space , in whatever form or by whatever name , might contain the following basic elements : Purposes : to prevent the weaponization of and an arms race in outer space , and to use outer space for peaceful purposes . Basic obligations : not to test , deploy or use weapons , weapon systems or components . Consideration could also be given to an article on “ permissible activities ” thus helping to distinguish between activities that are prohibited and those that are not , and thereby safeguarding States Parties ' lawful right to utilize outer space for peaceful purposes . An article on definitions , providing clear definitions of the concepts mentioned , e. g. “ outer space ” , “ space weapons ” , “ weapon systems ” and “ components of weapon systems ” . Provision for appropriate national implementation measures and the designation or establishment of organizations to ensure that States Parties implement the instruments consistently and effectively . An article on international cooperation in the peaceful use of outer space promoting international exchanges , technical assistance and cooperation for peaceful purposes so that all countries can share in the economic and technological benefits of scientific advances in outer space , and outer space truly serves all mankind . Verification : we must first consider fully how technically feasible it is , and on that basis determine whether to use inspections or alternative means to prevent treaty violations . Establishment of an appropriate mechanism for consultations , clarifications and resolution of possible disputes in order to appropriately address such suspicions and disputes as might arise among States Parties . Appropriate , rational and workable confidence-building measures to enhance mutual trust among States Parties and forestall unnecessary suspicion about particular activities . The procedural articles commonly found in international legal instruments dealing with amendment , length of validity , signature , ratification , entry into force , depository and authentic texts . These may of course also have to resolve some sensitive and key issues . The Chinese delegation wishes to emphasize that these are only tentative ideas that need to be developed . Our aim in putting them forward is to give all participants food for thought , pool our collective wisdom and encourage a fuller , more detailed examination of the relevant issues at the Conference . We will participate in such discussions and negotiations with an open mind , listening to and accepting good ideas and proposals from all parties and striving unremittingly to prevent the weaponization of and an arms race in outer space and to ensure the continued peaceful use of outer space for the benefit of all mankind . </text>
<text id="un/CD_1672">
28 May 2002 Original : SPANISH THE STATEMENT BY MR . FIDEL CASTRO RUZ , FIRST SECRETARY OF THE REPUBLIC OF CUBA , IN RESPONSE TO STATEMENTS MADE I have the honour to forward herewith the text of the statement made on 10 May 2002 by Fidel Castro Ruz , First Secretary of the Central Committee of the Communist Party of Cuba and President of the Councils of State and of Ministers of the Republic of Cuba , in response to statements made on 6 May 2002 by John Bolton , Under-Secretary of State of the United States of America . I should be grateful if you could arrange to have the enclosed text circulated as an official document of the Conference on Disarmament . ( Signed ) : Iván Mora Godoy Ambassador Permanent Representative “ There will always be weapons more powerful than those obtained through technology : the weapons of morality , reason and ideas ” Response by Commander-in-Chief Fidel Castro Ruz , First-Secretary of the Central Committee of the Communist Party of Cuba and President of the Councils of State and of Ministers , to statements made by the United States Government concerning biological weapons on 10 May 2002 , “ Year of the Heroic Prisoners of the Imperialists ” A mere three days ago , Otto Reich , Assistant Secretary of State , a person only too well known to us , was unmasked in an embarrassing lie when he said that four Cuban planes had landed in the Venezuelan capital on 12 April and : “ What they were doing there , what they were carrying , we do n't know . ” This was , it transpires , the beginning of an anti-Cuban campaign or an act of vengeance for the extraordinary debacle of the fascist coup which he had orchestrated , or both . When challenged publicly by the Cuban Ministry of Foreign Affairs on Tuesday , 7 May , the State Department said that it had no firm information , and did not wish to discuss the matter any further . The idea of destroying Cuba , an obsession which has lasted more than 43 years , has led and continues to lead United States policy down a tortuous path of lies , fiascos and blunders . The discrepancy between what the United States Government is telling the world today and what it is actually doing with Cuba represents the most egregious and demoralizing contradiction of its foreign policy . Never before has this super-Power found itself in such a compromising situation , which has left it no choice but to lie , lie and lie again . There is no shortage of unscrupulous characters in high public office prepared to do this , or of press spokesmen painfully contorting themselves to disavow the wrongdoings of their superiors and to explain the inexplicable in their statements . Even a man like Colin Powell , the son of Jamaican immigrants , who , notwithstanding his military training - or perhaps because of it - is not considered to be a warmonger since he knows war and has seen men die , a man whom many Americans have come to look on as a potential presidential candidate , has found himself embroiled by these characters in squalid machinations that do him little credit . He better than anyone else knows how inexperienced they are and can see what little political and intellectual worth they have . As for this new character who has entered the scene with his sinister manoeuvres against Cuba , whom is he hoping to deceive ? We refer to John Bolton , Under-Secretary of State , responsible for nothing less than arms control . What exactly is this official hoping to achieve with his inflammatory and aggressive speech against Cuba given at the Heritage Foundation , well known for its ultra-right stance ? These statements , purportedly an analysis of the dangers of terrorism threatening the United States , began by saying : “ In addition to Libya and Syria , there is a threat coming from another signatory to the Biological Weapons Convention , and one that lies just 90 miles from the United States mainland - namely , Cuba . ” Then , after the usual name-calling and absurd allegations filled with loathing that are so typical of arrogant and uninformed people , Mr Bolton added , this time off his own bat : “ We know that Cuba is collaborating with other State sponsors of terror . “ Castro has repeatedly denounced the United States ' war on terrorism . He continues to view terror as a legitimate tactic to further revolutionary objectives . Last year , Castro visited Iran , Syria and Libya - all designees on the same list of terrorist-sponsoring States . At Tehran University , these were his words : ` Iran and Cuba , in cooperation with each other , can bring America to its knees . The United States regime is very weak , and we are witnessing this weakness from close up . ' “ But Cuba 's threat to our security often has been underplayed . An official United States Government report in 1999 concluded that Cuba did not represent a significant military threat to the United States or the region . It went only so far as to say that ` Cuba has a limited capacity to engage in some military and intelligence activities which could pose a danger to United States citizens under some circumstances . ' ” Mr. Bolton then immediately started casting about for some explanation for the suspicious fact that no United States Government official had ever before thought to level such a deplorable accusation against Cuba . Bolton blames this weakness on William Cohen , who was United States Defence Secretary four years earlier when the much criticized report was issued . Bolton omitted to mention the fact that , a mere five months and two weeks before , on 19 November 2001 , he himself had not made the slightest reference to Cuba in his address to the Fifth Review Conference of the Parties to the Biological Weapons Convention in Geneva , when he cited many countries that were of concern to him as potential producers of biological weapons . So why this sudden and unexpected change ? Mr. Bolton 's scurrilous remarks of 6 May conclude with the allegation : “ For four decades Cuba has maintained a well developed and sophisticated biomedical industry , supported until 1990 by the Soviet Union . This industry is one of the most advanced in Latin America and leads in the production of pharmaceuticals and vaccines that are sold worldwide . Analysts and Cuban defectors have long cast suspicion on the activities conducted in these biomedical facilities . “ Here is what we now know : The United States believes that Cuba has at least a limited offensive biological warfare research-and-development effort . Cuba has provided dual-use biotechnology to other rogue States . We are concerned that such technology could support biological weapons programmes in those States . We call on Cuba to cease all biological weapons-applicable cooperation with rogue States and to comply fully with all of its obligations under the Biological Weapons Convention . ” Just as he had hoped , Mr. Bolton 's string of barefaced lies was immediately picked up by the international press . “ Washington , 6 May ( ANSA ) . Under-Secretary of State John Bolton today accused Cuba of helping ` enemy Governments ' with biological weapons programmes . “ ` Cuba has at least an offensive biological weapons programme and could be transferring its results to other States hostile to the United States ' , said Bolton . “ Under-Secretary Bolton was speaking to the Heritage Foundation , one of the ultra-conservative groups in Washington . ” “ Washington , 6 May ( DPA ) . The United States today accused Cuba of developing offensive biological weapons and of providing information about these weapons to States hostile to the United States , and urged President Fidel Castro 's Government to cease this cooperation . ” “ Washington , 6 May ( Reuters ) . On Monday , the United States accused three countries - Cuba , Libya and Syria - of trying to develop weapons of mass destruction and warned that it would take steps to prevent them from providing these arms to terrorist groups . “ ` States that sponsor terrorism and seek to obtain weapons of mass destruction must cease these activities ' , he said . ` States that renounce terror and abandon weapons of mass destruction can become part of our effort . But those which do not can expect to become our targets . ' ” “ Washington , 6 May ( EFE ) . The United States today added Cuba , Libya and Syria to the list of countries which form the ` axis of evil ' intent on manufacturing weapons of mass destruction , and warned that it would take steps to prevent them from supplying such weapons to terrorist organizations . ” “ Washington , 6 May ( Notimex ) . The United States today included Cuba on the so-called ` axis of evil ' , because it believed that it has the capacity to develop biological weapons which would pose a threat to its security , greater than that posed by Iraq , Iran and North Korea . ” “ Washington , 6 May ( AFP ) . On Monday , the United States warned Cuba against any proliferation of biological weapons , urging the island 's Government to cease any supplies of biotechnological equipment to countries that Washington considers potentially dangerous , such as Iraq and Libya . ” The list of such articles and reports on this issue could be continued indefinitely . So , the deed has already been done ! The whole world , and in particular the American public , which is constantly bombarded with shameless lies , has been fed the necessary information and is now ready to believe that Cuba is a biological power , that it has a programme for the production of such weapons and that it poses a danger to the United States . And , as this has been stated by Mr. John Bolton , the very distinguished Under-Secretary of State for Arms Control and International Security , we have to believe it . Tired old tricks and stupid arguments As the old saying goes , it is easier to catch a liar than a lame man . Some people in the United States itself find all this simply too hard to believe and are beginning to read between the lines . “ Washington , 7 May ( Notimex ) . The United States today refused to produce the evidence it claimed to have to back up accusations it had made against Cuba to the effect that the island had a limited capacity to develop chemical and biological weapons . “ The spokesmen of both the White House and the State Department maintained that the accusation against Cuba was not based on assumptions but on confidential information about the biological and chemical potential of the Cuban pharmaceutical industry . “ This accusation came as a surprise not only to the international community , but even to members of the United States Congress . According to the same dispatch , “ Political analysts pointed out that the accusation against Cuba by the Bush administration could form part of a White House strategy to justify moves to tighten its isolationist policy on Cuba . “ The statement that Cuba could pose a terrorist threat to United States security was made at a time when several proposals to relax Washington 's Cuba policy were being studied on Capitol Hill . “ Political analysts believe , however , that , given this possibility , and bearing in mind that his brother Jeb will be seeking re-election as Governor of Florida this year , President Bush is hoping to ingratiate himself with the Cuban exile community . “ Given that more than four decades of economic blockade against Cuba have not succeeded in removing Fidel Castro from power in Havana , the only people who want this isolationist policy to remain in effect and to be tightened are the great majority of the Cuban exile community in the United States . “ The possibility of including Cuba as a member of the so-called ` axis of evil ' , with Iraq , Iran and North Korea at its head , would make it easier for Bush to obtain Congress backing for moves to increase - rather than decrease - the economic stranglehold which it has on the island . ” “ Washington , 7 May ( AP ) . ` I think that it will hold up the adoption of any new steps towards an opening up of trade , ' said Bob Graham , chairman of the Senate Select Committee on Intelligence . ` Unilateral steps will be most affected . ' “ Graham did not hide his amazement at Bolton 's accusation , however . He said that , in March , the Committee he chairs had held a secret hearing on security-related issues and that the administration had made no mention of biological weapons . ” On 7 May , when a journalist asked White House spokesman Ari Fleischer : “ Is there any proof of this or is this an assumption by the United States ? ” Fleischer replied : “ No , it 's not an assumption . I assure you that Secretary Bolton would not have said it if he did not have good cause , reasons and facts to base it on . It was based on sound analysis and on information available to the United States Government , which it has studied . ” This is a typical reply by someone who has no grounds or substance for what he says . The only things being carefully studied are falsehoods and deceitful ploys . One pities this spokesman for the job he has to do . Besides , why should we believe Mr. Bolton anyway ? Anyone who remembers the 15 incredible pretexts , which have come to light today in declassified official documents , that were devised at the end of 1961 by the powers that be in the United States with the aim of launching a direct military attack against Cuba in 1962 , would find nothing surprising in this sinister fabrication . But we demand proof . Let them produce even the smallest shred of evidence ! They do not have any and they cannot have any since there is not and cannot be any such evidence . As there is not so much as an atom of truth in what they say , they should not now try and hide behind the alleged sensitivity of their sources . This is a worn out old trick and an extremely stupid argument , which only serves to show in what very low esteem they hold the American public , whose intelligence deserves greater respect . I will also say this : If Cuban scientists from any of our biotechnology institutes had been cooperating with any country in the development of biological weapons , or had tried to create such weapons on their own initiative they would immediately be hauled before a court of justice on a charge of treason . The Acts of Terrorism Act passed by the National Assembly of Cuba stipulates , in its article 10 : “ Anyone who manufactures , facilitates , sells , transports , transfers , introduces into the country or keeps in his or her possession , under any form or in any place [ … ] chemical or biological agents , or any other substance from which any product that fits this description can be derived through research , design or a combination thereof ” shall be liable to penalties of between 10 and 30 years privation of liberty , life imprisonment or death . This is , without question , a total fabrication , a treacherous blow against the sale of food to Cuba authorized by a law passed in 2000 , which has subsequently undergone countless modifications and amendments , introduced by those bitterly opposed to any lifting of the blockade , rendering it virtually unworkable , even when - despite everything - it was finally passed . Efforts are also being made to mislead and discourage the growing number of Americans who are increasingly repelled by the cruel and inhuman measures taken against the Cuban people , which fly in the face of the idealism and ethics of a nation which , for years and years , has been fed nothing but lies about Cuba . The only truth in Bolton 's falsehoods was the geographical fact that Cuba lies 90 miles from the continental territory of the United States . Slanderous invention , born of falsehood and deception It is false and a total distortion to assert that our country has repeatedly denounced the United States ' war against terrorism . I have said , and I stand by it , that the solution to this scourge will not be attained through war , which will serve only to breed hatred and fanaticism , but through sincere and determined cooperation among all countries in the world and by building a truly universal culture and mindset against terrorism . We were the first to suggest this form of cooperation , the very day of the tragedy in New York . It was a slanderous invention , born of falsehood and deception , to assert that Castro considers terrorism a legitimate tactic for furthering revolutionary objectives , since , as everyone knows , our revolutionary movement never practised any methods which were not consistent with our doctrine , our principles and our perception of armed struggle . You should get your facts straight , Mr. Bolton , and you should not be misled by the fictions narrated by your good friends in the Foundation . The civilian population and innocent people have never been the victims of our actions . Our tactic was always to fight against fully equipped enemy units . These days you seem to want to label as terrorism any armed resistance , regardless of the legitimate causes that may justify it . Applying this logic , you would be quite capable of describing as terrorism the struggle of the American colonists who rebelled and fought against English domination . George Washington and those who , after long years of war and enormous sacrifices , finally secured the independence of the United States were not terrorists . Your people led you astray , Mr. Bolton , when they told you about my address at the University of Tehran . It was not one address , but two , in two universities , and a few remarks which I made at the end of my visit to the mausoleum in which the body of the late Imam Khomeini lies . I have gone over them all in detail . In my address to the students in Tehran , there does not seem to be a single paragraph resembling that mendaciously cited in your statement on 6 May to the Heritage Foundation . At no point did I say that “ Iran and Cuba , in cooperation with each other , can bring America to its knees ” . I did say , in one of the three statements I made during the visit , that imperialism was bereft of ideas , that ideas were more powerful than weapons and that one day imperialism would collapse . I also said that the Shah “ was overthrown by the Iranian people through their heroism , and without weapons , which demonstrated the power of ideas and showed that there could never be any person in the world so powerful that he could not be brought down by ideas . This is our hope ” . And , at the end , I added : “ there is one super-Power which has thousands of nuclear weapons , aircraft , battleships , aircraft carriers , smart missiles [ … ] . However many weapons it may possess and however great its wealth , it will never be able to defeat the human spirit ” . I did not make the slightest allusion to the use of weapons in this struggle . Indeed , I said just the opposite . That is what I think , that is how I saw it then and that is what I said . I am not in the habit of hiding my thoughts or twisting my words . My three statements in the Iranian capital were broadcast on Cuban radio and television . Thus , Mr. Bolton did not uncover anything , nor do I renounce any of my ideas . I said some other things about political beliefs and principles . I have all the tapes and the transcripts of those statements and I can prove what I said . I should also point out that , when I visited Iran , I had the honour of discovering a country with a culture thousands of years old , with deep religious convictions and great spiritual strength ; a country anxious to eradicate poverty , to fight against drug trafficking and other such plagues , a country determined to bring education , health , employment and well-being to more than 65 million people . Not one of the many leaders with whom I talked said anything to me about biological weapons or weapons of any other kind . I was able to see what an immense difference there is between the culture and customs of that country and those of the West . Iran was not the only country I visited : I went also to Algeria , Malaysia , Qatar , Syria and , finally , Libya , where I was shown how Qadaffi 's family home had been destroyed and I heard about the loss of human life - including that of a little girl - inflicted by the brutal F-16 air raid . Those parts of the world which I visited possess a wealth of history thousands of years old , which must not be destroyed and neither must their populations be annihilated . Thousands of millions of people throughout the world have watched with profound indignation the televised images of the horrendous events in Palestine . When he referred to my statement in Iran , Mr. Bolton irresponsibly and dishonestly mixed up excerpts of what I had said with bits and pieces of statements made by other people and reported by foreign press agencies and information from other sources picked up from wire-service cables or material simply concocted by himself . He made such a dog 's breakfast of all this material that he himself can no longer make head or tail of it . My clear , precise and transparent statements can be found in the speeches I have mentioned and in the press communiqué of 10 May 2001 issued by both delegations , which , in paragraph 6 of the agreed document , sets out the Cuban position against terrorism , which states , and I quote : “ While condemning the phenomenon of terrorism in all its forms , especially State terrorism , the two parties agreed to cooperate closely at bilateral and international levels to fight against and eliminate this terrible phenomenon , to cooperate in efforts to combat international organized crime and drug trafficking , being always mindful of the cardinal principles of international law , and in particular those of sovereignty and non-interference in the internal affairs of States . ” This statement was issued 127 days before 11 September . I must thank Mr. Bolton for the praise which he heaps on our pharmaceutical industry : “ one of the most advanced in Latin America [ , which ] leads in the production of pharmaceuticals and vaccines that are sold worldwide , ” as he said in his own words . If only it were more advanced . Even his country could benefit from some of its attainments , but they would not permit it . He lies shamelessly , however , when he tells the American public and the world at large that the United States believes that Cuba is engaged in at least a limited offensive biological warfare research-and-development effort . This statement is as false as it is serious . Our researchers and doctors are educated in such a way as to instil in them a strong sense of solidarity and ethics . Millions of people in the world can testify to this . They work for the well-being and health of humankind . Over the last 40 years , 34,307 Cuban doctors and health workers have provided their services , free of charge , in a large number of poor countries , saving lives and safeguarding the health of millions of people . No one in the world could surpass them in their dedication and willingness to make sacrifices . At this very time , 2,671 of them are working in isolated and inhospitable areas of Latin America , the Caribbean and Africa . It would be very difficult to persuade these men and women to manufacture viruses and bacteria to kill children , women , old people or the citizens of any country . The pride and high moral standards of our people , which have enabled them to withstand 43 years of attacks and blockade , rest on the sound basis of a policy which is entirely consistent with all their ethics and principles . In all , some 39,800 young people from more than 120 Third-World countries have graduated in Cuba in 33 specialized academic and technical fields . Even under the prevailing conditions during this special period , induced by the cruel economic blockade , there are 8,053 young people from Latin America , the Caribbean and Africa following medical degree courses in our country - receiving training which , in the United States , costs more than $200,000 , without paying a single cent . Despite the lying allegations of Bolton and many others of his ilk , Cuba enjoys great recognition for the health services which it has rendered to humankind . These constitute a true fight against another form of terror , which many choose to ignore : the diseases which every year kill more than 11 million children , whose lives could be saved were it not for the selfish attitude of the industrialized world . An incalculable number of people survive or recover their health thanks to the selfless efforts of doctors from a small and poor country , who treat them with vaccines and preventive methods or therapies developed by Cuba . We would like to know if the United States Government is doing something similar or if it would be prepared to cooperate in such programmes for the benefit of what it euphemistically terms the “ emerging countries ” , since we have not excluded any economically developed country from participating in these programmes . We have offered hundreds of scholarships at the Latin American School of Medical Sciences to American youngsters who lack the funds to study medicine in their own country . Cuban children are vaccinated against 13 diseases and enjoy splendid health . The infant mortality rate per 1,000 live births is lower than that of the United States . Medical care is guaranteed to 100 per cent of the population and is provided absolutely free of charge . The sorry situation in the United States , with its more than 280 million inhabitants , where 16 per cent of the population , including more than 10 million children , have no medical insurance , is quite unknown in Cuba . In such an immensely rich and scientifically advanced country , where hundreds of thousands of citizens die every year for these reasons , who is held to blame ? Who kills these people and who denounces these deplorable facts ? How can they concoct such lies ? With what moral right dare they affirm from over there that we , in Cuba , are developing biological warfare ? Who is going to believe their monstrous slanders ? On the other hand , never over the 43 years of its history since the revolution has anyone in our country launched or taken part in any terrorist act mounted from our territory against the United States . Not a single drop of United States blood has been shed , nor has any company lost so much as a simple screw as a result of any terrorist act hatched in Cuba . This cannot be said about Cuba by those in the United States who accuse our country of terrorism , or of supporting or sponsoring terrorism . Thousands of our compatriots have died and tens of thousands of acts of sabotage have been recorded as part of terrorist activities and aggression mounted from the United States against Cuba . How can their spokesmen deny these glaring facts ? I am not referring here to the American public : I am referring to their Governments . Not the slightest attempt has been made to clarify the overriding question of the powers granted to United States Government officials to conduct extrajudicial executions and to kill people anywhere in the world . I myself have often been the target of their sinister plans . That was how they operated in the past . Have they or have they not now reverted to those repugnant methods ? Why does Mr. Bolton not tell us something about that instead ? Cuba 's irreproachable policy on weapons of mass destruction Where weapons of mass destruction are concerned , Cuba 's policies have been irreproachable . No one has ever produced a single shred of evidence that our country has embarked on a programme to develop nuclear , chemical or biological weapons . Even people who have no comprehension of the ethics , the attachment to the truth and the transparency which informs the conduct of a Government like that of Cuba will be able to understand at least that for Cuba to have acted in any other way would have been an act of immense stupidity . Any such programme would ruin the economy of a small country : Cuba would never have been able to transport such weapons and it would have been a further mistake to have used them in combat against an enemy which had thousands more such weapons and would have been only too delighted for an excuse to use them . From the political standpoint , we are living in an age that will bring weapons far more powerful than any that technology can produce : namely , the weapons of morality , reason and ideas . Without these , no country is powerful ; with them , no country is weak . To adhere to this maxim , any country needs to be extremely motivated , clear-headed and perspicacious . Let it be known that the Cuban people revere above all other things on earth the ideals that inspire freedom , dignity , love of their country , their identity and their culture , and the strictest possible adherence to justice . These are not weapons of mass destruction : they are weapons of mass moral defence and we are willing to fight and die for them . I understand that , for a man like Bolton , intoxicated with the military , economic and technological might of the super-Power on whose behalf he speaks , it might be difficult to understand these things . It would , however , be a good thing for him to try . Cuba has absolutely nothing to hide . On the contrary , it is proud of its progress in the field of biomedical research . Let us briefly review its history : 1979 : The Genetic Engineering Group was set up in the National Centre for Scientific Research ; 1981 : The first biotechnological scientific production institution designed for the manufacture of the Leukocyte Interferon was set up ; The pharmaceutical and biotechnological industry programme came into being as a result of the country 's scientific , economic and social development ; The necessary standards were set in place for inspection and certification by international agencies and the regulatory bodies of those countries with which Cuba was to have trade relations ; The period between 1990 and 1997 saw the development of the bulk of the investment programme , comprising 40 separate facilities ; An exclusively humanitarian industry is being developed , dedicated to the development and manufacture of medicines designed to prevent illnesses and to save lives , as well as to food production ; Technology and equipment used everywhere in the world is being purchased from commercial companies with international standing ; Under agreements entered into by Cuba with the Biological Weapons Convention , Cuba 's biotechnology , health system and civil defence sectors submit annual reports to the United Nations on confidence-building measures ; Regulatory bodies from many different countries have visited Cuban biotechnology production facilities as a prerequisite for the marketing of our products in their countries ; Over the next few years , more than 50 new products , including biopharmaceuticals , vaccines and diagnostic kits , will come onto the market ; Cuba already possesses a wealth of intellectual property , comprising more than 150 inventions and over 500 patents registered abroad . The results of Cuban scientific research are published in leading international journals ; 1990 : First exports of Cuban products , which have increased every year since ; 1992 : Cuba signed the Convention on Biological Diversity and ratified it in 1994 ; 1995 : Landmark forms of marketing are introduced : technology transfers , risk contracts for development projects with foreign companies , manufacturing and trading partnerships ; Today , products and technology of the Cuban biotechnology industry are to be found in more than 40 countries . Technology transfer agreements or negotiations have been concluded or are under way with 14 countries : India : 4 transfers , 4 products ; China : 2 transfers , 4 products ; Brazil : 2 transfers , 2 products ; Egypt : 4 transfers , 1 product under negotiation ; Malaysia : 6 transfers ; Iran : 4 transfers , 4 products ; Russia : 1 transfer , 1 product ; South Africa : 1 transfer , 1 product ; Tunisia : 1 transfer , 1 product ; Algeria : 1 transfer , 3 products ; United Kingdom - Belgium : 1 transfer , 1 product ; Venezuela : 1 transfer , 2 products under negotiation ; Mexico : 1 transfer , 1 product . New trade and production negotiations are under way with 10 countries : Malaysia , Netherlands , Spain , Brazil , Venezuela , Viet Nam , Mexico , Ukraine , Germany and the United States ( negotiations are under way with the United States on the use of the Cuban anti-meningitis vaccine and the first steps have been made towards possible clinical trials with the EGF vaccine for lung cancer ) . Cuba 's biotechnology centres have already registered : 24 products , including both biopharmaceuticals and vaccines ; 49 state-of-the-art generic medicines ; 5 products for treating AIDS ; 15 new types of medical equipment ; 24 diagnostic systems . In addition to these achievements , scientists and researchers are continuing work on 60 more projects , prominent among which are the following : 29 new vaccines , including 8 cancer vaccines , 4 of which are already undergoing clinical trials , not only in Cuba but also in Canada , Argentina and the United Kingdom ; 21 innovative products for treating cancer , which supplement the 28 cytostatic drugs that have already been identified and which a new plant will soon begin manufacturing . Cuba 's biotechnology centres have applied for patents for 150 inventions , which will bring the total of such patents to 505. Four of these have been awarded medals by the World Intellectual Property Organization ( WIPO ) . Countless prominent politicians , scientists and industrialists have visited Cuba 's biotechnology institutions . One of its main centres alone played host in 2000 to 1,520 visitors , 484 of whom came from the United States . The doors of our research centres are open to any international institution . In an official , public letter , Cuba has written to the Government of the United States to propose three major draft agreements , which are of greater benefit to the United States than to Cuba itself , given the very different magnitude of the problems in each of the two countries . The first is a draft agreement on immigration issues ; the second , a draft agreement on cooperation in controlling the illicit traffic in narcotic drugs and psychotropic substances ; and the third , a draft bilateral cooperation programme to combat terrorism . We have not received any reply . Does this mean that we are being accused of manufacturing biological weapons ? Whom do they hope to intimidate in this way ? We are urged to cease any biological weapons-related cooperation with “ rogue ” States and to comply with all our obligations under the Biological Weapons Convention . Which is the international organization that decides whether or not a country is a “ rogue ” State ? Precisely which rule of the Biological Weapons Convention has Cuba violated ? Is it that , on top of the criminal blockade , they would now ban us from marketing our medicines and using the most beneficial , the most noble products of the talents and hard work of our scientists , they would prevent us from placing these at the service of the health of people anywhere in the world ? Or could it be that the United States Government is seeking another bilateral agreement , in addition to those proposed by Cuba , namely , on cooperation in efforts to combat the production of biological weapons ? Please propose it . We would be happy to include it in our list of projects under consideration . We are sorry , Mr. Bolton . After the lies , slander , fabrications and insults promulgated in your statement on 6 May , we regret to have to tell you that you have no moral ground to harangue Cuba on this subject , still less to do so in a threatening tone and language . Nor can you presume to give Cuba any lessons in politics and ethics . In any event , you and your Government should draw inspiration from Cuba 's decent and honourable behaviour . I can assure you that , for this technology transfer , we shall be making no charge . </text>
<text id="un/CD_PV1080">
Held at the Palais des Nations , Geneva , on Thursday , 30 August 2007 , at 10.15 a. m. President : Mr. Faysal KHABBAZ HAMOUI ( Syrian Arab Republic ) The PRESIDENT ( spoke in Arabic ) : I declare open the 1080th plenary meeting of the Conference on Disarmament . At the outset , I should like to extend a warm welcome on behalf of the Conference on Disarmament to the participants in the United Nations Programme of Fellowships on Disarmament who are observing the proceedings of this plenary . I am quite sure they will benefit from their participation in this forum , especially from the presentations that will be made to them on the various aspects of the work of the Conference . On behalf of the Conference on Disarmament and on my own behalf , I should like to bid farewell to Ambassador Elisabeth Bonnier , our distinguished colleague from Sweden , who will be leaving Geneva soon to take up other important duties , having brought with her a wealth of experience gained within the Swedish Foreign Ministry and abroad , including a first round from 1983 to 1988 in the Conference on Disarmament and also as a member of the Secretary-General 's Advisory Board on Disarmament Matters . Ambassador Elisabeth Bonnier joined us in 2003 as the Permanent Representative of Sweden to the United Nations Office and other international organizations in Geneva . As a representative of a country with a pre-eminent focus on multilateral disarmament and non-proliferation , she has always been actively and insistently involved in the effort to break the deadlock in this body and to resume the substantive work . I should like to express my particular gratitude to her for her extensive efforts to end the stalemate in this body as one of the six Presidents of this year 's session . On behalf of the Conference and on my own behalf , I would like to convey to Ambassador Bonnier every wish for success and happiness . While we are sad to see Ambassador Bonnier leave Geneva , I am happy to extend a cordial welcome to our new colleague from Canada , Ambassador Marius Grinius . On behalf of the Conference on Disarmament and on my own behalf , I would like to assure Ambassador Grinius of our readiness to provide him with every kind of assistance and support for his work in Geneva . Before turning to the speakers for today , I would like to introduce the Presidential report on the third part of the 2007 session . I closely followed the consultations that the former President of the Conference on Disarmament , Ambassador Jürg Streuli , held on the Presidential proposal . I also followed the work of the six Presidents on the same matter . A series of meetings were held with a large number of Ambassadors of member States . Allow me to summarize the results of these activities as set forth in the Presidential report on part 3 of the 2007 session , which was distributed to you today by the secretariat . My evaluation of the results consists of three points . The first point is that a wide range of delegations expressed their support for the Presidential proposal based on the three annexed documents , L.1 CRP.5 and CRP.6 . Although some delegations expressed reservations about certain elements of the proposal , they said that they were willing to join the consensus on the proposal . Others expressed the view that more work and consultations were needed to reach a consensus . The second point is that the Conference on Disarmament has achieved substantial progress by conducting important thematic debates on all agenda items . However , it has not yet been able to reach a consensus on a programme of work . As to the third point , momentum has been created to end the long-standing impasse at the Conference on Disarmament and efforts to reach an agreement must be continued . This is the summary of the three points contained in the Presidential report on part 3 of the 2007 session . I should now like to open the floor to any delegations that wish to make a statement at today 's meeting . I have no speakers on my list . Does any delegation wish to take the floor ? The Ambassador of Sweden . You have the floor . Ms. BORSIIN BONNIER ( Sweden ) : Mr. President , I thank you very much , and initially , let me warmly welcome you on the assumption of the Chair of this august body . Although I will be leaving Geneva , I assure you that my delegation will continue to do its utmost to support you in the important tasks ahead . I also thank you warmly for your initial kind remarks on my person . This is my last plenary meeting , and therefore , in line with the traditions of the CD , I will conclude with a few personal remarks . Mr. President , for altogether nine years , as you noted , I have entered this Council chamber with hope and with expectations . I have seen this room being the anchor of sincere multilateral work to bring about a more secure world . At times the Conference on Disarmament has even been the centre of gravity for the international community in Geneva . I have seen it vibrating with energy , bold ideas , creative intellect focused on problem-solving and a determination to make a difference and to turn the tide . Important pieces of international law have been negotiated here ; compliance with vital norms has been discussed and defended with vigour and conviction . But I have also seen the opposite : an anaemic stalemate with delegations resorting to recitals of ceremonious mantras , covering up the traces of their own passivity with useless finger-pointing and blame games , hiding behind the commas of the rules of procedure and shamelessly abusing the consensus rule to abort any attempt to seriously tackle difficult or sensitive issues - in effect taking the whole multilateral approach to disarmament and arms control hostage to their own particular perceptions , preferences or dictates . But still , I continue to enter this room with hope and expectations . The certainties of yesterday are gone . Security perceptions , threats and challenges are in a state of flux . New dangers are emerging , adding to the burden of the old ones . But the debate of old versus new threats is a meaningless one . Unless we try to face both , neither will be dealt with . In the nuclear field we see more brinkmanship than statesmanship . Globalization works to make complex weapon technologies widely available . Military expenses have risen to well beyond a trillion United States dollars . The illusion of an impenetrable defence is taking new forms . Our space assets with their huge scientific and economic potentials are not secure . Cyber-wars are no longer just science fiction , but can disrupt our societies on a massive scale . The overall balance between global security problems solved and those unsolved is , I believe , negative . The uncertainties of tomorrow are , however - and let us not forget - the opportunities of today . Reluctantly or enthusiastically we will have to accept that global problems in a time of galloping globalization cannot be solved unilaterally , bilaterally or even in small circles of like-minded nations . Global security must be built globally . Effective multilateralism is both necessary and possible . It means that the legitimate security concerns of all States must be acknowledged . It means seizing opportunities when they arise . It means reconsidering positions that yield no results . And it means a readiness to give and take . Global security can never be a zero-sum game . Just as the rule of law is a fundamental cornerstone in domestic affairs , so it must also be in international affairs . Without it we will be on the slippery slope towards anarchy and the use of force . Laws are sometimes broken , but this does not make them less essential . Quite the opposite . It reinforces the need to uphold and strengthen them . This is particularly important in the area of international security relations . But there are serious lacunae , both as regards the laws themselves and our ability to see them complied with . We do have a forum where we can approach all these difficult realities together . It is called the Conference on Disarmament . Rejecting the use of the CD is irresponsible . Those blocking the potentials of this body should understand that they are inflicting real damage not only to the security of others , to our common security , but in the long run also to their own . Since the beginning of this year I have had the privilege of working as one of the P-6 . This Presidential sextet has jointly and consistently tried to put the CD back to work , tried to move us from talk shop to workshop , tried to make us take on the challenges of our time . And by now , most delegations stand ready to try . We have come very close to begin a beginning . As I am now leaving , I am sorry not to be with you when you cross the last bridge . Because cross it you will . There is no other way . Now there remains for me only to express my many and sincere thanks : to the Secretary-General for his support , wisdom and friendship , always at our side . To my fellow P-6 colleagues and our coordinators for their remarkable team spirit and seriousness of purpose . To my colleagues , the CD Ambassadors and their delegations for their many expressions of support and friendship . To everyone in the secretariat who keeps toiling for us in good spirits and solidarity . To the interpreters who try to make sense of our sometimes incomprehensible utterings in all languages . And to the representatives of civil society who with great patience and frustration stay engaged . Thank you all . When I leave this Council chamber today I will do so as I have always entered it - with hope and expectations . The PRESIDENT ( spoke in Arabic ) : I thank the Ambassador of Sweden for her kind wishes addressed to the Conference , and we in turn wish her every success . The delegation of France has asked for the floor . You have the floor , Madam . Ms. RAMIS-PLUM ( France ) ( spoke in French ) : I simply wished to raise a point of a technical or even presentational nature in the draft decision which is attached to the report on the third part of our session . I think there is simply a small presentational matter which , in the opinion of my delegation , needs to be rectified . The body of decision L.1 has been separated presentationally from the complementary Presidential statement . We consider that , in the original version of this document these two elements which from a whole were together and should remain together , as they were in the text of decision L.1 which has been distributed until now . The PRESIDENT ( spoke in Arabic ) : I thank the representative of France . We shall discuss this matter with the secretariat . Does any delegation wish to make a statement ? I do not see any . Concerning next week 's work , the secretariat , later this afternoon , will place the draft report on the 2007 session in the members ' pigeonholes . For ease of access , the secretariat will also send out an electronic copy , in PDF format , to the regional coordinators , who can then distribute the document to the members of their respective groups . Next week , i. e. on Tuesday 4 September 2007 , I will proceed with the first reading . As usual , this will be done at an informal meeting right after the formal plenary , which will start at 10 a. m. in this room . Before bringing this morning 's work to a close I wish to make some comments on the final report . First , I should like to thank my colleagues the Ambassadors of the G-6 for their strong support for this draft report . I also wish to thank the secretariat for its outstanding efforts which helped us to complete this draft on time for it to be translated into all the United Nations official languages . As I have already said , the G-6 chairpersons helped us to prepare this report and supported it once it had been completed . The report reflects the consensus in the group . We all hope that this consensus will lead to a consensus within the Conference , especially given that the G-6 represents a wide cross section of the Conference membership . We look forward to your cooperation in adopting this report , which we endeavoured to ensure would contain an objective and impartial account of the proceedings at this year 's Conference . We did our utmost to take account of the concerns of all the members , which was not an easy task . The President hopes that when the draft text is discussed next Tuesday , it will enjoy the support of you all , that you will take account of these comments , and show the necessary flexibility for its adoption . Thank you for your understanding . Before closing the meeting , does any delegation wish to take the floor ? I see none . I declare this meeting adjourned . The meeting rose at 10.45 a. m. ( Ms. Borsiin Bonnier , Sweden ) ( The President ) </text>
<text id="un/CD_PV1157">
Held at the Palais des Nations , Geneva , on Wednesday , 2 September 2009 , at 10.10 a. m. President : Mr. Christian STROHAL ( Austria ) The PRESIDENT : I declare open the 1157th plenary meeting of the Conference on Disarmament . It is a particular honour and pleasure for me to be able to welcome the Federal Minister for European and International Affairs of the Republic of Austria , Mr. Michael Spindelegger , to this Conference . Mr. Spindelegger has had a long career , in spite of his young age , in the Austrian Parliament and the European Parliament . He has been the Second President of the Austrian Parliament and the foreign policy spokesperson of the People 's Party , and became a minister last year . We are delighted that he has made it to Geneva , where he has arrived at a busy time when we are preparing not only for the closure of this year 's session of the Conference on Disarmament but also for the General Assembly of the United Nations , as well as for the relevant activities of the Security Council , on which Austria will be represented next year as a non-permanent member . I now give the floor to the minister . Mr. SPINDELEGGER ( Austria ) : Mr. President , Thank you for this opportunity to address the Conference on Disarmament today . Austria has assumed the presidency of the Conference at an important point in time . This year the Conference finally adopted a programme of work after more than a decade of stalemate . This is a positive , long overdue development . So I do not need to speak about deadlocks or the missed opportunities of the past . Let me focus on recent positive developments in arms control and disarmament and their implications for our future . The year 2009 has seen one paramount development : the goal of nuclear disarmament and the eventual total elimination of nuclear weapons has been put back on the global agenda . I welcome the five-point plan for disarmament proposed by the Secretary-General of the United Nations , Mr. Ban Ki-moon , which I had the opportunity to discuss with him a few days ago in Austria . I also welcome the recent positive statements that have been made by United States President Obama in Prague and Cairo and by Russian President Medvedev . And only a few weeks ago , Chinese Foreign Minister Yang underlined China 's goal of a nuclear-weapon-free world here in this very room . Austria promoted the vision of a world free of nuclear weapons throughout the cold war , when only a few countries possessed nuclear capabilities . Since proliferation has introduced new threats from States and non-State actors , striving for this goal is now all the more necessary . Our vision is now shared by the most important nuclear powers . But how far has this vision been translated into concrete action ? We can identify two developments . First , direct bilateral negotiations : we see a renewed readiness to engage in bilateral negotiations . The commitment by President Obama and President Medvedev to negotiate a new strategic arms reduction treaty by the end of this year is a good example . Second , the global atmosphere in multilateral arms control negotiations has changed : preparations for the 2010 Review Conference of the Parties to the Treaty on the Non-Proliferation of Nuclear Weapons ( NPT ) show a markedly better atmosphere . Initiatives by States and civil society all around the world , such as the Security Council summit on nuclear non-proliferation and disarmament due to be held on 24 September , ensure global ownership and demonstrate a new readiness to engage in dialogue . But let me be clear : positive declarations , a good atmosphere and universal interest also need real implementation and compliance . The NPT can only fulfil its promise of peace if all States adhere to their obligations . Similarly the programme of work of the Conference on Disarmament needs to be implemented if it is to become a real achievement . This brings me to my next point - our expectations for the future . First let me start with the Comprehensive Nuclear-Test-Ban Treaty ( CTBT ) , a treaty which originated in this chamber . The deplorable nuclear test conducted by the Democratic People 's Republic of Korea in May has made clear that the entry into force of the CTBT is overdue . As Co-Chair , together with Costa Rica , Austria has been deeply involved in efforts to secure this goal over the past two years . Let me thus use this opportunity to appeal once again to those States that have not yet done so to accede to the CTBT as soon as possible . I am encouraged by the recent commitment of President Obama to pursue ratification by the United States , and also by China 's comments in this regard . Let me appeal to all States to show their support for the treaty at the Article XIV conference in New York later this month , and to all delegation 's present to help ensure that their country participates . Second , Austria believes that a comprehensive fissile material cut-off treaty ( FMCT ) - a treaty that still has to emerge from this chamber - would significantly contribute to nuclear disarmament . Reliable techniques for monitoring and verification have been developed over the past years . The potential positive impact of such a treaty has been confirmed many times . The IAEA is ready to make an important contribution . It now requires the political will of Governments and the efforts of skilled negotiators to make it a reality . It is my sincere hope that the new spirit in the Conference on Disarmament will soon enable it to proceed with actual work and start negotiations on an FMCT . Finally , when we talk about expectations for the upcoming year , we must mention the NPT Review Conference , which will take place next May in New York . The Preparatory Committee has shown a willingness to achieve a meaningful outcome this time . Today , we see a broad understanding that the dangers of nuclear technology need to be contained in a manner that creates trust and confidence among all States . The Review Conference will demonstrate whether we are capable of transforming this positive atmosphere into real progress . Austria will present and support initiatives aimed at making substantial progress in nuclear disarmament , non-proliferation and a global system to effectively control the nuclear fuel cycle . This should help to avoid tensions such as the ones we are currently witnessing in regard to the nuclear programme of the Islamic Republic of Iran . Austria attaches great importance to arms control also in the area of conventional weapons such as landmines , cluster munitions and small arms and light weapons . Let me make three brief comments in this respect . First , with regard to landmines : Austria 's objective for the Second Review Conference of the Anti-Personnel Mine Ban Convention , to be held later this year in Cartagena , Columbia , is to work for a strong Cartagena action plan , which will serve as a clear guide to States and bring us closer to a world free of mines . One priority for us is to improve assistance to landmine survivors . In this respect Austria has sponsored - together with Norway and civil society partners - a project to examine the global impact of the Anti-Personnel Mine Ban Convention and what remains to be done to improve the situation of survivors . The report will be presented here today right after this meeting . Let me just use this opportunity to encourage all States that have not yet done so to accede to the Anti-Personnel Mine Ban Convention . It is time for the international community not only to review its stance on nuclear weapons but also to finally eradicate this terrible weapon . Second , with regard to cluster munitions : I encourage States to ratify the Convention on Cluster Munitions . So far 17 States have ratified it . It is our strong hope that the Convention will receive the necessary 30 ratifications to enter into force before the end of this year . To support this , Austria has engaged in a worldwide campaign and will support a conference on cluster munitions in Indonesia in November . Third , with regard to small arms and light weapons : these are a major security threat in parts of the world . Former United Nations Secretary-General Kofi Annan once called them the “ real weapons of mass destruction ” . Every year , hundreds of thousands of people are killed by them . The United Nations Programme of Action to Prevent , Combat and Eradicate the Illicit Trade in Small Arms and Light Weapons in All Its Aspects is a significant step forward . Austria supports its implementation on the ground , especially in Africa . To stop the illicit arms trade , Austria supports the conclusion of a legally-binding international arms trade treaty . As a producing and exporting country of small arms , Austria feels a special responsibility to engage in this process and will also host the concluding conference of the global joint project of the European Union and the United Nations Institute for Disarmament Research in February 2010. We hope that the conference in Vienna will provide positive momentum and enable the conclusion of a treaty in the near future . One thing is clear : there is no lack of work in the field of arms control and disarmament today and the international community is responding positively . In order to succeed , I count not only on the new flexibility of the nuclear-weapon States and the constructive contributions of all the other States , but also on the commitment and expertise of civil society . Throughout the years , non-governmental organizations and private citizens have remained important motors of the disarmament and arms control process . Austria has always underlined that disarmament and arms control must be an open , participatory process if it is to succeed . Protecting the world from the harm caused by weapons is a global project and needs active support from all of us . In this respect , I would like to thank the Secretary-General of the Conference for his tireless efforts , and this year 's other presidencies - Viet Nam , Zimbabwe , Algeria , Argentina and Australia - for their excellent cooperation in the Conference on Disarmament . I wish the Conference the necessary energy for a good conclusion to this year 's session and an early and effective resumption next year . The PRESIDENT : I thank the minister for his statement . Before adjourning this plenary meeting , let me just make two brief announcements . The first is , as mentioned , at 11 a. m. in this chamber , the minister will launch the report “ Voices from the Ground ” , a report in which victims of landmines and explosive remnants of war will speak out on victim assistance . The next plenary meeting of the Conference will be held tomorrow at 11 a. m. in this chamber . At that time , the Chairman-Designate of the First Committee of the General Assembly , Ambassador José Luis Cancela of Uruguay , will deliver a statement . This plenary meeting is adjourned . The meeting rose at 10.25 a. m. ( Mr. Spindelegger , ( Austria ) ( Mr. Spindelegger , ( Austria ) </text>
<text id="un/CD_PV857">
24 August 2000 Original : ENGLISH Held at the Palais des Nations , Geneva , on Thursday , 24 August 2000 , at 10.10 a. m. President : Mr. Celso Amorim ( Brazil ) The PRESIDENT : I declare open the 857th plenary meeting of the Conference . Distinguished delegates , we have learned with deep sorrow the tragic death of the crew members of the Russian nuclear submarine Kursk . I am sure that you all join me in extending our deep sympathy and condolences to the delegation of the Russian Federation on this sad occasion . I would kindly request our Russian colleague to convey these sentiments to his Government and to the bereaved families , as well as to the whole Russian people . I should like to extend a warm welcome , on behalf of all of us , to the new representative of Romania , Ambassador Anda-Cristina Filip and assure her of our full cooperation and support . There is no speaker inscribed on my list for today . Does any delegation wish to take the floor at this stage ? Japan , you have the floor , sir . Mr. NORBURU ( Japan ) : With your indulgence , Mr. President , I should like to take this opportunity to mention briefly how much our delegation appreciates all the efforts being made by our Brazilian President to reach an agreement on the programme of work for the Conference on Disarmament . At the same time , we must also express our sincere recognition of his predecessors , whose efforts were also most worthy of note . Ambassador Amorim has already eloquently demonstrated how far a President can push all delegations forward in seeking a solution to the apparently impossible problem faced by the Conference on Disarmament . Ambassador Amorim has been conducting this task with perseverance , wisdom and diplomatic skills which my delegation highly esteems , and his work will stand as a textbook case of good chairmanship . What Ambassador Amorim has been able to achieve so far is remarkable , and we must all be very grateful that he intends to continue working until the last moment . Mr. President , it may be easy for people like us who are constantly exposed to the difficulties of international relations to understand why we have not yet been able to make progress in the Conference on Disarmament . This may not , however , hold true for the rest of society outside our diplomatic realm , who are diligently watching us and expecting real outcomes from us . This is reason enough for us not to abandon the possibility of agreeing on a programme of work , even at this late stage of this year 's session of the Conference on Disarmament . We must carry on with the work this week and during the remaining four weeks of this session . Mr. President , many delegations , including mine , consider extremely important all the efforts being made to accomplish progress in nuclear disarmament as the pivotal foreign policy objective , be it FMCT or a general discussion on nuclear disarmament . Over the last two years we have experienced an uncomfortable ambience of uncertainty in the Conference on Disarmament , but my delegation takes some solace from the fact that under you , Mr. President , we are still trying to be upbeat in our efforts to bring an end to this troubling reality . The PRESIDENT : I thank very much the representative of Japan . I am really moved by his words and encouraged to try to come to an agreement in this which is the last leg of my presidency . Is there any other delegation which wants to take the floor ? That does not seem to be the case . As you are aware , during the last few days , I have intensified consultations aimed at promoting consensus on the Programme of Work of the Conference on the basis of the ideas which I presented to all of you . I am encouraged by the fact that all delegations considered those ideas as a basis for further intensified consultations . I take the point made yesterday by several distinguished ambassadors that , at this stage , a basis for further intensified consultations is not good enough . I shall revert to this item later . I convened informal open-ended consultations yesterday with the purpose of ascertaining whether further progress can be made on a consensus decision on the Programme of Work . I was pleased to see that there was wide support from a broad cross-section of nations from different regions , different geopolitical situations , to my efforts , and I was also pleased to see the readiness displayed by all delegations to work towards compromise . Therefore , as I announced yesterday in the presidential consultations , it is my intention to suspend this plenary meeting and to convene in 10 minutes an informal open-ended consultation to discuss the ideas I have been working on . But before doing so , if you allow me a lighter note , I will mention to you that a friend of mine , who is actually our Ambassador in South Africa , recently gave me an old book called “ Legends of the United Nations ” . It was a collection by I believe a British author , Frances Frost , of legends of almost all the nations that were then comprising the United Nations written just after the Charter was approved in San Francisco . One of the legends that came across to me , which I think is especially significant to what we are living today ( and I will not mention the country from where the legend is in order not to be misinterpreted in my purpose in mentioning the legend ) . It goes more or less as follows : Once upon a time there was a king and a princess , and the king wanted the princess - a very beautiful princess - to get married , but the condition was that the suitor should bring a blue rose . Well , a blue rose does not exist . So there were several suitors , merchants , warriors and others , and they tried different solutions . One brought a beautiful crystal ball with a blue rose inscribed in it . Another one tried a silk rose . Another one tried just to dye , to use a blue dye in a white rose , so that also he could be accepted . But of course none of these tricks was accepted . But in the end there was another one who came with a white rose . He just plucked a white rose and brought it to the palace . The king and the princess considered the suitor and thought that he was a worthy gentleman and that the marriage could be a good one , so the king and the princess , to the astonishment of all those who were present , said : “ Well , here we have a blue rose ” . And they lived happily ever after . The meeting was suspended at 10.20 a. m. and resumed at 12.15 p. m. The PRESIDENT : We resume our formal meeting . We have just failed in approving a Programme of Work for the CD . There is nothing extraordinary about this . This has actually been the pattern for several months and years . Failure is apparently now part of our routine . We all have to reflect on the causes of it and how to overcome it . I do not think this is the appropriate time to draw lessons . Certainly , in my case , any analysis that I would try now would be tinged with a sense of personal frustration and emotions are not good counsellors for rational thinking . I may come back to that sometime in the future from the bench of Brazil . I do not need to explain either the gist of my efforts , how I tried to explore ambiguities in a positive way , how I tried to test the limits of the possible . My text will speak for itself , with its possible merits and obvious shortcomings . I am asking the secretariat to circulate it as a CD document , not because I am under any illusion that what was considered as a basis in the last days will still be a basis in four or five months ' time , but I thought in any case it would be useful to have that text as part of our records to show the general direction of the efforts we made collectively . At least it will demonstrate we did not give up easily . As to the future of the CD , it is under great doubt . The CD is a tool , and a tool that is not used gets rusted . Will it be a tragedy if , as some have already even mentioned here , the CD disappears ? I honestly do not know . Whatever will be deemed collectively indispensable by those who detain the power of destruction and annihilation will be done bilaterally , trilaterally , plurilaterally . But for those of us who rely on multilateralism , on the power of rational persuasion , and do not dispose in the same proportion - either because they cannot or do not want to have the force of arms , actual or potential - there will be a great loss . The system of world governance , if I may use that word in a vital area such as security , will be tremendously impoverished . I hope it is not too late to prevent that from happening . There is a positive side to those efforts that we all undertook , despite the fact that they did not succeed : the way we worked together , trying to look for reasons to be optimists in the midst of so many factors is encouraging . Clearly - and this was the case yesterday and today in the informal meetings - I received from a cross-section of the membership great support not only for my efforts but also for my proposal as a basis for a consensus . And even from the others , who could not at least explicitly join these expressions , I received loyal , faithful support , and I am glad that they were able to agree that my non-paper was a basis for further consultations . This engagement , which existed all along , shows that cynicism and unreasoned pessimism have not , or at least not yet , taken over the CD . I would like in this connection to quote from Amartya Sen , the famous Nobel Prize winner 's recent essay in the New York Review of Books : “ Unreasoned pessimism masquerading as composure based on realism and common sense can serve to ` justify ' disastrous inaction and an abdication of public responsibility ” . Let us not succumb to it . Finally , I wish to express once again my sincere appreciation for the invaluable support I received from Group Coordinators , as well as all other colleagues and their respective delegations , through these actually two months of presidency . I am also grateful to the Secretary-General of the CD , Mr. Petrovsky , and his deputy , Mr. Bensmail , for the way in which ( The President ) they put at my disposal their vast experience and expertise . I also want to thank the staff of the CD , as well as the interpreters . Finally , I am deeply indebted to my collaborators for their hard work and advice and , more importantly , the optimism they shared with me in the course of the Brazilian presidency of the CD . The Russian Federation has asked for the floor . Mr. SIDOROV ( Russian Federation ) ( translated from Russian ) : Thank you , Mr. President . I have asked for the floor to thank you for your words of condolence on the occasion of the tragedy that struck the Russian nuclear submarine Kursk . Your condolences will be conveyed to the Russian Government and to the families of the crew members . The PRESIDENT : Thank you . No other requests for the floor ? The next plenary meeting of the Conference will be held on Thursday , 31 August 2000 , at 10 a. m. The meeting rose at 12.25 p. m. </text>
<text id="un/CD_PV861">
21 September 2000 Held at the Palais des Nations , Geneva , on Thursday , 21 September 2000 , at 10.40 a. m. President : Mr. Petko Draganov ( Bulgaria ) The PRESIDENT : I declare open the 861st plenary meeting of the Conference , the last for the 2000 session . I should like at the outset to extend a warm welcome , on behalf of us all , to the three new colleagues who have recently joined us as representatives of their Governments to the Conference , Ambassador Roberto Betancourt Ruales of Ecuador , Ambassador Rakesh Sood of India and Ambassador Mario Maioloini of Italy , and assure them of our full cooperation and support in the discharge of their functions . Allow me also to bid farewell to the representative of Ukraine , Ambassador Mykola Maimeskul , who , I understand , will soon be leaving his post to take up important responsibilities in his Government . Ambassador Maimeskul has represented his country in this Conference since August 1996 and we had the privilege to work under his presidency at a difficult time , when efforts were being made to widen the areas of agreement on the Conference 's programme of work . He discharged his functions with dedication and diplomatic skill . It is an especially moving occasion for me , because he was presiding over this Conference when I first appeared in it and you will also recall that it was under his presidency and skilful leadership of this Conference that the Conference took a decision on the establishment of the Ad Hoc Committee on fissile material . I am sure that you will all join me in extending to him and his family our best wishes for the future . I have on my list of speakers for today the representatives of Costa Rica , the Russian Federation and Algeria , who will be speaking on behalf of the Group of 21. I give the floor to the representative of Costa Rica , Ambassador Nora Ruiz de Angulo . Ms. RUIZ DE ANGULO ( Costa Rica ) ( translated from Spanish ) : Mr. President , allow me to convey greetings to you , both on my own behalf and on that of the Government of Costa Rica , and to congratulate you on the way in which you have been presiding over this Conference . I also thank you for allowing me to speak before the plenary of the Conference on Disarmament , with a view to drawing the attention of distinguished representatives to Costa Rica 's renewed desire to become a permanent member of this Conference . We know of the difficult times through which the Conference is passing and of the various points of view on this subject and it is precisely for that reason that we wish to reiterate our aspiration and to commit ourselves to its attainment . Throughout its history Costa Rica has been distinguished for its pacifist tradition and its rejection of the use of force as a means to resolve conflicts . Since its beginnings as a republic , it has endeavoured to maintain relations of peace and friendship with neighbouring countries and to date it continues to participate in many international activities and agreements aimed at reducing conventional armaments and weapons of mass destruction . Its most relevant decision in this regard was the abolition of the army in 1949. It thereby reaffirmed its commitment to peace and entrusted its safety to international law , rejecting force as a means of solving conflicts . From that time on , Costa Rica has entrusted its security to international rules and agreements and for that reason we wish to play an attentive and active role in addressing the international agenda on disarmament and international security . In 1958 Costa Rica submitted the first specific proposal on the limitation of conventional weapons and the prohibition of nuclear weapons in the Organization of American States ( OAS ) . Subsequently we ratified with great enthusiasm the Treaty for the Prohibition of Nuclear Weapons in Latin America and the Caribbean . Costa Rica firmly supports general and complete disarmament . Ever since the San Francisco Conference , at which Costa Rica was a participant , we have continued to place our firm trust in the United Nations and we are strongly committed to its mandate to safeguard international peace and security . We shall therefore continue to support the work of the First Committee and the Commission on Disarmament by preparing , co-sponsoring and considering proposals conducive to international disarmament . To this end we advocate the creation of nuclear-free zones , complete nuclear disarmament , the holding of the fourth special session of the General Assembly on disarmament and the expansion of the United Nations Register of Conventional Arms . We consider there should be a ban on the transfer of materiel and military personnel and the provision of financial or logistic support to States whose military or paramilitary units , or whose security forces are responsible for violations of human rights or contribute to such violations . At the first preparatory meeting of the 2001 United Nations Conference on the Illicit Trade in Small Arms and Light Weapons , held on 3 March 2000 , the Costa Rican Government officially presented a working document on an international code of conduct on arms transfers . The Preparatory Committee elected our country to the vice-chairmanship of the United Nations Conference , to be held in 2001. During its participation on two occasions as a non-permanent member of the Security Council , most recently in 1998 , Cost Rica focused its efforts on preventive diplomacy , the resolution of conflicts , humanitarian assistance and the protection of human rights in war zones , both during and after hostilities . Within the framework of OAS Costa Rica has proposed a set of practical guidelines for the attainment of disarmament as a dividend for peace . These guidelines are designed to ensure a genuine reduction in conventional weapons , so that more resources can be devoted to development . The agreements ratified by Costa Rica include the Treaty on the Non-Proliferation of Nuclear Weapons ; the Treaty on the Prohibition of the Emplacement of Nuclear Weapons and Other Weapons of Mass Destruction on the Seabed and the Ocean Floor and in the Subsoil Thereof ; the Convention on the Prohibition of the Development , Production and Stockpiling of Bacteriological ( Biological ) and Toxin Weapons and on Their Destruction ; the Convention on the Prohibition of Military or Any Other Hostile Use of Environmental Modification Techniques ; the Convention on Prohibitions or Restrictions on the Use of Certain Conventional Weapons Which May Be Deemed to Be Excessively Injurious or to Have Indiscriminate Effects and its three protocols ; the Convention on the Prohibition of the Development , Production , Stockpiling and Use of Chemical Weapons and on Their Destruction ; the Comprehensive Nuclear Test-Ban Treaty ; the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and Their Destruction ; and the Inter-American Convention against the Manufacturing of and Trafficking in Firearms , Ammunition , Explosives and Other Related Materials . Costa Rica attaches great importance to multilateral forums and focuses its activities in the area of security on the strengthening of collective security agreements , of both regional and international scope , and on the promotion of the peaceful solution of conflicts and disarmament as a basic principle of its foreign policy . Costa Rica 's achievements in the national and international arena are attributable to our sound decision , made more than 50 years ago , to abolish our army as this has enabled us to devote more resources to social investment , to renounce weapons and to promote democracy and development . Given that Costa Rica 's efforts to promote the security and well-being of the country 's society are largely linked to the development of international law and the effectiveness of the protection which it provides , we deem it essential that we are properly represented in these forums . Where international law prevails , the risk of war are reduced and we therefore consider it necessary to continue preparing effective verification mechanisms that guarantee that there is no use , threat of use or manufacture of weapons of mass destruction . In the light of all that I have said , Costa Rica reiterates once more its request to be admitted to the Conference on Disarmament . Over the last 50 years Costa Rica has not spent any money on an army and has devoted its budget to education , preventive health-care and infrastructure investment . Our national experience has taught us that to decide not to invest in weapons is the best way forward for those countries that are really committed to the well-being of their peoples . We believe that the promotion of peace and security , both internationally and on the domestic front , is contingent upon a determined policy to reduce military expenditure and to strengthen civil power . It stands to reason that disarmament , demilitarization and the reduction of military expenditure are essential for the welfare of mankind and the promotion of a culture of peace . The PRESIDENT : I thank the representative of Costa Rica for her statement and for the kind words addressed to the Chair . I now give the floor to the representative of the Russian Federation , Ambassador Vasily Sidorov . Mr. SIDOROV ( Russian Federation ) ( translated from Russian ) : First , may I thank you for giving me the floor and congratulate you on your assumption of the presidency of the Conference . I wish you every success and assure you of my delegation 's willingness to cooperate in the most constructive manner . I would also like to welcome those new colleagues who have recently joined us in our work in the Conference . At the Millennium Summit , held recently in New York , attention was given to an issue of particular importance to the modern age : what system of international relations will prevail over our lives and activities in the twenty-first century ? We believe that the new age should be one of equal security and a just peace , as stated by President Putin of Russia in his speech at the Summit : “ The new age for the United Nations must continue well into a millennium of global stability . It must go down in history as a period of real disarmament . It has already proved possible to create an efficient disarmament machinery . That machinery comprises the 1972 ABM Treaty , non-proliferation regimes governing weapons of mass destruction and their means of delivery and dozens of highly important agreements on the reduction and limitation of various weapons . ” I have already had ample occasion in this auditorium to state the abiding significance of the ABM Treaty for strategic stability and international security . The issue has recently been raised again , more than once , in plenary meetings of the Conference on Disarmament and points have been made which require clarification on our part . We are firmly convinced that the ABM Treaty remains the cornerstone for strategic stability and that it continues to serve as a basis for ensuring further reductions in strategic offensive arms . We believe that this linkage will be further strengthened in the foreseeable future . Incidentally , it was the United States which was the first to raise the issue of a connection between agreements to reduce and limit strategic offensive arms and the ABM Treaty . On 9 May 1972 , during the final stage of preparations for the ABM Treaty , Ambassador Smith of the United States of America made a statement to the effect that the United States reserved the right to withdraw from the Treaty unless the START agreement was concluded within five years . The significance and historic role of the ABM Treaty are not confined merely to the sphere of Russian-United States relations . It underpins the entire modern system of arms control agreements and the collapse of the ABM Treaty would therefore disrupt the whole range of disarmament agreements created over the last 30 years . There is an increasing threat of the erosion of the regimes of non-proliferation of weapons of mass destruction and their means of delivery . The creation and deployment of the United States national missile defence system would give powerful impetus to the proliferation of missiles and missile technology . The positions of many countries on nuclear disarmament would shift and the Treaty on the Non-Proliferation of Nuclear Weapons would fall victim to these developments . Those who oppose the idea of preserving the ABM Treaty in its present shape often say that nothing would happen if it were to be slightly amended and adjusted to current realities , particularly since corrections have already been made to it before . Let us look more closely at this argument . It is true that the 1972 ABM Treaty does make allowance for the possibility of changing its provisions and the parties to the Treaty have made use of that possibility in the past . The intent of those changes was to strengthen the Treaty 's regime and to enhance its “ restraining ” elements . Today , however , it is suggested that we amend this instrument so as to accommodate the deployment of a “ limited ” anti-missile defence system for a national territory . This is contrary to the core provisions of article 1 , which constitute the very essence of the ABM Treaty . In other words , what is being suggested is that the ABM Treaty be changed from one which prohibits the creation of national missile defence systems to one which actually provides for the creation of such systems , its very opposite . Such a change in the Treaty would set a precedent in disarmament practice whereby the introduction of additions or amendments to an agreement limiting and restraining the development of an advanced weapon could turn it into an agreement which actually permits military build-up . We cannot accept this sort of logic . The announcement by President Clinton of the United States that he would not enter into any commitment to deploy a national missile defence system is seen in Russia as a well-considered and responsible decision . As President Putin stresses , however : “ This does mean that Washington and Moscow now share completely identical approaches to the issue of ABM ” . We cannot turn a blind eye to the fact that programmes are still under way to set up a national missile defence system in the United States of America . No one has repealed the National Missile Defence Act adopted in the United States in 1999. According to our analysis it is difficult to conceive of a United States national missile defence system which would not impair Russia 's deterrent potential and yet would still fall within the limits of the ABM Treaty . Among the implications of creating any United States national missile defence system would be the disruption of the prevailing strategic stability and the devaluation - to some extent or other - of Russia 's strategic capability . It would also ensure the unilateral military superiority of the United States of America . In these circumstances , assurances by the United States that it is committed to the ABM Treaty , that its national missile defence system is supposedly not directed against Russia and that it stands ready to pursue “ trade-off ” cooperation with Russia in the area of ABM cannot allay our fears . We are not shirking dialogue with the United States of America . This does not , however , imply any consent whatsoever on our part to adapting the ABM Treaty to accommodate the United States national missile defence system . Our position is dictated by the best interests of strengthening peace and international stability . We do not intend to change our approach . Our message to our United States partners is clear and plain : we will not participate in the destruction of this fundamental instrument - for this , effectively , is what is at stake . Russia is ready to continue active joint efforts both with the United States of America and with other interested States to ensure international security , including through prompt progress towards agreements on further reducing nuclear arsenals , improving the regimes for nuclear and missile non-proliferation and strengthening strategic stability by political means . We recently ratified the START II Treaty , the 1997 New York package of START and ABM-related agreements and the Comprehensive Nuclear Test-Ban Treaty . We are now awaiting reciprocal steps by the United States of America . We advocate the immediate start of negotiations on START III . During the Okinawa summit , President Putin submitted to President Clinton detailed proposals regarding the main areas of the START III negotiations . These are based on our belief that the conclusion of a START III Treaty is only possible if the ABM Treaty remains inviolate . Let us now try to respond to the arguments of those advocates of amending the ABM Treaty who invoke the changed strategic situation and the increased missile threats . We consider that references to such a threat have no real foundation . The deployment of a United States national missile defence system is motivated by the necessity to counter the strategic ballistic missiles of certain countries . However , the proliferation of such ballistic missiles is not expected to occur either today or in the foreseeable future . The changes in the strategic situation cited by the proponents of amendments to the ABM Treaty are in no way comparable to the changes in the strategic situation that could occur if the Treaty were to be undermined and the disarmament process destroyed . We are convinced that the issue of missile proliferation can and must be dealt with without disrupting the ABM Treaty . Instead of the military solution to the issue , we suggest a constructive approach , through political and diplomatic measures . We are ready to engage in the broadest possible consultations on the whole range of missile non-proliferation issues with all interested countries . Furthermore , as you are aware , initial results are already available from work with those countries mentioned by the United States as posing a missile threat . We are satisfied that the United States has started to give positive consideration to Russia 's ideas concerning the creation of a global missile and missile technology non-proliferation control system . It is significant that the joint Russian-United States statements on the outcome of the recent meetings between the presidents of the two countries in Okinawa and in New York registered their readiness for joint action to resolve the issue of missile proliferation , including the implementation of Russia 's proposals for a global control system . The role of the ABM Treaty goes well beyond arrangements among the narrow circle of States to which it is formally confined . This was clearly demonstrated by the results of the vote at the fifty-fourth session of the General Assembly on the resolution on the preservation of and compliance with the ABM Treaty , which was put forward by Russia jointly with Belarus and China . We see these results as endorsement of our efforts to enhance the effectiveness and authority of that Treaty . Any country 's attempt to strengthen its own security at the expense of that of others is doomed to failure , as history has shown . The collapse of the ABM Treaty and the consequent collapse of all the other nuclear disarmament treaties based on it would undoubtedly cause many States to reconsider their priorities and methods for ensuring security . In this regard , the resolution adopted in 1999 by the General Assembly sends an unmistakably clear message to those seeking to disrupt the ABM Treaty . We plan to submit a draft resolution to the General Assembly at its current session in support for the ABM Treaty . The text of the draft , which is virtually identical to that of last year 's resolution , was circulated a few days ago to all delegations here in Geneva . The draft is not confrontational . It is based on the language of the Treaty itself and on the joint statements on the issue by the Presidents of Russia and the United States of America . It is not directed against any country , nor does it prejudice anyone 's interests . Its purpose is clear and entirely constructive : to ensure that , through rigorous and full compliance with the ABM Treaty , the Treaty is preserved and strengthened . Adoption by the General Assembly at its current session of the draft resolution on the preservation of the ABM Treaty would send a new signal to the international community on the importance of ensuring the viability of this Treaty . We expect our draft to receive broad support from the international community . The task of preserving the ABM Treaty under current conditions is closely related to the prevention of an arms race in outer space , another issue that has been entrusted to our Conference . The ABM Treaty prohibits the development , testing or deployment in outer space of missile defence components . Application of its regime will keep outer space free of an entire class of space weapons - anti-missile weapons . We are firmly convinced that the preservation of this agreement will constitute a major obstacle to any possible escalation of the arms race , both here on Earth and in outer space . We share the view of those delegations who consider that the elaboration at this early stage of specific measures to prevent an arms race in outer space will help obviate the enormous costs involved in disarming space in the future . In this context , I would like to draw the attention of the participants here in the Conference on Disarmament to the proposal made by President Putin at the Millennium Summit , that an international conference on the prevention of demilitarization of outer space should be convened in Moscow in spring 2001 under the auspices of the United Nations . The Russian Federation supports the re-establishment in the Conference on Disarmament of an ad hoc committee on the prevention of an arms race in outer space with the mandate to elaborate specific practical arrangements which will prevent near-Earth space from being transformed into a new arena for confrontation between the great Powers . As we see it , the international community should set as one of its priorities the earliest possible elaboration of an international legal regime prohibiting the introduction in outer space of other weapons besides weapons of mass destruction , primarily strike weapons . At the same time , it is our firm view that the work of the Conference on Disarmament on outer space issues should not obstruct the peaceful exploration of outer space . I should like to reaffirm that we look favourably on the groundwork being carried out by Canada on the non-weaponization of outer space , the French ideas for a notification regime for launches of space objects and ballistic missiles and other proposals by participants in the Conference which could serve as a basis for substantive discussion . In concluding my statement , I would like to cite the words of President Putin at the Millennium Summit , “ I am convinced that by building upon a just world order and strategic stability , we shall ensure sustainable development for civilization . The Russia of today is , as never before , open , responsible and ready for cooperation on the basis of equal partnership . ” The PRESIDENT : I thank the representative of the Russian Federation for his statement and for the kind words addressed to the Chair . I now give the floor to the representative of Algeria . Mr. BENFREHA ( Algeria ) ( translated from French ) : I thank you , Mr. President , for all the efforts you are making and for the way in which you are conducting our work . I also must pay particular tribute to Mr. Abdelkader Bensmail , Deputy Secretary-General of the Conference , for the work he has done in the Conference . I have the honour , on behalf of the Group of 21 , to make the following statement , which I shall deliver in English : ( continued in English ) As the 2000 session of the Conference on Disarmament draws to a close , the Group of 21 regrets that the Conference on Disarmament , as the single multilateral negotiating forum on disarmament , has once again been unable to agree on a programme of work during its current session . This failure is primarily due to the continued inflexibility of some of the nuclear-weapon States regarding negotiations on nuclear disarmament and on measures to prevent an arms race in outer space . The Group of 21 emphasizes that nuclear disarmament remains the highest priority for the Conference on Disarmament and stresses the necessity of establishing in the Conference an ad hoc committee on nuclear disarmament under agenda item 1. In this regard , the Group invites the Conference 's attention to its proposals contained in CD/1570 , CD/1571 and CD/1549 and to the statement made by the coordinator of the Group on 27 January 2000. The Group emphasizes that outer space is the common heritage of humankind . In this regard , the prevention of an arms race in outer space has assumed greater urgency because of legitimate concerns that existing legal instruments are inadequate to deter imminent attempts aimed at the further militarization of outer space and its possible weaponization . In accordance with resolution 54/53 of the United Nations General Assembly , the Group emphasizes the urgent need for commencement of substantive work in the Conference on Disarmament on the prevention of an arms race in outer space . In this connection , the Group calls upon the States parties to the ABM Treaty to comply fully with its provisions . The Group of 21 reaffirms its flexibility and readiness to continue to contribute constructively and extends its full support to the efforts of the President of the Conference . The Group of 21 urges other groups to display matching flexibility so that substantive work can commence early next year within the framework of a programme of work which reflects the priorities and interests of all delegations . The PRESIDENT : I thank the representative of Algeria for his statement and the kind words addressed to the Chair . That concludes my list of speakers for today . Does any other delegation wish to take the floor at this point ? I give the floor to Ambassador Hu of China . Mr. HU XIAODI ( China ) ( translated from Chinese ) : Mr. President , I have listened attentively to the previous speakers . Last week I took the floor to convey , yet again , the views of the Chinese delegation on national missile defence and the work programme of the Conference on Disarmament . I would like to take this opportunity to present further views on these two issues . First , with regard to national missile defence , the reason advanced for developing and employing such systems is defence against the missile threat posed by certain so-called “ countries of concern ” . It is manifest to all , however , that those countries , given their military capacity and technology and their overall national strength , simply are not in a position to pose any military threat in the foreseeable future to the militarily most powerful country in the world . They are even less likely to pose any threat of missile-borne weapons of mass destruction . Still more important is the lack of motive . No small country would ever attack or threaten to attack the militarily most powerful country in the world with missile-borne weapons of mass destruction , unless it had decided to commit suicide . For that reason , attributing the need to develop and deploy a national missile defence system to the missile threat posed by so-called “ countries of concern ” is far from convincing . It is only a clumsy pretext . International arms control , disarmament and security treaties concluded in the past are not necessarily unamendable in the light of new circumstances . Any amendment ought , however , to promote the purpose and objective of the treaty concerned , namely , international peace and security . If the effect of an amendment is to undermine the treaty 's purpose and objective and to jeopardize international peace and security it must be rejected and opposed . The attempt to amend the ABM Treaty to allow the deployment of national missile defence systems is precisely such a case . It is an incontestable fact that the country possessing the world 's most sophisticated space technology is busy pursuing its plan to develop space weapons . The memory of the “ Star Wars ” programme of the 1980s remains fresh in our mind . The long-range plan to develop a space military strategy , drawn up in April 1998 , is also no secret . It explicitly states that military space capabilities will become a major factor in ensuring that country 's national security and implementing its military strategies and that the primary task of its space force in the twenty-first century is to seek superiority in space . For that purpose , the space command of that country has promoted such operational concepts as securing control of space and global engagement . This is the background against which the development of space weapons has been stepped up , with the national missile defence programme as part of the overall effort . Space systems are an important component of the national missile defence programme . Space will also become the battlefield for national missile defence . The national missile defence system currently being developed is only the first stage in the overall national missile defence plan . More advanced national missile defence systems will follow ; even more weapon systems will be deployed in outer space . The danger of the weaponization of outer space and an arms race in outer space is therefore very real . It is essential for the international community to negotiate now an international treaty to prevent the weaponization of outer space and an arms race in outer space . With regard to the work programme of the Conference on Disarmament , to date the Conference has been unable to carry out any substantive work for two consecutive years . This is a matter of profound concern to China and it earnestly hopes that the Conference will be able to break the impasse as soon as possible . As everyone can see , the impasse is caused by the different parties taking different items of the Conference 's agenda as their top priority . Is there any way out of this impasse ? In my opinion , the answer is yes . What we need to do is to take the concerns of all sides into consideration in a comprehensive and balanced way and set up ad hoc committees with negotiating mandates on the priority items of all sides . That is the only approach that will bring a solution that is genuine and fair without favouring any side , and therefore realistic and workable . We will never reach consensus on the work programme and break the impasse if any one delegation insists on negotiating only on its own priority items and will not permit negotiations on the priority items of other parties . Regrettably , some delegations are persisting in this , which has thus far kept the Conference on Disarmament from establishing any working mechanism , including ad hoc committees , on nuclear disarmament and outer space and prevented it from carrying out any substantive work . China advocates the establishment of an ad hoc committee on outer space , to negotiate a legal instrument to prevent the weaponization of outer space and an arms race in outer space . I have already had occasion , last week and many times before , to elaborate on our reasons for this . China 's position on nuclear disarmament is consistent . We support the position of the Group of 21 with regard to the establishment of an ad hoc committee to conduct negotiations on nuclear disarmament . Although negotiations on FMCT are not a priority item for us , China does not oppose such negotiations . However , in view of certain negative developments , including the setback of CTBT and , in particular , the ongoing national missile defence programme , any formula would be unacceptable to us if it led only to negotiations on FMCT , without also leading to negotiations on outer space . It is clear that there are two possible approaches . One is that advocated by China , namely , to launch negotiations on the priority items of all parties . The other approach is to negotiate only on the priority of one country and not to permit negotiations on the priorities of others . China 's approach , if acceptable to all , could certainly lead to consensus on the Conference 's work programme . By contrast , the other approach , if accepted by all , could never lead the Conference out of its impasse . It is the hope of the Chinese delegation that in the future all sides will treat each other equally and deal with issues in a just and fair way , rather than attending only to their own interests at the expense of the interests of the majority of other countries . In conclusion , Mr. President , the Chinese delegation would like to convey its appreciation for your continued efforts to find a good solution to the problem of the work programme and for your guidance in preparing the annual report of the Conference on Disarmament and the draft General Assembly resolution . We are also grateful to the distinguished Secretary-General and Deputy Secretary-General of the Conference and to all the staff of the secretariat and of the Conference Support Branch for the enormous help they have given us in our work . Mr. MAIMESKUL ( Ukraine ) ( translated from French ) : Mr. President , you still have New York and the General Assembly ahead of you , so let me take this opportunity to wish you every success in your mission . I would like in particular to thank you for your kind words to me . You will recall that , at the height of Ukraine 's presidency two years ago , it was my privilege to welcome you to Geneva . Two years ago , we were able to overcome the difficulties , uncertainties and , on occasion , opposition which faced us and we resolved to move forward . Notwithstanding the difficult times which the Conference is currently experiencing , I believe in its potential and its future . As was said one and a half years ago by Ambassador Joëlle Bourgois of France , the very existence of the Conference on Disarmament is a confidence-building measure which nothing can ever replace . All we need now is a result . Before concluding , Sir , I would like to thank all my colleagues for their cooperation and to bid them all farewell for now , but not for ever . I thank the Secretary-General of the Conference , Mr. Petrovsky . I thank you , Mr. Bensmail , for having so generously shared your unique experience with the Ukrainian delegation , particularly during our tenure as President . I thank the whole team of the Conference secretariat for their readiness to help , their kind consideration and their counsel . The PRESIDENT : I thank the representative of Ukraine for the kind words addressed to the Chair and for his statement . I now give the floor to the Ambassador of Ecuador . Mr. BETANCOURT RUALES ( Ecuador ) ( translated from Spanish ) : Thank you , Mr. President . For me it is a great honour to speak to the distinguished members of this important forum , as I begin my term of office in the area of disarmament as head of the delegation of Ecuador . I thank you for your kind words of welcome , which commit me not only to the primary objectives of this Conference but also to continued cooperation in the essential work that all Governments are carrying out to maintain international peace and security . For these reasons , Sir , I must express my gratitude for all the efforts made by your predecessors and , in particular , my full support for your own efforts as President . In my view , the Conference on Disarmament has as its purpose the coordination of all political aspirations on multilateral issues related to peace , with particular emphasis on disarmament , and progress towards a new , positive climate in international security . The uncertainties and the challenges that this Conference has come up against in recent years may eventually be dispelled if all members heed the call of the international community by cooperating more closely and striving , for example , for consensus on a necessary programme of work for the Conference . Ecuador associates itself with those countries which have stated that this Conference must not shirk its responsibility any longer . It must begin the new millennium with an agenda that will safeguard the process of nuclear disarmament and nuclear non-proliferation , an agenda that will be very clear and inspire hope in all humankind . Ecuador believes that nuclear disarmament is a priority of the international community ; at the same time disarmament is one of the greatest challenges of our times , and one that we must overcome as soon as possible . The PRESIDENT : I thank the representative of Ecuador for his statement and the kind words addressed to the Chair . I now give the floor to the representative of India . Mr. SOOD ( India ) : Mr. President , I have sought the floor to thank you for your warm words of welcome to me this morning . I would also like to convey my appreciation for the many friendly faces that I see around this room as I return to this chamber after an absence of almost 11 years . I look forward very much to working with all my colleagues here and I am quite sure that we should be able to move things forward in the months to come , as we have under your presidency this month . I would like to add that we are aware of the fact that , for the last couple of years , we have not seen active negotiations taking place in the Conference on Disarmament , but nonetheless , the fact that my Government has chosen this moment to appoint me here as head of the Indian delegation to the Conference on Disarmament is a reflection of India 's deep commitment to multilateral negotiations and of its awareness of the importance of multilateral negotiations in disarmament and the unique position that this particular institution has in this field . The PRESIDENT : I thank the representative of India for his statement and the kind words addressed to the Chair . I now give the floor to the representative of the United States of America . Ambassador Grey , you have the floor . Mr. GREY ( United States of America ) : I regret that the distinguished representative of China has seen fit again to misrepresent the plans and intentions of the United States . In my view , these misrepresentations become less persuasive with each repetition . When I spoke on 31 August and 14 September , I addressed these questions in considerable depth . It would be a disservice to the Conference and disrespectful to those here present for me to repeat the same comprehensive answers I have already given , so I shall refrain from doing so today . But I will note that the way to get the Conference on Disarmament back to work is to move along the lines suggested by three past presidents , the ambassadors of Algeria , Belgium and Brazil . My delegation is prepared to proceed in this direction and , I would remind you , so too are the vast majority of the Conference 's members . The PRESIDENT : That concludes the list of speakers that I have for today . Does any other delegation wish to take the floor ? That does not seem to be the case . I will then invite you to formalize the provisional agreements reached at the informal plenary meeting on the draft annual report , as contained in document CD/WP.511 , together with the revisions contained in document CD/WP.512 . Since we were able to go through the draft annual report , paragraph by paragraph , at the informal plenary meeting held last Thursday , and since we have gone through the revisions contained in CD/WP.512 earlier this morning , I shall now proceed to the formal adoption of our annual report as a whole as revised . May I take it that the annual report in its entirety , as contained in document CD/WP.511 and as revised in CD/WP.512 , is adopted ? It is so decided . The secretariat will issue the report as an official document of the Conference in all official languages as soon as feasible . Does any delegation wish to take the floor at this stage ? I should like to inform the Conference that , as Cameroon has notified the secretariat that it will not be in a position to preside over the Conference from 1 January 2001 , as provided for in rule 9 of the rules of procedure , the representatives of the following member States will preside over the Conference in 2001 : Canada from 1 January to 18 February ; Chile from 19 February to 18 March ; China from 19 March to 27 May ; Colombia from 28 May to 24 June ; Cuba from 25 June to 19 August ; and the Democratic People 's Republic of Korea from 20 August to 31 December 2001. I would now like to give the floor to the Deputy Secretary-General of the Conference , Mr. Abdelkader Bensmail , who wishes to make a brief statement . Mr. BENSMAIL ( Deputy Secretary-General of the Conference on Disarmament ) ( translated from French ) : Mr. President , dear friends , as you know , I am about to leave my position as Deputy Secretary-General of the Conference on Disarmament and as Director of the Geneva Branch of the Department for Disarmament Affairs . I therefore wish to take advantage of this last plenary of the 2000 session to take my leave of you all and briefly to share a few personal reflections with you . Let me reassure you at the very outset : I do not intend to apply the tacit rule in the Conference that the length of a valedictory statement should be one page per year of service with the Conference . I certainly do not intend to inflict a 20-page statement on you , nor do I intend to abide by the ritual but perilous exercise of drawing definitive conclusions on the future of the Conference . Others have done that before me and with greater authority , so I will merely make a few comments inspired by the long experience I have gathered in this forum . It is my great privilege to have been associated with the Conference on Disarmament since its very beginnings , following the first special session of the General Assembly on disarmament in June 1978. I was a member of the Algerian delegation which had the honour of being the first to preside over the Conference in January 1979 and thus helping to do the groundwork for its future work . My move from the Algerian diplomatic service to the secretariat here in March 1980 was thus a natural progression , because in fact I continued to deal with the same subjects , albeit from a different standpoint , since in that new office I was no longer defending the position of my Government but serving the interests of all delegations and working to seek consensus . The move was not an easy one but the counsel which I received from my superiors was of great assistance to me at the time . When one day I asked the first Secretary-General of the Conference , the late Ricki Jaipal , what the golden rule was for the secretariat , he said : “ The secretariat should be seen and not heard . ” I think I can say that I have scrupulously stuck to that rule throughout my service , except for one particular occasion when there was an attempt to question the secretariat 's integrity . Thus , I was present at the birth of this institution . I witnessed the immense hopes surrounding it , that it would help rid the world of the threat of weapons of mass destruction and help create an international community determined to reduce conventional weapons to levels compatible with the preservation of national security . I observed its hesitant steps as it tried to forge consensus on priorities for negotiation . I also lived through the Conference 's hours of glory , as it conducted the negotiations which led to the conclusion of the Chemical Weapons Convention in 1992 and the Comprehensive Nuclear Test-Ban Treaty in 1996 , to which processes I made my own modest contribution . And , finally , I have shared your frustration at the Conference 's inability to embark on substantive work on its agenda items . ( continued in English ) The ongoing debate on the role of the Conference in the field of multilateral disarmament diplomacy in the current international security environment is legitimate and necessary . In this connection , it should be recalled that periods of inactivity and deadlock have occurred before in the framework of the predecessors of the Conference on Disarmament , namely , the Ten-Nation Committee on Disarmament , the Eighteen-Nation Committee on Disarmament and the Conference of the Committee on Disarmament . I remember the days when questions were raised as to whether there was a life for the Conference on Disarmament after the conclusion of the Chemical Weapons Convention . These questions were , as I recall , answered with the decision of the Conference to negotiate the Comprehensive Nuclear Test-Ban Treaty . Similar questions are being asked now . Can the Conference overcome the impasse it currently faces , following the indefinite extension of the NPT and the conclusion of the CTBT ? Are we witnessing the emergence of a new model for arms control and disarmament with the “ Ottawa process ” , which led to the agreement on a convention to ban landmines ? Can this experience be repeated in other fields of arms control and disarmament ? Are diplomatic conferences convened through a coalition of like-minded Governments and non-governmental organizations , as a substitute for genuine multilateral negotiations , which are the only negotiations that can ensure universal adherence to treaties and their effective implementation ? The debate on all these questions is not over and is unlikely to be conclusive for the simple reason that the nature of the issues to be addressed in the field of arms control and disarmament , their complexity and magnitude , require that all possible avenues , whether bilateral , regional or global , are fully explored and used . The current deadlock in the Conference on Disarmament has been and continues to be the subject of various interpretations . While it is recognized that the Conference , as an institution , has served the international community well in the past , and that its potential for other multilateral negotiations remains intact , the prolongation of this stalemate is a source of concern to all . The Conference 's value cannot , and should not , be reduced to a simple accounting of the number of treaties it produces . The situation it faces can be largely attributed to a fundamental divergence of views on the wider question of what is the international disarmament agenda after the end of the cold war , the conclusion of the Chemical Weapons Convention , the indefinite extension of the Non-Proliferation Treaty and the Comprehensive Nuclear Test-Ban Treaty . In particular , it relates to the requirement to strike the right balance between the preservation and consolidation of the nuclear non-proliferation regime and the need to accelerate and multilateralize the nuclear disarmament process , while at the same time preserving and enhancing strategic stability . Preparing the ground for future negotiations through discussions and technical work is a prerequisite for the start of genuine negotiations . All major negotiations have been preceded by a pre-negotiation stage , in which some shared understanding is reached that a security problem exists and that it must be addressed multilaterally . This process may be arduous and time-consuming , but it provides the guarantee that the end-product , that is to say , treaty-making , is based on solid foundations which take into account the security concerns of all and therefore ensures the universality and effectiveness of the agreements reached . What is required is a common willingness of all the membership of the Conference , making full use of its in-built flexibility and recognized expertise , to develop a workable and balanced programme of work which takes into account the priorities and concerns of all . Multilateral disarmament forums have always evolved over the years in response to changed political realities . The Conference on Disarmament is no exception in this respect , and the difficulties it now faces are not due to what is perceived by some as the rigidity of its rules of procedure , of its working methods and the group system . They are rather a reflection of the complexity and the dynamics of contemporary international relations , and therefore all efforts should focus on the creation of a political climate conducive to the full use of the Conference as a negotiating forum , in particular on the restoration of a minimum harmony among the major players . ( continued in French ) I realize that I have strayed somewhat from my intention not to embark on serious political comment , but I am sure that you will not hold that against me . My long association with the Conference on Disarmament has been a valuable experience for me at all levels , personal , political , intellectual and cultural . The friendship and trust that you and your predecessors have always shown towards me has really made things very much easier for me and I am grateful to you for that . I would not want to conclude these comments without conveying my sincere thanks to the whole team which has given me such valuable assistance in carrying out my duties over all these years : Hannelore Hoppe , Silvana da Silva , Vladimir Bogomolov , Jerzy Zaleski , Sonia Koppe , Alexandre Golay , Yvonne Santa Eugenia , Charlotte Laut Hernández , Cheryl Darby , Annette Ekberg , Lynne Hardewall and Saïd Zoughy were skilful , devoted colleagues , always ready to help and to put up with my Mediterranean character . And , finally , my thanks go to the interpreters , whom we so often put through the mill and who have always responded courteously to the sometimes unreasonable demands placed on them by the Conference . The PRESIDENT : I thank Mr. Bensmail for his profound and enlightening statement . Would any delegation like to take the floor at this point ? I see the representative of France . Ambassador de La Fortelle , you have the floor . Mr. de La FORTELLE ( France ) ( translated from French ) : Mr. President , my dear colleagues , the interpreters , ladies and gentlemen , the Deputy Secretary-General of the Conference on Disarmament , Abdelkader Bensmail , has just given us some sad news today : for him this will be the last plenary meeting of the Conference on Disarmament in Geneva . Fortunately , he will be accompanying many of us to New York to follow the work of the First Committee and will take his retirement thereafter . It is with great sadness that we will see him leave after a long career that has taken place , if I may say so , on both sides of the looking-glass : first , as a diplomat representing Algeria , and then as an international official in the United Nations . At the risk of offending his well-known modesty , I will recall the major stages of his university , professional and family life which have made of him both a great Algerian and a great Frenchman . Abdelkader Bensmail attained outstanding academic success in my country . He has a postgraduate degree in English and degrees from the Toulouse Institute of Political Studies and the Institute for Foreign Affairs in Paris . With such fine qualifications , a career in international affairs was unavoidable and it is indeed that career that he chose . Abdelkader Bensmail began his career in the Algerian diplomatic service and served his country with distinction . As he has recalled to us , he became an international civil servant with the United Nations first in New York , in the International Affairs Department , and then in Geneva in the Conference on Disarmament . In October 1993 , the Secretary-General of the United Nations appointed him to the post of Deputy Secretary-General of the Conference on Disarmament and head of the Geneva Branch of the United Nations Centre for Disarmament Affairs . As you can see , at the end of a career both varied and full , his outstanding merits have always received due appreciation and positions of high responsibility have been conferred upon him , in particular , the post which he has held for the last seven years here in Geneva . Abdelkader Bensmail has always acted in a manner both effective and discreet . He has rarely taken the floor , and he has told us why , but his advice was always valuable , particularly for us . As he departs , he will be taking with him the memory of the Conference . We could always turn to him to learn of those ever useful precedents . My predecessors were able to appreciate his many qualities during both the negotiations of the Convention on Chemical Weapons and those of the CTBT , and I believe I speak for all of us when I say that we will all miss him in the time to come , as he enjoys his well-deserved retirement . It remains only for me to convey my very best wishes to the Deputy Secretary-General and to hope that he enjoys happiness and the best of health in his new life . The PRESIDENT : I thank the representative of France for his statement . Would any other delegation like to take the floor ? I see the representative of Egypt . Ambassador , you have the floor . Ms. ABOUNAGA ( Egypt ) ( translated from Arabic ) : Mr. President , since I come from the same region as Mr. Bensmail , might I be allowed through you to say these few words to him ? On behalf of the Egyptian delegation , I would like to express our gratitude and appreciation to Mr. Abdelkader Bensmail , the Deputy Secretary-General of the Conference on Disarmament , who unfortunately is leaving us today to enjoy what I am sure will be a better life after his official duties and after all the dedicated services that he has rendered , for almost a quarter of a century , to his country , Algeria , and in furtherance of the aims of the Conference on Disarmament and the programmes and agenda for disarmament in general . As we and previous representatives of our countries to this Conference can testify , these services were rendered over the years in a highly competent manner . They were made possible by virtue of his commendable personal qualities , which he described , very modestly , as being possibly attributable to his Mediterranean character . They certainly turned him into a team leader who has worked with a great deal of skill and efficiency . Today we bid him farewell , but only here in the Conference , and may I personally , on behalf of the Egyptian delegation , wish him every success in his future life . I am quite sure that , in mind , thought and spirit , he will not abandon the Conference on Disarmament or the objectives of disarmament and that he will always remain very close to us here in the Conference . I wish him all the best and reiterate my sincere gratitude and appreciation on behalf of the Egyptian delegation . Thank you . The PRESIDENT : I now give the floor to China . You have the floor , Ambassador Hu . Mr. HU XIAODI ( China ) ( translated from Chinese ) : Thank you , Mr. President . Like the two previous speakers , I shall also deeply regret the impending retirement from office of our Deputy Secretary-General , Mr. Bensmail . With his outstanding diplomatic skill and rich work experience , Mr. Bensmail has over the course of many years performed a great deal of valuable work for our Conference on Disarmament , and has rendered enormous assistance to all the delegations , for which he has earned the highest praise . In fact , since the very foundation of the Conference and throughout his work with this forum , he has served as a veritable living encyclopaedia of all the issues relating to the Conference on Disarmament . The statement which he has just delivered is full of wisdom and merits our deep consideration . Without question , his departure will be a loss both to the Conference on Disarmament and to us all . On behalf of the Chinese delegation , I would like to express our wholehearted appreciation for all the help that he has given us over all the years since we first joined the Conference on Disarmament . I also sincerely wish him every success for his future . The PRESIDENT : I now give the floor to the representative of Algeria . Mr. BENFREHA ( Algeria ) ( translated from French ) : As a fellow countryman , it is incumbent on me , on behalf of my country , to pay special tribute to Mr. Abdelkader Bensmail , Deputy Secretary-General of the Conference on Disarmament , for the quality of the work he has performed here in the Conference on Disarmament and , at the same time , to extol the efforts he has made since the establishment of this multilateral forum to instil in it a spirit of consensus . We see in Mr. Bensmail a consummate product of the Algerian diplomatic service , the service in which he embarked on his professional career . His exemplary approach to his work was forged in this school of diplomacy , which has always advocated the attainment of consensus in dealing with key issues of disarmament , in the interest of peace and international security . I would also like to associate myself with the eloquent praise expressed by those speaking before me for Mr. Bensmail 's outstanding qualities and to give him my best wishes for his retirement . The PRESIDENT : I thank the representative of Algeria for his comments . Does any other delegation wish to take the floor ? I see the representative of India . Mr. SOOD ( India ) : It is perhaps somewhat presumptuous for a person who has just joined the Conference on Disarmament to seek the floor twice on his very first day in this forum , but this is a rather special day , and I exercise this privilege as one of the people who have known Kader since 1986. It is both strange and somehow special that , as I attend my first plenary in this new appointment , it also happens to be Kader 's last plenary in his present appointment . Many people around this table have spoken about his professional skills , but what I would like first to single out in this enormously rewarding relationship , my personal relationship with Kader , are his generosity with his time , which he so willingly shared with me when I came here for the first time in 1986 , knowing very little about multilateral work and even less about disarmament , and the ease with which we could rely on him to give us the history and the background of issues and to educate us in the niceties of multilateral work . And second I recall his warm hospitality , which I have enjoyed on more than one occasion . The last memorable such occasion was the farewell dinner given in my own honour at his house in 1989. When I was appointed here , one of the things I looked forward to was the chance to resume this close contact , which we had kept up over the years , but within obvious limits , given that we were in different cities . All the same , I am glad that I have been present today at your last plenary meeting in this appointment . I would like to wish you the best of luck and good health , happiness and contentment . The PRESIDENT : I thank the representative of India for his statement . I now give the floor to the representative of the Republic of Korea . Mr. SUL ( Republic of Korea ) : Since this is the first time that I am taking the floor under your presidency , I should like to congratulate you on your assumption of the presidency . Please be assured of my delegation 's full support in carrying out your noble endeavours . I would also like to express my appreciation to Mr. Petrovsky , Secretary-General of the Conference , and to the staff of the secretariat for their excellent job in providing conference services . I have asked for the floor today on behalf of the members of the Western Group to express our regret and deep sadness over Mr. Bensmail 's departure . It is very difficult for me to add anything to the eloquent tributes already paid to Mr. Bensmail this morning . I would like to say , however , how much we have benefited from his vast knowledge and experience in disarmament negotiations , his diplomatic skills and the managerial proficiency which he brought to the Conference . Mr. Bensmail assumed many roles , sometimes as an untiring negotiator , sometimes as a diligent provider of a good and constructive atmosphere for the work of the Conference . His charming personality and engaging character have constantly stimulated the work of the Conference . He was a good friend of the Western Group and , I am sure , of all the delegations to the Conference on Disarmament . We all agree that , with his years of experience and dedication , Mr. Bensmail has become a “ walking library ” of the Conference , given his extensive knowledge not only of all those complicated procedural issues but also of many aspects never recorded in any document . How reassuring it was to know that we could always count on Mr. Bensmail effortlessly to solve what seemed to us unfathomable mysteries . The Western Group expresses its most sincere gratitude to Mr. Bensmail for his dedication and outstanding professionalism . We will miss him very much , but I find consolation in a Korean proverb which wisely says that , while those who meet are destined to part , those who part are destined to meet again . We wish him all the best , continued good health and happiness . The PRESIDENT : I thank the representative of the Republic of Korea for his statement and for the kind words addressed to the Chair . I now give the floor to the representative of Romania . Mr. HORUMBA ( Romania ) : Mr. President , speaking on behalf of the Eastern European Group , I would like wholeheartedly to endorse the kind words of appreciation addressed by previous speakers to Mr. Abdelkader Bensmail . The Eastern European Group would also like to thank Mr. Bensmail for his efforts in the important office of Deputy Secretary-General of the Conference on Disarmament and to commend him on his long-standing experience and expertise in the field of multilateral disarmament , his diplomatic skills and the managerial competence he has displayed in the activities of our unique international body . As we bid farewell to Mr. Abdelkader Bensmail , we wish him every success in the years ahead , long health and prosperity , as well as personal happiness . The PRESIDENT : As I see no other speakers , I shall proceed with some short closing remarks . In my opening remarks I identified two principal objectives in my work as the last presiding officer of the 2000 session of the Conference on Disarmament : to continue the efforts towards finding a compromise on the programme or work and to facilitate the adoption of the Conference 's report to the General Assembly of the United Nations . The second task has just been accomplished , and I am grateful to all delegations for the assistance and the collaboration that have made this possible . I believe that the report which we have adopted is factual and accurate in accounting for the Conference 's activities in the year 2000. With regard to the first task , I am compelled to conclude today , on behalf of this Conference , that we have spent yet another session mostly on trying to pre-negotiate the conditions for our possible future negotiations on the different topics of our agenda , upon which we happen to agree . My consultations to date have confirmed that we are still short of a compromise on a programme of work for the Conference . While there is a broad measure of agreement on most of the elements for such a programme , there are two issues , nuclear disarmament and the prevention of an arms race in outer space , that have still to be tackled further . In addition , to be able to agree about anything in the programe of work , it seems that first we have to agree about everything . There were times when the situation seemed so serious that , as the saying goes , we could only joke about it . It is clear that we have before us a tall order and there should be nothing exceptional about the fact that it is taking us so long to perform . That having been said , these past four weeks I have also become aware of a number of promising signs in the Conference on Disarmament . Of the two outstanding issues on our draft programme of work , our positions on nuclear disarmament seem to be a little closer to convergence today than they were about a year ago . In addition , most of the delegations with which I have had meetings share the same concern and similar perceptions with regard to the delicate stage at which we find ourselves in the Conference on Disarmament . The positive attitude of all members in preparing our annual report to the General Assembly , as well as the contents of that report , are also testimony to the good will prevailing in the Conference for our endeavour to surmount the hurdles that face us . Our joint efforts brought about an encouraging development in our report CD/1624 , as the accumulation of new constructive ideas expressed in the Conference during the current and previous years . The report that we adopted delivers a forward-looking recommendation to me and to my successor to conduct intensive consultations during the inter-sessional period on the basis of the progress that has already been achieved . I intend those consultations to be open , pragmatic and cooperative , with the sole objective of preparing a good beginning for the 2001 session . All in all , provided we are able to demonstrate the necessary political will , we may well be just a couple of critical steps away from the desired compromise and the start of substantive work in the Conference on Disarmament . As in a long-distance race , the last few steps often prove to be the most difficult . But I believe that these steps will not be impossible to make ; we are , after all , carrying the baton forward into the next millennium ( please forgive the cliché , but desperate times call for desperate metaphors ) . At this threshold in time , we the peoples are striving for a safer world , based on development and disarmament . We the peoples prefer to compete in sporting competition , rather than arms races . Our heads of State and Government exercised their political will in resolving , earlier this month , to share the responsibility for international peace and security , assigning special significance to disarmament , amongst other areas . The Conference on Disarmament , as the sole multilateral negotiating forum in its field , has a unique role to play in delivering on this commitment . In conclusion , I would like to express my gratitude to the Secretary-General of the Conference , Mr. Vladimir Petrovsky , who today had to attend a memorial service and unfortunately could not be with us ; to all the members of the secretariat for their efficiency and valuable advice ; to the interpreters , for their patience and dedication ; and to all delegations for their cooperation and understanding . Today is also a special occasion for us . It is my honour and my privilege to pay tribute , on behalf of all the members of this Conference , to the Deputy Secretary-General , Mr. Abdelkader Bensmail , who will be retiring later this year . Mr. Bensmail has had an illustrious diplomatic career , the last 20 and more years of which have been devoted to the Conference on Disarmament and to disarmament in general . His expert guidance and professional competence have been emblematic of the work of the secretariat and will remain as an example to follow . He is what I would call the “ living history ” of this Conference , and I can only hope that some day he will put it all down on paper . Mr. Bensmail , your experience and outstanding contribution will be greatly missed by us all . We wish you and your family good health , good luck and continued success . The next plenary meeting of the Conference will be held on Tuesday , 23 January 2001 , at 10 a. m. The meeting rose at 12.15 p. m. </text>
<text id="un/CEDAW_C_2002_II_3_ADD2">
Committee on the Elimination of Discrimination against Women Twenty-seventh session 3-21 June 2002 Item 5 of the provisional agenda* Implementation of article 21 of the Convention on the Elimination of All Forms of Discrimination against Women Report provided by specialized agencies of the United Nations on the implementation of the Convention in areas falling within the scope of their activities ** The document was submitted late to the conference services without the explanation required under paragraph 8 of General Assembly resolution 53/208 B , by which the Assembly decided that , if a report is submitted late , the reason should be included in a footnote to the document . Note by the Secretary-General** Addendum World Health Organization On behalf of the Committee on the Elimination of Discrimination against Women , on 17 April 2002 , the Secretariat invited the World Health Organization ( WHO ) to submit to the Committee a report on information provided by States to WHO on the implementation of the Convention on the Elimination of All Forms of Discrimination against Women , in areas falling within the scope of its activities , which would supplement the information contained in the reports of the States parties to the Convention to be considered at the twenty-seventh session . Other information sought by the Committee refers to activities , programmes and policy decisions undertaken by WHO to promote the implementation of the Convention . The report annexed hereto has been submitted in compliance with the Committee 's request . Annex Report of the World Health Organization to the Convention on the Elimination of All Forms of Discrimination against Women at its twenty-seventh session Comments on the health of women in States parties presenting initial reports : the Congo , Saint Kitts and Nevis , and Suriname Introduction Women 's health is an issue given some prominence both directly and indirectly in the Convention on the Elimination of All Forms of Discrimination against Women and the potential negative effects of discrimination on the health of women is a theme that appears in various places . Article 12 explicitly sets forth the obligation of States Parties to take all appropriate measures to eliminate discrimination against women in the field of health care in order to ensure , on a basis of equality of men and women , access to health-care services , including those related to family planning . Other articles strengthen and broaden this article , calling for the elimination of discrimination against women in a number of health-related fields , for example , articles 10 ( education ) , 14 ( rural women ) and 16 ( marriage and family relations ) . The General Recommendations , likewise , have expanded and specified other issues which the Committee on the Elimination of Discrimination against Women ( CEDAW ) also believes it is important to monitor for discrimination and which are related to health , for example , Nos. 12 ( 1989 ) and 19 ( 1992 ) on violence against women , No. 14 ( 1990 ) on female circumcision , No. 15 ( 1990 ) on avoidance of discrimination against women in national strategies for the prevention and control of AIDS , No. 18 ( 1991 ) on disabled women and No. 24 ( 1999 ) , the Committee 's most extensive comments on women 's health . General Recommendation No. 24 , completely related to health , is of particular importance . This recommendation places the health of women in a comprehensive framework and takes a lifespan approach , recognizing the importance of the age-specific needs of women at various points throughout life . The World Health Organization ( WHO ) is pleased to submit this report with information which may complement the reports of States parties and draw attention to some issues related to women 's health that may merit the special attention of the Committee . Information for each country is grouped under various headings — basic data , children , adolescents , women , older women and conclusions — selecting , in each case , information particularly relevant to the health of women of all ages . It is to be regretted that data on a number of issues important to the health of women , particularly poor women , tends to be inadequate or absent altogether from much of the standard published information about women in many countries . For example , • While WHO and a number of other United Nations agencies are deeply concerned about the issues of trafficking in women and children and there are suggestions it may be an important issue to some of the countries reporting to CEDAW , there is little systematic country-specific information available about either the volume or the threats to the health and well-being of women who are victims of trafficking ; • Two other important issues which are underrepresented are the overall incidence , impact and male-female distribution of child labour and occupation-related health problems of women in both formal and informal work settings ; • Data is scarce on women with disabilities and other women who live or work under circumstances that place them at particularly high risk of disease or disability , such as , inter alia , migrant workers , refugees and other socially displaced women , and sex workers . These are issues which could usefully be raised in connection with every country . Finally , it would be extremely useful if the Committee should wish to emphasize the importance of women 's health beyond the long-standing concern with reproductive health . For example , many countries have little systematic disaggregated data available on women 's health issues such as : • Communicable diseases , including malaria and tuberculosis ; • Cardiovascular diseases ( increasingly important as killers of women ) ; • Mental health problems ; • Lifestyle-related disability and death including substance abuse ( smoking and alcohol ) ; • Osteo-arthritis , auto-immune diseases and others which are particularly important as contributors to disability and death of older women . WHO , as a member of the United Nations system , takes the CEDAW reporting process seriously and considers it to be an important opportunity to strengthen work related to women 's health . With a view to strengthening this work , the Department of Gender and Women 's Health of WHO is preparing a publication intended to help staff working with counterpart Governments in the preparation of the health aspects of the country report to the Committee . The document has been developed with input from all WHO regional offices and technical departments and in collaboration with Rights and Humanity . It is hoped the members of CEDAW will also provide input to the draft during the twenty-seventh session . The Congo General The Congo ( Brazzaville ) has a total population of 3 million people1 and a population growth rate of 3.1 per cent.2 The population is almost equally divided between women and men , with the women making up 51 per cent of the total . Life expectancy at birth is comparatively low . However , as in many other countries , women have longer life expectancy ( 53 years ) than men ( only 50 years).3 The majority of the people of the Congo live in urban areas ( an estimated 65.4 per cent in 2000).4 The urban population growth rate for 2000-2005 was estimated to be 3.96 per cent per year , slightly lower than the regional ( Middle Africa ) figure of 4.40 per cent per year for the same period.5 According to World Bank figures , the Congo falls in the low income category.6 In 1999 , the gross national product per capita was US$ 670.7 Total expenditure on health in 1998 was estimated to be 3 per cent of the gross domestic product , slightly higher than in 1997.8 The overall situation of the Congo is challenging in terms of health and all aspects of human development . This fact was commented upon in some detail in the concluding observations of the Committee on Economic , Social and Cultural Rights.9 Civil war led to massive population displacement as well as the disruption of the national economy and the production and marketing of food . This had a profound , negative impact on the situation of daily life . Health and health systems , likewise , have been affected . Children Nearly half of the population of the Congo ( 46.3 per cent ) is under 15 years of age.10 Almost one quarter ( 23 per cent ) are adolescents between the ages of 10 and 19.11 The infant mortality rate ( probability of an infant dying before 1 year of age ) is 87.2 per 1,000 live births for girls and 100 for boys.12 The child mortality rate ( probability of a child dying before reaching his or her fifth birthday ) is estimated to be 122 for girls and 134 for boys.13 For children who survive , problems of health and nutrition continue and are serious . Malnutrition runs high , immunization coverage is low and the impact of AIDS is increasing . The proportion of children below 5 years of age suffering from wasting is about the same as the regional average of 10 per cent.14 However , 45 per cent suffer from moderate and severe stunting , 8 points higher than the regional levels and 13 points higher than the world levels.15 Immunization levels reach only 50 per cent or lower . Unfortunately , neither nutrition nor immunization figures offer data disaggregated by sex . Table 1 Child immunization rates in the Congo , 1995 and 200016 HIV/AIDS is having a devastating impact both directly and indirectly on the children of the Congo . At the end of 1999 , 4,000 children below 15 years of age were living with HIV and 35,103 had been orphaned by the epidemic , losing either their mother or both parents to AIDS.17 One must assume that the numbers have increased significantly since then . Comment These data have important implications for national policy as well as for the design and development of public services , particularly in fields such as education and health . With little disaggregated data available it is difficult to know whether there are problems of particular seriousness for girls as contrasted with boys . The Committee may therefore wish to emphasize to the representatives of the Congo the importance of ensuring equity and equality in the promotion of child health and the necessary infrastructure . The impact of stunting , now affecting 45 per cent of the children under 5 , is lifelong and can be irreversible . Similarly , the low immunization levels mean that the majority of Congolese children are exposed to avoidable and , in some cases , fatal disease and disability . The cost of these low immunization rates is high for both the individual and the nation in premature death and loss of dignity and productivity through lifelong disability . In view of this fact , any discussion of health should emphasize the urgency of appropriate management of health and nutrition in the early years of a child 's life , both male and female . Adolescents In the field of health , early pregnancy and HIV/AIDS are the two most conspicuous issues about which there is solid data indicating the need for attention and action . During the period 1995-2000 , there were 141 births per 1,000 females from 15 to19 years of age,18 about the same as the regional figures ( 143 per 1,000)19 but considerably higher than desirable in terms of the health and development of both the mothers and the children . Figures are not available on adolescents with HIV , but it is noteworthy that in the 15 to 24 age group , an estimated 6.5 per cent of girls/women are HIV positive , while only 3.2 per cent of boys/men are so.20 The data on teen pregnancy , HIV infection and disparity in rates of infection between boys and girls all demonstrate the urgency of action to improve the availability of and access to appropriate health information and services , particularly addressing the reproductive health needs of adolescent girls . Bearing in mind that the gross secondary school enrolment ratio of girls is only 45 per cent,21 such action would need to be focused on mapping the activity of adolescent girls to determine where and how best to reach them and help them to be empowered to take appropriate measures . The issue of the impact of civil war and its effect on many aspects of life has been highlighted in discussions of the Committee on Social , Economic and Cultural Rights . Related to this , an additional issue relevant to the health of adolescent girls in the Congo is the question of their involvement in past or present military activity as combatants or part of the support system for combatants . Unfortunately , there is little relevant hard data available . Comment Threats to the health of adolescent girls are many , but among the most serious are those related to sexual and reproductive health and behaviour . Data related to teen pregnancy and HIV infection suggests that gender-prescribed roles place girls at disproportionate risk of pregnancy and ill health and leave them little latitude to protect themselves . In this connection and in line with paragraph 18 of General Recommendation No. 24,22 the Committee may wish to pursue discussion with the representatives of the Congo , focusing on availability of gender and age-specific reproductive health information and services . Activity to promote the evolution and acceptance of more equitable and balanced relations between the sexes could contribute to the effectiveness of such programmes . In line with the stipulations of the Convention on the Rights of the Child and the healthy development of girls , all involvement of girls in military activity should be firmly discouraged . The Committee may therefore wish to explore the availability of programmes of rehabilitation and efforts to prevent the involvement of girls in military or quasi-military activity which may be damaging to their mental or physical health and development . Women Women share with the whole community the burdens resulting from life under conditions of poverty , insecurity , civil war and social disruption . Women are , in fact , disproportionately affected by all these conditions , which place their mental and physical health at great risk . Reports of both the Human Rights Commission and the Committee on Economic , Social and Cultural Rights have called attention to widespread problems of domestic violence , women 's victimization by armed men , serious disruptions of food production and the paucity of health services in both urban and rural areas . All of these must be assumed to contribute to the generally high fertility rates ( 6.3 for the Congo in 200023 as compared with a global level of 2.68)24 and low levels of health among women . However , specific data is seriously limited . Added to this already difficult situation , HIV/AIDS is moving rapidly through the population . At the end of 1999 , it was estimated that 6.43 per cent of the population was infected , 45,000 women and 37,000 men.25 Women at risk of special health problems are those among the population of concern ( refugees , asylum-seekers and returned refugees ) . As of the end of 1999 , they totalled more than 63,000 ( 53.8 per cent of the total population of concern).26 Comment Serious attention is needed to find ways progressively to address the special health risks , needs and vulnerabilities of women in the Congo , both in the general population and in refugee and other temporary living situations . Wherever they are located , the women are entitled to reasonable access to basic health information and services and adequate protection to ensure preservation of their dignity and their physical integrity . The Committee may , therefore wish to enquire about both immediate and longer-term plans to carry out programmes and build community-based infrastructure and the necessary support systems to ensure that the women of the Congo have access to increasingly effective health services in accordance with standards set forth in the General Recommendation on health . Given the extreme hardships that much of the population has undergone in recent years , it would be important to ensure inclusion of the views of the women themselves in the design , priority-setting and development of health services . Saint Kitts and Nevis Statistics on Saint Kitts and Nevis are not easy to come by and the country report had not yet been posted on the Internet at the time the present report was written . Because of this , the following analysis is limited in detail and only a few issues are raised for the consideration of the Committee . General Saint Kitts and Nevis has a total population of 38,000 people27 and , during the decade 1990-2000 , had a negative population growth rate ( -0.8).28 Sixty-six per cent of the people live in rural areas.29 Life expectancy at birth is 72 years for women and 66.1 years for men.30 The proportion of urban population to total population ( 34.1 per cent)31 is considerably lower in Saint Kitts and Nevis than in the rest of the Caribbean ( 63 per cent).32 According to the World Bank , Saint Kitts and Nevis falls in the upper middle income category with an annual GNP per capita of $6,420.33 Children and adolescents Figures on both infant and child mortality reflect the biological advantage of girls over boys . The infant mortality rate is 17 for girls and 23 for boys ; 34 the child mortality rate is 22 for girls and 25 for boys.35 Although , unfortunately , the data is not disaggregated for boys and girls , immunization rates are good : 99 to 100 per cent of the children are fully immunized by one year of age.36 However , notwithstanding the relatively good economic circumstances of the country , nutritional levels , at least during the five-year period 1995-2000 , were not good in either absolute or relative terms ; they ran the same or higher than world levels and markedly higher than regional levels . Table 2 Prevalence of child malnutrition in Saint Kitts and Nevis ( Percentage of children under five years of age)37 Such high malnutrition levels must be a matter of concern . Comment The Committee may wish to encourage the State party to investigate the causes of malnutrition , giving particular attention to establishing if and what kind of differences there may be in the nutritional status of boys and girls and whether there are any discriminatory feeding patterns which negatively influence a girl 's chances of being well nourished . Women Little data on specific health conditions of women in Saint Kitts and Nevis are generally published . There are , however , data on maternal mortality indicating the 1998 rate was 130 per 100,000 live births.38 Comment In global terms , the maternal mortality rate is comparatively high . The Committee may therefore wish to enquire what factors led to this rate and the State party may be encouraged to take action to improve available services and information , including through community-based health services , with a view to improving this situation for women . The Committee may also wish to call attention to the special needs of older women and those with disabilities . Suriname General The population of Suriname totals 417,000 people,39 almost equally divided between men and women ( women = 50.36 per cent ) . The annual population growth rate is 0.4 per cent.40 Thirty-one per cent of the population is below the age of 15 years ( 127,200 people).41 Nearly one quarter of the population ( 23 per cent ) is made up of adolescents from 10 to 19 years of age.42 There is some difference in life expectancy at birth between women and men , with women expecting longer lives ( 73.5 years ) than men ( 68 years).43 Nearly three quarters of the people of Suriname live in urban areas ( 74.2 per cent).44 According to World Bank classifications , Suriname fell in the lower middle income group of nations in 2000.45 Although there is data in the public domain about health in Suriname , including information specifically about women 's health , much of it refers to studies in a particular institution or locality . Much of it was also found to be six or more years old . For these reasons , it is hard to draw informed , overarching conclusions about the status , trends and challenges facing the people of Suriname in the field of women 's health . These notes attempt to suggest areas of interest or concern but , of necessity , are limited in scope . Children and adolescents As is true in most of the world , infant mortality rates , the proportion of children who die before they reach the age of one , are different between girls and boys , with the situation being better for girls . The rate for girls is 19 per thousand live births ; for boys , it is 27 per thousand live births.46 This is also the case for child mortality rates ( the proportion of children who die before reaching the age of 5 per thousand live births ) . The rate was 27 for girls and 29 for boys,47 an improvement over 1997 when they were considerably higher ( respectively , 39 and boys 51).48 Unfortunately , good , comprehensive , disaggregated data on child nutrition seemed unavailable for Suriname . Data on education shows equity between girls and boys , with girls making up 49.5 per cent of the primary school students ( equal to their percentage of that age population).49 General concerns about children have been well covered in the Suriname report to the Committee on the Rights of the Child and in the concluding observations of the Committee.50 Health-related issues of particular concern , which are rooted in discrimination , are violence and sexual exploitation of girls , beginning with young children and continuing into adolescence . While some variation exists among different ethnic communities , there is no question that HIV/AIDS is a serious problem that has an impact on children and older adolescents . The female-male distribution of HIV , particularly among adolescents and young adults , highlights the difficulty girls have protecting themselves . It is estimated ( 2001 ) that among the population from 15 to 24 years of age , 0.79 per cent of boys are HIV positive , while the corresponding figure for girls is 1.33 per cent , nearly twice that of boys.51 At the end of 1999 , there were also 110 children below 15 years of age living with AIDS ( sex not reported).52 Furthermore , 352 children had been orphaned by AIDS.53 Although recent figures were hard to come by , it is likely that smoking is a serious and growing problem among girls . Already in 1987-1988 , smoking prevalence among young people from 10 to 19 years of age was estimated to be 12 per cent for girls and 36 per cent for boys.54 If Suriname has followed patterns common elsewhere , the advertising industry will have actively targeted young people and those figures are likely to have grown significantly . Knowing that the process of addiction grows more quickly among young girls than boys , one must assume many of these girls will be lifelong smokers , with negative health effects accumulating throughout later years of life and , should the girls become pregnant , smoking will have a negative impact on the health of the baby they will bear . Comment Three issues of particular importance which would benefit from the Committee 's attention are domestic violence , with particular attention to abuse , including sexual abuse of girls ; information , care and service related to HIV among adolescents , particularly adolescent girls ; and smoking . Activities are needed to encourage , particularly among younger adolescents , empowerment of girls , more sexual responsibility among boys and more equitable and mutually respectful relations . Such activity would have a positive impact in both the short and long run , including a positive intergenerational impact , as children are less likely to be raised in families affected by violence or the HIV pandemic . Additionally , the Committee may wish to encourage the State party to attempt regular nationwide updates of disaggregated data on issues such as nutrition , smoking and domestic violence as the basis for gender and situation analysis leading to interventions to promote and protect the health of young people . Women Access to health-care services among minority and poor women is limited , a negative factor related to women 's health . Problems of access appear to stem from poverty , uneven distribution of service ( urban and interior areas ) and population . Gender-based violence is a serious problem , one which has been noted for at least the last decade , but progress in addressing it has been limited . A study carried out in 1990 found that 95 per cent of all sexual offences registered by the Emergency Department of the Academic Hospital were women : 20 per cent of the victims were below 10 years of age.55 While the Government has taken modest steps to improve the official response to domestic violence , including some training for police , the availability of a social worker in some places , the coverage has been limited and girls and women of all ages continue to be subject to abuse . The women 's movement has also been active and by the late 1990s some progress was reported . A police study ( 1996-1997 ) indicated some decline in violence,56 although women were still victims in 76.7 per cent of the incidents of domestic violence reported in 1997.57 Debate , nonetheless , continues about the appropriateness of public policy entering an area of private relations such as domestic violence . This may slow official action in this field and permit continuing violence against women . HIV is an increasingly serious problem in Suriname . Problems of poverty and changes in some norms and values have contributed to an increase in prostitution.58 Moreover , men 's continuing decisive power over the use of condoms has meant that activity to control and treat sexually transmitted infections , including HIV , have had limited benefits for women.59 In the late 1990s , the Dermatological Service indicated 1 in 5 street sex workers tested to be HIV positive.60 The overall infection rate of adults was 1.26 per cent in 1999,61 considerably higher than the regional ( Latin America ) rate of 0.5 per cent in 2001.62 Exhibiting a pattern common to many parts of the world , among younger people from 18 to 25 years of age , the majority of those who are HIV positive are female , while among those over 25 years of age , more males are infected.63 By the end of 1999 , women made up 33 per cent of all people aged 15 to 49 living with AIDS.64 The maternal mortality ratio for Suriname was estimated to be 230 per 100,000 live births for the early 1990s , well below the global average of 400 per 100,000 live births.65 A preliminary WHO analysis for 2000 suggests it is now much lower , around 112 per 100,000 live births . Nonetheless , given the fact that 98 per cent of deliveries are attended by trained health personnel,66 further investigation would be in order as to the distribution and causes of maternal mortality as well as options for affordable , acceptable interventions to reduce that figure . Comment The multi-ethnic make-up of Suriname and unequal distribution of population complicate the implementation of public policy and the achievement of equity among women with regard to access and utilization of public services . Inequities in power relations between men and women also make maintenance of good health difficult for some women who are in relationships which place their sexual , mental and physical health at risk and leave them little recourse . The Committee may wish , therefore , to encourage the State party to give particular attention to the development and implementation of stronger public policy in these areas as well as to issues of equity in the accessibility and utilization of public services . Data and reports on HIV infections and domestic violence indicate continuing , unresolved challenges related to gender relations . It is regrettable that no recent data has been found on smoking among adolescents or adults . This has long-term health impacts and advertisers often capitalize on and reinforce negative gender stereotypes to promote their product . The Committee may therefore wish to encourage the State party to investigate and take action to monitor and control rigorously access to and use of smoking material . Nutrition and mental health are two other fields of considerable impact related to women 's health and well-being on which little current data was found . Older women Women over 60 years of age make up 9 per cent of the female population of Suriname.67 As elsewhere in the world , they outnumber men of the same age by a considerable number — there are 127 women for every 100 men 60 years of age or older and there are 132 women for every 100 men 80 years of age or older.68 While most people have access to some form of health insurance , the elderly and the poor have suffered most from the country 's economic problems , which have eroded the availability of services . Suriname is a country which has experienced a considerable outflow of population , especially those persons of productive age , and benefits from remittances and , sometimes , medicines sent home by family members employed abroad . Older women who do not have such networks , particularly those suffering from chronic diseases who need regular medical care or treatment , are particularly disadvantaged.69 Comment The State party is to be congratulated on its efforts to have insurance coverage for its people . However , the Committee may wish to encourage special efforts in times of hardship to identify people , particularly older women and the poor , who may need priority support and attention . </text>
<text id="un/CES_SEM52_2">
Distr . 19 September 2003 Original : ENGLISH Opening address Ms. Heli Jeskanen-Sundström , Director General , Statistics Finland Construction of an information society is the strategic goal of many countries . The building of an information society is not a detached process , but is tied to other social policy . Social change - especially when it is rapid - presents constant new challenges to decision-makers . There is a need for knowledge about the present status quo and its background and for relevant , reliable facts about the development trends in society . Capacity for continuous renewal and ability to adapt to changing customer needs are the prerequisites for staying competitive in business . New capabilities and ways of acting are also demanded of members of society . It is no longer enough to view change from the national perspective ; the effects of globalisation extend to the public sector , business enterprises , non-governmental organisations and ordinary citizens in every country . Countries want to compare their own development with that of others and seek for best practices . In this work , official statistics play an important role . The Organisation for Economic Co-operation and Development ( OECD ) started systematic development of statistics on the information society in the 1990s , although the first pilot statistics on the phenomenon were already produced in the 1980s , that is , two decades ago . The development of statistics on the information society has progressed in steps - initially through clarification of concepts and definitions , then by exploitation of existing statistical data and eventually by designing statistics requiring new data collections . The OECD 's exhaustive publication Monitoring the Information Economy 2002 contains scores of quantitative indicators for the monitoring of the state of the information society in different countries . In Europe , the eEurope 2002 indicators of the Commission of the European Union are used to monitor the progress towards the information society in the Member States . Besides quantitative monitoring , qualitative measuring is also applied to the eEurope programme . Thus , examples of follow-up systems already exist for a world-wide monitoring mechanism . Many countries already produce regular statistics depicting the information society , but the capability to compile them varies considerably from country to country . Some international recommendations are already available on the instruments - framework , concepts , definitions and classifications - that are needed in the compilation of these statistics but work on then is not finalised . Experience has shown that the development of a new statistical system takes several years . As an example of this , the first draft of the Handbook of Environmental Accounting that has just been completed was produced as far back as the early 1990s . The Fundamental Principles of Official Statistics approved by the United Nation ( UN ) in 1994 offer a good foundation on which statistical organisations throughout the world can build their activity . These principles state as follows : “ Official statistics provide an indispensable element in the information system of a democratic society , serving the government , the economy and the public with data about the economic , demographic , social and environmental situation . To this end , official statistics that meet the test of practical utility are to be compiled and made available on an impartial basis by official statistical agencies to honour citizens ' entitlement to public information . ” The UN 's statement emphasises that official statistics must be compiled according to scientific methods and internationally recognised classifications and definitions . Protection of suppliers ' data must be unconditional . The statement further stresses the importance of co-ordination and co-operation . These fundamental principles of the UN are the preconditions without which production and functioning of official statistics cannot even be started . Statistics describing the information society must also be developed in compliance with these principles . In its Declaration of Principles document , the World Summit on the Information Society will most probably adopt the key principles relating to the establishment of a sustainable information society . These will form the cornerstones on which the Summit 's action plan and monitoring system will be built . The Declaration ( Draft , July 2003 ) sets out targets on the following areas : Information and communication infrastructure Access to information and knowledge The role of governments , the business sector and civil society in the promotion of ICTs for development Capacity building : human resources development , education and training Building confidence and security in the use of ICTs Enabling environment Promotion of development-oriented ICT-applications for all Cultural identity and linguistic diversity , local content and media development Ethical dimensions of the Information Society International and regional co-operation The declaration emphasises the need of an adequate information and communication ( IC ) infrastructure and the necessity to raise people 's skills and competence , opportunities for the exploitation of ICT applications in all areas of life , and support of cultural diversity and creativity . These goals also serve as pointers for the statistical system that is needed to monitor their achievement . The importance of education and competence cannot be emphasised enough when we speak about the development of the information society . From the perspective of a producer of official statistics it is satisfying to note that a Plan of Action , putting emphasis on the role of statistics in the monitoring process is also being drafted in support of the goals set in the declaration . Realisation of the goals of the information society will almost certainly be chiefly measured with qualitative instruments . Achievement of the targets relating to the legal environment or removal of constraints will probably be easiest to monitor with country-specific status reports and lists of actions . Monitoring of the attainment of the set goals also needs quantitative measures . Fortunately these do not have to be produced from scratch . International organisations already today produce a host of statistical information that can also be exploited for the monitoring of this declaration . The declaration concerning the development of the information society is not the first or only programme targeted at globally equitable human development . The UN 's Millennium Development Goals were adopted by the UN Millennium Summit held in 2000. Monitoring of the attainment of these goals has already started and several indicators used in it are also relevant for the monitoring of the declaration on the information society . International organisations should ensure that the indicators and statistics used in the monitoring of the other global programmes can also be exploited in the monitoring process that is about to be initiated now . The workload of national statistical offices should be minimised by maximising co-ordination between the statistical systems of international organisations . Systematic statistical monitoring requires organisation , co-ordination and division of responsibilities among international bodies . The system has to be efficient , and overlapping should be avoided . It would be prudent to draw up an inventory of the information international organisations already possess and of the recommendations that have been issued . For instance , the International Telecommunication Union ( ITU ) , the United Nations Educational , Scientific and Cultural Organization ( UNESCO ) , and the UN already collect statistical data that can be utilised . Successful selection of the essential ones , or so-called core indicators , of all the possible available measures is a major challenge to the monitoring of information society development . International organisations must also make sure that national statistical offices have at their disposal uniform and relevant concept definitions and other standards that support the compilation of statistics . Several examples of this already exist . Literacy of citizens is the decisive condition to the development of the information society . UNESCO conducts extensive collections of data on people 's educational levels and participation rates in education in different countries . The ITU , for its part , follows the development and penetration of the telecommunications infrastructure in many countries . Existing mass communication and cultural statistics can provide data on printed media , and on digital content production and use in different countries . Besides providing classifications and methodological recommendations , international organisations already also offer tangible data collection instruments for statistical offices . The UN and the OECD , for instance , have published recommendations on how the information sector should be defined . The OECD has also reached unanimity about the definition of electronic commerce . Model questionnaires have been developed and approved within the OECD for inquiry surveys measuring the use of information and communication technologies . The purpose of these recommendations is to support the work of national statistical offices and ensure the availability of internationally comparable data . Unfortunately , monitoring of the progress of the information society cannot be based on mere average figures for different countries . Besides producing data on literacy , diffusion of equipment stock or spread of Internet use , we should also know to what extent disparities in these occur between regions , or by socio-economic group or gender . Diverse national and international digital divide index calculation exercises have already been made . It is also necessary to monitor the impact of the taken measures on bridging this divide . There is also much international interest in statistics that can be utilised to analyse the coping of women and girls as exploiters of information technology . Over the past few years , the UN 's city group - the Voorburg Group - which focuses on the development of statistics on service industries has been giving consideration to the development of statistics depicting the information society . The members of the group , thus far mainly statistical offices of developed countries , have had the opportunity to exchange information about their experiences and about best practices . The UN 's Statistics Commission has discussed the establishment of a new forum for less developed countries . It might be defensible to suggest that while a monitoring system is being devised for the WSIS process , such a contact group be established within the framework of some subdivision of the UN . It would also be important to include the future users of the data in the development process at the international level . It is equally justified to wonder how international organisations could give assistance to less advanced countries in the development and compilation of basic statistics and indicators describing the information society . If support is given to the projects that are launched to implement the declaration , it would also be logical to support the development of the statistics that are needed in its monitoring . Commercial research institutes and private consulting companies produce a great deal of information about the penetration and use of information technology in different countries . The data are collected at the commission of customers who also pay for them , so demand for this kind of information quite obviously exists , and some of it is even available free of charge on the Internet . Why could the World Summit monitoring system not be based on this ? Use of statistics produced by commercial research institutes and consulting companies , as well as country-specific comparisons must be approached with certain reservations . The main concern relates to transparency of the used methods , which are often not publicly disclosed . Present research extends to a limited number of countries , mostly only those with the greatest economic influence . Data on developing countries are rarely available . The examined branches of industry or levels of education may deviate from those of official classifications , so the basic information otherwise available on them cannot be used . Commercial research institutes generally only produce information that sells , which is fairly understandable . However , there is no commercial demand for many measures , such as those concerning equality between regions and genders , that are vital in the monitoring of information society development . When the World Summit adopts the Plan of Action , it entails initiation of an implementation and monitoring activity that will span over several years at both national and international levels . The information society perspective will become integrated into national policies . It also implicates that statistical offices will become bound by and committed to the development of statistics that serve the monitoring . Official statistics are expected , first and foremost , to give an accurate account of what is going on in society . Statistical offices must be able to provide relevant , reliable and up-to-date numerical information and support to decision-makers . Fulfilling this task is a major challenge to statistical offices at a time when society keeps changing fast and their resources are quite limited . The best foundation for statistics on the information society is a good infrastructure of official statistics . New data can often be effectively produced by reclassifying the data from household inquiries or statistics on manufacturing or foreign trade , or by attaching supplementary questions to existing survey inquiries . The cost of developing a new statistical system can be minimised by the exploitation of existing systems . Statistical monitoring of the information society has to be adapted to the other work and operating frameworks of statistical offices . At its next meeting in two year 's time , the World Summit on the Information Society expects a follow-up report on the principles adopted at this meeting . This means that we have to be able to describe the present status quo and the development over the coming years . When new statistics are being developed it is good to bear in mind that the targets of statistical monitoring cannot change from one year to the next , but time series are needed . The development work takes several years and requires close co-operation with the suppliers and users of data . When national information society programmes are being drawn up it is good if statistical offices can contribute to the work right from the beginning . A programme for the monitoring of strategies and action plans is vital , how else could their compilers obtain follow-up data on the present development that are impartial and independent , and comply with the ethical rules of statistics and research . As an example from my own country , Finland , I can quote that , keen to monitor progress , the Finnish Government charged Statistics Finland , in its first national Information Society Strategy in 1995 , with the responsibility to provide reports at regular intervals and to conduct occasional studies on the programme 's impacts in society . Giving out a strategy means that we should be able to measure the development towards the given targets . Ever since then , Statistics Finland has participated closely in the national work on the development of the information society , and this work has also borne good fruit . Kofi Annan , Secretary-General of the United Nations , writes in the foreword of the UNCTAD E-Commerce and Development Report 2002 : “ If the world is serious about achieving the Millennium Development Goal of halving the number of people living in extreme poverty by the year 2015 , ICT must figure prominently in the effort . Everyone - governments , civil society , private sector businesses - has a vital stake in fostering digital opportunity and putting ICT at the service of development . ” Extensive adoption of ICT and raising of skills levels are global challenges of the information society . There are intermediate steps and clear milestones in the achievement of these targets . The WSIS requires monitoring of the key principles of the declaration . How capable is the international statistical community of responding to the challenge thrown at it ? How the task should be organised and the work of international organisations co-ordinated is a major challenge . Successful and relevant outlining of the frame of reference into which the indicators derived from the declaration can be placed is crucially important . Naturally , concepts and definitions need universal approval and introduction . All this must be well on the way by the Summit in Tunis in two years ' time . Producing globally exhaustive statistics on the development of society would be an ambitious goal even with a longer timetable than this . I believe , however , that national statistical offices are keen to take up the challenge , provided the procedures and guidelines are agreed upon . </text>
<text id="un/CES_SEM52_3">
Distr . 19 September 2003 Original : ENGLISH GENDER ISSUES IN ICT STATISTICS AND INDICATORS , Keynote address Ms. Nancy J. Hafkin , Knowledge Working ( USA ) Introduction Why gender statistics ? The basic purpose of this workshop is to underline the importance of bringing ICT data into the realm of official statistics so that current global gaps in the data can be identified and closed . This paper maintains that one of the most important data gaps is in the area of gender and ICT statistics and indicators , which can be closed by the identification and collection of sex-disaggregated data and gender-specific indicators . By its very name , the World Summit on the Information Society emphasizes the societal over the technological aspects of ICT . In order to have a clear picture of the impact of ICT on society , it is necessary to see whether and how ICT impact men and women differently . Without this data , the situation of a majority of the world 's people vis-à-vis ICT may be overlooked . There is a paucity of sex-disaggregated information on the Information Society . This reflects the more general dearth of information on women 's activities across all sectors that has led to a lack of understanding of the ` different world 's men and women live in'- in terms of access to education and work , health , personal security and leisure time ( United Nations , 1996 : xvii ) . The collection and analysis of information on the differential impact of ICT on men and women is a necessary prerequisite to the achievement of a globally equitable Information Society . What 's a gender indicator ? The Canadian International Development Agency ( CIDA ) has a very useful definition of a gender-sensitive indicator . Gender-sensitive indicators have the special function of pointing out gender-related changes in society over time . Their usefulness lies in their ability to point to changes in the status and roles of women and men over time and therefore to measure whether gender equity is being achieved . Because use of indicators and other relevant evaluation techniques will lead to a better understanding of how results can be achieved , using gender-sensitive indicators will also feed into more effective future planning and program delivery ( CIDA , 1997 ) . In view of the special function of gender indicators in pointing out gender-related changes in society over time and to measure whether gender equity is being achieved , it is particularly important that the use of gender indicators be adopted early in the data collection efforts to support the achievement of a global , equitable Information Society . Is there a gender digital divide ? Many of the realities of life are different for women than they are for men . According to UNDP , “ in no society do women enjoy the same opportunities as men ” ( UNDP , 1995 ) . The world over , most women are poorer than men , not as well educated and with higher levels of illiteracy . They tend to earn less and hold fewer positions of power and decision-making in the family , in businesses , and in political and public life . These inequalities impact women 's ability to benefit equally from the opportunities offered by information technology and to contribute fully to shaping the developing global knowledge economy and society . The outcome of these gender inequities is that the impact of ICT is not gender neutral- women have many disadvantages in accessing and using new information technologies . Unless special interventions are made , most women will not benefit from the Information Society at anywhere near the same extent as men . This situation is mostly sharply felt in developing countries and is brought home by the following text . Rural telecentres are being built across Africa at an amazing rate , yet there is no attention given to the development of programmes for the women who live and work in the fields surrounding them and as a result very few women get to use them ( Walker , 2003 ) . What are the main gender issues in ICT ? These are some of the gender issues that are central to an understanding to the application of information technology to society , the major concern of WSIS . Infrastructure is a gender issue The most basic gender issue in ICT is access , which is inextricably linked to the availability of the necessary infrastructure . In virtually all developing countries , communications infrastructure is weaker and less available in rural and poor urban areas , where the majority of women tend to live . Especially in Africa , Internet connectivity is frequently available only within capital and major secondary cities in many developing countries , while the majority of women live outside these cities . The urban bias in the dissemination of information technologies and the fact that most poor women in developing countries live in rural areas make the placement of infrastructure a gender issue . Simply by being the majority of the population in rural areas , women have a smaller chance than men to access new technologies . It is likely that phone lines are fewer , that there are no relay stations for mobile phones and no earth stations for satellites . As UNIFEM and the UNU/TECH noted : « : Women , with their special responsibilities for children and the elderly , find it less easy than men to migrate to towns and cities . The urban bias in connectivity thus deprives women , more than men , of the universal right to communicate ( UNIFEM and UNU/TECH , 2000 ) . ” Education and skills Women in developing countries are less likely than men to have the requisite education and knowledge to use ICT effectively . Two-thirds of the world 's 900 million illiterates are women . ICT that do not require literacy are being developed such as the IDRC sound and graphics CD-ROM on rural women in Uganda earning money , but to date these are available in only widely scattered pilot projects . Women are also less likely than men to know the international languages that dominate the web . Given their limited access to schooling , women , especially those in rural areas , are also much less likely than men to have computer skills . Information literacy essentially involves using information contextually , a skill that women are less likely than men to have , resulting from the comparatively limited exposure and isolation of many women . Social and cultural issues Women tend to have less access than men to those ICT facilities that do exist . Frequently , information centers or cybercafes are located in places that women may not be comfortable frequenting or that are culturally inappropriate for them to visit . Since most communications facilities in developing countries are in offices or shared public access , women also have problems of time . Given gender-defined multiple roles and heavy domestic responsibilities , their leisure hours are few , and the public centers may not be open when women can visit them . Or they may be open evenings , when it is problematic for women to visit them and then return safely to their homes in the dark . Their mobility ( both in the sense of access to transport and ability to leave the home ) is also more limited than that of men . Some accommodations that may be needed to ensure gender equity in access and use of ICT for women are adaptation of schedules to suit women 's hours and availability of women support staff and trainers . Another cultural aspect of gender and ICT is gender bias in attitudes towards women studying or using information technology . Throughout the world , there are problems in attracting young women to science and technology studies , as we will see in the section on education below . The problem is worse in Africa than in any other region with the lowest percentage of women studying science and technology at all levels . Many ( predominantly male ) math and science teachers in Africa hold outmoded views that girls ca n't think or work scientifically and that science is too mechanical and technical for girls , thus discouraging female students . In many countries traditional cultural attitudes discriminate against women having access to education and technology . Girls are encouraged to take any job or get married rather than seek higher education . Attitudes that information technology is not for women are not limited to formal education . In a project for rural farmers in Peru , when women undertook information technology training with men , the men mocked them , saying that computers were for men , not women . Sometimes gender-based cultural attitudes , and not the immediate gender identification of technology use , prevent young girls and women from accessing and using ICT . In Uganda , girls did not get equal access to the limited number of computers installed in school ( under a WorldLinks Program ) because of the socio-cultural norm that “ girls do not run . ” Boys ran and got to the computers first and refused to give them up to girls . Additionally , the earlier curfew hours for girls at boarding schools further constrained their access . In India , in the well-known ` hole in the wall ' experiment , the aggressiveness of boys pushing away girls prevented the girls from using the computers . Financial resources Almost all communication facilities cost money . Women are less likely than men to own radios and televisions , or to access them when they want to , in the case of household possession of the technology . When it involves paying for information access , such as at a rural information center or a cybercafe , women are less likely to have the disposable income to do so ( or hesitate to use family food , education , and clothing resources for information ) . Limitations of the media on gender issues Little Internet content is available that meets the information needs of women in developing countries in a form they can use . The amount of content in local languages , which women tend to use exclusively more than men , is miniscule . If ICT are to be useful to women in developing countries , they must meet the test of relevance . If this is not passed , ICT will remain of little interest and value to many women in developing countries , particularly those living in rural areas . For what uses ? There are gender issues in the way that ICT are used in developing countries . To date , most women 's use of ICT has been confined to email and sometimes to listservs ( email discussion lists ) , generally in connection with advocacy and networking activities . The main reasons for this concentration are cost of access and limitations of time , bandwidth , and technical skills . Relatively few women have used it for business , for entertainment ( the predominant use in the developed world ) , or for education , including education in matters related to livelihood and well being of themselves and their families ( e. g. health and nutrition education ) . Promoting women 's use of new technologies for business ( including improved agriculture and agricultural products ) and for education is an important undertaking . Industry and labor The patterns of work in the IT industry are highly gendered . Women are found in disproportionately high numbers in lowest paid and least secure jobs . Few are found at higher levels , particularly in hardware and software engineering and at management levels . Many women have been displaced due to increasing automation and computerization of workplaces . Men continue to crowd out women in training required to high skilled work . The gender patterns of work in teleworking have not been fully researched . Power and decision making Women are underrepresented in virtually all ICT-decision making structures , including policy and regulatory institutions , ministries responsible for ICT , board and senior management of ICT companies . ICT decision-making is generally treated as a purely technical area , where civil society viewpoints are given little or no space . Privacy and security One of the negative aspects of ICT is the use of the Internet for women 's sexual exploitation and harassment . The pernicious elements include trafficking of women through the Internet , pornography , sexual harassment and use of Internet to perpetuate violence against women . Regrettably , increasingly graphic pornography is easily available to all who seek it and even to those who do n't . A number of cases have appeared recently where men use web sites to harass women and violate their privacy . Legislation is needed that prevents ICT from threatening human rights . A caveat needs to be inserted whenever the term women is used . All women in the developing world do not belong to one homogeneous group . There are highly variable political , socio-economic , and cultural differences that affect the lives of both men and women across different regions of the world , an addition to factors such as age and health . We do not want to lose sight of this complex reality . Not all women are disadvantaged ( for example middle class women will usually have much greater access to ICT than most poor men ) , and there are also major differences based on age and ethnicity . There are also substantial regional variations in the relations between gender and ICT . While in North America , for instance , girls shy away from computer science , it is often regarded as a women 's field in some countries of south and west Asia . At the same time , however , it should be noted that gender inequality is more pervasive across societies than other forms of inequality . It is a feature of social relations in most societies , albeit in different forms . Gender inequality also cuts across other forms of inequality so that it is a feature of rich as well as poor , racially dominant as well as racially subordinate . Gender inequality is usually , but not always , more marked among the poor . How do official statistics and indicators capture this divide ? Standard presentations of ICT statistics pay no attention to gender differentials . To cite one example of this , the World Bank Development Data Group publishes “ ICT at a glance ” , with breakdowns by country . No breakdowns by sex are shown for any of the indicators , despite the fact that more than half of the indicators are based on demographic data that could be disaggregated by sex . As far as most official statistics are concerned , the gender digital divide is invisible and unmeasured . Few countries collect gender ICT statistics , and those that do so are typically the countries where the gender digital divide is least marked1 . Very few countries have official surveys , such as household surveys , to collect gender-disaggregated statistics . It is no surprise that the gender digital divide mirrors the income divide to a large extent : the access and use of ICT by men and women is much more equitable in rich countries than in poor countries . And as with statistics and indicators in general , gender statistics are much more available in rich countries than in poor countries . Those countries where the gender digital divide is most marked are also those where the digital divide in general is hardest to document . It is difficult to bring this issue to the attention of policy makers in these countries because of the lack of reliable data on which to make the case for the inequitable access to and use of ICT by women in developing countries . This includes ICT not only for communication , but also for conduct of business ( including e-commerce ) and employment in the IT industry itself . Michael Minges explains why there is so little data on gender and ICT : First many government organizations do not collect national ICT statistics in a consistent and regular manner . Of those government agencies that compile [ ICT ] statistics , most do not provide a breakdown by gender . Second , traditional , ICT statistics are either obtained from telecommunication organizations ( e. g. telephones ) or estimated based on shipment data ( e. g. personal computers ) . These organizations have their own operational or analytical reasons for maintaining the data , and gender is not one of themuntil primary ICT data collectors see market value in obtaining gender-disaggregated statistics , the data will not be widely available ( Minges , 2003 ) . » Currently available gender statistics and indicators What the ITU is doing Until 2003 , the only sex-disaggregated ICT data that the ITU published was that on female employees of telecommunications administrations . This in itself was a relatively recent addition to the ITU 's annual questionnaire . Only one-third of countries were able to supply this data , and a number of developed nations , including France , Germany , Japan and the United States , were unable to do so . However , this data is not very significant because it simply reveals that in most countries the majority of positions within the traditional Public Telephone Operators -that of telephone operators- are held by women . A high percentage of female personnel among telecommunications staff is not an indicator of gender equity in employment the telecommunication industry . Many of the reporting countries have old telephone networks that require heavy operator intervention , and telephone operators have traditionally been women globally , except in places such as the Gulf States where cultural prohibitions have kept women from working . The statistic says nothing about the level of employment by sex . The statistic tells us virtually nothing about the comparative access to or use of ICT by men and women . It also tells us little about employment in the ICT industry . Progress has been made this year at both the ITU and at the United Nations statistical office in the inclusion of gender ICT indicators . ITU has now increased to three the number of sex-disaggregated indicators included in its annual questionnaire to member States and in its Handbook of key indicators of the telecommunications/ICT sector , adopted by the third World Telecommunications/ICT indicators meeting held in Geneva in January 2003. The two new indicators are : Female Internet users as a percentage of total users Female Internet users as a percentage of females The following definitions were adopted for these indicators : Table : Key gender indicators of the telecommunications/ICT sector Additionally and significantly , the United Nations Millennium Development Goals monitoring report and database has also begun to include female Internet users as a percentage of total Internet users . However , as agreement on its inclusion came only during the March 2003 of the UN MDG team , it is too early to see entries on this indicator . Figure : Female Internet users as percent of total Internet users , 2002 The figure shows ITU data on female Internet use for 39 countries from three sources ( national , Neilsen/Net and TNS)2 . Of the data from the 39 countries , only 13 are indicated as coming from country sources , presumably national statistical offices that do collect sex-disaggregated ICT data . For those interested in the situation of female Internet use in developing countries , there is disappointingly little data available . There is data available on only one African country - South Africa , a country atypical of the region . Only five Latin American countries are represented , and they , too , are among the richest countries of the region ( Argentina , Brazil , Chile , Mexico and Venezuela ) . There are no Middle East countries , except Israel . While the highest number of countries from any region outside Europe and North America is from Asia , the list is heavily weighted towards wealthy countries and does not contain India , a very interesting and important case in terms of gender and ICT . Again , the available data reflects the fact that the gender data divide mirrors the global digital divide . Some good practices Two of these good practices are country examples , both from developed countries- one from North America and the other Asia . The third is a toolkit on gender statistics , with particular emphasis on developing countries . The U. S. Department of Commerce has an excellent series entitled Falling Through the Net . The 2000 edition , fourth in the series , focused on “ Toward Digital Inclusion ” , measuring the extent of digital inclusion by looking at households and individuals that have a computer and an Internet connection . What was unique about this series is the amount of gender-disaggregation of data . Among the gender-disaggregated data that the 2000 edition presented was the following . Percent of U. S. persons using the Internet , by gender and location ( printed ) ( at home , outside home , at any location ) Reasons for households with a computer/webTV7 not using the Internet at home , by gender Percent of U. S. persons using the Internet at home , by gender and use ( printed ) Percent of U. S. persons using the Internet at home , by subject matter and gender/and Not at home , by subject matter and gender ( printed ) Percent of U. S. households with a telephone By household type ( including female-headed , with and without children ) With a modem , with e-mail by household type ( U. S. Department of Commerce , 2000 ) . The data comes from U. S. census data . Most of these breakdowns , however , would not be meaningful for most developing countries , particularly those in Africa , where Internet usage tends to be public access ( either in telecenters or in relatively low-cost cybercafes ) or at work , and where the emphasis is on alternative technologies because of the cost and unavailability of reliable Internet connections . The Korean case Korea is doing substantial and interesting work on gender and ICT statistics . Since the first quarter of 2000 , the Korean Network Information Center ( KRNIC ) http://www.krnic.or.kr ) has undertaken and published quarterly surveys of Internet use , averaging 5700 users , with some 20 categories of data collected and disaggregated by sex , and in addition in most cases , age . KRNIC 's categories for which data is available by sex are : KRNIC categories of Internet statistics disaggregated by sex : In 2001 the Ministry of Gender Equality released a research report on “ Women 's Informatization survey and index development ” in order to document and examine the gender digital divide in Korea . The Ministry based their research on five categories , from which they developed an index of women 's “ informatization ” defined as the process by which information technologies have transformed economy and society . These categories are awareness , access , utilization , skill and effects . The index measured involvement of men and women according to the categories and then measured the comparative informatization by sex . The results showed that women 's informatization measured 88 percent that of men 's . Although women scored very high on awareness , skills and effect , in terms of access and usage , the situation of women was particularly deficient , with women having only 22.9 percent the access of men and using the Internet of 28.2 percent as much as men ( Korea , 2001 ) . In November 2001 the Government of Korea followed the development of the index with a survey of statistics to compare men and women in terms of informatization . Among the findings was that there is a serious digital divide by age , with women 's scores on all categories in the index dropping with age ( measured in decades , starting with those in their twenties ) and a series gap apparent for those in their fifties and older . Not surprisingly , higher income women had a higher rate of informatization than those with lower incomes . In February 2002 the Asian Pacific Women 's Information Network Center of Sookmyung Women 's University , the leader in this work , organized a workshop entitled “ Survey of Women 's Informatization in Asia and the Pacific , ” in an effort to develop indicators for a survey on women 's involvement in computerization to be conducted throughout the Asian region3 . In cooperation with the Korean National Commission for UNESCO , APWINC has been carrying out a survey on the situation of women 's informatization in seven countries : China , Indonesia , Japan , Korea , Nepal , Philippines and Sri Lanka from March-October 2002. Unesco and the Gender Advisory Board of the United Nations Conference on Science , Technology and Development have produced a toolkit on gender indicators in engineering , science and technology for development . Although there are few specific references to ICT , the toolkit covers many areas relevant to the Information Society . It is particular good at describing the availability of gender statistics in science and technology education , including computer science . It also provides excellent methodology for collecting gender data , statistics and indicators . Chapter 5 “ Collecting gender-disaggregated data : case studies and models ” is especially useful ; it provides an inventory of available and potentially useful data sources for gender-disaggregated statistics and indicators ( Huyer and Westholm , 2001 ) . Identifying desirable data and indicators -it 's more than Internet ! No single indicator can capture the gender equity issues of the Information Society . Limiting data collection and analysis to male/female differentials in use of the Internet gives a very limited picture of the Information Society . Among the questions it leaves unanswered are : What are the relative difficulties that women have in accessing the Internet ? Once connected , is there accessible content , including in terms of language , literacy and interest to women of the world , particularly poor women from developing countries ? Access to other communication media , such as radio , is particularly important for women in developing countries . The Information Society also encompasses the Knowledge Economy , in which we need to know the extent to which the women of the world are participating . Information Society is based on the IT-industry , where entry and progress is based on education , in particular in science and technology . For this , comparative data on men and women 's education in science and technology and employment in technological fields are necessary . What are the relative opportunities for girls and women for computer and communications education , the basic prerequisites for participation in the Information Society , at all levels , including non-formal education ? In addition to formal sector employment , ICT enables a host of new employment opportunities , including e-commerce and communications businesses . How are women faring in these ? We need to know whether national ICT policies are aware of gender issues as well as the gender divide in ICT decision-making . The area of development information also needs to be considered . Given the large number of projects globally in the broad area of information society and development , to what extent are gender issues being considered in these projects and what has their impact been on women . The largest question of all remains open : how to define an indicator that can measure the comparative impact of the information society on men and women globally . A number of these areas where sex-disaggregated statistics and gender specific indicators would be useful are detailed below . Internet access In addition to Internet usage , gender access data is very important . Among other reasons , its availability can inform regulators in the application of universal access . To date , most universal access strategies have been based on geographical factors ( e. g. rural/urban ) or income data ( with low income areas being underserved ) . It is important to add gender as an important variable in determining universal service obligations and enabling the universal right to communicate . Telecommunications access This is especially important in relation to the right to communicate . Few telecommunications access statistics or indicators are disaggregated by sex , except for mobile phone subscribers in some countries . The number of mobile phone subscribers disaggregated by sex would be a highly desirably indicator , in view of the increasingly dominant position of mobile telephone in many developing countries . Access to radio by sex would also be very valuable , in view of the fact that the presence of a radio in a household does not ensure its availability to the women in the household . Content Are there differences in the kinds of material on the Internet that men and women access ? Want ? This data is available in sex-disaggregated form for many developed countries as market research firms are interested in sex-differentiated content access patterns . For developing countries , content access data is completely unavailable . The data could be in the form of specific sites or types of sites most commonly accessed , differentiated by sex . Knowledge economy employment Valuable statistics and indicators in employment include gender-related employment differentials within ICT and telecommunications industries and employment by sex and level in the IT field , in jobs using IT and in the IT manufacturing industry . Useful statistics would show level of employment in telecommunications , including telecommunications manufacturing and ICT industries ( both ICT manufacturing and ICT-using ) . Little data is available on women 's participation in computer science and engineering research and employment in the private sector as well as in research institutions . However , the data that does exist indicates that the participation of women in higher-skilled , higher-ranking and higher-paid positions remains very low . This data is now available for a number of countries , including some developing ones . It shows a progressive decline of the number of women in ICT-related employment at increasing levels of complexity . Many women operate computers , largely for word processing and related office programmes , and enter data . Many fewer are programmers and systems analysts , and the smallest number of women is found in North America , Europe and Asia in software and hardware engineering . In particular , the participation of women in information technology design and development is generally low . Concentrated in the low or unskilled end of employment , women are not getting the training that the new jobs require . This is leading to fears of the global feminization of labour , whereby occupations in which women predominate see a drop in salaries , status and working conditions . Readily-available statistics and indicators in this area would help make the case for encouraging girls women 's education in science and technology in order to make them eligible for higher level positions using IT . Self-employed : ICT-enabled and e-commerce Telework-this is an important new area and it holds , apparently , opportunities for women because of its apparent flexibility in location and hours . Are more women able to take advantage of employment opportunities in teleworking ? Statistics are needed on this area of the Information Society . One group that is working on the identification of indicators and cross tabulations by gender with specific attention to the question of whether telework based as home is employing more women than men , albeit in the setting of Europe , is the STILE consortium ( STILE , 2003 ) . Education The question of women 's scientific and technical education and their participation in S&T professions are important ones for national sustainable development . Of all the work in gender statistics , by far the most has been done in the area of female education , from primary to post-graduate levels and in women 's subsequence participation in S&T professions . Unesco is the leader is gender statistics on the participation of women in science and technology education . In its guide to Gender-sensitive Education Statistics and Indicators Unesco outlines methods of ` engendering ' some of the most commonly available education statistics and indicators and using them to analyze and understand gender trends ( Unesco , 1997 ) . Much of its work in this area could be applied to gender statistics on ICT . This data on differential access to and participation in education for use of and employment in telecommunication and ICT is very significant in determining the future of the gender digital gap . ICT telecommunication/policy An important gender indicator in ICT/telecommunication policy could be the inclusion ( or not ) of gender issues in the country 's ICT/telecommunications plan , policy or strategy . To date , few developing countries have done this . Korea is a notable exception , with a well-developed gender strategy in the national ICT plan . In Africa , Cote d'Ivoire makes passing mention of gender issues , while Guinea has developed it well . While South Africa 's White Paper on communication dealt with gender issues , critics feel that implementation has not lived up to intentions . Participation in telecommunication and ICT decision making An examination of the extent to which women are represented in decision-making in information technology reflects the progress of women in the field and the possibility that women in positions of power would serve as role models for others , facilitate the entry of other women , and alleviate some of the negative impacts of new technologies of women . Available data indicates that women are conspicuously absent from decision-making structure in information technology in both developed and developing countries . These structures includes boards and senior management of IT companies , senior management and advisors of policy and regulatory organizations , technical standards setting organizations , industry and professional organizations such as the Internet society , national policy and regulatory organizations , line ministries responsible for the IT sector , and international development organizations and agencies . Indicators in this regard could include numbers of women in senior management positions at selected ICT firms , in ministries of communication and information technology ( or their equivalent ) , in ICANN and in ITU study groups . Development information The area of development information is a vital one for gender and ICT statistics . Given the large number of projects globally in the broad area of information society and development , it would be very useful to know to what extent gender issues are being considered in these projects , especially in the ICT components of the project , and what the impact has been . The larger question Very little data is available on the impact of information technology on persons outside the OECD countries . Given the project-level indications of the differential impact of information technology on men and women , both quantitative and qualitative data on this area would be highly useful . Where to go from here How is it possible to encourage countries that do n't currently collect the gender and ICT data to do so within their official statistics program ? We need much more gender-based information than female Internet use . Gender-disaggregation of all relevant data related to the Information Society must be encouraged . Perhaps the best hope for the collection of gender-specific and sex-disaggregated data comes through household surveys . Undertaken by national statistical agencies . In order for this to happen , there has to be pressure from gender advocates at national level , both on the national statistical agencies and on the making of national ICT policy . ITU can do a lot by exercising its ` bully pulpit ' encouraging national statistical agencies to ( a ) collect ICT data ; and ( b ) disaggregate the data by sex wherever relevant . Most importantly in security the adherence of member States , the World Summit on the Information Society needs to take the lead in identifying this as an important area for action . 1 The United States , Canada , Hongkong , Thailand , Iceland , Sweden , Chile , Singapore , Finland , Ireland and Denmark all collect gender-disaggregated ICT usage statistics . In all of these countries , the percentage of female Internet users as a percentage of total Internet users is 45 percent or more . In most African countries , where such data is not collected by official statistics sources , estimates of female Internet use are 25 percent or less . 2 TNS is TNS Telecoms , which advertises itself world 's largest telecom market information company and which provides market information services to national and multi-national organizations in over 80 countries . Its headquarters are in Jenkintown PA ( USA ) . 3 “ Survey on Women 's Informatization in Asia and the Pacific . ” 2002. http://www.apolc.org/news/con_index.html ? con_no=40 . </text>
<text id="un/CLCS_34">
Eleventh session New York , 24-28 June 2002 Statement by the Chairman of the Commission on the Limits of the Continental Shelf on the progress of work in the Commission The eleventh session of the Commission on the Limits of the Continental Shelf was held at United Nations Headquarters , New York , from 24 to 28 June 2002 , pursuant to its decision taken at the ninth session ( CLCS/29 , para . 24 ) and paragraph 20 of General Assembly resolution 56/12 of 28 November 2001. The following 18 members of the Commission attended the session : Hilal Mohamed Sultan Al-Azri , Alexandre Tagore Medeiros de Albuquerque , Lawrence Folajimi Awosika , Harald Brekke , Galo Carrera Hurtado , Noel Newton St. Claver Francis , Peter F. Croker , Indurlall Fagoonee , Mihai Silviu German , Abu Bakar Jaafar , Mladen Juračić , Yuri Borisovitch Kazmin , Wenzheng Lu , Yong-Ahn Park , Fernando Manuel Maia Pimentel , Philip Alexander Symonds , Kensaku Tamaki and Naresh Kumar Thakur . Osvaldo Pedro Astiz , Samuel Sona Betah and Yao Ubuènalè Woeledji did not attend the session . Upon the recommendation of the Subcommission established to consider the submission by the Russian Federation ( CLCS/32 , para . 16 ) , the Commission also invited two former members of the Commission and the Subcommission , Karl H. F. Hinz and Iain C. Lamont , as experts , to attend those parts of the proceedings of the eleventh session of the Commission pertinent to the work of the Subcommission . The Subcommission recommended their participation so that they might answer questions and provide explanations , as necessary , during the consideration by the Commission of the recommendations prepared by the Subcommission in regard to the submission of the Russian Federation . The Commission had before it the following documents : - Provisional agenda ( CLCS/L.14 ) , which , was adopted with amendments ( CLCS/33 ) ; - Original submission of the Russian Federation presented to the Commission on 20 December 2001 , including the executive summary , proposals on lists of geographical coordinates of the points defining the lines of the outer limit of the continental shelf of the Russian Federation in the Arctic and Pacific oceans , and illustrative maps used in substantiating the outer limit of the continental shelf of the Russian Federation in the Atlantic and Pacific oceans ; - Additional materials submitted to the Subcommission on 3 April 2002 , including additional data and information to support the submission of the Russian Federation for the establishment of its continental shelf in accordance with the 1982 United Nations Convention on the Law of the Sea ; - Additional materials for the submission by the Russian Federation on establishing the outer limits of the continental shelf , received by the Secretariat on 15 May 2002 ; - Recommendations of the Commission in regard to the submission made by the Russian Federation on 20 December 2001 of information on the proposed outer limits of its continental shelf beyond 200 nautical miles ( prepared by the Subcommission established for the consideration of the submission made by the Russian Federation . Adopted by the Subcommission on 14 June 2002 , and transmitted for approval to the Commission on the Limits of the Continental Shelf . The meeting was opened by the Representative of the Secretary-General of the United Nations , Ralph Zacklin , Assistant-Secretary-General in charge of the Office of Legal Affairs . In his opening statement , Mr. Zacklin congratulated the members on behalf of the Secretary-General on their election to the Commission . He noted that the Commission was of paramount importance to the United Nations and to the international community and that it was envisaged to serve the cause of maintaining stability in international relations . He pointed out that the Secretariat of the United Nations had stood and continued to stand ready to assist the Commission in carrying out its functions . The Division for Ocean Affairs and the Law of the Sea of the United Nations Office of Legal Affairs had been entrusted with the primary responsibility of that important task . He further pointed out that , at the previous session of the Commission , an important step had been taken with the beginning of the examination of the submission of the Russian Federation . That task illustrated in a striking manner the fact that , in the course of examining each submission of a coastal State regarding the outer limits of its continental shelf beyond 200 nautical miles from its coast , the Commission would have to analyse a large volume of complex geodetic , bathymetric , seismic and geophysical data in order to verify that the geological and geomorphologic conditions supported the submission . He assured the Commission of the cooperation of the Secretariat and emphasized that the expectations of the international community were high with regard to the skilful and independent discharge of members ' functions . The results of that examination would prove that the members of the Commission had applied their expertise with complete independence and integrity , allowing no political considerations whatsoever to enter into their deliberations during the examination of submissions . The members would deliberate with regard only to the requirements of the Convention and the completeness and accuracy of the data and material submitted . Mr. Zacklin then presided over the election of the new Chairman of the Commission . Following consultations , the Commission elected Peter Croker by acclamation as its Chairman . The Commission also elected three Vice-Chairmen , Osvaldo Pedro Astiz , Lawrence Folajimi Awosika and Mladen Juračić , and the Rapporteur , Yong-Ahn Park . All officers were elected to a term of two and a half years . In accordance with rule 10 of the Rules of Procedure of the Commission ( CLCS/3/Rev.3 ) , each member of the Commission , before assuming his functions , is required to make a solemn declaration in regard to the performance of his duties in the Commission . All members of the Commission present at the eleventh session made the solemn declaration at a ceremony convened for the occasion . Following the ceremony , the Chairman proposed the draft agenda ( CLCS/L.14 ) for consideration by the Commission . One member of the Commission suggested that the agenda should be amended to include training issues . In the absence of objections , the agenda was adopted as amended ( CLCS/33 ) . Subsequently , the Chairman outlined the programme of work . He stated that , in addition to the election of its officers , the Commission was to renew the composition of two of its standing subsidiary bodies , the Standing Committee on provision of scientific and technical advice to coastal States and the Committee on Confidentiality , as well as to re-elect the chairmen of the two open-ended bodies , the Editorial Committee and the Training Committee . He further outlined the schedule for the Commission 's deliberations on the recommendations prepared by the Subcommission established to consider the submission of the Russian Federation . Regarding subsidiary bodies , the Commission , upon nominations from the regional groups , appointed the following members to the Committee on Confidentiality : Osvaldo Pedro Astiz , Samuel Sona Betah , Harald Brekke , Abu Bakar Jaafar and Yuri Borisovitch Kazmin . The Committee met and elected Mr. Jaafar as Chairman , Mr. Brekke as Vice-Chairman and Mr. Astiz as Rapporteur . Upon nominations from the regional groups , the Commission also appointed the following as members of the Standing Committee on provision of scientific and technical advice to coastal States : Lawrence Folajimi Awosika , Noel Newton St. Claver Francis , Mihai Silviu German , Philip Alexander Symonds and Kensaku Tamaki . The Committee met and elected Mr. Symonds as Chairman , Mr. Tamaki as Vice-Chairman and Mr. Awosika as Rapporteur . The Editorial Committee met and elected Harald Brekke as Chairman . At the meeting of the Training Committee , Indurlall Fagoonee was elected Chairman . The Commission then began its deliberations of the recommendations prepared by the Subcommission . In that connection , one member of the Commission , Mr. Kazmin , expressed his view that pursuant to article 5 of Annex II to the Convention and paragraph 16 in section VII of the Modus Operandi of the Commission ( CLCS/L.3 ) , the representatives of the coastal State were entitled to participate in the proceedings , without the right to vote . He emphasized that , in his opinion , the discussion of the recommendations was part of the relevant proceedings referred to in article 5 and that the provision of the Convention should in this case prevail over rule 51 of the Rules of Procedure of the Commission and that the delegation of the Russian Federation should be present at the meetings of the Commission when the recommendations regarding its submission were considered and adopted . ( Rule 51 stipulates , inter alia , that “ the coastal State shall , in accordance with article 5 of Annex II to the Convention , be invited to send its representatives to participate , without the right to vote , in the proceedings deemed relevant by the Commission . ” ) The Chairman pointed out that no official communication from the coastal State expressing the wish for its representatives to be present during the proceedings had been received by the Chair or the Secretariat , and that the Commission would only address the issue if and when such a communication was actually received . Subsequently , on 26 June , the Chairman received through the Secretariat a letter from the Permanent Representative of the Russian Federation to the United Nations informing him that a delegation of the Russian Federation was present at Headquarters in order to make a presentation on the submission for the benefit of new members of the Commission or to answer any additional questions regarding the submission that the Commission might have . In the renewed discussion regarding the participation of representatives of the coastal State in the proceedings , Mr. Kazmin restated his arguments concerning the right of the representatives of the coastal State pursuant to article 5 of Annex II to the Convention to participate in the proceedings . However , a differing opinion was expressed by the Chairman , namely , that the Rules of Procedure developed the provision of article 5 of Annex II , and that the Rules had been adopted a long time ago , and had been widely distributed and made available to all States . It was emphasized that the Commission should continue to be guided in its work by those Rules . It was further pointed out that at the tenth session , the representatives of the coastal State had already been invited by the Commission on two separate occasions to present the submission and that , furthermore , the Subcommission had held six meetings of consultations in the form of questions and answers between the members of the Subcommission and the representatives of the coastal State . In addition , it was emphasized that , in accordance with rule 4 of annex II to the Rules of Procedure , which had been amended by the Commission at its ninth session in May 2001 , “ the deliberations of the Commission and Subcommission on all submissions made in accordance with article 76 , paragraph 8 , of the Convention shall take place in private and remain confidential ” . Therefore , at the current , final stage , the Commission should consider and adopt the recommendations at a private meeting . Owing to the impossibility of reconciling the differing views and of achieving a consensus on the issue , the Chairman suggested that the matter should be put to a vote in which the members would respond to the following question : “ Do you agree that the Commission may discuss the recommendations of the Subcommission and the Commission in a closed meeting , and consider those proceedings as ` not relevant ' for the purposes of inviting the coastal State pursuant to article 5 of Annex II to the Convention and rule 51 of the Rules of Procedure of the Commission ? ” In that context , a number of members pointed out the sensitive nature of the matter and requested that the vote should be conducted by secret ballot , in the light of the provision of rule 38 of the Rules of Procedure of the Commission , which stipulated that the Commission should normally vote by show of hands ( emphasis added ) . The motion to proceed with a secret ballot was approved . In the secret ballot , the question was answered positively by 15 votes against 3 negative votes , out of 18 members present and voting , with no invalid ballots and 12 votes required for a two-thirds majority ( the Chairman having ruled that what was under consideration was a matter of substance ) . After the vote was taken , Mr. Kazmin stated that although he accepted the results of the vote he continued to maintain , and wished to put on record , that the decision was contrary to the provision of article 5 of Annex II to the Convention . The Commission then continued in a closed meeting its deliberations on the recommendations prepared by the Subcommission . The Chairman of the Subcommission , Mr. Carrera , made a presentation on the work of the Subcommission and on the recommendations . He stated , inter alia , that following its establishment during the tenth session of the Commission on 28 March 2002 , the Subcommission had undertaken a brief review of the submission and had come to the conclusion that the consideration of the submission would take more than two weeks . That had been reported to the Commission on the same day . He further stated that the Subcommission had reconvened on 1 April and had held a total of 20 meetings between 1 and 12 April 2002. Six afternoon meetings had been devoted to consultations in the form of questions and answers between members of the Subcommission and the group of experts of the delegation of the Russian Federation . Thirty-six questions had been posed by the Subcommission and written answers had been provided by the team of experts of the Russian Federation during the consideration of the Russian submission . He further noted that a number of points of clarification had been sought from members of the delegation of the Russian Federation , and additional data and information had also been requested . Some of the requested material had been submitted during the consultations . Other additional materials had been provided to the Subcommission through the Secretariat on 15 May 2002. Following those consultations , Mr. Carrera stated , the members of the Subcommission had agreed on the format , contents and main conclusions of a document bearing the working title “ Outline recommendations of the Subcommission ” . Different members of the Subcommission were given the task of drafting the various parts of the document during the inter-sessional period . The Subcommission decided to reconvene in New York from 10 to 14 June 2002 , before the expiration of the term of office of the first membership of the Commission on 15 June 2002. The Subcommission met throughout the week of 10 June 2002 to consider the new material which had been submitted and to finalize its recommendations . Upon the completion of its work , the Subcommission submitted its final recommendations dated 14 June 2002 through the Secretariat to the Commission at the present session . In the second part of his presentation Mr. Carrera elaborated on substantive elements of the recommendations . After a series of deliberations and informal consultations , the Commission concluded its examination of the recommendations prepared by the Subcommission , made several amendments to it and adopted the recommendations of the Commission by consensus . In conformity with the provisions of the Convention , the recommendations of the Commission will be submitted in writing to the coastal State that made the submission , via the Secretariat , and to the Secretary-General of the United Nations . The Commission wished to put on record its special thanks to Karl H. F. Hinz and Iain C. Lamont , who had participated as invited experts in part of the proceedings . The Commission also decided to address a letter of appreciation to all former members of the Commission , namely to Ali Ibrahim Beltagy , Andre Chan Chim Yuk , Kazuchika Hamuro , Karl H. F. Hinz , Iain C. Lamont , Chisengu Leo Mdala , Daniel Rio and Krishna-Swami Ramachandran Srinivasan . The Editorial Committee met during the eleventh session under the chairmanship of Mr. Brekke . In its report to the Commission , Mr. Brekke stated that the Committee had decided , in view of certain discrepancies between basic documents of the Commission ( Rules of Procedure ( CLCS/3/Rev.3 and Corr.1 ) , Modus Operandi ( CLCS/L.3 ) and Internal procedure of the Subcommission of the Commission on the Limits of the Continental Shelf ( CLCS/L.12 ) ) , to undertake a review of those documents and , if necessary , propose editorial amendments to make them consistent . The Scientific and Technical Guidelines should not be subject to such review . Furthermore , it was agreed that the review of the procedural documents should be limited to editorial issues , with a view to eliminating the inconsistencies or making certain provisions more practical and that those efforts should not lead to their revision . The Chairman of the Editorial Committee would consult with members of the Commission and report to it at its next session . The Training Committee met under the chairmanship of Mr. Fagoonee . The Chairman of the Working Group on Training reported that , among other things , the Secretary of the Commission had presented to the Group the information concerning the issues with regard to the preparation of the training manual . The Secretary had also informed the Group that , after consultation , it had been decided that the manual should appear in the form of a kit , consisting of printed material and compact discs with maps , figures and interactive material . The Secretariat further reported that two members of the Commission , namely Mr. Brekke and Mr. Carrera , had agreed to assist the Secretariat as coordinators and that some funds had already been earmarked for the production of the manual . The Secretary also provided information with respect to the status and operation of the Trust Fund for the purpose of facilitating the preparation of submissions to the Commission on the Limits of the Continental Shelf by developing States , in particular the least developed countries and small island developing States , and compliance with article 76 of the United Nations Convention on the Law of the Sea . The Working Group also discussed other training issues and activities , in particular the need for a medium- to long-term training strategy plan , especially bearing in mind the needs of developing coastal States . Under the agenda item entitled “ Other matters ” , the Chairman of the Commission informed the Commission about the proceedings of the twelfth Meeting of States Parties to the United Nations Convention on the Law of the Sea with regard to the Commission and its status at the Meeting . He noted that the Commission had been granted observer status by the Meeting . One member of the Commission referred to the 2000 open meeting of the Commission and informed the Commission about a series of briefings organized by the Permanent Mission of Mexico to the United Nations concerning the implementation of the Convention , in particular its article 76. In that context , he proposed that the Commission should consider holding another open meeting in the future . The members of the Commission endorsed the proposal and agreed , especially in view of the need for planning , that the modalities for the open meeting would be discussed at the next session . The Commission further discussed the time and venue of its next sessions . In view of the fact that the Commission had completed its work on the recommendations , on the submission of the Russian Federation , it was decided not to hold the session originally scheduled to take place from 26 to 30 August 2002. It was further decided that two sessions should be held in 2003. The twelfth session would be held from 28 April to 2 May , followed by two weeks of meetings of a subcommission in the event a submission was made to the Commission . The thirteenth session was scheduled to be held from 25 to 29 August 2003. The Under-Secretary-General for Legal Affairs , the Legal Counsel , Mr. Hans Corell , addressed the Commission at the final meeting of its eleventh session . He welcomed the newly elected members and expressed his support of the important work of the Commission . He pledged that the Secretariat would continue to do its best to provide the required services and technical support to the Commission despite budgetary constraints . Finally , the Commission renewed its expressions of appreciation to the staff of the Division for Ocean Affairs and the Law of the Sea , as well as to the interpreters , translators and other staff for the assistance and services provided during the current session . </text>
<text id="un/CRC_GC_2003_4">
COMMITTEE ON THE RIGHTS OF THE CHILD Thirty-third session 19 May-6 June 2003 General comment No. 4 ( 2003 ) Adolescent health and development in the context of the Convention on the Rights of the Child Introduction The Convention on the Rights of the Child defines a child as “ every human being below the age of 18 years unless , under the law applicable , majority is attained earlier ” ( art . 1 ) . Consequently , adolescents up to 18 years old are holders of all the rights enshrined in the Convention ; they are entitled to special protection measures and , according to their evolving capacities , they can progressively exercise their rights ( art . Adolescence is a period characterized by rapid physical , cognitive and social changes , including sexual and reproductive maturation ; the gradual building up of the capacity to assume adult behaviours and roles involving new responsibilities requiring new knowledge and skills . While adolescents are in general a healthy population group , adolescence also poses new challenges to health and development owing to their relative vulnerability and pressure from society , including peers , to adopt risky health behaviour . These challenges include developing an individual identity and dealing with one 's sexuality . The dynamic transition period to adulthood is also generally a period of positive changes , prompted by the significant capacity of adolescents to learn rapidly , to experience new and diverse situations , to develop and use critical thinking , to familiarize themselves with freedom , to be creative and to socialize . The Committee on the Rights of the Child notes with concern that in implementing their obligations under the Convention , States parties have not given sufficient attention to the specific concerns of adolescents as rights holders and to promoting their health and development . This has motivated the Committee to adopt the present general comment in order to raise awareness and provide States parties with guidance and support in their efforts to guarantee the respect for , protection and fulfilment of the rights of adolescents , including through the formulation of specific strategies and policies . The Committee understands the concepts of “ health and development ” more broadly than being strictly limited to the provisions defined in articles 6 ( right to life , survival and development ) and 24 ( right to health ) of the Convention . One of the aims of this general comment is precisely to identify the main human rights that need to be promoted and protected in order to ensure that adolescents do enjoy the highest attainable standard of health , develop in a well-balanced manner , and are adequately prepared to enter adulthood and assume a constructive role in their communities and in society at large . This general comment should be read in conjunction with the Convention and its two Optional Protocols on the sale of children , child prostitution and child pornography , and on the involvement of children in armed conflict , as well as other relevant international human rights norms and standards . Fundamental principles and other obligations of states parties As recognized by the World Conference on Human Rights ( 1993 ) and repeatedly stated by the Committee , children 's rights too are indivisible and interrelated . In addition to articles 6 and 24 , other provisions and principles of the Convention are crucial in guaranteeing that adolescents fully enjoy their right to health and development . The right to non-discrimination States parties have the obligation to ensure that all human beings below 18 enjoy all the rights set forth in the Convention without discrimination ( art . 2 ) , including with regard to “ race , colour , sex , language , religion , political or other opinion , national , ethnic or social origin , property , disability , birth or other status ” . These grounds also cover adolescents ' sexual orientation and health status ( including HIV/AIDS and mental health ) . Adolescents who are subject to discrimination are more vulnerable to abuse , other types of violence and exploitation , and their health and development are put at greater risk . They are therefore entitled to special attention and protection from all segments of society . Appropriate guidance in the exercise of rights The Convention acknowledges the responsibilities , rights and duties of parents ( or other persons legally responsible for the child ) “ to provide , in a manner consistent with the evolving capacities of the child , appropriate direction and guidance in the exercise by the child of the rights recognized in the Convention ” ( art . The Committee believes that parents or other persons legally responsible for the child need to fulfil with care their right and responsibility to provide direction and guidance to their adolescent children in the exercise by the latter of their rights . They have an obligation to take into account the adolescents ' views , in accordance with their age and maturity , and to provide a safe and supportive environment in which the adolescent can develop . Adolescents need to be recognized by the members of their family environment as active rights holders who have the capacity to become full and responsible citizens , given the proper guidance and direction . Respect for the views of the child The right to express views freely and have them duly taken into account ( art . 12 ) is also fundamental in realizing adolescents ' right to health and development . States parties need to ensure that adolescents are given a genuine chance to express their views freely on all matters affecting them , especially within the family , in school , and in their communities . In order for adolescents to be able safely and properly to exercise this right , public authorities , parents and other adults working with or for children need to create an environment based on trust , information-sharing , the capacity to listen and sound guidance that is conducive for adolescents ' participating equally including in decision-making processes . Legal and judicial measures and processes Under article 4 of the Convention , “ States parties shall undertake all appropriate legislative , administrative and other measures for the implementation of the rights recognized ” therein . In the context of the rights of adolescents to health and development , States parties need to ensure that specific legal provisions are guaranteed under domestic law , including with regard to setting a minimum age for sexual consent , marriage and the possibility of medical treatment without parental consent . These minimum ages should be the same for boys and girls ( article 2 of the Convention ) and closely reflect the recognition of the status of human beings under 18 years of age as rights holders , in accordance with their evolving capacity , age and maturity ( arts . 5 and 12 to 17 ) . Further , adolescents need to have easy access to individual complaint systems as well as judicial and appropriate non-judicial redress mechanisms that guarantee fair and due process , with special attention to the right to privacy ( art . Civil rights and freedoms The Convention defines the civil rights and freedoms of children and adolescents in its articles 13 to 17. These are fundamental in guaranteeing the right to health and development of adolescents . Article 17 states that the child has the right to “ access information and material from a diversity of national and international sources , especially those aimed at the promotion of his or her social , spiritual and moral well-being and physical and mental health ” . The right of adolescents to access appropriate information is crucial if States parties are to promote cost-effective measures , including through laws , policies and programmes , with regard to numerous health-related situations , including those covered in articles 24 and 33 such as family planning , prevention of accidents , protection from harmful traditional practices , including early marriages and female genital mutilation , and the abuse of alcohol , tobacco and other harmful substances . In order to promote the health and development of adolescents , States parties are also encouraged to respect strictly their right to privacy and confidentiality , including with respect to advice and counselling on health matters ( art . Health-care providers have an obligation to keep confidential medical information concerning adolescents , bearing in mind the basic principles of the Convention . Such information may only be disclosed with the consent of the adolescent , or in the same situations applying to the violation of an adult 's confidentiality . Adolescents deemed mature enough to receive counselling without the presence of a parent or other person are entitled to privacy and may request confidential services , including treatment . Protection from all forms of abuse , neglect , violence and exploitation States parties must take effective measures to ensure that adolescents are protected from all forms of violence , abuse , neglect and exploitation ( arts . 19 , 32-36 and 38 ) , paying increased attention to the specific forms of abuse , neglect , violence and exploitation that affects this age group . In particular , they should adopt special measures to ensure the physical , sexual and mental integrity of adolescents with disabilities , who are particularly vulnerable to abuse and neglect . States parties should also ensure that adolescents affected by poverty who are socially marginalized are not criminalized . In this regard , financial and human resources need to be allocated to promote research that would inform the adoption of effective local and national laws , policies and programmes . Policies and strategies should be reviewed regularly and revised accordingly . In taking these measures , States parties have to take into account the evolving capacities of adolescents and involve them in an appropriate manner in developing measures , including programmes , designed to protect them . In this context , the Committee emphasizes the positive impact that peer education can have , and the positive influence of proper role models , especially those in the worlds of arts , entertainment and sports . Data collection Systematic data collection is necessary for States parties to be able to monitor the health and development of adolescents . States parties should adopt data-collection mechanisms that allow desegregation by sex , age , origin and socio-economic status so that the situation of different groups can be followed . Data should also be collected to study the situation of specific groups such as ethnic and/or indigenous minorities , migrant or refugee adolescents , adolescents with disabilities , working adolescents , etc. Where appropriate , adolescents should participate in the analysis to ensure that the information is understood and utilized in an adolescent-sensitive way . Creating a safe and supportive environment The health and development of adolescents are strongly determined by the environments in which they live . Creating a safe and supportive environment entails addressing attitudes and actions of both the immediate environment of the adolescent - family , peers , schools and services - as well as the wider environment created by , inter alia , community and religious leaders , the media , national and local policies and legislation . The promotion and enforcement of the provisions and principles of the Convention , especially articles 2-6 , 12-17 , 24 , 28 , 29 and 31 , are key to guaranteeing adolescents ' right to health and development . States parties should take measures to raise awareness and stimulate and/or regulate action through the formulation of policy or the adoption of legislation and the implementation of programmes specifically for adolescents . The Committee stresses the importance of the family environment , including the members of the extended family and community or other persons legally responsible for the child or adolescent ( arts . 5 and 18 ) . While most adolescents grow up in well-functioning family environments , for some the family does not constitute a safe and supportive milieu . The Committee calls upon States parties to develop and implement , in a manner consistent with adolescents ' evolving capacities , legislation , policies and programmes to promote the health and development of adolescents by ( a ) providing parents ( or legal guardians ) with appropriate assistance through the development of institutions , facilities and services that adequately support the well-being of adolescents , including , when needed , the provision of material assistance and support with regard to nutrition , clothing and housing ( art . 27 ( 3 ) ) ; ( b ) providing adequate information and parental support to facilitate the development of a relationship of trust and confidence in which issues regarding , for example , sexuality and sexual behaviour and risky lifestyles can be openly discussed and acceptable solutions found that respect the adolescent 's rights ( art . 27 ( 3 ) ) ; ( c ) providing adolescent mothers and fathers with support and guidance for both their own and their children 's well-being ( art . 24 ( f ) , 27 ( 2-3 ) ) ; ( d ) giving , while respecting the values and norms of ethnic and other minorities , special attention , guidance and support to adolescents and parents ( or legal guardians ) , whose traditions and norms may differ from those in the society where they live ; and ( e ) ensuring that interventions in the family to protect the adolescent and , when necessary , separate her/him from the family , e. g. in case of abuse or neglect , are in accordance with applicable laws and procedures . Such laws and procedures should be reviewed to ensure that they conform to the principles of the Convention . The school plays an important role in the life of many adolescents , as the venue for learning , development and socialization . Article 29 ( 1 ) states that education must be directed to “ the development of the child 's personality , talents and mental and physical abilities to their fullest potential ” . In addition , general comment No. 1 on the aims of education states that “ Education must also be aimed at ensuring that … no child leaves school without being equipped to face the challenges that he or she can expect to be confronted with in life . Basic skills should include … the ability to make well-balanced decisions ; to resolve conflicts in a non-violent manner ; and to develop a healthy lifestyle [ and ] good social relationships … ” . Considering the importance of appropriate education for the current and future health and development of adolescents , as well as for their children , the Committee urges States parties , in line with articles 28 and 29 of the Convention to ( a ) ensure that quality primary education is compulsory and available , accessible and free to all and that secondary and higher education are available and accessible to all adolescents ; ( b ) provide well-functioning school and recreational facilities which do not pose health risks to students , including water and sanitation and safe journeys to school ; ( c ) take the necessary actions to prevent and prohibit all forms of violence and abuse , including sexual abuse , corporal punishment and other inhuman , degrading or humiliating treatment or punishment in school , by school personnel as well as among students ; ( d ) initiate and support measures , attitudes and activities that promote healthy behaviour by including relevant topics in school curricula . During adolescence , an increasing number of young people are leaving school to start working to help support their families or for wages in the formal or informal sector . Participation in work activities in accordance with international standards , as long as it does not jeopardize the enjoyment of any of the other rights of adolescents , including health and education , may be beneficial for the development of the adolescent . The Committee urges States parties to take all necessary measures to abolish all forms of child labour , starting with the worst forms , to continuously review national regulations on minimum ages for employment with a view to making them compatible with international standards , and to regulate the working environment and conditions for adolescents who are working ( in accordance with article 32 of the Convention , as well as ILO Conventions Nos. 138 and 182 ) , so as to ensure that they are fully protected and have access to legal redress mechanisms . The Committee also stresses that in accordance with article 23 ( 3 ) of the Convention , the special rights of adolescents with disabilities should be taken into account and assistance provided to ensure that the disabled child/adolescent has effective access to and receives good quality education . States should recognize the principle of equal primary , secondary and tertiary educational opportunities for disabled children/adolescents , where possible in regular schools . The Committee is concerned that early marriage and pregnancy are significant factors in health problems related to sexual and reproductive health , including HIV/AIDS . Both the legal minimum age and actual age of marriage , particularly for girls , are still very low in several States parties . There are also non-health-related concerns : children who marry , especially girls , are often obliged to leave the education system and are marginalized from social activities . Further , in some States parties married children are legally considered adults , even if they are under 18 , depriving them of all the special protection measures they are entitled under the Convention . The Committee strongly recommends that States parties review and , where necessary , reform their legislation and practice to increase the minimum age for marriage with and without parental consent to 18 years , for both girls and boys . The Committee on the Elimination of Discrimination against Women has made a similar recommendation ( general comment No. 21 of 1994 ) . In most countries accidental injuries or injuries due to violence are a leading cause of death or permanent disability among adolescents . In that respect , the Committee is concerned about the injuries and death resulting from road traffic accidents , which affect adolescents disproportionately . States parties should adopt and enforce legislation and programmes to improve road safety , including driving education for and examination of adolescents and the adoption or strengthening of legislation known to be highly effective such as the obligations to have a valid driver 's licence , wear seat belts and crash helmets , and the designation of pedestrian areas . The Committee is also very concerned about the high rate of suicide among this age group . Mental disorders and psychosocial illness are relatively common among adolescents . In many countries symptoms such as depression , eating disorders and self-destructive behaviours , sometimes leading to self-inflicted injuries and suicide , are increasing . They may be related to , inter alia , violence , ill-treatment , abuse and neglect , including sexual abuse , unrealistically high expectations , and/or bullying or hazing in and outside school . States parties should provide these adolescents with all the necessary services . Violence results from a complex interplay of individual , family , community and societal factors . Vulnerable adolescents such as those who are homeless or who are living in institutions , who belong to gangs or who have been recruited as child soldiers are especially exposed to both institutional and interpersonal violence . Under article 19 of the Convention , States parties must take all appropriate measures to prevent and eliminate : ( a ) institutional violence against adolescents , including through legislation and administrative measures in relation to public and private institutions for adolescents ( schools , institutions for disabled adolescents , juvenile reformatories , etc. ) , and training and monitoring of personnel in charge of institutionalized children or who otherwise have contact with children through their work , including the police ; and ( b ) interpersonal violence among adolescents , including by supporting adequate parenting and opportunities for social and educational development in early childhood , fostering non-violent cultural norms and values ( as foreseen in article 29 of the Convention ) , strictly controlling firearms and restricting access to alcohol and drugs . In light of articles 3 , 6 , 12 , 19 and 24 ( 3 ) of the Convention , States parties should take all effective measures to eliminate all acts and activities which threaten the right to life of adolescents , including honour killings . The Committee strongly urges States parties to develop and implement awareness-raising campaigns , education programmes and legislation aimed at changing prevailing attitudes , and address gender roles and stereotypes that contribute to harmful traditional practices . Further , States parties should facilitate the establishment of multidisciplinary information and advice centres regarding the harmful aspects of some traditional practices , including early marriage and female genital mutilation . The Committee is concerned about the influence exerted on adolescent health behaviours by the marketing of unhealthy products and lifestyles . In line with article 17 of the Convention , States parties are urged to protect adolescents from information that is harmful to their health and development , while underscoring their right to information and material from diverse national and international sources . States parties are therefore urged to regulate or prohibit information on and marketing of substances such as alcohol and tobacco , particularly when it targets children and adolescents . Information , skills development , counselling , and health services Adolescents have the right to access adequate information essential for their health and development and for their ability to participate meaningfully in society . It is the obligation of States parties to ensure that all adolescent girls and boys , both in and out of school , are provided with , and not denied , accurate and appropriate information on how to protect their health and development and practise healthy behaviours . This should include information on the use and abuse , of tobacco , alcohol and other substances , safe and respectful social and sexual behaviours , diet and physical activity . In order to act adequately on the information , adolescents need to develop the skills necessary , including self-care skills , such as how to plan and prepare nutritionally balanced meals and proper personal hygiene habits , and skills for dealing with particular social situations such as interpersonal communication , decision-making , and coping with stress and conflict . States parties should stimulate and support opportunities to build such skills through , inter alia , formal and informal education and training programmes , youth organizations and the media . In light of articles 3 , 17 and 24 of the Convention , States parties should provide adolescents with access to sexual and reproductive information , including on family planning and contraceptives , the dangers of early pregnancy , the prevention of HIV/AIDS and the prevention and treatment of sexually transmitted diseases ( STDs ) . In addition , States parties should ensure that they have access to appropriate information , regardless of their marital status and whether their parents or guardians consent . It is essential to find proper means and methods of providing information that is adequate and sensitive to the particularities and specific rights of adolescent girls and boys . To this end , States parties are encouraged to ensure that adolescents are actively involved in the design and dissemination of information through a variety of channels beyond the school , including youth organizations , religious , community and other groups and the media . Under article 24 of the Convention , States parties are urged to provide adequate treatment and rehabilitation for adolescents with mental disorders , to make the community aware of the early signs and symptoms and the seriousness of these conditions , and to protect adolescents from undue pressures , including psychosocial stress . States parties are also urged to combat discrimination and stigma surrounding mental disorders , in line with their obligations under article 2. Every adolescent with a mental disorder has the right to be treated and cared for , as far as possible , in the community in which he or she lives . Where hospitalization or placement in a psychiatric institution is necessary , this decision should be made in accordance with the principle of the best interests of the child . In the event of hospitalization or institutionalization , the patient should be given the maximum possible opportunity to enjoy all his or her rights as recognized under the Convention , including the rights to education and to have access to recreational activities . Where appropriate , adolescents should be separated from adults . States parties must ensure that adolescents have access to a personal representative other than a family member to represent their interests , when necessary and appropriate . In accordance with article 25 of the Convention , States parties should undertake periodic review of the placement of adolescents in hospitals or psychiatric institutions . Adolescents , both girls and boys , are at risk of being infected with and affected by STDs , including HIV/AIDS . States should ensure that appropriate goods , services and information for the prevention and treatment of STDs , including HIV/AIDS , are available and accessible . To this end , States parties are urged ( a ) to develop effective prevention programmes , including measures aimed at changing cultural views about adolescents ' need for contraception and STD prevention and addressing cultural and other taboos surrounding adolescent sexuality ; ( b ) to adopt legislation to combat practices that either increase adolescents ' risk of infection or contribute to the marginalization of adolescents who are already infected with STDs , including HIV ; ( c ) to take measures to remove all barriers hindering the access of adolescents to information , preventive measures such as condoms , and care . Adolescent girls should have access to information on the harm that early marriage and early pregnancy can cause , and those who become pregnant should have access to health services that are sensitive to their rights and particular needs . States parties should take measures to reduce maternal morbidity and mortality in adolescent girls , particularly caused by early pregnancy and unsafe abortion practices , and to support adolescent parents . Young mothers , especially where support is lacking , may be prone to depression and anxiety , compromising their ability to care for their child . The Committee urges States parties ( a ) to develop and implement programmes that provide access to sexual and reproductive health services , including family planning , contraception and safe abortion services where abortion is not against the law , adequate and comprehensive obstetric care and counselling ; ( b ) to foster positive and supportive attitudes towards adolescent parenthood for their mothers and fathers ; and ( c ) to develop policies that will allow adolescent mothers to continue their education . Before parents give their consent , adolescents need to have a chance to express their views freely and their views should be given due weight , in accordance with article 12 of the Convention . However , if the adolescent is of sufficient maturity , informed consent shall be obtained from the adolescent her/himself , while informing the parents if that is in the “ best interest of the child ” ( art . With regard to privacy and confidentiality , and the related issue of informed consent to treatment , States parties should ( a ) enact laws or regulations to ensure that confidential advice concerning treatment is provided to adolescents so that they can give their informed consent . Such laws or regulations should stipulate an age for this process , or refer to the evolving capacity of the child ; and ( b ) provide training for health personnel on the rights of adolescents to privacy and confidentiality , to be informed about planned treatment and to give their informed consent to treatment . Vulnerability and risk In ensuring respect for the right of adolescents to health and development , both individual behaviours and environmental factors which increase their vulnerability and risk should be taken into consideration . Environmental factors , such as armed conflict or social exclusion , increase the vulnerability of adolescents to abuse , other forms of violence and exploitation , thereby severely limiting adolescents ' abilities to make individual , healthy behaviour choices . For example , the decision to engage in unsafe sex increases adolescents ' risk of ill-health . In accordance with article 23 of the Convention , adolescents with mental and/or physical disabilities have an equal right to the highest attainable standard of physical and mental health . States parties have an obligation to provide adolescents with disabilities with the means necessary to realize their rights . States parties should ( a ) ensure that health facilities , goods and services are available and accessible to all adolescents with disabilities and that these facilities and services promote their self-reliance and their active participation in the community ; ( b ) ensure that the necessary equipment and personal support are available to enable them to move around , participate and communicate ; ( c ) pay specific attention to the special needs relating to the sexuality of adolescents with disabilities ; and ( d ) remove barriers that hinder adolescents with disabilities in realizing their rights . States parties have to provide special protection to homeless adolescents , including those working in the informal sector . Homeless adolescents are particularly vulnerable to violence , abuse and sexual exploitation from others , self-destructive behaviour , substance abuse and mental disorders . In this regard , States parties are required to ( a ) develop policies and enact and enforce legislation that protect such adolescents from violence , e. g. by law enforcement officials ; ( b ) develop strategies for the provision of appropriate education and access to health care , and of opportunities for the development of livelihood skills . Adolescents who are sexually exploited , including in prostitution and pornography , are exposed to significant health risks , including STDs , HIV/AIDS , unwanted pregnancies , unsafe abortions , violence and psychological distress . They have the right to physical and psychological recovery and social reintegration in an environment that fosters health , self-respect and dignity ( art . It is the obligation of States parties to enact and enforce laws to prohibit all forms of sexual exploitation and related trafficking ; to collaborate with other States parties to eliminate intercountry trafficking ; and to provide appropriate health and counselling services to adolescents who have been sexually exploited , making sure that they are treated as victims and not as offenders . Additionally , adolescents experiencing poverty , armed conflicts , all forms of injustice , family breakdown , political , social and economic instability and all types of migration may be particularly vulnerable . These situations might seriously hamper their health and development . By investing heavily in preventive policies and measures States parties can drastically reduce levels of vulnerability and risk factors ; they will also provide cost-effective ways for society to help adolescents develop harmoniously in a free society . Nature of States ' obligations In exercising their obligations in relation to the health and development of adolescents , States parties shall always take fully into account the four general principles of the Convention . It is the view of the Committee that States parties must take all appropriate legislative , administrative and other measures for the realization and monitoring of the rights of adolescents to health and development as recognized in the Convention . To this end , States parties must notably fulfil the following obligations : ( a ) To create a safe and supportive environment for adolescents , including within their family , in schools , in all types of institutions in which they may live , within their workplace and/or in the society at large ; ( b ) To ensure that adolescents have access to the information that is essential for their health and development and that they have opportunities to participate in decisions affecting their health ( notably through informed consent and the right of confidentiality ) , to acquire life skills , to obtain adequate and age-appropriate information , and to make appropriate health behaviour choices ; ( c ) To ensure that health facilities , goods and services , including counselling and health services for mental and sexual and reproductive health , of appropriate quality and sensitive to adolescents ' concerns are available to all adolescents ; ( d ) To ensure that adolescent girls and boys have the opportunity to participate actively in planning and programming for their own health and development ; ( e ) To protect adolescents from all forms of labour which may jeopardize the enjoyment of their rights , notably by abolishing all forms of child labour and by regulating the working environment and conditions in accordance with international standards ; ( f ) To protect adolescents from all forms of intentional and unintentional injuries , including those resulting from violence and road traffic accidents ; ( g ) To protect adolescents from all harmful traditional practices , such as early marriages , honour killings and female genital mutilation ; ( h ) To ensure that adolescents belonging to especially vulnerable groups are fully taken into account in the fulfilment of all aforementioned obligations ; ( i ) To implement measures for the prevention of mental disorders and the promotion of mental health of adolescents . The Committee draws the attention of States parties to the general comment No. 14 on the right to the highest attainable standard of health of the Committee on Economic , Social and Cultural Rights which states that , “ States parties should provide a safe and supportive environment for adolescents that ensures the opportunity to participate in decisions affecting their health , to build life skills , to acquire appropriate information , to receive counselling and to negotiate the health-behaviour choices they make . The realization of the right to health of adolescents is dependent on the development of youth-sensitive health care , which respects confidentiality and privacy and includes appropriate sexual and reproductive health services . ” In accordance with articles 24 , 39 and other related provisions of the Convention , States parties should provide health services that are sensitive to the particular needs and human rights of all adolescents , paying attention to the following characteristics : ( a ) Availability . Primary health care should include services sensitive to the needs of adolescents , with special attention given to sexual and reproductive health and mental health ; ( b ) Accessibility . Health facilities , goods and services should be known and easily accessible ( economically , physically and socially ) to all adolescents , without discrimination . Confidentiality should be guaranteed , when necessary ; ( c ) Acceptability . While fully respecting the provisions and principles of the Convention , all health facilities , goods and services should respect cultural values , be gender sensitive , be respectful of medical ethics and be acceptable to both adolescents and the communities in which they live ; ( d ) Quality . Health services and goods should be scientifically and medically appropriate , which requires personnel trained to care for adolescents , adequate facilities and scientifically accepted methods . States parties should , where feasible , adopt a multisectoral approach to the promotion and protection of adolescent health and development by facilitating effective and sustainable linkages and partnerships among all relevant actors . At the national level , such an approach calls for close and systematic collaboration and coordination within Government , so as to ensure the necessary involvement of all relevant government entities . Public health and other services utilized by adolescents should also be encouraged and assisted in seeking collaboration with , inter alia , private and/or traditional practitioners , professional associations , pharmacies and organizations that provide services to vulnerable groups of adolescents . A multisectoral approach to the promotion and protection of adolescent health and development will not be effective without international cooperation . Therefore , States parties should , when appropriate , seek such cooperation with United Nations specialized agencies , programmes and bodies , international NGOs and bilateral aid agencies , international professional associations and other non-State actors . Notes These include the International Covenant on Civil and Political Rights , the International Covenant on Economic , Social and Cultural Rights , the Convention against Torture and Other Cruel , Inhuman or Degrading Treatment or Punishment , the International Convention on the Elimination of All Forms of Racial Discrimination , the International Convention on the Protection of the Rights of All Migrant Workers and Members of Their Families and the Convention on the Elimination of All Forms of Discrimination Against Women . See also the reports of the Committee 's days of general discussion on “ Violence against children ” held in 2000 and 2001 and the Recommendations adopted in this regard ( see CRC/C/100 , chap . V and CRC/C/111 , chap . </text>
<text id="un/DP_2002_34">
Second regular session 2002 23 to 27 September 2002 , New York Item 7 of the provisional agenda UNOPS : Financial , budgetary and administrative matters Report of the Advisory Committee on Administrative and Budgetary Questions The Advisory Committee on Administrative and Budgetary Questions has considered the report of the Executive Director of the United Nations Office for Project Services on the implementation of the revised budget for 2002 , on the revised budget estimates for the biennium 2002-2003 and on the level of the operational reserve ( DP/2002/33 ) . The Committee also had before it , as background documentation , a conference room paper on UNOPS revised budget estimates for the year 2002 ( DP/2002/CRP.10 ) , a report on the implementation of the recommendations of the Board of Auditors for the biennium 2000-2001 ( DP/2002/35 ) , an action plan on savings from projected staff cuts ( DP/2002/35/Add.1 ) , an advance copy of the UNOPS contingency plan for 2002-2003 ( DP/2002/35/Add.2 ) and draft terms of reference and timetable for an independent review of UNOPS ( DP/2002/36 ) . During its consideration of these matters , the Committee met with the Executive Director of UNOPS and his colleagues , who provided additional information . The Advisory Committee notes that the projection of income and expenditures of UNOPS during the biennium 2002-2003 has taken place under circumstances that have seriously impacted on the working of that Office . The Advisory Committee notes with concern the serious situation facing the management and operation of UNOPS . The Committee was informed that the massive reduction of business from UNDP that started in 1999 continued during the biennium 2000-2001 and the year 2002 ( see annex 1 to this report ) . Income from UNDP decreased from $79.4 million in the biennium 1998-1999 ( or some 92 percent of total project income of UNOPS ) to $61.5 million in the biennium 2000-2001 ( or 82 percent of total project income ) . However , UNDP remains UNOPS ' largest client since the latter 's inception in 1994 ( see report of the Board of Auditors to the General Assembly on the accounts of UNOPS for the biennium ended 31 December 2001 , para . 25 and Annex 2 to this report ) . The Advisory Committee was informed that the UNOPS ' delivery dropped considerably in 2001 and consequently its income from project delivery . The budget approved for 2001 ( Executive Board decision 2001/19 ) projected a total income of $56.8 million and total administrative expenditures of $55.3 million . Actual income for 2001 amounted however to only $47.2 million or $9.6 million less than the projected income . Administrative expenditures totaled $52.8 million , exceeding total income by $5.6 million . UNOPS covered this shortfall in income through a drawdown on the operational reserve , in accordance with its Financial Regulations , reducing its level to $5 million ( DP/2002/CRP.10 ) . The Advisory Committee was also informed that the performance of UNOPS in 2001 was significantly affected , inter alia , by the uncertainty about its future status . The review by the Secretary-General on the operations and continuity of UNOPS , requested in March 2001 , was completed in January 2002 when the Secretary-General took the decision to maintain UNOPS as a separate and identifiable entity of the United Nations system that is self-financing , as originally intended by Member States . The Committee was provided with the note of the Secretary-General on the matter ( DP/2002/CRP.5 ) . The Committee notes that in reaching its decision , the Secretary-General was assisted by the internal review carried out , at his request , by the Office of Internal Oversight Services ( OIOS ) . The Committee recalls that in paragraph 4 of its report DP/2001/29 of 5 September 2001 , it indicated that it was incumbent on the Secretary-General to inform Member States expeditiously on the results of the review . The Committee reiterates its request that the Secretary-General make available to Member States the report of OIOS on UNOPS . Furthermore , the Advisory Committee believes that , in supporting the continued work of UNOPS , as a separate and identifiable entity that provides services to organizations of the United Nations system for the management and delivery of programmes and projects , it is incumbent upon the Secretary-General to take steps to ensure the viability and success of UNOPS . The Advisory Committee recalls that it had also expressed its concern that the prolonged deliberations regarding the future status of UNOPS would have negative impact on its operations , resulting in lower levels of acquisition and delivery ( DP/2001/29 , para . The Committee was informed that during 2001 the uncertainty regarding the existence of UNOPS had led to a decrease in UNOPS ' key businesses , including cancellation or delays of approved project budgets funded by UNDP in an amount of $42 million . The Advisory Committee is concerned that , through no fault of UNOPS , it has not been able to recover fully from UNDP the costs of activities carried out in good faith , with a view to performing the tasks specified in the work plans of approved projects which were subsequently delayed , modified , or cancelled . The Committee recalls that , with respect to the termination or postponement of project budgets , it had indicated that this should be managed through consultation of all parties concerned and in such a way as to minimize the financial consequences and their impact on UNOPS ( DP/2001/29 , para . In this connection , the Committee recommends that the Administrator of UNDP review the issue so as to reimburse UNOPS in an equitable manner for the costs incurred . ( See paragraph . 9 below . The Advisory Committee notes that the Secretary-General decided to maintain the Management Coordination Committee ( MCC ) , chaired by the UNDP Administrator ( see DP/2002/CRP . 5 , paras . 7 to 15 ) . The Committee has indicated that the relationships of UNOPS with the entities involved in governing , servicing and advising it are complex and that , at times , may hinder the effective communication and reporting systems of UNOPS ( DP/1994/57 , paras . 3 and 4 ) . In the Committee 's opinion , the responsibilities currently assigned to the MCC appear to establish another layer of executive management for UNOPS ; as initially endorsed by the Executive Board , the MCC was established to provide overall oversight and guidance to UNOPS , as a self-financing entity . The Committee was informed that actions taken by the MCC in management of UNOPS have resulted , at times , in unnecessary and costly delays . For example , the Committee was informed that , in the last quarter of 2001 , it had become clear that expenditure reductions on non-staff related items would not be sufficient to balance the budget . Both the approved budget and the staffing strength of UNOPS were in excess of the income that was being generated . Had the MCC agreed with staff reduction measures in November 2001 rather than in February 2002 , the downward adjustment would have been less painful and savings in 2002 could have been larger . With regard to budget for 2002 , the Advisory Committee was informed that in June 2002 , the Management Coordination Committee ( MCC ) decided to revise the approved budget of $56.5 million downward to a ceiling of $44 million . The 2002 revised budget is based on business already acquired but excluding new business in the advanced pipeline that would be signed and implemented during the course of the year . The Advisory Committee remains concerned that the Executive Director of UNOPS has not been given the flexibility needed to manage the organization to react to changes in the fluctuations in delivery of the project portfolio and other services . In this connection , the Committee recalls its comments on the role of the MCC made in its report of 7 October 1994 ( DP/1994/57 , paras . 13 and 14 ) and reiterates its recommendation made in its report of 18 September 2000 ( DP/2000/38 , para . 18 ) on the need to streamline the budget preparation and review process . To this end , the current role of the MCC in setting a budgetary ceiling should be reconsidered with a view to conforming the procedure for the preparation and submission of the UNOPS budget to that followed by the UN Funds and Programmes . The Advisory Committee notes from paragraph 7 of document DP/2002/36 that the scope of the proposed independent review of UNOPS would include a review of the revenue and cost structures of UNOPS , its operating margins on products and services , as well as its business processes and management tools at hand . The Committee notes that the estimated cost of this review amounts to $200,000 and would be completed in 90 days. The Committee welcomes this review , which is in line with its recommendations in paragraphs 2 and 3 of its report DP/2001/29 of 5 September 2001. The Committee stresses that although UNOPS should continue its efforts to be a cost-effective and competitive provider of services to clients within the United Nations system , it should recover in full from its clients the actual costs of executing projects and providing services . The Committee also reiterates its view that UNOPS should continue its efforts to examine the structure of its business with a view to refining the criteria taken into account to evaluate the commitment of clients and UNOPS ' own capacity to deliver . To ensure an expeditious completion of the independent review , the Secretary-General should make appropriate arrangements to ensure that its costs are met . The Advisory Committee notes that , in document DP/2002/35/Add.2 , an attempt has been made to formulate a contingency plan for UNOPS in response to Executive Board decision 2002/13 . The plan includes actions to be taken by the Executive Director in the event that the operational reserve is unable to absorb administrative expenditures incurred against the UNOPS account for the biennium 2002-2003 . In the Committee 's opinion some of the steps proposed in paragraphs 9 to 14 to increase income and reduce administrative expenditure are already within the purview of management authority of the Executive Director of UNOPS and do not necessarily form part of a contingency plan related to the level operational reserve . Moreover , some of the proposed actions should also be closely examined in the proposed internal review of UNOPS ( see paragraph 9 above ) . These would include , for example , the question of the rights and obligations of UNOPS and its clients pursuant to contractual arrangements for project delivery ( see paragraph 5 above ) . On the question of the future status of UNDP personnel working with UNOPS and respective liabilities of UNDP and UNOPS the Advisory Committee was informed that the prevalence of staff in UNOPS with differences in contractual status hampers UNOPS ' ability to be responsive to the self-financing principle . Categories include UNDP permanent staff expected to return to UNDP , UNDP staff with contracts limited to UNOPS , and UNOPS staff . In addition , the personnel arrangements with UNDP of 1994 are no longer valid and UNOPS has agreed with UNDP to revise them in order to fit their current and future anticipated relationship . UNDP and UNOPS have agreed on a cost-sharing formula applicable to UNDP staff that have been serving with UNOPS and need to be separated as a result of abolition of posts . However , UNDP 's precarious financial situation has led UNDP to take certain decisions that are not reciprocal to that which is expected from UNOPS . The Advisory Committee has commented in the past on the need to re-examine UNOPS contracts for personnel services in order to have a flexible post management system that would allow UNOPS to expand and contract its capacity in response to changes in demand and project delivery and income . The Committee has also recognized that the demand for UNOPS services is increasingly calling for specialized capacity for the management of multi-disciplinary initiatives and that UNOPS must respond quickly , efficiently and in the most cost-effective manner ( see , for example , DP/2000/38 , paras . 14 to 17 ) . The Committee trusts that the internal review of UNOPS will include the re-examination of these personnel issues . Implementation of the approved budget for 2002 In its decision 2002/13 , paragraph 6 , the Executive Board approved the 2002 administrative budget in the amount of $44 million on the basis of a total income projected at $44.3 million and a project delivery portfolio of $503.2 million . The Committee notes that at the end of July 2002 , project delivery had reached $320.4 million , generating income in the amount of $22.5 million . Total income , including service income for loan administration , was $26.9 million and administrative expenditure amounted to $26.4 million at the end of July 2002 ( DP/2002/33 , paras . 3 to 6 ) . The Advisory Committee was informed that the latest available figures indicate that UNOPS is on track or even slightly ahead on delivery and income ; however , staff related costs have increased about 7.5 per cent as compared with the pro-forma costs used in the budget , as a result mainly of currency fluctuations of the dollar vis-a-vis the Euro and other currencies . This situation may lead to overspending the approved administrative budget by some $250,000 , or one half of one percent of the approved budget , if measures for further cost containment and possible additional income turn out to be insufficient to compensate for this cost escalation in the personnel component of the budget . Revised budget estimates for 2003 The Advisory Committee was informed that , for 2003 , the MCC had initially set a revised target of $41 million , expressed in 2002 dollars ( as compared with approved total of $56.5 million . ) Given the increases for staff related costs and the need to set aside $1 million for a post-IMIS business information system , the MCC approved a budget ceiling for 2003 at the same level as for 2002 of $44 million . The budget submitted by the Executive Director of UNOPS amounts to $43.9 million and is based on the assumption that the delivery of project portfolio will amount to $513 million , reflecting an increase $9.8 million or 1.9 per cent over the estimate for 2002 of $503.2 million . Total income is projected at $44.7 million , comprising $36.4 million from project delivery , $6.9 million from service income , including services provided to IFAD , and $1.4 million from other income , including income from existing and planned agreements with a number of United Nations organizations for the subletting of office space and the provision of associated services at UNOPS headquarters ( DP/2002/33 , paras . 12 to 17 and table 1 ) . The Advisory Committee notes from paragraph 16 of document DP/2002/33 that the need to invest in information technology in the amount of $1 million in 2003 is a consequence of the decision by UNDP to implement a new Enterprise Resource Planning ( ERP ) system , effective 1 January 2004. The Advisory Committee recommends approval of the budget proposal of the Executive Director for 2003. The level of the operational reserve As indicated in paragraph 3 above , at the end of the biennium 2000-2001 , the operational reserve was reduced to $5.0 million . The direct charge to the operational reserve to cover estimated staff separation in 2002 is estimated at $2 million ( DP/2002/33 , para . 18 and table 1 ) . A total of 44 staff members have been affected by the staff reduction exercise in 2002 ( see DP/2002/35/Add.1 , para . 8 and table 1 ) . In light of the estimated over-expenditure of $250,000 in 2002 ( see paragraph 13 above ) and the projected excess of income over expenditure of $800,000 in 2003 , the Committee was informed that the operational reserve level would amount to some $3.5 million by the end of 2003. However , in 2003 and 2004 UNOPS medium-term strategy also foresees subletting one fourth of its office space in 2003 and one half from 2004 onwards , allowing the organization to generate additional income , as a result of staff reductions and decentralization measures to move operations to lower cost duty stations . * ) Since 1997 , has included an increasing number of Management Services Agreements negotiated with non-UN funding sources such as International Financial Institutions and governments , where UNDP assumes the function of funds manager and UNOPS is charged with execution . </text>
<text id="un/E_C16_2002_2">
Committee of Experts on Public Administration First session New York , 22-26 July 2002 Item 4 of the provisional agenda* Basic data on the public sector Basic data on the public sector Report of the Secretariat Contents Introduction The present report represents the continuation of a discussion on collecting and making available internationally comparable data on the public sector , an effort undertaken in collaboration between the Division for Public Economics and Public Administration of the United Nations Secretariat and the former Group of Experts of the United Nations Programme on Public Administration and Finance which got under way during the fourteenth session of the former Group of Experts , in 1998. Following the recommendations made at that session , the Division elaborated and presented to the former Group of Experts at its fifteenth session a framework for the collection of such data ( see ST/SG/AC.6/2000/L.2 ) . That framework described the functions of the State as regulator , tax collector , producer , consumer and provider of cash transfers and subsidies , as well as an employer . It suggested that — taking into consideration the availability of data — the presentation of three kinds of indicators could provide a reasonable picture of the public sector in a given country : expenditure by all levels of government , government employment and the value of tax expenditures . At the same time , although the framework acknowledged the important role of the State as regulator , it suggested that it is extremely difficult to quantify the extent of regulation of economic activity , and concluded that even though regulation is an important function of States , it is virtually impossible to measure in any meaningful way and would be ignored in the remainder of that report ( see ST/SG/AC.6/2000/L.2 , para . Subsequently , as a result of discussion during the fifteenth session of the former Group of Experts and further elaboration of the framework of indicators for measuring the public sector , the set of indicators published in electronic form at www . unpan . org included the following five measures : • Government and public employment as a percentage of population . • Government consumption as a percentage of gross domestic product ( GDP ) . • Central government expenditure as a percentage of GDP . • Central government expenditures by type and by function , as a percentage of all central government expenditure . • Central government tax revenue as a percentage of GDP . The concept and indicators were presented in part two of the World Public Sector Report : Globalization and the State . Two thorny issues that were raised from the very beginning of the discussion about the scope of indicators for measuring the public sector remain unresolved . Although within those five categories some data can be collected and presented in an internationally comparable way , the lack of data in some cases and the lack of series of data in other cases makes that task difficult . Also , the lack of readily available data at the subnational level allows for the presentation of a partial picture only . United Nations basic data on the public sector and other international sources of data on the public sector As mentioned above , United Nations basic data on the public sector are available at www . unpan . org , the web site of the Division for Public Economics and Public Administration , as well as in the World Public Sector Report : Globalization and the State . The data are presented together with an analysis of changes and trends . As such , they represent the only source of basic data on the public sector that follows a defined concept of the public sector and its measurement . A cluster of indicators that measure the public sector “ in fact ” , i. e. , in areas and in ways that are allowed by the availability of internationally comparable statistics , was the starting point of reference . Work has been initiated to make the statistics more up to date . Also , the electronic version will allow for generating country , region and subject-specific reports . The United Nations Statistics Division offers statistical databases online , some of which are available for subscribers only . They are multisectoral and comprehensive , and are effective at presenting a long series of data . But there is no reference to public sector as such . If one approaches those databases with a well-defined concept of the public sector , one can piece a lot of useful information together . Such information can be found , for instance , under codes 14 ( National accounts ) and 15 ( Financial statistics ) . The United Nations Development Programme maintains a database on good governance . Its web site presents “ Stories from the field ” , a useful collection of anecdotal evidence that showcases local initiatives aimed at instilling practices of good governance . No statistical data is available . The Human Development Report web site provides statistics focused on monitoring human development , grouped according to key human capabilities , for example , leading a long and healthy life ; acquiring knowledge ; having access to resources needed for a decent standard of living . Again , while no database is devoted to the public sector per se , with a well defined concept of the public sector in hand one could browse such databases and identify a substantial amount of relevant information . The International Labour Organization maintains a web site of 20 key indicators on the labour market . Data on public sector employment can be found under cluster 4 ( Employment by sector ) . The World Bank features an information-rich web site of its Public Sector Group that is devoted to governance and public sector reform ( GPSRnet ) . From the point of view of the presentation of indicators on the public sector , the most relevant is the web page on administrative and civil service reform . In particular , it provides cross-national data on government employment and wages . But it is acknowledged that systematic comprehensive information on public sector employment and pay is rare and generally controversial . The general World Bank statistical database does not present a cluster of data that is specifically related to the public sector . It offers , inter alia , statistical information on domestic finance ( e. g. , consumption , expenditures , revenues ) ; governance ( e. g. , cross-referenced with GPSRnet on employment and wages ; cross-referenced with the above database on domestic finance ) ; and military expenditure . Again , if that statistical database is searched on the basis of a well defined concept of the public sector , a substantial amount of information can be generated . The International Monetary Fund ( IMF ) maintains the World Economic Outlook Database . One of its sections is devoted to general government fiscal balances and presents data on a national income accounts basis . No cluster of data devoted specifically to measurement of the public sector is available . Finally , the Organisation for Economic Cooperation and Development ( OECD ) programme on public management and governance focuses on institutional development , and on assisting Governments in building and strengthening effective , efficient and transparent administrative structures . It covers the 30 members of OECD . Public sector statistics available through the programme 's web site focus on public sector pay and employment . Other data related to the public sector , especially to expenditures , can be found in OECD publications ( partly available in electronic form ) that deal with national accounts , labour force statistics and general economics . The above overview confirms that apart from the United Nations database on the public sector , there is no other source of information and data solely dedicated to portraying the overall picture of the public sector in the world , measuring its size and major functions . To date , the United Nations database does not generate its own original data but researches available sources . Its value is in bringing all the pertinent information to one place and systematizing it according to an adopted concept . Currently , if for whatever reason an answer to the question “ What is the status of the public sector in the world , its size and impact ? ” were sought , practically the only place where such answer could be found is the United Nations database . That sets it apart and requires continuous thinking and effort in order to ensure the highest possible level of quality . The opportunity for expanding the United Nations database on the public sector The framework of the current concept The concept on which the United Nations database on the public sector has been built is a realistic one . While acknowledging that in theory there are many interesting and useful ways in which the public sector can be looked at , described and analysed , the concept stresses that only some of them are practical since no readily available , reliable and internationally comparable data that could support a broader approach exist . According to the report of the Secretariat on public sector indicators ( ST/SG/AC.6/2000/L.2 ) that constitutes the difference between measuring the public sector “ in theory ” and “ in fact ” . Currently , that approach requires further testing . When one thinks about the measurement of the public sector , three main questions come to mind : ( a ) How big is it ? ( b ) How much does it cost ? ( c ) What do we get from it ? With the growth of the overall interest in the changing role of the State and in its accountability to the public , those questions resonate more and more loudly . And there seems to be a growing demand for more and more precise answers . The five original indicators have gone a long way in giving answers to those questions . Data on government employment and government consumption provide an answer to the first question . Data on tax revenue provide an answer to the second question . And finally , data on government expenditures provide an answer to the third question . However , the provision of more comprehensive answers is possible , even if one stays in the realm of the possible , i. e. , measuring the public sector “ in fact ” . The growing interest in the changing role of government and in accessibility of data about its operation constitutes a trend that is rooted in the increasing integration of the world economy and the information revolution . It is not merely a question of monitoring the adjustment of local structures and institutions towards facilitating the capital and trade flows . It is equally about the increasing ease with which information can be exchanged and with which the demonstration effect can spread the world over . Therefore , the concept of the public sector cannot be treated as being limited to a certain group of countries that have already passed the early stages of government development , i. e. , building the very machinery of government and ensuring greater efficiency and effectiveness of that governmental machinery . It increasingly looks as if countries with deficiencies in government development may have to look for ways to accommodate all three stages of that development at the same time . They may have to put in place the processes of setting up governmental machinery , fine-tuning it for efficiency and effectiveness ; and increasing government accountability by placing citizens in the proper relationship vis-à-vis the government . As to ways in which the government can be measured in a more comprehensive way — to meet the expectations of awakening citizenry — new categories of data can be collected and presented , which concerns especially the second of the three above-mentioned questions , i. e. , “ How much does it cost ? ” The first area of interest concerns the total picture of government revenues . Taxes constitute the prevailing source of government revenues , but they are not by any means the only source of government income . Some of those sources are semi-permanent , such as income from government monopolies . Others , such as income from selling public property — for instance income resulting from privatization programmes — are one-off operations . As long as there are public assets to be sold , those revenues can be significant for the whole picture of government operations , since they may constitute a cushion for irresponsible fiscal policy . Therefore , it seems warranted to expand the United Nations database on the public sector by the following additional indicator : • Total public revenue as percentage of GDP . Governments borrow and increasingly they borrow not only at the central but also at the local levels , especially at the level of municipalities . That in itself is not a negative phenomenon as long as the debt portfolio is managed in a sustainable way . Also , by going to the national and increasingly international market for loans , Governments expose themselves to the scrutiny of the market and subject their finances to ranking , which tells a broader story about the state of affairs as managed by a Government , regardless of whether it is at the central or at the local level . Therefore , it seems warranted to expand the United Nations database on the public sector by the following additional indicators : • Public debt ( total and per capita ) . • Ratio of debt service to recurring revenues . • International ranking of public debt . • Domestic ranking of local debt ( BIS ratio ) . Finally , there are important aspects of government expenditures that should be considered for a more comprehensive presentation of the answer to the question “ What do we get from it ? ” . One is the issue of intergovernmental transfers and the increasingly important phenomenon of local expenditure of centrally collected revenues . Another is the issue of tax expenditures . Two years ago , little data could be found to illustrate that phenomenon . Today , with the pioneering efforts of IMF , several dozen countries make data concerning tax expenditures available in the public domain . Therefore , there is an opportunity to highlight those acts of government fiscal transparency . It seems warranted to expand the United Nations database on the public sector by additional indicators on : • Percentage of total central revenues spent at the local level . • Tax expenditures as a percentage of total tax revenue . One can stop the analysis of the public sector with the effort to capture its fiscal behaviour and the impact of that behaviour . Such an analysis documents the status of a broader contract between the public at large and the Government . It paints a picture of Governments as agents that work on behalf of the society . It shows how well public money and public trust are used to secure the current needs of society , and points to prospects for its future growth and development . If government decisions are right , if there are no principal agent problems , if bureaucratic capture does not prevail — then all that shows on the balance sheet of the cost of the existence of the public administrative machinery and the results of that existence . It shows in the structure and level of government consumption and government expenditures , to the extent that they relate to human capabilities . Dealing with the impact of government regulations and government behaviour As it is rightly pointed out in the report of the Secretariat on public sector indicators ( ST/SG/AC.6/2000/L.2 ) Governments enjoy a monopoly of legitimate force , limited perhaps by democratic tradition , a written constitution or a bill of rights . There is , moreover , an inherent conflict embedded in the concept of government since government is both the formulator of policies and the immediate arbiter of such policies . Their sheer size and political and often economic power make Governments the decisive factor in shaping the type of governance that prevails in societies the world over . Good governance1 does not exist in countries in which Governments do not actively support and practise it , in which they suppress the independence of the judiciary and the rule of law . Also , by regulating and making strategic investments , Governments have the power to lead the development of their economics in a certain direction . It is also axiomatic to claim , when discussing regulations , that Governments are better at formulating policies but are worse in delivery when compared to businesses . That is easily exemplified by the increasing interest in public/private partnerships . However , the regulatory hand of the State should not be unduly heavy since to impose onerous costs on business is equivalent to a tax . Therefore , it is hardly possible to answer the above questions related to the measurement of a government , especially the third one , “ What do we get from it ? ” , without an attempt to capture some of the impact of regulations and the behaviour of Governments . Such broadening of the scope and character of measurement of government would convert the current United Nations basic data on the public sector into a global public sector monitor . Such a monitor must be based on an acceptable concept . In turn , that concept must be supported by a set of well chosen indicators , even if they are proxy indicators . A compelling vantage point is the role that Governments play in formulating and implementing a high-quality response by a society to the challenge of building a knowledge-based society . When one looks into the future today , one appreciates that it will be inhabited , inter alia , by societies that are currently working to make space — changing policies and institutions — for knowledge to become the leading factor that shapes the way in which people work and live . They are moving in the direction of knowledge societies . Such societies rest on K-governance,2 i. e. , on values , institutions , policies and investments ( in human resources and skills ; in concepts , contents and ideas ; in communication and networking ) that provide optimal conditions for knowledge to play the role of the key factor in economic growth and human development . They embrace wireless connectivity and knowledge workers as much as the successful industrial societies formerly embraced the steam engine , electricity , the assembly line , the stock exchange , scientists , engineers and investment bankers . In the centre of that transition are the people with their new capabilities and roles . Their intelligence , augmented by ICT , is becoming the primary source of growth , development and wealth creation , which puts them in the position of the leading factor of production . Unlike physical or financial capital , that new leading factor of production will be capable of relocation based on its own calculation and its own merits . As competition for the most educated and skilled individuals grows , nations and firms will be likely to attune to their demands . They will try to become “ liveable ” by the standards established by the most sought-after individuals.3 Knowledge societies that embrace the proper set of values , especially the value of human solidarity , seem to carry the promise of a new wave of human emancipation , with new opportunities to increase human capabilities in ways that assure quicker , broader and more sustainable progress in human development . That conviction underpins the United Nations decision to create the Information and Communications Technologies Task Force , and it is also behind the call of the United Nations Millennium Declaration for values-based development that rests on good governance , human rights and freedoms , and participatory democracy . Successful knowledge societies are expected to have in the future a demonstration effect in the world as powerful as that which successful industrial societies have today . Many of them will emerge from redesigned industrial societies . But that is not guaranteed . Wherever a society and its government raises to the level of a high-quality response to that new developmental challenge , new concentrations of wealth and power are sure to appear , which has the potential for redrawing the current map of wealth and poverty , economic and political power , and vulnerability in the world . However , ethnic , cultural , religious and national groups are bound to form and are already forming their own assessment and reaction to the new challenge . Interest lobbies are also shaping the process . Resistance or support to following the change may come from various directions as a result of coalitions of various , oftentimes diverse interests . Choices to be made here will have long-term positive or negative consequences . The starting point for the transition — as measured in financial resources , human skills and the prevalence of enabling structures and institutions — matters . So does an enabling international environment and degree of cooperation . And not all in the transition will be rooted in government actions . Business and civil society have an important role to play . But , the process of change is no different than any other process of change . Leadership is one of its indispensable ingredients . It does not even matter that in that changing and by definition chaotic world , centralized , top-down , command-like governance structures are likely to give way to ( ad hoc ) coalitions of broad groups of shared interests , consisting of government agencies , businesses and citizens . In an emerging world of many players , interests and scattered capabilities ( including funding capacities ) , the role of a catalyst , organizer or “ stage manager ” will have to be performed . Governments — central and local — are well positioned to pick up and harness that role . They are equally well positioned to assume a passive or negative role , depending on the coalition of interests and forces that they would represent . Their behaviour in that respect matters . If it does , it is objectively beneficial to measure that behaviour and its impact and to present results of such measurement in the public domain . Among the many possible approaches , it is proposed that the future global public sector monitor focus on five additional areas for data collection and presentation : ( a ) state of the public sphere ; ( b ) knowledge acquisition ; ( c ) web-based platform for work and life ; ( d ) entrepreneurial development ; ( e ) links between the local and global levels . As with the initial attempt to present the basic data on the public sector , describing those areas “ in theory ” is much easier than describing them “ in fact ” . In many cases , data is simply unavailable . In many cases , proxy indicators will have to be used , and in others descriptive situations will have to be used . However , while the choice of indicators can be fine-tuned in time , those five areas seem to represent a key complement to the basic data on the public sector . They tell a fuller story about the government stewardship of the societies that they manage . Maintenance of the public sphere The general value of basing the legitimacy of Governments on well informed public consensus is perhaps most clearly pronounced at the time of change . Sustainable management of change and of the results of change require it . From that point of view , the state of the public sphere , i. e. , the institutional arena of discursive interaction where private persons can debate public matters , is of great interest . A lot of factors play an important role here . Is discussion in the public sphere open and accessible to all ? How does a society deal with bracketing inequalities of status among the participants ? Is the right to participate in such a discussion protected by laws and an independent judiciary ? Is the information about the functioning of the Government available in the public domain in a timely and user-friendly way ? Who owns and controls the means for public discourse ? The state of the public sphere is not sound the world over . Inequalities still matter , and with the retrenchment of the welfare State material means of bracketing them are more and more difficult to come by . The early enthusiasm about the liberating impact of ICT has been more recently lowered by governmental restrictions and by the use by some Governments of the eavesdropping , firewall and geo-locating technologies . And freedom of the privately owned press is too often compromised by collusion between business and government . In addition , the soundness of the public sphere relies often on intangible factors , such as culture . Be this as it may , Governments — through their regulations , investment and behaviour — carry a large share of responsibility for it . Therefore , indicators that describe the state of the public sphere tell a revealing story about the use by Governments of the public trust and public money . For these reasons , it is proposed that the global public monitor collect and present data on : • Ownership ( state , for profit , not for profit ) of newspapers , radio and television stations . • Status of ratification of human rights conventions . • Description of ways in which the government budget is disclosed to the public at large . Knowledge acquisition The real divide in the world should be measured not so much in terms of access to income or access to ICT connectivity but by access to knowledge . The legitimate worry that globalization ( i. e. , integration of the world economy ) is not benefiting all can be rephrased as a legitimate worry about the growing productivity divide . It can also be rephrased as a legitimate worry that knowledge that already exists in the world and could be effectively used to alleviate many grave social problems is not harnessed where it can have the greatest and most needed effect . Without bridging the knowledge divide , the world is bound to continue to be caught in discussions about the feasibility of increasing international financial transfers . The income divide is likely to dominate global politics . And many aberrations that have their roots in the every day realities of marginalization and exclusion will be with us . Naturally , an issue as huge as that is a matter that is best addressed by both national and international activities . However , local systems and local institutions for the creation of original knowledge , for knowledge adoption and adaptation , and for preparing a future cadre of knowledge workers can and should be usefully monitored and measured . It is proposed , therefore , that the global public sector monitor collect and present data on : • School enrolment ratio at all three levels of education ( by gender ) . • Public expenditures on research and development as a percentage of the military budget . • Number of internationally registered patents . • Foreign direct investment ( FDI ) as a percentage of total investments . Web-based platform for work and life Despite the relatively short history of business and social applications of the Internet , it is possible to conclude that it already has and will increasingly have a truly revolutionary impact on how people work and live . It empowers individuals in ways for which little precedence can be drawn from history . It carries the potential of converting them into well informed , knowledgeable individuals . It carries the potential of converting them into socially and politically active , networked individuals . With further improvements in wireless connectivity , it allows those individuals to move around with their personal “ bubble ” of access to information , knowledge and networks , which is increasingly having a profound impact on their capabilities and behaviour in the workplace and many other public and private arenas . ICT skills , connectivity and applications are the three main ingredients needed to enable the full potential of the new technology to be utilized . And while they do not depend solely on the activities of the Government , they are so important for opening new human development opportunities that measuring them at any level of overall development tells an important story about the capacity of the Government to lead and to focus on what matters in terms of future growth and development . A good example here is the debate about the rationale for maintaining a public monopoly on telecommunications . While useful , it has its final resolution in a very objective indicator : the cost of making a long-distance call or the cost of an Internet connection . Therefore , it is proposed that the global public sector monitor collect and present data on : • Infrastructure for wireless , broadband connectivity . • Number of cell phones per 100 population . • Number of Internet hosts per 100 population . • Cost of Internet connection . • E-government applications ( list and description of existing applications , with links to them and/or e-government index ) . Entrepreneurial development Entrepreneurial development is about individual freedom , the productive utilization of skills and knowledge and raising the overall quality of life by offering the public a better choice of goods and services . It is also about developmental sustainability and security . Moreover , it serves to strengthen democracy by developing and sustaining a middle class of citizenry . A society that has organized itself for easy business incorporation is a society that allows its citizens to undertake many experiments in satisfying the needs of consumers . Since no one can foresee the future with any certainty , an economy that is based on only few businesses is bound to be less flexible in adaptation to the opportunities and requirements of the future . The knowledge-based society aims to generate an increased number of ideas and applications of those ideas . Creating the conditions for easy , low-cost start-up of businesses represents a logical supplement to the ever-expanding pool of marketable ideas . A lot depends in this area on government regulations of a broad scope of business-augmenting activities , from regulation of the financial markets to regulation of the bankruptcy courts . Eventually , it demonstrates itself in people 's ability and willingness to engage their own capabilities and often their own funds into starting a business enterprise . It is proposed therefore that the global public sector monitor collect and present data on : • Number of steps needed for business incorporation . • Number of new businesses as a percentage of existing ones . Links between the local and the global Finally , knowledge-based societies will live in a framework of an integrating world , with the economy constituting perhaps the strongest net of integration . Knowledge multiplies best in knowledge-rich environments . With the help of modern telecommunication , those can be found globally as easily as locally . And market size matters when a marketable idea is converted into a business activity . The ability of the local environment to attract and keep from the global pool of savings is also a sign — among others — of good public stewardship . The same applies to people . Although the integration trends in the world seem unstoppable now , monitoring and measuring the direction and the quality of flows between the local and global environments can provide a useful indication of the soundness of the overall regulatory framework that has been put in place by local governments . Therefore , the following indicators seem useful : • Foreign trade as a percentage of GDP . • Net labour migration as a percentage of population . Recommendations Based on the above analysis , it is recommended that : ( a ) Basic data on the public sector should be presented in a more comprehensive form and , in addition to the current five basic indicators , should include the following indicators : • Total public revenue as a percentage of GDP . • Public debt ( total and per capita ) . • Ratio of debt service to recurring revenues . • International ranking of public debt . • Domestic ranking of local debt ( BIS ratio ) . • Percentage of total central revenues spent at the local level . • Tax expenditures as percentage of total tax revenue . ( b ) Basic data on the public sector should evolve into the global public sector monitor ; ( c ) The concept of that evolution should be based on collecting data that illustrate government regulations and behaviour , as they relate to the transition to a knowledge-based society ; ( d ) Data on government regulations and behaviour — as they relate to the transition to a knowledge-based society — should pertain to the following five areas : ( i ) maintenance of the public sphere ; ( ii ) knowledge acquisition ; ( iii ) web-based platform for work and life ; ( iv ) entrepreneurial development ; and ( v ) links between the local and the global ; ( e ) The new indicators should include : • Ownership ( State , for profit , not for profit ) of newspapers , radio and television stations . • Status of the ratification of human rights conventions . • Description of ways in which the government budget is disclosed to the public at large . • School enrolment ratio at all three levels of education . • Public expenditures on research and development as percentage of military budget . • Number of internationally registered patents . • FDI as a percentage of total investments . • Infrastructure for wireless , broadband connectivity . • Number of cellphones per 1,000 population . • Number of Internet hosts per 1,000 population . • Cost of Internet connection . • E-government applications ( list and description of existing applications with links to them ) . • Number of steps needed for business incorporation . • Number of new businesses as a percentage of existing ones . • Foreign trade as a percentage of GDP . • Net labour migration as a percentage of the population . Notes 1 While discussing governance , the process by which a society steers itself , the participants of the Global Knowledge II Conference , held in Kuala Lumpur in March 2000 , agreed on the following characteristics of “ good governance ” : it must be based on values , human rights and freedoms and the rule of law . It must be unified by the attractiveness of the development vision that it formulates and represents . It must be social consensus-seeking , non-divisive , supportive of peaceful coexistence and cooperation . It must be responsive to well informed , knowledgeable citizens . It must be focused on its goal , i. e. , serving the well-being of all stakeholders . It must be participatory and interactive , inclusive , providing open access and effective ownership to all stakeholders . It must be representative , i. e. , allowing regular renewal of leadership . It must be useful by being effective , responsive and flexible , and able to react quickly , and evolve in its modes of operation . It must be equitable in burden-sharing and distributing access to opportunities and resources ( including information and knowledge ) . In must be cost-efficient . It must be transparent and accountable , based on open access to information about its functioning . And finally , it must be consistent in all its characteristics at all levels — local , national and global . 2 It is important to distinguish the difference and discuss the relationship between ( a ) good governance ( G-governance , as defined in footnote 1 ) ; ( b ) governance that enables the creation and functioning of a knowledge-based society ( K-governance ) ; ( c ) application of information and communication technology ( ICT ) to the many processes through which power is executed in a society ( E-governance ) ; and ( d ) application of ICT to the operations of the governmental machinery ( E-government ) . Although it is true that the presence of greater amounts of knowledge and ICT capabilities in key areas of human activities triggers processes that amplify the desirable characteristics of governance , “ E-governance ” and “ E-government ” do not by themselves guarantee the achievement of a higher level of human development . They facilitate activities aimed at implementation of policies : it is the content and intended effect of those policies and activities that determines if they eventually measure up to the standards of G-governance , one that objectively serves human development , expands human opportunities and choices . Similarly , K-governance cannot be automatically equated with G-governance . It merely opens space for knowledge to become a decisive resource in the life of a society . By itself , it does not deal with exclusion , intolerance or lack of human solidarity . Only the goal of human development for all that is rooted in proper values would bring K-governance close to the ideal of G-governance . 3 Those standards are difficult to predict today . However , it is safe to assume that they will be likely to include peace ; human rights and freedoms ; non-discrimination and a culture of tolerance ; the rule of law and an independent judiciary ; open and accessible participation in the political process ; transparency , responsiveness , effectiveness and efficiency of public administration ; institutions that guarantee low-cost accessibility to health care , lifelong education , ICT , local and global markets and social safety nets capable of supporting the retooling of skills ; and a clean natural environment . The values of those individual elements will determine how broadly the conditions of “ liveability ” will spread to other sectors of society and to other countries and regions of the world . </text>
<text id="un/E_CN17_2002_PC2_19">
Commission on Sustainable Development acting as the preparatory committee for the World Summit on Sustainable Development Second session 28 January-8 February 2002 Agenda item 1 Adoption of the agenda and organizational matters Letter dated 27 January 2002 from the Permanent Representative of China to the United Nations addressed to the Secretary-General I have the honour to transmit to you herewith the position paper of China : No accreditation of the International Campaign for Tibet to the World Summit on Sustainable Development ( see annex ) . I would be grateful if you could have the present letter and its annex circulated as a document of the Commission on Sustainable Development acting as the preparatory committee for the World Summit on Sustainable Development under agenda item 1. ( Signed ) Wang Yingfan Ambassador and Permanent Representative of the People 's Republic of China to the United Nations Annex to the letter dated 27 January 2002 from the Permanent Representative of China to the United Nations addressed to the Secretary-General China 's position paper : No accreditation of the International Campaign for Tibet to the World Summit on Sustainable Development The World Summit on Sustainable Development is an international conference of crucial importance in the field of sustainable development . The Chinese Government attaches great importance to the Summit and has always been actively engaged in the preparatory process for the Summit . The Chinese Government appreciates the active role of non-governmental organizations in the field of sustainable development and welcomes their participation in and contributions to the Summit . However , the International Campaign for Tibet , as listed in the Secretary-General 's note on accreditation of non-governmental organizations and other major groups to the World Summit on Sustainable Development ( E/CN.17/2002/PC.2/16 ) , is an organization whose primary objective is to split Tibet from China . All its main activities have been conducted with a view to achieving this primary objective . Referring to decision 2001/PC/3 , adopted at the organizational session of the Commission on Sustainable Development acting as the preparatory committee for the World Summit on Sustainable Development , China firmly opposes granting accreditation to the International Campaign for Tibet to take part in the World Summit on Sustainable Development and its preparatory process . This is a matter of principle to the Chinese Government . Tibet is an inalienable part of China . This is an indisputable fact recognized by all countries in the world . However , the International Campaign for Tibet denies the fact and treats Tibet as an independent State and openly advocates that Tibet is now under “ Chinese invasion ” , “ Chinese occupation ” and even “ Chinese colonial rule ” . Maintaining sovereign territorial integrity is one of the principles enshrined in the Charter of the United Nations . It is very clear that the objective and splittist activities of the International Campaign for Tibet constitute not only an infringement upon the sovereignty and territorial integrity of China but also a violation of the purposes and principles of the Charter of the United Nations . The International Campaign for Tibet is closely associated with the so-called “ Tibetan government-in-exile ” . The “ Tibetan government-in-exile ” has for a long time devoted itself to splitting Tibet from China and it has never been recognized by any country . Ever since its establishment , the International Campaign for Tibet has been identifying itself with the position and views of the “ Tibetan government-in-exile ” . The main purpose of its activities is to spread and implement policies and schemes formulated by the “ Tibetan government-in-exile ” . The special relationship of the International Campaign for Tibet with the “ Tibetan government-in-exile ” clearly demonstrates its objective of splitting Tibet from China . China is a united multiethnic State . Equality and unity have always been the fundamental principles adopted by the Chinese Government for harmonizing relations among all Chinese ethnic groups . During the second half of the twentieth century , universally acknowledged achievements have been made in political , economic , social and cultural aspects in regions where there are large populations of ethnic minorities , including in Tibet . Out of its objective of splitting Tibet from China , the International Campaign for Tibet has been misleading the international community with all kinds of tricks . The International Campaign for Tibet turns a blind eye to all the achievements made by the Chinese Government . It has organized a series of activities against China and slandered Chinese ethnic policies using distortions and fabrications . It has also tried every means to create obstacles to hinder the economic and social development of Tibet . Moreover , although China has been giving strong and firm support to the international counter-terrorism campaign after the terrorist attacks of 11 September , the International Campaign for Tibet still wantonly makes the accusation that “ China today has established state terrorism ” . This clearly demonstrates its anti-China character . For the above-mentioned reasons , the International Campaign for Tibet should not be allowed to participate , in whatever name and under whatever pretext , in any United Nations activities . Accreditation of such an organization to the World Summit on Sustainable Development will undermine the cooperative atmosphere , normal proceedings and the ultimate success of the Summit . The Chinese Government urges the preparatory committee for the World Summit on Sustainable Development to reject the application of the International Campaign for Tibet for accreditation and calls for the understanding and support of all delegations in this regard . </text>
<text id="un/E_CN3_2003_25">
Statistical Commission Thirty-fourth session 4-7 March 2003 ** Official Records of the Economic and Social Council , 2002 , Supplement No. 4 ( E/2002/24 ) , para . 80 ( c ) and ( d ) . Item 6 ( e ) of the provisional agenda* Activities not classified by field : coordination and integration of statistical programmes Report of the inter-agency meeting on coordination of statistical activities Note by the Secretary-General The Secretary-General has the honour to transmit to the Statistical Commission the report of the inter-agency meeting on coordination of statistical activities , held in New York from 17 to 19 September 2002. The report is transmitted in accordance with a request of the Commission at its thirty-third session . ** In response to the request of the Commission to develop a new system for effective coordination given that the Administrative Committee on Coordination Subcommittee on Statistical Activities had been disbanded as at 31 December 2001 , the meeting participants decided to establish a Committee for the Coordination of Statistical Activities , the functioning of which is set out in section L and annex IV below . The Commission may wish to take into account in its discussion under relevant agenda items the views expressed at the meeting . A list of the relevant agenda items and paragraphs of the present report follows : Report of the inter-agency meeting on coordination of statistical activities Contents Introduction The inter-agency meeting on coordination of statistical activities was held in New York from 17 to 19 September 2002. The agenda is contained in annex I below , the list of participants in annex II and the list of documents in annex III . Work of the inter-agency meeting on coordination of statistical activities Opening of the meeting In opening the meeting , Hermann Habermann , Director of the Statistics Division of the Department of Economic and Social Affairs , explained that the Division had called the meeting because the Statistical Commission had stressed the need for international organizations to strengthen the coordination of their statistical activities and had requested the international organizations to develop a new system for effective coordination , given that the Administrative Committee on Coordination ( ACC ) Subcommittee on Statistical Activities had been disbanded as at 31 December 2001. Furthermore , he noted that consultations among chief statisticians from the United Nations agencies and international organizations had shown that there was broad support for holding such a meeting . He informed representatives of international agencies that the report of the meeting would be presented to the Statistical Commission . Moreover , matters that required the attention of the United Nations System Chief Executives Board for Coordination ( CEB ) or policy guidance would be presented to the CEB High-level Committee on Programmes . Election of the Chairman Andrew Flatt of the Economic and Social Commission for Asia and the Pacific ( ESCAP ) was elected as Chairman of the meeting . C. Adoption of the agenda The meeting participants adopted the agenda as set out in annex I. Treatment of unfinished business of the former Subcommittee on Statistical Activities It was decided at the meeting that the following two subjects were important and should be included in any future work plan that might be developed : ( a ) Good citation practices in the outputs of international statistical offices ( United Nations Educational , Scientific and Cultural Organization ( UNESCO ) ) ; ( b ) The collection of disaggregated statistics by international organizations ( including the uses of disaggregated statistics and the reporting burdens on countries ) ( United Nations Children 's Fund ) . E. Improving the quality of data used for indicators for the millennium development goals and targets The oral report presented by the Special Adviser to the Secretary-General on the global reporting process for the millennium development goals was welcomed . Some agencies expressed concern regarding the selection and relevance of the indicators for some targets , especially in areas where data quality and availability were a serious problem ; in particular , some agencies voiced concern that real change in the indicators would be confounded with changes resulting from revisions and improvements of the data . The problem would be particularly acute when examining annual differences . The meeting participants stressed the importance of building national capacity in order for countries to be able to produce the data necessary for national monitoring of the millennium development goals and to provide data to the international community for global monitoring . Various participants in the meeting stated that the coordinated process led by the Statistics Division for the completion of the 2002 report on the millennium development goals had been successful and that its momentum should be maintained . The meeting supported the idea of having further inter-agency expert group meetings to ensure full participation and effective coordination among partner agencies . The meeting took note of the Division 's concern about the need for global reporting to be based on common regional groupings . Agencies designated to provide data on millennium development goal indicators reconfirmed their willingness to provide regional figures on the basis of the Standard Country or Area Codes for Statistics Use1 to the extent possible . Agencies also agreed on the importance of comprehensive authoritative metadata in the presentation of indicators . Issues relating to the assessment of the quality of statistical data in developing countries The meeting took note of the report prepared by the Food and Agriculture Organization of the United Nations ( FAO ) on the quality of statistical data in developing countries and shared experiences regarding the agency 's efforts to improve reporting and the quality of those data . The following issues were highlighted : ( a ) The need to develop close partnerships between international agencies and reporting national offices ; ( b ) The need to continue efforts to request and standardize metadata information ; ( c ) The need to improve coordination among national agencies involved in data reporting using mechanisms such as the General Data Dissemination System ; ( d ) The need to strengthen statistical capacity to produce better data for users at the national and international levels ; ( e ) The need to improve the transfer of technology to facilitate the flow of data at lower cost for both countries and international organizations . The meeting took note of the use of incentives by international organizations for the collection of national data , however , it expressed concern at the demands by some countries for payment in exchange for data . Quality assurance for statistics in international statistical services The meeting welcomed the comprehensive analysis of this topic contained in the paper presented by the Organisation for Economic Cooperation and Development ( OECD ) . Several international agencies shared their experiences with quality assurance procedures , indicating that most discrepancies between national and international figures as well as between international sources are explainable , as they are often the result of different methods of compilation and estimation . However , the meeting agreed that more transparency about all methods applied is needed , and agencies committed themselves to reviewing , in particular , their web pages accordingly , making their own corporate quality assessment procedures more transparent . In this context , it was also noted that international organizations made frequent use of , and should in fact adhere to , the Fundamental Principles of Official Statistics . While the exchange on quality assurance was considered useful , it was recognized that there were limits to harmonizing such procedures across agencies , although the meeting welcomed joint activity in this area between the International Monetary Fund ( IMF ) and the Statistical Office of the European Communities ( EUROSTAT ) and encouraged other agencies to adopt consistent terminology and concepts to the extent possible . H. Reducing duplication of data collection from countries The meeting took note of the oral update given by the Deputy Director of the Statistics Division on steps undertaken to address the specific concerns raised by some Member States on duplication of data collection . All agencies involved , in particular lead agencies designated for a particular problem area , assured the Division of their full cooperation in the preparation of a comprehensive report on this issue for the thirty-fourth session of the Statistical Commission , to be held in 2003. Coordination of data sets disseminated by different organizations covering the same subject matter International agencies shared their experiences with joint data collection and common data sets . It was recognized that the examples mentioned in the note by the Statistics Division ( SA/2002/8 ) were indeed examples of problem areas . Access to water and sanitation , exchange rates and child mortality data were cited as further examples where discrepancies existed . There was agreement that discrepancies in disseminated data series are best addressed and solved on a bilateral or trilateral basis with the directly concerned parties involved . Therefore , while not concurring with the specific suggestions for action made in paragraph 4 of the document , the meeting participants agreed that this was an important item that should remain on the agenda . J. Coordination in the field of health statistics The meeting welcomed the oral presentation made by the World Health Organization ( WHO ) on its ongoing initiatives , including consultations with countries to improve the validity and reliability of measures , the strengthening of data reporting , providing countries with new tools for measurement , the launching of the World Health Survey and the strengthening of vital registration systems . The meeting participants expressed concern about the overlap of the World Health Survey programme with other ongoing survey initiatives at the international and national levels . It also raised questions about the sustainability of the programme at the country level . The meeting recognized the existing problem of coordination at the country level , where WHO works with its mandated counterpart , the Ministry of Health , with little involvement of the national statistical office , and welcomed the intention of WHO to improve in-country coordination . The meeting also emphasized the need to improve the exchange of information on health statistics at the international level and welcomed the intention of WHO to intensify cooperation between agencies in this area . In particular , WHO agreed to designate a focal point on statistical matters and to attend the meeting of the EUROSTAT Task Force on Health and Health-related Interview Survey Data on 2 and 3 October 2002. Information items Major new initiatives planned by organizations The meeting took note of new initiatives planned by IMF , FAO , the United Nations Conference on Trade and Development ( UNCTAD ) and the United Nations Human Settlements Programme ( UN-Habitat ) , as highlighted in the reports submitted by the respective bodies ( SA/2002/10 and Add . It also took note of oral presentations under this item , in particular : ( a ) The description by OECD of the glossary of statistical terms currently being developed ; ( b ) The initiatives of UNESCO regarding statistics in the areas of science , culture , telecommunications and education , with a focus on improving data on early childhood and informal education ; ( c ) The development of a methodological framework for “ decent work ” by the International Labour Organization ( ILO ) . Issues related to the work of the task forces and intersecretariat working groups The meeting took note of the reports submitted by the Task Force on Finance Statistics and the Task Force on International Trade Statistics , as well as by the Intersecretariat Working Group on Price Statistics . In particular , the meeting was informed that the Task Force on Finance Statistics was putting forward proposals for further methodological work . The meeting also took note of the oral reports presented by the Task Force on Statistics of International Trade in Services and the Intersecretariat Working Group on National Accounts , in particular its intention to review the current procedures for updating the 1993 System of National Accounts . Programme review of service statistics for the Statistical Commission , 2003 The meeting welcomed the progress report on the review of service statistics , which was prepared by OECD with input from the Australian Bureau of Statistics . It shared the concern of the authors about the underrepresentation of developing countries in the Voorburg Group . It also considered such proposals as increasing sponsorship of developing country representatives in Voorburg Group meetings , holding such meetings in developing countries , inviting comments on draft recommendations and guidelines , to be located on the web site , and involving existing regional statistical committees . Those proposals were considered useful in strengthening the participation of developing countries in any city group . Coordination of development indicators in the context of follow-up to major United Nations conferences and summits The meeting took note of the activities of the Statistics Division to follow up on the recommendations of the Statistical Commission on development indicators , in particular the formation of a standing advisory committee of national experts . Other matters relating to the Statistical Commission The meeting noted that , under other agenda items , the necessary collaboration on preparations for the thirty-fourth session of the Statistical Commission had been covered , namely , work on national accounts , international merchandise trade statistics , statistics of international trade in services , programme review of services , finance statistics , price statistics , coordination of development indicators and duplication of requests to countries for statistics . The meeting received an update on the work on the International Comparison Programme and on plans for an expert group meeting on the scope of social statistics and the expected reporting on those subjects to the Statistical Commission . With respect to follow-up of the thirty-third session of the Statistical Commission , the meeting noted that any necessary collaboration had been carried out and had been covered under this and other agenda items of the meeting . The meeting agreed to propose the inclusion in the multi-year programme of work of the Statistical Commission in 2004 , an item entitled “ Guidelines on the presentation of statistical data , especially on the Internet ” , and accepted an offer by OECD to do the preparations for the item , including : ( a ) preparing an oral statement on the issue at the 2003 session of the Statistical Commission ; ( b ) obtaining input from countries in 2003 ; ( c ) preparing a draft document for submission to the Committee for the Coordination of Statistical Activities in 2003 ; and ( d ) preparing a document for the Statistical Commission in 2004. Consultative Seminar on Governance of National Statistical Systems The meeting was briefed by IMF on the major conclusions of the Consultative Seminar on Governance of National Statistical Systems ( Singapore , 28-30 May 2002 ) , and it agreed to consider at a future meeting the issue of how international agencies can support countries in their efforts to establish effective statistical governance systems . Statistical Data and Metadata Exchange initiative The meeting took note of the Statistical Data and Metadata Exchange initiative sponsored by six organizations ( the Bank for International Settlements , the European Central Bank , EUROSTAT , IMF , OECD and the Statistics Division ) , to maintain and if necessary develop new electronic standards for their data exchange . It welcomed the invitation of IMF for interested agencies to participate in this dialogue . It agreed on the necessity to consider the item further at its future meetings . How to organize the future coordination of statistical activities The meeting noted that the High-level Committee on Programmes and the Statistical Commission had recognized the need for continuing coordination of statistical activities following the discontinuation of the ACC Subcommittee on Statistical Activities as from 31 December 2001. The meeting endorsed the conclusions of the consultative meeting that was held on 7 March 2002 among the international organizations that were present at the Statistical Commission . Those conclusions were as follows : ( a ) There was a strong continuing need for coordination of international statistical work ; ( b ) The coordination work would involve meetings , but would be driven more by needs rather than proceeding according to a fixed schedule ; ( c ) A better job could be done on coordination , especially by focusing on emerging issues requiring coordination and follow-up of decisions to ensure that action is taken . The meeting decided to establish a Committee for the Coordination of Statistical Activities , the terms of reference of which are set out in annex IV , with comments and changes as follows : ( a ) An additional objective of the Committee should be “ to foster good practices in the structuring and programming of statistical activities in the international organizations ” ; ( b ) The participation of the directors of statistical services or equivalent in the Committee 's meetings was considered particularly important for the effectiveness of the Committee 's work ; ( c ) Work done on coordinating activities between meetings and follow-up of decisions are important elements of the work of the Committee , and this work should be reflected in the reports of the Committee to the Statistical Commission ; ( d ) The formal meetings provide an excellent opportunity for bilateral and multilateral discussions and networking , and time should be set aside in the meeting schedule for such activities ; ( e ) The Committee should strive for efficiency and effectiveness in its work and should adopt a strong proactive approach to its work ; ( f ) In principle , it is expected that there will be an annual meeting , but advantage will be taken of the annual session of the Statistical Commission to bring the Committee together to consider any issues that need to be considered at that time and to reconsider the proposed agenda and need for the next scheduled Committee session ; ( g ) All documents for the meetings should be distributed well in advance of the meetings ; ( h ) The secretariat should contact the lead organizations well in advance of a meeting of the Committee to remind them of commitments made ; ( i ) The reports of the meetings of the Committee should specify the lead organizations that are responsible for action and follow-up . The meeting requested the Statistics Division to prepare terms of reference in line with those comments and changes for the Committee to review . The meeting agreed that the Committee should meet from 9 to 11 September 2003 and adopted a provisional agenda for the meeting ( annex V ) . It also accepted an offer from ILO to host the meeting . In line with paragraph 26 ( f ) above , the meeting decided that the Committee would also meet in New York at 4 p. m. on Monday , 3 March ( the day prior to the start of the Statistical Commission ) , and requested the secretariat to distribute the provisional agenda for the September meeting prior to that date so as to facilitate consideration of the agenda as well as the need for the session to be held as scheduled . In line with annex IV , paragraph 6 , the meeting elected Andrew Flatt of ESCAP as Chairman of the Committee for a period of two years . Notes 1 Standard Country or Area Codes for Statistics Use ( United Nations publication , Sales No. E.98 . XVII.9 ) ; also available on the Internet at http://unstats.un.org/unsd/methods/m49/m49.htm. Annex I Agenda of the Inter-Agency Meeting on Coordination of Statistical Activities ( 17-19 September 2002 ) Opening of the Meeting . Election of Chairman . Adoption of the agenda . Treatment of any unfinished business of the Administrative Committee on Coordination Subcommittee on Statistical Activities . Improving the quality of data used for indicators for the millennium development goals and targets : ( a ) Improvement of the general process ; ( b ) Harmonization of regional definitions ; ( c ) Coordination of global surveys ; ( d ) Conceptual and methodological issues . Issues relating to the assessment of the quality of statistical data in developing countries . Quality assurance for statistics in international statistical services . Reducing duplication of data collection from countries . Coordination of data sets disseminated by different organizations covering the same subject matter . Coordination in the field of health statistics . Information items : ( a ) Major new initiatives planned by organizations ; ( b ) Issues related to the work of the task forces and inter-secretariat working groups ; ( c ) Programme review of services statistics for the Statistical Commission for 2003 ; ( d ) Coordination of development indicators in the context of follow-up to major United Nations conferences and summits ; ( e ) Other matters relating to the Statistical Commission ; ( f ) Singapore Consultative Seminar on Governance ; ( g ) Statistical Data and Metadata Exchange Initiative . How to organize the future coordination of statistical activities . Other business . Report of the Meeting . Annex II List of participants United Nations entities and programmes Department of Economic and Social Affairs Statistics Division Hermann Habermann Willem F. M. De Vries Mary Chamie Cristina Hannig Robert Johnston Richard Roberts Stefan Schweinfest ( Secretary ) Population Division Larry Heligman Division for Sustainable Development Anne Kerr Executive Office of the Secretary-General Michael Doyle Economic Commission for Europe Lidia Bratanova Economic and Social Commission for Asia Andrew Flatt ( Chairman ) and the Pacific United Nations Conference on Trade and Henri Laurencin Development United Nations Development Programme Haishan Fu Tom Griffin United Nations Environment Programme Ashbindu Singh United Nations Human Settlements Programme Guenter Karl United Nations Children 's Fund Gareth Jones Tessa Wardlaw United Nations Population Fund Iqbal Alam Specialized agencies and related organizations International Labour Organization Sylvester Young Food and Agriculture Organization of the Robert Mayo United Nations United Nations Educational , Scientific Denise Lievesley and Cultural Organization Jose Pessoa World Health Organization Chris Murray World Bank Shaida Badiee International Monetary Fund Carol Carson United Nations Industrial Development Tetsuo Yamada Organization Other international and non-governmental organizations Organisation for Economic Cooperation and Denis Ward Development Statistical Office of the European James Whitworth Communities World Tourism Organization Antonio Massieu World Trade Organization Roslyn Jackson Inter-State Statistical Committee of the Mikhail A. Korolev Commonwealth of Independent States Annex III List of documents Annex IV Notes on a proposed inter-agency Committee for the Coordination of Statistical Activities The inter-agency Committee for the Coordination of Statistical Activities was established on ( date ) by the ( establishing authority ) . Its objectives , which it takes over from the former Administrative Committee on Coordination ( ACC ) Subcommittee on Statistical Activities ( ( a ) , ( b ) and ( c ) below , modified by ( d ) below ) are : ( a ) To promote coordination , integration and complementarity among the statistical programmes of the international organizations , including the avoidance of duplication , and reduction in reporting burdens on Member States , and to promote coordination and consistency in statistical practices and development ; ( b ) To provide coordinated preparations for the treatment of statistical issues in intergovernmental meetings , including the Statistical Commission , and coordinated follow-up of decisions of the intergovernmental bodies , thus providing a responsive focus for addressing the needs of Member States ; ( c ) To achieve , through the coordination activity , an integrated system in the collection , processing and dissemination of international statistics by promoting the coordination of the international statistical system , including technical cooperation in statistics , and to facilitate the use in Member States of internationally agreed concepts , definitions , recommendations and classifications of different international organizations by coordinating the work on methodological development and promoting harmonization of the methodologies in various fields of statistics ; ( d ) Within the above framework , to focus on emerging issues requiring coordination and follow-up of decisions to ensure that action is taken . The members of the Committee comprise all members and observers of the former ACC Subcommittee on Statistical Activities , namely , the United Nations Statistics Division , the regional commissions , the United Nations programmes and funds , the specialized agencies and related organizations , certain non-United Nations intergovernmental organizations ( the Organisation for Economic Cooperation and Development , the Statistical Office of the European Communities , the Interstate Statistical Committee of the Commonwealth of Independent States , the World Tourism Organization and the World Trade Organization ) , regional development banks and the International Statistical Institute . Other organizations can participate by invitation . Representation in the Committee is normally at the level of director of an organization 's statistical service or equivalent . The Committee functions on a task-oriented basis using lead agency arrangements . The Committee meets on an ad hoc basis as required by circumstances , usually for two and half days , but the decision to hold meetings and their length is driven by substance and needs , not by schedule . The Committee elects a Chairman who serves for a two-year period and is eligible for re-election for a second two-year term . The Statistics Division is the permanent secretariat . A decisions- and actions-only report is prepared for adoption at the end of each meeting ; the report is made available to the United Nations Statistical Commission and , if necessary or desirable , the report is referred to the High-level Committee on Programmes of the United Nations Chief Executives Board for Coordination . 6 August 2002 Annex V Proposed agenda for the first meeting of the Committee for the Coordination of Statistical Activitiesa Opening of the meeting . Adoption of the agenda . Terms of reference of the Committee ( Statistics Division ) . Draft guidelines on the presentation of statistical data , especially on the Internet ( Organisation for Economic Cooperation and Development ) . Good citation practices in the outputs of international statistical offices ( United Nations Educational , Scientific and Cultural Organization ) . Statistical data and metadata exchange Initiative ( International Monetary Fund ) . Improving the quality of data used for indicators for the millennium development goals and targets ( Statistics Division ) . Coordination of data sets disseminated by different organizations covering the same subject matter ( Statistics Division ) . Collection of disaggregated statistics by international organizations ( United Nations Children 's Fund ) . Harmonization of base years for index numbers ( United Nations Conference on Trade and Development ) . Strengthening governance of statistical systems ( International Monetary Fund ) . Information items : ( a ) Major new initiatives planned by organizations ( all ) ; ( b ) Issues related to the work of the task forces and inter-secretariat working groups ( conveners ) ; ( c ) Other matters relating to the Statistical Commission ( Statistics Division ) . Other business . Report of the meeting . a The agency responsible for preparing background documentation is indicated in brackets . </text>
<text id="un/E_CN4_2003_G_12">
Fifty-ninth session Item 8 of the provisional agenda QUESTION OF THE VIOLATION of Human Rights IN THE OCCUPIED ARAB TERRITORIES , INCLUDING PALESTINE Letter dated 28 October 2002 from the Permanent Observer for Palestine to the United Nations Office at Geneva addressed to the United Nations High Commissioner for Human Rights The Israeli occupation forces continue to escalate their campaign of terror , State sponsored terrorism , wilful killings , shelling of and incursion into Palestinian areas , razing of agricultural land and all other forms of human rights violations against the Palestinian people in the occupied Palestinian territory . On Friday , 25 October , Israeli occupation forces reoccupied the northern West Bank City of Jenin and its refugee camp , terrorizing some 250,000 people on whom a tight curfew was imposed . At least 40 tanks , jeeps and armoured personnel vehicles rumbled into Jenin and its refugee camp , in an invasion , code-named “ Operation Vanguard ” . Israeli machine-gun fire crackled in the air after hundreds of Israeli soldiers and tanks rumbled into the city just before dawn . Israeli occupation soldiers were shooting at anyone they saw on the streets , as they carried out a house-to-house search , with the Israeli army enforcing the curfew . In the city centre electric poles were uprooted , cars smashed by tanks and trenches dug on Jenin 's main access roads . The top floors of more than 40 homes were seized by Israeli troops , and inhabitants were forced to take refuge in the lower storeys or in the open air . Men were rounded up for questioning at gunpoint , and some of them were taken away by the army to unknown destinations . In the meantime , Israeli bulldozers rolled into the town and camp guarded by tanks , demolishing houses belonging to Palestinian civilians and damaging several others . Most of the Jenin refugee camp was almost totally levelled . Acting in violation of international law and humanitarian law , both of which prohibit collective punishment , Israeli forces demolished 15 more Palestinian houses in Al-Jiftlek area near the West Bank City of Jericho , claiming that they were built without licenses . On Thursday , 24 October , a 13-year-old Palestinian child from Jenin was killed by machine-gun fire from an Israeli tank . Ahmad Jafar died after being hit in the chest , as around 20 Israeli vehicles invaded the town . The incursion of the Israeli occupation forces into Jenin and its refugee camp is a continuation of the crimes perpetrated by the occupation army and Jewish settlers against the Palestinian people and their infrastructure , in defiance of all United Nations pertinent resolutions and in flagrant violation of international law , international humanitarian law and the Fourth Geneva Convention relative to the Protection of Civilian Persons in Time of War . Furthermore , Israeli forces had maintained the total siege imposed on the occupied Palestinian territory , collectively punishing the Palestinian population . They partitioned Palestinian areas , transforming them into cantons , and violated the economic , social and cultural rights of the Palestinian population . Recently , three Palestinian patients died at Israeli military checkpoints and border crossings while on their way to hospitals to receive medical treatment . In an attempt to destroy the Palestinian economy as the olive picking season starts , Israeli settlers , in utter impunity and under the full protection of the Israeli armed forces , continue to attack farmers harvesting their olive crops , damaging and burning olive trees . On 21 October , Israeli forces issued a military order prohibiting Palestinian farmers from olive-picking . They also razed large areas of Palestinian agricultural land in the West Bank and the Gaza Strip . In a new racist decision , the Israeli authorities imposed a ban on digging new wells in Palestinian areas , in an apparent attempt to damage the Palestinian agricultural sector . We reiterate our appeal to your Excellency to call on the Government of Israel to put an end to its aggression and attacks against innocent Palestinian civilians , to halt the destruction of Palestinian infrastructure and to live up to its obligations under international humanitarian law , and also to use your good offices in order to provide international protection for the defenceless Palestinian civilian population until Israel withdraws from all the occupied Palestinian territories . I would be most grateful if you could arrange to have this letter and the annex thereto* circulated to the distinguished members of the Commission on Human Rights , as an official document of its fifty-ninth session under agenda item 8. ( Signed ) : Nabil RAMLAWI Ambassador Permanent Observer * Reproduced as received , in the language of submission only . Annexed pages 3-13 for offset . </text>
<text id="un/E_CN4_2004_G_21">
COMMISSION ON HUMAN RIGHTS Sixtieth session Agenda item 8 QUESTION OF THE VIOLATION OF HUMAN RIGHTS IN THE OCCUPIED ARAB TERRITORIES , INCLUDING PALESTINE Letter dated 8 March 2004 from the Permanent Observer for Palestine to the United Nations Office at Geneva addressed to the Acting High Commissioner for Human Rights The Israeli occupation forces are persisting with the violent and bloody military campaigns they have been waging in the Occupied Palestinian Territories , including East Jerusalem . The Israeli occupation forces perpetrated yesterday , Sunday , 7 March , another bloody massacre in the centre of Gaza , killing 15 Palestinians , including children , among them 7-year-old Yousef Abdullah Younes , a 15-year-old boy named Mohammad Ali Badawi and 12-year-old Mohammad Amer Abu Zureik , and wounding at least 85 others , 15 seriously , during a deadly invasion of the poverty-stricken and densely populated Gaza Strip refugee camps of Al-Nusseirat and Al-Burreij . Dozens of Israeli tanks and armoured vehicles , backed by Apache attack helicopters , stormed the two refugee camps under a barrage of heavy fire on people and their property causing death to Palestinian civilians , including children . The massacres that the Israeli Government and the Israeli occupation forces are committing against the Palestinian people are no less savage and cruel than the Sabra and Shatila , Qibia , Khan Yunis and Nahalin massacres . In every city and refugee camp that they have entered , Israeli occupation forces have repeated the same pattern : indiscriminate firing and the killing of innocent civilians , intentional harm to water , electricity and telephone infrastructure , taking over civilian houses , extensive damage to civilian property , shooting at ambulances and prevention of medical care to the injured . According to the Palestinian Red Crescent Society , Israeli occupation forces have killed at least 55 Palestinians and injured 437 in the Occupied Palestinian Territory during last February alone . Furthermore , in violation of international law , which prohibits without exception the extrajudicial killing of protected persons , namely the Four Geneva Conventions , according to which people living under occupation are deemed protected persons , and also in grave breach of international humanitarian law and human rights law , last week , Israel , in a renewed extrajudicial execution , killed seven Palestinians , including a 10-year-old boy in Gaza City . Israeli extrajudicial assassinations have claimed the lives of at least 150 Palestinians and 110 bystanders in three years . Meanwhile , despite the Palestinian efforts to achieve a peaceful solution , Israel persists in its criminal practices of wilful killing of innocent Palestinians , using sporadic machine gun fire to kill children even inside their school courtyard , sealing off the Occupied Palestinian Territories , tightening its siege of the West Bank and the Gaza Strip , besieging President Yasser Arafat 's headquarters in Ramallah , tightening the military roadblocks and checkpoints , severely restricting the movement of people and goods all throughout the Occupied Palestinian Territories , escalating detention campaigns against Palestinians , demolishing Palestinian houses and property and forcibly annexing Palestinian lands . It is evident that the Israeli occupation authorities are intentionally and deliberately escalating such attacks against the Palestinian population in an attempt to ignite the situation on the ground in the Occupied Palestinian Territories . The daily actions of the occupation forces , including the killing and wounding of civilians , the continued confiscation of land , the destruction of property and the construction of the Wall are clearly intended to aggravate the situation , inflame tensions and kill any attempt to restore quiet and revive the peace process . For all of these war crimes , State terrorism and systematic human rights violations committed against the Palestinian people , Israel must be held accountable and the perpetrators must be brought to justice . In the light of the systematic Israeli massacres against Palestinian civilians , we once again appeal to Your Excellency , and through you to the international community , to intervene and stop the ongoing Israeli massacres against the Palestinian people and to stop the Israeli siege of Arafat 's headquarters . I would be grateful if you would arrange to have the present letter distributed as an official document of the sixtieth session of the Commission on Human Rights , under agenda item 8. ( Signed ) : Nabil RAMLAWI Ambassador Permanent Observer </text>
<text id="un/FCCC_SBI_2002_15">
Report of the Consultative Group of Experts on National Communications from Parties not included in Annex I to the Convention Note by the secretariat* Contents Paragraphs Page Mandate The Conference of the Parties ( COP ) , at its fifth session , by its decision 8/CP.5 , decided to establish the Consultative Group of Experts on National Communications from Parties not included in Annex I to the Convention ( CGE ) , with the objective of improving the preparation of national communications from these Parties ( non-Annex I Parties ) . In order to fulfil this objective , the COP , in the annex to this decision , mandated the CGE to : Exchange experience and information on the preparation of national communications , including consideration of subregional experience , through meetings and workshops , on the basis of agendas prepared in consultation with the participants ; Consider , as appropriate , the needs for and availability of financial resources and technical support , and the identification of barriers to and gaps in this support ; Consider , as appropriate , information in national communications from non-Annex I Parties in accordance with the guidelines for the preparation of initial national communications by non-Annex I Parties contained in the annex to decision 10/CP.2 ; Review existing activities and programmes to facilitate and support the preparation of national communications by non-Annex I Parties with a view to identifying gaps and making recommendations to better coordinate these activities and programmes in order to enhance the preparation of national communications ; Identify the difficulties encountered by non-Annex I Parties in the use of the guidelines contained in the annex to decision 10/CP.2 and in the use of the Intergovernmental Panel on Climate Change ( IPCC ) methodologies and other models , and make recommendations for improvement where appropriate ; Identify the analytical and methodological issues , including technical problems in the preparation and reporting of greenhouse gas ( GHG ) inventories , in particular with respect to the improvement of data collection , the development of local and regional emission factors and activity data , and the development of methodologies , where appropriate , with a view to enhancing the quality of future inventories ; Examine national communications , in particular greenhouse gas inventories , submitted by non-Annex I Parties , with a view to arriving at recommendations on ways of overcoming difficulties in the use of the IPCC methodologies and the UNFCCC guidelines relating to inventories contained in the annex to decision 10/CP.2 , and on possible innovations , and produce reports thereon ; Encourage interaction among experts from all Parties . The COP further , at it seventh session , in decision 31/CP.7 , decided that the CGE shall continue to have the objective of improving the preparation of national communications by non-Annex I Parties . By the same decision , the COP also decided that in addition to its mandate contained in the annex to decision 8/CP.5 , as outlined above , the CGE shall identify and assess technical problems and constraints that have affected the preparation of initial national communications from non-Annex I Parties that have yet to complete them , and make recommendations for consideration by the subsidiary bodies , and shall also provide input to the draft improved guidelines for the preparation of national communications by non-Annex I Parties . The COP , pursuant to decision 31/CP.7 , mandated the CGE to conduct two workshops during 2002 , with the objective of sharing experiences to ensure adequate coverage of issues referred to in paragraph 2 above . Scope of the report This document contains a summary of the main issues , technical problems and constraints relating to the preparation of national communications and those that have particularly affected the preparation of initial national communications by non-Annex I Parties that have yet to complete them ( section III ) , and the activities and programmes that facilitated and supported the preparation of initial national communications from non-Annex I Parties ( section IV ) . Section V outlines the recommendations made by the CGE for the improvement of the process of preparation of national communications from non-Annex I Parties . Possible actions by the subsidiary bodies The Subsidiary Body for Implementation ( SBI ) may wish to take note of the information presented in this document with a view to improving the process of preparation of national communications from non-Annex I Parties . In particular , the SBI may wish to recommend to the COP , a draft decision on further guidance for the future work of the CGE in improving the preparation of national communications from non-Annex I Parties . In addition , the SBI may wish to consider the recommendations made by the CGE , contained in this report , and make these recommendations available , through the Subsidiary Body for Scientific and Technological Advice , to the IPCC , with a view to developing appropriate methods , tools and models for use in non-Annex I Parties . The SBI may also wish to consider the information contained in this document and make available recommendations , through the COP , to the bilateral and multilateral support programmes to provide additional financial resources and technical support for the preparation of national communications from non-Annex I Parties . Organization of work Pursuant to decisions 8/CP.5 and 31/CP.7 , the CGE held five meetings , each immediately prior to sessions of the subsidiary bodies , and six workshops , between May 2000 and August 2002. The issues discussed at the meetings of the CGE included the consideration of the conclusions and recommendations of the CGE workshops aimed at the improvement of the preparation of national communications by non-Annex I Parties , development of work plans , examination of the information presented in national communications submitted by non-Annex I Parties , and preparation of the CGE reports for consideration by the subsidiary bodies . The reports of four meetings are contained in documents FCCC/SBI/2000/16 , FCCC/SBI/2001/2 , FCCC/SBI/2001/3 , and FCCC/SBI/2002/2 . The report of the fifth meeting was presented by the CGE Chair as an oral report to the subsidiary bodies at their sixteenth session , and is contained in the annex to this document . The six workshops were conducted by the CGE members with the support of the secretariat to facilitate the exchange of experiences between non-Annex I Parties , within and between each developing region , on the preparation of each of the elements of the national communication , so as to identify problems and constraints relating to analytical , technical and methodological issues , and make recommendations for consideration by the subsidiary bodies to overcome these problems and constraints . A total of 105 experts nominated by 70 non-Annex I Parties , 9 experts from 8 Annex I Parties and 12 representatives from 4 bilateral and 8 multilateral agencies participated in the workshops . The elements of a national communication considered at the workshops were national GHG inventories , vulnerability and adaptation assessment , research and systematic observation , GHG mitigation analysis , education , training and public awareness , information and networking , and financial and technical support . In view of the need to analyse information pertaining to each of the elements of a national communication , the CGE divided itself into six task groups to cover : national GHG inventory ; vulnerability and adaptation assessment and research and systematic observation ; GHG mitigation analysis ; education , training and public awareness ; information and networking ; and financial and technical support . The task groups , each facilitated by a coordinator , analysed information presented in 81 initial national communications , and in CGE meetings and workshops . The CGE members also made active use of the CGE listserv , developed and maintained by the secretariat , to exchange views on various issues pertaining to the discharge of its work . The work of the CGE was supported by the secretariat which provided administrative and technical support , and prepared its reports . The CGE , in fulfilling its mandate and terms of reference , contained in the annex to decision 8/CP.5 , examined information contained in the first compilation and synthesis report ( FCCC/SBI/1999/11 ) and in the 50 initial national communications which had been officially submitted to the secretariat between June 2000 and March 2001. A report on this work was completed and submitted to the subsidiary bodies at their fifteenth session ( FCCC/SBI/2001/15 ) . In that report , conclusions and recommendations were made by the CGE relating to the improvement of the preparation of the various elements of the national communication , including the recommendations for the improvement of the guidelines for the preparation of national communications by non-Annex I Parties contained in the annex to decision 10/CP.2 ( UNFCCC guidelines ) . Since the completion of that report , the CGE was mandated by the COP ( decision 31/CP.7 ) to continue its work to improve the process of the preparation of national communications from non-Annex I Parties . To this end , it examined , together with the previous 50 initial national communications , an additional 31 communications submitted between April 2001 and June 2002 , in accordance with the annex to decision 8/CP.5 . Additionally , the CGE identified technical problems and constraints that have affected the preparation of initial national communications by non-Annex I Parties that have yet to complete them , in accordance with decision 31/CP.7 . Data and information The most common problem/constraint encountered by non-Annex I Parties in the preparation of their national communications was related to the scarcity and quality of data ( for example , availability , accessibility and reliability ) in all the relevant areas of the national communications . This problem was exacerbated by lack of capacities and expertise to access , collect , analyse , manipulate and manage the data and databases necessary to conduct these studies and analyses . In almost all relevant categories of GHG sources and sinks ( energy , industrial processes , agriculture , land-use change and forestry , and waste ) most Parties found that there was lack of and/or deficiencies in the activity data . This is particularly true in the informal and household sectors of the economy , as well as on gases such as hydrofluorocarbons ( HFC ) , perfluorocarbons ( PFC ) and sulphur hexafluoride ( SF6 ) . Some Parties found that the lack of disaggregation of data on fuel consumption in the industrial and transport sectors made it difficult to estimate emissions from these sectors ( e. g. in biomass and kerosene combustion ) , which caused delays in completing their national GHG inventories . In the assessment of vulnerability and adaptation , Parties noted a lack of the data required as input to impact models and assessments . Therefore , vulnerability and adaptation assessments were based on broad sensitivity studies and the use of expert judgement , although some experts indicated that this method was not generally the preferred option for conducting such assessments . Many Parties also indicated that the assessment of potential mitigation options was constrained by the lack of relevant data and information . Where data were available they were not relevant for sector- and country-specific mitigation analysis . IPCC methodologies and other models Parties generally reported that many of the methodological problems and constraints they encountered in using the IPCC methodologies and other models were due to the fact that many of the default methodologies from the IPCC did not take into account their specific national circumstances . Many Parties also reported that the use of the Revised 1996 IPCC Guidelines ( IPCC Guidelines ) for estimating the GHG emissions in some sectors was inappropriate to their circumstances , particularly in the land-use change and forestry sector ( LUCF ) where forest classifications and the terms used in the LUCF section of the IPCC Guidelines were not consistent with the classifications and definitions used in non-Annex I Parties . For example , growth rates of biomass and/or emission rates used in the IPCC Guidelines for soil carbon , and estimation of fractions of biomass burnt on site , burnt off site or left to decay , were not appropriate for use in many non-Annex I Parties . Many Parties also had difficulties in matching the classification systems recommended by the IPCC Guidelines for animals and agricultural soils to their own circumstances . This created problems in the choice and use of default emission factors , thereby affecting the reliability of the results in the agriculture sector . Similar problems were experienced in calculating the emissions from waste disposal . Many difficulties were encountered in applying and using the IPCC Technical Guidelines for Assessing Climate Change Impacts and Adaptation ( IPCC Technical Guidelines ) in completing vulnerability and adaptation assessments . These difficulties mainly stem from the unsuitability of existing methods and tools , lack of national capacity/expertise to develop and/or use socio-economic scenarios , and lack of financial resources for assessment work . The analytical methods provided by the IPCC Technical Guidelines and the internationally developed integrated assessment methods , and policy development and decision support tools were often found to be incompatible with local needs and capacities . Integrated assessments and other such sophisticated diagnostic assessments typically required levels of information and expertise that were not widely and readily available in many non-Annex I Parties . This led Parties to use qualitative studies , which were compatible with local capacities , but could be less credible . Many Parties found that difficulties in undertaking impact assessments were mainly due to unavailability of models and inability to apply them . For example , some countries had difficulties in selecting and testing a general circulation model that would adequately fit their own circumstances . The use of MAGICC/SCENGEN was generally reported as being unsatisfactory due to its inappropriate downscaling methods and output . Other Parties indicated that they did not have sufficient knowledge or expertise to use/apply impact models for vulnerability and adaptation assessment . Most of the Parties identified adaptation to climate change as a major issue and included a list of potential adaptation options in their national communications . However , many of these Parties did not evaluate , prioritize and cost these adaptation options . This could be attributed to the fact that the IPCC Technical Guidelines did not adequately address the identification and evaluation of specific adaptation strategies , and to the lack of national expertise to undertake cost-benefit analysis on adaptation options . In general , the identified GHG mitigation options were not assessed comprehensively , due to the lack of common analytical tools ( e. g. models ) and of specific studies , and expertise . Additionally , the lack of models/software for scenario construction , particularly in the agriculture and livestock sectors , presented a serious constraint in conducting mitigation assessments . For some Parties , the preparation of technical studies was constrained by the fact that many of the methodologies and other models , and their instructions and other related documentation , were available only in English , so it was difficult for some experts to use and apply these methods and models . Institutional arrangements , information and networking A major constraint for many Parties was the lack of appropriate institutional arrangements and of clarity over roles and responsibilities of experts and institutions in carrying out the technical studies relating to the preparation of the national communication , which affected data collection and information exchange and networking among countries , regions and project personnel . Some Parties reported that their activities were constrained by the lack of effective coordination among the different ministries involved , and limited awareness among policy makers . The national climate change committees charged with the preparation of national communications in many countries were neither active , nor operational , and many were not granted the necessary legal and institutional authority to effectively carry out their work ; they were therefore not sufficiently motivated to implement their tasks in a timely manner . They also lacked the necessary human capacity to ensure a minimum level of active participation in and monitoring of technical studies , review and endorsement of the project outputs and launching of concrete follow-up actions relating to the preparation of national communications . In some Parties , project implementation was delayed by high turnover of technical staff , political instability and/or a change in project leadership within the institutions responsible for the preparation of the national communication . Some Parties found that weak institutional arrangements and the lack of human resources and capacities for conducting systematic data collection , together with the absence of universities and/or research centres working on climate change issues , particularly in small and poor countries , made it difficult to implement the activities relating to the preparation of national communications . Many Parties recognized that the use of information systems forms an important part of GHG inventories , vulnerability and adaptation assessment and mitigation analysis , and that networking helps to provide access to updated information and promote the exchange of experiences on these issues . However , many Parties found that such exchange of information and networking were generally weak due to limited human and financial resources , limited data and information , and underdeveloped systems for collecting , processing and maintaining data and information . The lack of hardware , software and expertise for establishing and maintaining networking facilities for the exchange of information ( computers , communication channels ) , presented major constraints in this regard . Many Parties stressed that the low priority granted to vulnerability and adaptation issues by policy makers at the highest levels of government has affected cooperation and coordination among stakeholders in conducting the vulnerability and adaptation assessments . Research and systematic observation , education , training and public awareness Almost all Parties highlighted their limited capacities to undertake research and systematic observation activities such as accessing , analysing and managing data relevant to climate change in the areas of impact assessment , detection and early warning of climate extreme events and climate prediction . These limitations were mainly due to lack of financial resources and of human capacities and capabilities , as well as to limited technical support . Many Parties indicated that the level of scientific research and scholarship in institutions which have been established to conduct research was low and/or deteriorating . Some Parties further noted that the problem of lack of research activities was further compounded by irregular observations , out-dated and/or deteriorating infrastructure/systems for data collection , and the inability to access , process and transfer observational data . Many Parties emphasized that the issue of climate change was new to them and so their effort in climate change education , training and public awareness was not commensurate with the importance they placed on this issue . Some Parties also indicated that unavailability of experts and limited financial resources caused difficulties in organizing training workshops for their technical teams , which contributed to the considerable delays in the preparation of different technical studies ( inventory , mitigation , vulnerability ) . The integration of climate change issues into educational curricula was recognized as crucial for the future , but many Parties did not have appropriate resources for such integration . There was also a lack of clear and targeted awareness and education programmes , and the training provided was limited in scope . Many Parties emphasized that awareness and education on climate change issues among the public at large and the policy makers was minimal , partly because of the limited coverage of climate change issues by local media , the lack of active participation on this issue by non-governmental organizations in that area , and limited technical advice and support material . In this context , several Parties mentioned the lack of sufficiently trained scientific and technical personnel , policy makers , and the institutions to carry out research and training on climate change issues . Resources : human , technical and financial Globally the resources dedicated to vulnerability and adaptation studies were not commensurate with the needs and the importance that Parties place on these issues . Limited financial resources , insufficient and inappropriate tools , limited sectoral coverage , insufficient capacity and expertise , lack of experience to coordinate , implement and participate in climate change activities efficiently at the national , subregional , regional and international levels , were all highlighted . Many Parties considered that the level of funding provided and the period allowed for the preparation of the initial national communication were not sufficient to enable them to provide adequate and reliable information in the initial national communication . Some Parties noted that their governments had limited resources to address climate change issues and pointed out that these limitations were not very well compensated by external support for climate change activities . They further indicated that this may be because some bilateral programmes focus on the countries that have a large GHG mitigation potential . Other Parties stressed that their low economic situation meant that climate change issues were given low priority . Insufficient funds for international consultants and for project team members presented many problems in the implementation of the activities relating to the preparation of the national communications . This was particularly true in engaging and involving experts in training , international meetings and workshops . Some Parties stressed that funding available to conduct impact and vulnerability analyses in many sectors that are of vital importance to the national economy was inadequate . Many Parties indicated that in order to address climate change issues in a multidisciplinary and an efficient way , they would require additional financial and technical resources to develop and train a critical mass of human resources . Specific technical problems and constraints that have affected non-Annex I Parties that have yet to complete their initial national communications Many of the problems and constraints faced by those Parties who have not yet submitted their initial national communications were similar to those faced by non-Annex I Parties that had already completed their initial national communications . However , Parties that have yet to complete their initial national communications face other specific technical problems and constraints . Some Parties stressed that the implementation of the activities and tasks relating to the preparation of national communications was often hampered by the lack of , or insufficient , level of coordination , especially among the technical experts responsible for such tasks , which often led to lengthy delays in starting and completing technical studies relevant for the preparation of national communications . Many Parties found that bureaucratic inertia/bottlenecks inherent within national institutions responsible for the preparation of national communication , and weak institutional linkages between the United Nations Development Programme ( UNDP ) Country Offices and the national executing agencies , with resulting lack of clarity over their respective roles and responsibilities , often slowed progress in implementing the activities and tasks relating to the preparation of national communications . Some Parties also had difficulties in applying the UNDP modalities for the nationally executed programmes , which were not necessarily consistent with the enabling activities project management procedures . This also led to further delays in the implementation of the projects relating to the preparation of national communications . Some Parties specifically attributed the delays in the preparation of initial national communications to social disturbances and/or political problems and the resultant changes in the leadership of the projects . Such changes sometimes led to inactivity relating to the preparation of national communications , where either the expertise was not available or the institutional arrangements were not appropriate . Other Parties indicated that it was not always clear which agency would be responsible for preparing the initial national communication , thereby leading to lengthy delays . In its previous report to the subsidiary bodies ( FCCC/SBI/2001/15 ) , the CGE noted that a number of multilateral and bilateral assistance programmes had provided human , technical and financial assistance to 137 of a total of 146 non-Annex I Parties for the preparation of their initial national communications . The Global Environment Facility ( GEF ) was the largest contributor ( US$ 79.6 million ) , through its climate change enabling activities programmes . This , however , represented only about seven per cent of the total funds ( US$ 1.052 billion ) allocated by the GEF to the climate change focal area for the period 1991 to July 2000. The majority of non-Annex I Parties ( 124 ) had received support from the GEF climate change enabling activities programmes , and only three Parties that had submitted their initial national communication ( Israel , the Republic of Korea and Singapore ) did not receive any support from any of the support programmes . The GEF , in collaboration with the UNDP , the United Nations Environment Programme ( UNEP ) and the UNFCCC , established and funded the National Communications Support Programme , which provided human and technical support to 130 non-Annex I Parties , including countries in Eastern Europe and the Commonwealth of Independent States . Technical support and assistance provided was mainly in the form of thematic subregional exchange workshops , technical reviews , a help desk and networking . Funding for this support programme comprised US$ 2.1 million from the GEF and US$ 1.3 million through cofinancing from Denmark , the European Community , Finland and Norway . Support from the bilateral support programmes and Annex II Parties was provided through their respective programmes : the United States Country Studies Programme ( USCSP ) , the German Technical Cooperation Agency ( GTZ ) , the Netherlands Climate Change Studies Assistance Programme ( NCCSAP ) , the Finland Climate Change Assistance Programme , and the governments of New Zealand and Greece . Other Annex II Parties ( Australia , Denmark , Japan , Italy , Spain and the United Kingdom ) had also provided financial resources and technical assistance to non-Annex I Parties through climate change training courses , workshops , studies and projects/programmes . Level of funding As of 30 June 2002 , the GEF has provided US$ 1.5 billion in grants for climate change projects since its establishment as a pilot programme in 1991. About US$ 87.6 million , representing about six per cent of the total amount , was provided by the GEF to 133 non-Annex I Parties through its climate change enabling activities programmes for the preparation of initial national communications . The analysis of the support provided by multilateral and bilateral support programmes points to a growing need to increase capacity and enhance the work relating to the preparation of the national communications in the areas of national GHG inventories , vulnerability and adaptation assessments and GHG mitigation analysis . In considering the availability of financial resources and technical support , the CGE found that many needs relating to financial and technical support still exist , and new needs have been identified by Parties . These needs will require additional financial and technical support to improve the preparation of national communications . Additional financial support would be needed for data collection , accessing , archiving , quality control , retrieval and management , as well as for capacity-building , and promotion of education , training and public awareness . The analysis of the distribution of financial resources , however , indicated that some countries had received three or four times more funding than had many other countries . The differing focus of the support activities and of the coverage across technical areas , countries and regions , as well as the lack of a reporting framework for the support programmes , particularly bilateral ones , made it difficult to undertake a comprehensive analysis of the effectiveness of these efforts to date . However , from the information presented above on the funding and activities of the support programmes , and information contained in document FCCC/SBI/2001/15 on this issue , it appeared that the level of funding and the number and scope of activities were not commensurate with the needs of Parties identified in their initial national communications and the needs of those Parties that have yet to complete the preparation of their initial national communications . Coordination An analysis of the implementation of activities of the support programmes indicated that there was a need for better coordination and interaction between these programmes , in order to enhance the overall effectiveness of their use of limited resources and to ensure that smaller and poorer countries received adequate attention . This could be done through the establishment of an information sharing mechanism , developed and hosted by a relevant agency/institution , such as the UNFCCC secretariat , to provide information on assistance programmes that support the preparation of national communication or any of its elements . The CGE noted the important role of the National Communication Support Programme in assisting non-Annex I Parties during the preparation of their initial national communications . The CGE was of the view that the newly established National Communications Support Unit of the UNDP might be well placed to assist countries , particularly those that have recently started to prepare their initial national communications . Additionally , the CGE emphasized that there was a need to develop and strengthen interactions and links within and between countries and regions , through multi-country , regional and global projects , and through regional centres of excellence working on various climate change issues , where appropriate . Lessons learned The experiences gained and lessons learned by the multilateral and bilateral support programmes in providing human , financial and technical support for project implementation point to a number of areas where changes could improve the institutional arrangements necessary for the preparation of national communications : Greater involvement of and participation by key policy stakeholders from the beginning of the project cycle and/or at the project concept level and heightened country-driven discussions on the projects and acitvities ; Political support and buy-in to the project and the enhancement of appropriate institutional frameworks for the preparation of national communication ; Engagement of in-country personnel in project activities and promotion of country ownership of the project ; Provision of financial and technical support and integration of project activities and outputs with national policies and strategies ; Building and maintaining capacity of national and/or regional expertise to collect , process and analyse data for enhancing the preparation of national communications and planning for sustainable development ; Focusing studies undertaken in the context of the preparation of national communications , on national priorities . Future plans The multilateral and bilateral support programmes also indicated their plans to continue their activities and programmes to facilitate and support non-Annex I Parties in the implementation of the Convention , including the preparation of national communications . These programmes include the UNEP/IPCC project on the Assessment of Impacts of and Adaptation to Climate Change in multiple regions or sectors , and the World Bank project on Mainstreaming Adaptation to Climate Change in the Caribbean region . The UNDP 's National Communication Support Unit will implement three regional pilot projects to build capacity in 34 countries on improving the quality of national GHG inventories through the use of the IPCC Good Practice Guidance and Uncertainty Management and to prepare for stage II adaptation using the UNDP 's Adaptation Policy Framework . Additionally , a global project on systematic observation is underway , in conjunction with the Global Climate Observing System secretariat . All these activities will feed into the national communication process . The bilateral programmes include phase II of the Netherlands Climate Change Studies Assistance Programme , support by the Swiss Agency for Development and Cooperation to the National Communications Support Unit of the UNDP , and the activities of the Danish Agency for Development Assistance . The United States Agency for International Development and the United States Environmental Protection Agency have plans to continue to provide human , technical and financial support to non-Annex I Parties for activities that underpin the preparation of national communications , including national GHG inventories , vulnerability and adaptation assessments and mitigation analysis . To overcome some of the technical problems and constraints identified by non-Annex I Parties in their initial national communications , and by the CGE in fulfilling its mandate in pursuance of decisions 8/CP.5 and 31/CP.7 , several recommendations were made by the CGE to improve the process of the preparation of national communications from non-Annex I Parties . Data and information Additional resources should be mobilized to develop and implement a sustainable data collection , compilation , archiving and updating management system for national GHG inventories , vulnerability and adaptation assessments , and GHG mitigation analysis . Regional cooperation in activity data generation and management should be encouraged . Particular groups of nations and or regions should develop emission factors , particularly for key sources , to better reflect their national circumstances . Information relating to technical material , methods , tools and models for national GHG inventories , vulnerability and adaptation assessments and GHG mitigation analysis needs to be made available in all official languages of the United Nations at the earliest opportunity and in sufficient quantities to meet the needs of Parties . IPCC methodologies and other models Existing methodologies for GHG inventories should be improved and made clearer for use in non-Annex I Parties . In particular , more clarification is needed in the use of terms and the forest classification systems in the land-use change and forestry sector . The IPCC should be encouraged to develop methods , tools and other models for use in assessing impacts and adaptations in agriculture , water resources , coastal zones and human health at time scales that are relevant for policy-making processes in non-Annex I Parties . Methodologies and models for assessing mitigation options and analysing abatement potential should be made readily accessible to non-Annex I Parties . Studies to conduct detailed cost-benefit analysis should be encouraged in non-Annex I Parties . Institutional arrangements , information and networking Non-Annex I Parties should be encouraged , with international support , to develop appropriate and sustainable institutional frameworks and arrangements to carry out activities relating to the preparation of national communications and the implementation of the Convention on a continuous basis . Non-Annex I Parties should be encouraged to streamline and mainstream activities relating to national GHG inventories , vulnerability and adaptation assessments , and GHG mitigation analysis in their recurrent programmes of work . The GEF and its implementing agencies should be encouraged to clarify roles and responsibilities in close consultation with the national executing agencies relating to the preparation of national communications . Information exchange and sharing of experiences on the preparation of the national communications should be encouraged within and between countries and regions . Regional research and educational centres should be strengthened and , where appropriate , established in various regions . Research and systematic observation , education , training and public awareness Non-Annex I Parties should be encouraged to undertake assessment of their capacity and needs for research and systematic observation and for climate change education , training and public awareness . Training of national experts on climate change issues such as national GHG inventories , vulnerability and adaptation assessments , and GHG mitigation analysis should be carried out continuously . The scope of training on climate change issues should be widened , to include data and uncertainty analysis and vulnerability and adaptation assessments , at both basic and advanced levels . Resources : human , technical and financial Additional human , technical and financial resources should be provided to non-Annex I Parties for the improvement of the process of preparation of national communications . Additional financial resources should be made available to non-Annex I Parties to enhance national expertise to systematically collect , analyse and maintain appropriate data and databases for the preparation of national communications . Clear additional guidance should be given to the GEF to provide financial resources that are commensurate with the resource needs identified by non-Annex I Parties in their national communications . Existing methodologies and national capacities to undertake integrated assessment of climate change impacts in different sectors , such as water resources , agriculture and human health , coastal zones , human settlements and biodiversity , should be enhanced . Training on the use of software and technical guidelines should be provided to non-Annex I Parties so that the studies can be carried out locally . Financial and technical assistance should be provided for assessment of vulnerability and the economic and social costs of adaptation measures . UNFCCC guidelines for the preparation of national communications In fulfilling its mandate contained in decision 8/CP.5 , the CGE considered the information presented in the initial national communications in accordance with the UNFCCC guidelines for the preparation of national communications from non-Annex I Parties ( annex to decision 10/CP.2 ) , with a view to improving them . The CGE report containing recommendations for improving the guidelines for reporting on national GHG inventories , vulnerability and adaptation assessments , GHG mitigation analysis and education , training and public awareness in the national communication , was submitted to the subsidiary bodies at their fifteenth session , and is contained in document FCCC/SBI/2001/15 . In pursuance of decision 31/CP.7 , the CGE also provided its input to the proposed improved UNFCCC guidelines for the preparation of national communications from Parties not included in Annex I to the Convention . The input of the CGE on the proposed improved guidelines is contained in document FCCC/SBI/2002/INF.8 . Annex Report of the Chair of the Consultative Group of Experts A report on the work of the Consultative Group of Experts on National Communications from Parties not included in Annex I to the Convention ( CGE ) was presented to the sixteenth sessions of the subsidiary bodies by the Chair of that group , Ms. Isabelle Niang-Diop ( Senegal ) . In her report , the Chair of the CGE recalled that the CGE had presented its first report ( FCCC/SBI/2001/15 ) , covering the period 2000-2001 , to the subsidiary bodies at their fifteenth sessions in October 2001 in Marrakesh , Morocco . In addition to the mandate contained in the annex to decision 8/CP.5 , the Chair of the CGE reminded delegates of the mandate given by the Conference of the Parties at its seventh session ( decision 31/CP.7 ) , requesting the CGE : ( i ) to identify and assess technical problems and constraints that have affected the preparation of initial national communications by non-Annex I Parties that have yet to complete them and make recommendations for consideration by the subsidiary bodies ; ( ii ) to provide input to the draft improved guidelines for the preparation of national communications from non-Annex I Parties ; ( iii ) to conduct two workshops with the objective of sharing experiences ; and ( iv ) to organize , to the extent possible , a meeting back-to-back with a meeting of the least developed countries expert group ( LEG ) . The Chair subsequently gave an overview of the activities undertaken by the CGE since its last report . This included a summary of the workshop held in April 2002 on the identification and assessment of technical problems and constraints faced by non-Annex I Parties that have yet to submit their initial national communications , as well as the outcomes of the fifth CGE meeting which addressed the issue of coordination of activities and programmes that facilitate and support the preparation of national communications from non-Annex I Parties , the work plan to fulfil its current mandate , the relationship between the CGE and the LEG and the exchange of views on potential activities for future improvement of the preparation of national communications . The Chair noted that the CGE , in implementing the mandate contained in decision 31/CP.7 , had held its first workshop from 10 to 12 April 2002 in Bonn , Germany . The workshop had facilitated the exchange of experiences with non-Annex I Parties on different issues related to the preparation of national communications . It had also provided the initial input by the CGE into the draft improved guidelines which was presented to the intersessional workshop on the revision of the guidelines for the preparation of national communications from non-Annex I Parties , held from 15 to 17 April 2002 in Bonn , Germany . The CGE had analysed views provided by some non-Annex I Parties ( not including least developed countries ) that had received funds more than three years ago for the preparation of their initial national communications and had not submitted them . Views on the technical problems and constraints Parties are facing had been provided by means of a questionnaire and presentations at the workshop . The CGE noted that those Parties faced methodological and analytical problems similar to those of Parties that had submitted their initial national communications . However , the presentations in the workshops had revealed additional institutional , management and resource constraints , as reported in document FCCC/SBI/2002/INF.3 . According to the Chair , the CGE recognized the difficulties with the coordination of existing activities and programmes that facilitate and support the preparation of national communications from non-Annex I Parties . The CGE had thus recommended that exchange of information on existing activities and programmes be improved , for example by establishing a publicly accessible database on past and ongoing activities and programmes relating to the preparation of national communications . The CGE had also recognized with concern that important programmes that supported the preparation of national communications were no longer in place , without any consideration for their replacement . The Chair indicated that the CGE had stressed that there was a need for continuing the financial and technical assistance for the 62 non-Annex I Parties that were still in the process of preparing their initial national communications . Regarding the CGE work plan for the period between June and October 2002 , the Chair stated that the CGE had held discussions on its report to the seventeenth session of the subsidiary bodies and on a tentative programme for its second workshop . From these discussions , the CGE had agreed on the following : The report of the CGE to the seventeenth session of the subsidiary bodies would consist of a synthesis of the work accomplished by the CGE from its establishment at COP 5 up to COP 8 in October 2002. It would also present the results of exchange of views on potential activities for future improvement of the preparation of national communications ; The CGE had decided to hold its second workshop from 7 to 9 August , possibly in Nassau , Bahamas , with the aim of completing its work on problems and constraints of non-Annex I Parties that had yet to submit their initial national communications , and on support programmes and activities . Countries that had not yet presented information on the technical problems and constraints that they were facing in the preparation of their initial national communications would be invited to do so at this workshop . Representatives of multilateral agencies that support the preparation of national communications would be invited to make presentations on their programmes in accordance with a framework that should be provided by the CGE . Presentations would also be made by experts on how to overcome some of the constraints that had been identified already . The Chair reported that the CGE had also discussed its relationship with the least developed countries expert group ( LEG ) . The group had noted that a back-to-back meeting would unfortunately not be feasible for 2002 as originally decided at COP 7 ( decision 31/CP.7 , paragraph 5 ) . The CGE , however , had stressed the importance of exchanging views between the two groups through the two common members , the consideration of each group 's reports and the participation of experts from the LEG at the CGE workshops . The CGE had also discussed the provision of financial resources for the preparation of the second national communications . In the light of the gaps and constraints identified in the preparation of the initial national communications , the CGE recognized that it might be necessary to increase the financial resources to improve the process of the preparation of national communications . The CGE recommended that the distribution by the GEF of financial resources among Parties for the preparation of national communications should be based on transparent criteria , considering the specific needs of each Party . Furthermore , the CGE had exchanged views on possible future activities to improve the preparation of national communications from non-Annex I Parties and in this regard had identified as potential areas : a technical assessment of national communications on a voluntary basis ; organization of workshops on specific topics ; monitoring of capacity-building programmes and strengthening of coordination between the national communication processes ; and reporting activities under other environmental agreements . In line with this , it would be necessary to identify the appropriate institutional arrangements to support these activities . The Chair of the CGE stated that it was her belief that many of the technical issues , problems and constraints identified in the preparation of initial national communications , and recommendations made by the CGE , would form the basis upon which financial and technical support would be made available for the preparation of subsequent national communications from non-Annex I Parties . Therefore , the subsidiary bodies might wish to invite the financial mechanism and bilateral organizations to provide financial and technical resources to those non-Annex I Parties that were ready to start the preparation of their second national communications . In concluding , the Chair acknowledged the dedication and commitment provided by the CGE experts , and their respective governments and organizations who had supported their participation in the CGE . She also extended this acknowledgement to the other experts ( 101 participants representing 68 Parties ) that had participated in the CGE workshops . It was to these that the Chair , on behalf of the CGE , expressed her gratitude and thanks . The Chair also thanked the Governments of Australia , Finland , Germany ( through the Bonn Fund ) , Switzerland , the Netherlands and the United States of America for funding the CGE workshops and the UNFCCC secretariat for the excellent support it had provided to the CGE in the organization of its work and the production of its reports . * This document is submitted after the due date because all the necessary information was not available on time . Three regional workshops , one each for the regions of Africa , Asia and Latin America and the Caribbean , were held in 2000 ; one interregional workshop was held in 2001 ; and two interregional workshops were held in 2002. Support programmes are those activities , projects and programmes which supported the preparation of initial national communications , and the preparation of various elements of the national communication ( e. g. national GHG inventories , vulnerability and adaptation assessment , mitigation assessment ) . The climate change enabling activities programmes include activities that are funded through expedited procedures , full projects that use standard procedures of funding , and projects covering limited components of initial national communications from non-Annex I Parties . See Report of the GEF to the Eighth Session of the Conference of the Parties to the United Nations Framework Convention on Climate Change ( FCCC/CP/2002/4 ) . English English English </text>
<text id="un/FCCC_SBI_2002_9">
Contents Paragraphs Page MANDATE 1 - 2 3 SCOPE OF THE NOTE 3 3 WORKSHOP PROCEEDINGS 4 - 6 3 WORKSHOP SUMMARY 7 - 49 4 General 7 - 20 4 Adverse effects of climate change 21 - 33 6 Impact of the implementation of response measures and approaches to minimize such impact 34 - 44 7 Enhancing the participation of developing country experts in modelling efforts 45 - 49 9 ISSUES FOR FURTHER CONSIDERATION 50 10 Annex Agenda for the workshop on the status of modelling activities to assess the adverse effects of climate change and the impact of implemented response measures Wissenschaftszentrum , Bonn , Germany , 16-18 May 2002 11 The Conference of the Parties ( COP ) at its seventh session , by its decision 5/CP.7 , requested the secretariat to organize a workshop , before the eighth session of the COP , on the status of modelling activities to assess the adverse effects of climate change and the impact of response measures already implemented on individual developing country Parties , including on how to enhance the participation of developing country experts in such efforts , and to report the results of this workshop to the COP at its eighth session . The terms of reference of this workshop were also to include assessing approaches to minimize the adverse effects of response measures on developing country Parties . This workshop was held from 16 to 18 May 2002 in Bonn , Germany , under the guidance of Ms. Daniela Stoytcheva , Vice-Chair of the Subsidiary Body for Implementation ( SBI ) , acting on behalf of Mr. Raúl Estrada Oyuela , Chair of the SBI , and Mr. Halldor Thorgeirsson , Chair of the Subsidiary Body for Scientific and Technological Advice ( SBSTA ) . Scope of the note This document contains a short description of the proceedings of the workshop ( section III ) , a summary of the discussions ( section IV ) , and issues identified for further consideration ( section V ) . The agenda of the workshop is included in the annex to this document . The workshop was attended by 36 experts in the field of modelling , representing Parties international organizations and research institutions . Some of these experts were involved in the preparation of the Intergovernmental Panel on Climate Change ( IPCC ) Third Assessment Report ( TAR ) , and in the development of models at academic institutions . In accordance with the mandate , the workshop focused on the following main issues : Evolution and current status of modelling activities to assess the adverse effects of climate change , identification of gaps and limitations in current approaches to modelling , and recommendations for improving the effectiveness of modelling activities in the context of assessing adverse effects of climate change ; Evolution and current status of modelling activities to assess the impact of implemented response measures , identification of gaps and limitations in current approaches to modelling , assessments of approaches to minimize the adverse effects of response measures on developing country Parties , and recommendations for improving the effectiveness of modelling activities in the context of assessing the impact of response measures ; Enhancing the participation of developing country experts in modelling activities to assess the adverse effects of climate change and the impact of implemented response measures . The workshop consisted of an introductory session , working sessions devoted to each of the objectives , followed by a panel discussion , and a concluding session . There were discussions and exchange of information on the experience of national experts from developing and developed countries , and organizations , in applying current methodologies , the usefulness of data , and uncertainties , among others . The experts discussed the limitations of the current models , identified some possible areas for improvement , and made suggestions regarding the evolution of such modelling activities . Participants in the panel discussion included representatives from Brazil , Burkina Faso , Portugal , Saudi Arabia , United States of America , the Food and Agriculture Organization of the United Nations ( FAO ) and the International Energy Agency ( IEA ) . General Modelling activities for assessing the adverse effects of climate change and the impact of the implementation of response measures have evolved considerably in the past decade ; in particular , spatial and temporal resolution have greatly improved . During the same period modelling capacity has become more widely disseminated and more data have become available for some models . The ability to adjust modelling activities to changing circumstances has also improved , although it was recognized that more improvement is necessary before the output of such models can be integrated in the decision-making process . Although modelling capacity is generally concentrated in industrialized countries , efforts are being made to develop models and modelling frameworks that can be adapted and used in developing countries . This is particularly true for modelling the adverse effects of climate change . Expertise for modelling the impacts of response measures is concentrated at research institutions and in a number of international organizations . Developing country participants stressed that their countries are still at an early phase of model development . Some participants attributed this lag to , for example , the lack of information on existing models , language constraints , the need to adapt such models to national circumstances , and the high costs of acquiring the models , conducting relevant training and developing extensive databases for their application . Some participants stressed that the main challenge facing developing countries is that most models and their coverage are optimized for use in developed countries and therefore do not respond to the circumstances and needs of developing countries . Very few models are able to evaluate the socio-economic impacts of climate change or perform an integrated analysis of impacts of response measures . Specific shortcomings of models were also discussed in detail . The main ones highlighted were gaps in data sets , limited regional downscaling , limited model validation , deficiencies in the development of assumptions and in applicability , verification , and separation of the impact of different policies , and the high degree of uncertainty in attempting to simulate the future . Other limitations relate to the reliability of models , the availability of accurate data , comparability of models and the availability of sector-specific models , particularly as applicable to developing countries . The modelling process for assessing the adverse effects of climate change has similarities and differences with that for assessing the impact of implementation of response measures . Both address global models with national disaggregation , have top-down and bottom-up perspectives , have difficulties with non-price issues and with inter-comparability , and suffer from a lack of adequate data and uncertainties associated with results , and their simulations rest on long-term climate scenarios . But modelling the adverse effects of climate change addresses aggregate changes applied to specific locales , whereas modelling the impact of response measures examines the impact of individual policies in different locales . Modelling results do not always meet the needs of stakeholders , and participants stressed the need for stakeholder involvement in the modelling process , both for framing the questions that the models should endeavour to answer at the outset of the exercise , and for ensuring that the outcome of the models are in a form that is usable in the context of the existing decision-making framework . Involving stakeholders will also help increase confidence in and acceptance of the model output . An essential function of modelling is to support informed decision-making . Because of the gaps and limitations in the modelling process , the usability of the models or their results and the reliability of the output are less than what is currently needed by decision makers and other stakeholders . As these shortcomings are not likely to be overcome soon , there is a need to improve decision-making under uncertainty , in order to render the outcome of the models usable , despite their limitations . An approach suggested for developing countries was to address modelling for climate change within the wider context of sustainable development . Such an integrated outlook would enable a comparison of the costs of climate change adaptation and mitigation with those of other priority objectives , including poverty alleviation , and would be useful for developing countries in which climate change issues ( and related modelling efforts ) may not be a high priority . In this context , many participants emphasized that one useful approach to modelling at the national level would be to adopt a methodology that would engage all key stakeholders and promote national consensus building , and would link development activities with climate change vulnerabilities , adaptation and impacts on economic , social and environmental goals . An “ action impact matrix ” method presented at the workshop , complemented with sectoral and local models which focus on impacts , adaptation and mitigation options , would provide such an approach . It was noted that , in developing countries , the data required as input to models for simulating the adverse effects of climate change and of implemented response measures are not consistently available or collected , are inaccessible or are of poor quality . At the same time , it was also stressed that the process of data collection and processing for using these models should be cost-effective , hence the need for coordinated data-collection efforts at the national , regional and international levels . In order to help developing country experts to choose the models most appropriate to their needs for conducting country-specific analyses , information provided with the models should include descriptions of the assumptions made and of the analytical approaches used for the models ; this would permit a better understanding of the strengths and weaknesses of a model for a given purpose . Consideration should be given to forging links among existing national , regional and international institutions , particularly those involved in gathering data for climate impacts models , such as the World Health Organization ( WHO ) , the World Meteorological Organization ( WMO ) , the Intergovernmental Panel on Climate Change ( IPCC ) , the United Nations Environment Programme ( UNEP ) , the European Commission ( EC ) , and various non-governmental organizations ( NGOs ) . For data required to run economic models , collaboration among organizations such as the United Nations Statistical Office ( UNSO ) and other UN agencies , the World Bank , the Organisation for Economic Co-operation and Development ( OECD ) , the Latin American Energy Organization ( OLADE ) , the Organization of Petroleum Exporting Countries ( OPEC ) and the IEA , was suggested . National communications from Annex I and non-Annex I Parties were mentioned as useful channels for disseminating experience on the appropriateness of modelling activities to assess the adverse effects of climate change , the impact of the implementation of response measures , and approaches to minimize the adverse effects of response measures on developing country Parties . National communications were also seen as an important tool for communicating to the modelling community what the needs of Parties are in furthering the modelling process in a way that is consistent with national priorities . It was considered useful for Parties to use the national communications process to identify modelling capacity-building needs and priorities and assessment efforts already completed or under way . Adverse effects of climate change Global climate modelling techniques have undergone steady development in the past decade . Research efforts have been directed towards developing models and approaches aimed at improving information about climate change on the regional scale . But Global Circulation Models ( GCMs ) , as tools for drawing critical conclusions regarding global climate change , are limited in their ability to simulate important atmospheric phenomena and to accurately represent complex natural interconnections . There is much uncertainty surrounding climate scenarios , particularly at the national and local scales and for climate variables other than temperature , precipitation and sea level . Consequently , the modelling process to assess the adverse effects of climate change does not currently produce results that are trustworthy enough to serve as a basis upon which decision makers can address adaptation options . This is particularly true when trying to model the effect of a changing climate on the frequency , magnitude and spatial occurrence of extreme weather events such as floods , cyclones and droughts . To date , GCMs have been unable to present unambiguous results relating to extreme events . Most models assume only gradual changes in climate . Many impacts arise from quite localized climate conditions but most climate GCMs provide results only across fairly large geographic areas . There is a need for enhanced regional specification of climate variables at geographic levels consistent with the impacts of climate change . For example , there are no models focusing on the adverse effects of climate change in the Sahelian region , which is prone to drought , desertification and fragile ecosystems . Another major challenge confronting the use of GCMs , and adding to the uncertainty of their outputs , is the lack of data at adequate temporal resolutions , particularly for climatic variables other than temperature and rainfall . Climate impact sectoral models currently used by developing countries cover primarily agriculture , water resources , health and coastal zones . Most allow some quantitative assessment of biophysical impacts . Some include adaptation into this assessment . The workshop discussed in detail the current status of modelling activities in the sectors of health and of agriculture and food security . Current knowledge on the relationship between climate and health is limited . Most models concentrate mainly on the statistical association of climate variability with the incidence of disease . It is not easy to extrapolate these findings to the assessment of long-term impacts of climate change , especially given the uncertainties of climate change scenarios . Modelling climate change impacts on agriculture was seen to be more advanced than modelling in other sectors . The simulation crop growth models allow an effective evaluation of impacts arising from changes in climate variables as well as from the effects of direct carbon dioxide fertilization , and are able to incorporate different adaptation options in the assessment . For the purpose of supporting adaptation to climate change , an important issue for the evolution of modelling activities in all sectors is how to incorporate into the modelling process the different categories of adaptation options for natural and human systems ( anticipatory , reactive , natural systems , human system , planned , autonomous ) , how to assess adaptive capacity and how to address the link between climate change and climate variability and extremes . In addition , methodological issues such as the use of discount rates , intergenerational equity , risk assessment , opportunity costs , and weighting uncertainty in cost-benefit analyses , are some of the areas in need of further attention . One constraint facing the user community is insufficient knowledge of all the modelling options available , and of their detailed specifications , limitations , data needs , accuracy and assumptions . It would be useful to centralize this information for easy access by users , in particular by developing countries , by establishing a comprehensive catalogue to enable comparisons and informed selection . In spite of efforts towards improving cooperation in the development and use of models , there is not enough sharing of experience in the use of models , particularly among developing countries where synergies could be promoted by pooling information on data needs , appropriateness to specific sectors or geographical regions , accuracy of results , best practices and lessons learned . The involvement of stakeholders in the modelling process for climate impacts is important and needs further promotion to ensure that these modelling activities integrate well with national development priorities , and that they provide the relevant answers to questions posed by policy makers in assessing adaptation options . In this context , there is a need for interagency coordination at the national level in the process of model development and application . In this light , the paradigm surrounding modelling activities should evolve into one that is stakeholder-driven and supportive of national sustainable development priorities . Modelling activities should be seen as a component of support for decision-making under uncertainty , particularly for the evaluation of adaptive responses to climate change . Participants concluded that more efforts should be made in developing and/or adopting methodologies and tools for conducting detailed sector and case study specific vulnerability assessments , which could lead to a more precise assessment of how to implement specific adaptation options . In this regard , the enhancement of regional networks can be an effective means for overcoming scale issues in the development of modelling frameworks and for sharing insights . Impact of the implementation of response measures and approaches to minimize such impact Although some modelling work has been done to date to assess the impact of the implementation of response measures , current models are not able to model climate policy impacts adequately . Results vary depending on the model used and on input data or assumptions . Existing models produce a wide diversity of short-term impacts , although if a full portfolio of mitigation options is used , all models show that potential adverse impacts would be reduced . In the longer term ( post 2020 ) , with more aggressive reductions , impacts may be greater - although this depends on policy choices . Existing models have been developed mainly in industrialized countries such as the United States , Australia , Japan and in Europe , and the concerns and national circumstances of developing countries have not been fully integrated into their structure . In particular , they are unable to fully disaggregate the impacts of a suite of climate change measures and mechanisms given the intricate linkages between national and international economies , the complexities among sectors , and the transdisciplinary nature of such impacts . However , existing models may serve as a useful basis for future work in meeting the analytical needs of developing countries . The greatest benefit of economic modelling is that it provides a structured framework for organizing data and ideas , but there is substantial uncertainty associated with the results of such modelling exercises as a result of data gaps , model structure inadequacies and the incomplete analytical framework for evaluating the impacts of response measures . These uncertainties raise serious questions about the appropriate use of models . They further limit the value of the absolute quantitative outcomes of models and the significance of individual quantitative calculations . However , all participants viewed comparison of policy approaches as a fruitful use of modelled data . There are other difficulties associated with the use of such models , relating to availability of comprehensive data sets , the validity of assumptions and the compatibility and applicability of these assumptions to the modelling exercise , verification , quantifying the economic impacts associated with the different policies and policy instruments ( fiscal , monetary , regulatory ) and separating climate policy consequences from consequences of other policies ( e. g. energy , environment , social ) . Some participants believed that approaches to modelling should focus on the impact of individual policies but others felt that they should address packages of policies . At the moment most approaches focus on a portfolio of policies covering all sectors . In terms of conceptual or methodological challenges , in order to determine the impact of response measures it is necessary to compare current economic conditions with those of an idealized world in which no measures are undertaken . Additionally , most academic and government analyses of response measures are normative and focus on the implications of policies not yet implemented for developed countries . Further improvement in these models is needed in the types of policy covered , the gases modelled , and how to model trade policies and their effects , among others . Additionally , training for proper interpretation of the data from existing models needs further urgent attention . There are many other methodological complexities that may influence a model 's simulation of the impacts of response measures . First , there is the issue of defining policy choices - which polices are used ; which gas , fuel and sector is the focus of the simulation ; when do the polices take effect and how are these then modelled . Second , within the policy choices there is the question of definition of specific policies and their coverage of greenhouse gases , given that these are not equally divided among all sectors , although energy and carbon dioxide are considered to be the most important sector and gas , respectively . It is important to disaggregate emissions by sector and by gas for useful policy analysis . Based on information from the IPCC Third Assessment Report ( TAR ) , the way models generally treat policies affects the assessment differently , depending on whether they are top-down , bottom-up , General Equilibrium Models , input-output or macroeconomic models . Market policies are often stylized representations only , and market imperfections are not well represented , if at all . With regard to technology policies , most models require exogenous assumptions on behaviour and preference . Most models are seldom able to account for new technology , or to accurately estimate the geographic diffusion of existing technologies . One presenter noted that impacts to response measures differ with types of economies , and that one may not be able to generalize in this regard . The TAR suggests that there may be adverse impacts of response measures on some developing countries , and further work is needed to determine , with less uncertainty , the magnitude of the impact of response measures and to assess the impacts of response measures on individual countries . To this end , it was suggested that a specific chapter in the fourth assessment report of the IPCC could be dedicated to analysing ways to minimize the impact of response measures on developing countries . Some participants stressed the urgency for refining methodologies to assess the impacts on developing countries of policies already implemented by Annex I Parties . In order to do so , current models for evaluating the effects of response measures need to be expanded in their coverage of countries and of issues . The objective should not be to determine which model or group of models is more advanced , but rather to agree on which existing models can be used as part of a portfolio of tools for decision-making . These participants also suggested that in assessing the effects of policies , such factors as market approaches ( taxes , subsidies , cap-and-trade ) , regulations , and research and development need to be included in the simulation . A major constraint for assessment is incomplete data on specific policy information and a lack of methods to parameterize them properly . To date , the interactions between multiple policies - either within or across countries - are not fully understood . There is also an inadequate assessment of technology development . In addition , few models have been tested against present day observations . In the light of these constraints it was proposed that more modelling efforts , which would provide a detailed examination of welfare , terms of trade and socio-economic impacts on individual developing countries , be undertaken . These efforts should also strive to improve the effectiveness of current modelling activities for assessing the impact of implemented response measures in areas such as : Data sets ( technology , energy data , economic and social indicators ) ; Development of assumptions that are widely accepted based on standardized approaches so as to improve the effectiveness and speed of the process , and reduce costs ; Verification of existing data ; Improving the models so that they can address implemented rather than potential policies and measures ; Establishment of baseline data . Enhancing the participation of developing country experts in modelling efforts Several initiatives and support programmes have been launched in the past five to eight years to advance scientific knowledge on climate change impacts and vulnerability , to build capacities on methods to assess vulnerability and adaptation and identify adaptation measures , and to provide related training tools and materials , especially for developing countries . Some notable initiatives funded by the Global Environment Facility ( GEF ) were implemented since 1993 , such as the UNDP/GEF CC : Train Programme ( executed by UNITAR ) , the UNDP-PICCAP project and most recently the UNDP/GEF National Communications Support Programme . An evaluation conducted on some of the existing training initiatives on modelling revealed that current software is restricted in its coverage of observed data sets to four large geographic regions ( Europe , South Asia , North America and southern Africa ) . This resolution is too coarse for some countries or regions , especially for Small Island Developing States ( SIDS ) and mountainous countries . A second constraint is a lack of consideration of inter-annual climate variability . Two other concerns were the lack of models and related technical material in languages other than English , and the high costs to acquire modelling tools and their related training material . Developing country participants reiterated the urgent need for support for data collection . In order to maintain the quality of these methods and methodologies and update them to the needs of users , ongoing support is also needed for periodic revision , training for their utilization and interpretation , and translation and dissemination of information on the models into official UN languages for developing countries . Models applicable to developing countries are currently being developed , but there is a need for capacity-building and more involvement of experts from these countries , and in particular from the poorest economies . Such efforts are expected not only to help in customizing models to the needs of these countries , but also to integrate the results of modelling tools into policy and strategy development . Participants mentioned the following key issues as possible areas for further consideration : Utilizing national communications as a useful channel for disseminating information on modelling . Annex I Parties could include information on support for non-Annex I countries to improve their capacity in modelling activities and to assess their vulnerability under Article 4.8 and 4.9 of the Convention . Non-Annex I Parties could include in their national communications information relating to their capacity-building needs for modelling , and on activities completed or under way in this regard . Making available detailed information on the logic and data needs of individual models , and compiling and disseminating information on generic modelling methods and tools . Ensuring cost-effectiveness in funding modelling activities and disseminating modelling results , through increased collaboration among existing national , regional and international entities engaged in data gathering and data management for climate impact models , such as WMO , WHO , FAO and UNEP , as well as non-governmental organizations ( NGOs ) . For economic models , collaboration with the United Nations Statistical Office ( UNSO ) and other UN agencies , the World Bank , OECD , OPEC , IEA , and others , should be enhanced . Providing capacity-building to developing country experts for constructing and strengthening data sets , improving the quality of analytical tools , and disseminating results of these efforts in sectors that can contribute to climate change impact analysis , and for the development of models to assess impacts of response measures . As a first step , this could be accomplished by increasing the participation of developing country experts in the technical work conducted by relevant organizations such as IPCC , FAO , IEA , and OECD , and increasing cooperation on modelling activities among UN organizations and other agencies and research institutions and universities in the South . In establishing such links experts in developing countries can be trained to use the models and interpret the results , so as to be able to make the right choices using existing multilateral and bilateral arrangements . Mobilizing the process of implementation of Article 6 of the Convention on education , training and public awareness , with the objective of enhancing the participation of developing country experts in the international modelling development process , in particular in the context of Article 6 ( a ) ( iii ) and 6 ( b ) ( ii ) . Continuing research on improving model quality by building upon the work already compiled by the IPCC in the Third Assessment Report . The IPCC may also wish to consider increasing the participation of developing country experts in the preparation of future IPCC assessments on modelling activities . Compiling and disseminating information on modelling methods and tools for assessing the vulnerability to the adverse effects of climate change and the impact of the implementation of response measures under Article 4.8 of the Convention . This could include the preparation of a catalogue of existing models currently in use . The catalogue could categorize models in terms of attributes for decision-making and selection of models , including information on their use , cost , data requirements , coverage , strengths and limitations , as well as contact information . The catalogue could also clarify similarities and differences between models , and the appropriateness of the use of certain models for specific circumstances , sectors or regions , and would include examples of the successful application of such models , particularly in developing countries . Enhancing the Stakeholder consultation process at all stages of model specification , validation and acceptance . </text>
<text id="un/FCCC_SBI_2004_L27">
Submission of second and , where appropriate , third national communications from Parties not included in Annex I to the Convention Draft conclusions proposed by the Chair Recommendation of the Subsidiary Body for Implementation The Subsidiary Body for Implementation , at its twenty-first session , decided to transmit the draft text below to the President of the Conference of the Parties for further consideration . Draft decision -/CP.10 Submission of second and , where appropriate , third national communications from Parties not included in Annex I to the Convention The Conference of the Parties , Recalling , in particular , Article 4 , paragraphs 1 , 3 and 7 , Article 10 , paragraph 2 ( a ) , and Article 12 , paragraphs 1 , 5 and 7 , of the Convention , Recalling also its decisions on national communications from Parties not included in Annex I to the Convention ( non-Annex I Parties ) , in particular its decisions 10/CP.2 , 2/CP.4 , 12/CP.4 , 8/CP.5 , 31/CP.7 , 32/CP.7 and 17/CP.8 , Reaffirming that , in accordance with Article 4 , paragraph 3 , of the Convention , the developed country Parties and other developed Parties included in Annex II to the Convention shall provide new and additional financial resources to meet the agreed full costs incurred by developing country Parties in complying with their obligations under Article 12 , paragraph 1 , of the Convention , Noting that guidelines for the preparation of national communications were adopted by the Conference of the Parties at its eighth session , Noting also that in accordance with decision 17/CP.8 , non-Annex I Parties should use the guidelines contained in the annex to that decision , together with the guidance to an operating entity of the financial mechanism provided in decision 6/CP.8 , for the preparation of second and , where appropriate , third national communications and , where appropriate , initial national communications , except where Parties had initiated the process of preparing second national communications and received funding under the expedited procedures or on an agreed full-cost basis prior to the approval of the guidelines , Recognizing that the preparation of national communications is a continuing process , Recognizing also that the submission of national communications is very important for Parties to better understand climate change issues , Recognizing further the difficulties that non-Annex I Parties have had in preparing their initial national communications and the need to build capacity for using the new guidelines for the preparation of national communications from non-Annex I Parties , and the need to allocate adequate time to non-Annex I Parties for preparing their national communications , [ Acknowledging the importance of inventories of anthropogenic emissions by sources and removals by sinks of all greenhouse gases not controlled by the Montreal Protocol and measures to facilitate adequate adaptation to climate change and the possibility for non-Annex I Parties to provide updates of relevant information , as addenda to their national communications , ] Acknowledging that although the majority of non-Annex I Parties have submitted their initial national communications and some have also submitted their second national communications , a number of non-Annex I Parties are still having difficulties with the preparation and submission of their initial national communications due to both technical and resource constraints , Acknowledging that the Global Environment Facility , as an operating entity of the financial mechanism of the Convention , has agreed to fund , and has approved the funds for , the preparation of national communications , and has agreed on the Operational Procedures for Expedited Financing of National Communications from non-Annex I Parties , Invites Parties not included in Annex I to the Convention ( non-Annex I Parties ) that have not prepared project proposals for the financing of second and , where appropriate , third national communications to do so , even in advance of substantially completing their previous national communications , in order to avoid a lack of continuity in project financing ; Decides that non-Annex I Parties that have submitted their national communications should apply for the financing of their subsequent national communications at any time between three to five years of the initial disbursement of financial resources for the actual preparation of their previous national communications , except for those Parties that had this initial disbursement for the previous national communication more than five years ago , which should apply before 2006 ; this applies to the financing of second , and where appropriate third , national communications ; Decides that non-Annex I Parties shall submit their second and , where appropriate , third national communication within [ four ] years of the initial disbursement of financial resources for the actual preparation of the national communication , in accordance with Article 4 , paragraph 3 , of the Convention , under the expedited procedures or standard approved procedures , on an agreed full cost basis , but that Parties that are least developed countries may submit their second national communications at their discretion ; Decides to discuss the further implementation of Article 12 , paragraph 5 , at the [ fourteenth ] session of the Conference of Parties . English </text>
<text id="un/HRI_CORE_1_ADD117">
[ 31 January 2002 ] Paragraphs Page History 2 - 41 4 Constitution of the Republic of Azerbaijan 42 - 48 11 C. Aggression by the Republic of Armenia against the Republic of Azerbaijan 49 - 53 11 Efforts to mediate a settlement to the conflict 54 - 58 12 The Republic of Azerbaijan lies in the borderlands of Asia and Europe . It is situated in the south-eastern part of the southern Caucasus and shares borders in the north with the Russian Federation , the south with the Islamic Republic of Iran , the west with Turkey , Georgia and Armenia and in the east its neighbours across the Caspian Sea are Kazakhstan and Turkmenistan . The Autonomous Republic of Naxçivan is part of the Republic of Azerbaijan . History Scholars consider Azerbaijan to include “ the land populated today by the Azeri Turks , the people who inhabit the region stretching from the northern slopes of the Caucuses mountains along the Caspian Sea to the Iranian plateau ” . Azerbaijan is among the areas of earliest human settlement , with evidence of human habitation since the Palaeolithic age . Settlements engaging in agriculture and livestock-raising were widely distributed about this area in the seventh and sixth millennia BC . Rock paintings in Gobustan near Baku are dated by scholars to the end of the seventh and beginning of the sixth millennia BC . The well-known Norwegian explorer Thor Heyerdal , who made special trips to Baku in 1979 and 1994 to study these rock paintings , believes that the shores of the Caspian Sea were the cradle for the civilization which then spread over water , southward and northward . Heyerdal found support for his hypothesis not only in the Gobustan petroglyphs of reed boats , remarkably similar to those depicted centuries later by the Vikings on the walls of caves in Norway , but also in sagas written down in the middle ages . The Gobustan rock paintings of boats surmounted by an image of the sun also attest irrefutably to the ties between the early settlements of Azerbaijan and the Sumero/Akkadian civilization of Mesopotamia , whose cultural legacy includes very similar depictions . In the third millennium BC and the early years of the second millennium BC , signs appear of the emergence of the first class societies , with a proto-urban civilization and embryonic state structures . It is at this time that the tribal alliances were formed of the Aratta , the Gutians and the Lullubites . According to Sumerian cuneiform sources , the first State to arise on the territory of historical Azerbaijan was the state of Aratta , which came into being in the first half of the third millennium BC in the area to the south and south-east of lake Urmia . From about 2300 BC , the second State of ancient Azerbaijan sprang up in the area south of lake Urmia - the state of Lullubum . The Gutian state was formed later in the second half of the third millennium BC in the area west and south-west of lake Urmia . In 2175 BC , the Gutians conquered Sumer and Akkad and ruled over them for the next 100 years . The ancient states of Azerbaijan , which maintained political , economic and cultural ties with Sumer and Akkad and formed part of the wider civilization of Mesopotamia , were governed by dynasties of Turkic descent . The Turkophone peoples which have inhabited the area of Azerbaijan since ancient times were fire-worshippers and adherents of one of the world 's oldest religions - Zoroastrianism . The country 's name , in its current form , is derived from a Turkic collocation meaning “ land , noble people , keepers of the flame ” . Over the period from the late ninth to the seventh centuries BC , the Mannaean kingdom held sway in the area of lake Urmia . The Cimmerian-Scythian-Saka kingdom flourished in the seventh and sixth centuries BC in the south-west of Azerbaijan . In the 670s BC , the Mannaean kingdom arose in the territory of Azerbaijan and was overthrown by the Persian Achaemenid kingdom in the mid-sixth century BC . A vital role was played in Azerbaijani history by the kingdom of Atropatene , which came into existence in the southern part of the country in the 520s BC and which was heavily influenced by Hellenism . The Caucasian Albanian state was created in the north of Azerbaijan in the third millennium BC , with the river Araxes as its southern frontier . This state successfully held out against the constant aggression of the Armenian state , which was then destroyed by the Romans in 66 BC . The people of Albania included a number of different nationalities , most of which spoke Turkic languages . Christianity was adopted in Albania in 313. The territory of Albania also included the mountainous part of Karabagh , which was known at that time as Artsakh . Over the period from the first to the fourth centuries , when the entire Caucasus area was under the Roman yoke , Albania remained the only independent state and with its political independence came a flowering of Albanian learning , language and literature . This same period say the growing strength and influence of the autocephalous Albanian Catholicosate and of the Albanian Church in general , which was independent of the other Christian churches and even propagated Christianity among the north Caucasian and Turkophone peoples . Following the invasion by the Arabs , the dominant religion from the early eighth century in Azerbaijan became Islam . Most of the Albanians also converted to Islam and only a minority retained their former religion . Bowing to the influence of the Byzantine Empire in the southern Caucasus , the Albanian Church , together with the Georgian Church , had accepted the dyophysite doctrine shortly before the Arab invasion . To create a barrier to the influence of Byzantine , the Caliphate - enlisting the help of the Armenian Church - steered the Albanian Church towards monophysitism and brought it under the dominion of the monophysite Armenian Gregorian Church , opening the way for the subsequent gradual Gregorianization of the Albanians living in the mountainous areas of Karabagh - or Artsakh . The cohabitation of the populations of Albania and Atropatene within the confines of a single state and their profession of one and the same religion helped ensure the consolidation of the people of Azerbaijan . The notions of freedom , independence and universal equality nurtured the Hurramite movement , led by Babak , which flourished in Azerbaijan in the early ninth century . Following the anti-Caliphate rising by the local population , several new states arose in the territory of Azerbaijan in the ninth century , the most powerful of which was the State of Shirvan , with its capital at Shemakha , which was ruled by the Shirvanshah dynasty . This endured until the sixteenth century and played an enormous role in the history of medieval Azerbaijan . The independent states of the Sajids , Salarids , Ravvadids ( with their capital at Tabriz ) and Shaddadids ( with their capital at Ganja ) arose from the ninth to the eleventh centuries in the territory of Azerbaijan . Azerbaijan was ruled by the Seljuk dynasty from the end of the eleventh century . Over the period 1136-1225 , the Atabek Eldegiz state held sway in Azerbaijan . The sharing by the country 's indigenous population of a common Turkic language and Turkic provenance and their adherence to the same Islamic faith made possible a process of consolidation of the Azerbaijani nation which reached its culmination in the eleventh and twelfth centuries . This same period saw the greatest flowering of the culture of Azerbaijan , which bequeathed to the world an array of illustrious philosophers , architects , poets and scholars . The crowning achievement of Azerbaijani social and cultural thought of that period was the work of Nizami Ganjavi ( 1141-1209 ) , poet and philosopher , now one of the treasures of the world 's cultural heritage . The twelfth and thirteenth centuries saw the rise to prominence , in the mountainous regions of Karabagh , of the Khachen principality , ruled by the Albanian kings . The rule of Hasan Jalal ( 1215-1262 ) ushered in an Albanian renaissance and saw the completion of the construction of Gandzasar monastery complex , whose cathedral was to become the centre of the early church and whose consecration was presided over by the Catholicos of Albania . From the mid-thirteenth century , the Azerbaijani states became vassels of the Mongol Hulagid dynasty ( 1258-1356 ) . In the mid-fourteenth century , following an uprising by the local population to cast off the yoke of the invaders , the local Jalairid feudal lords took up the reins of power and , with the support of the Azerbaijani nobility , established the Jalairid state ( 1359-1410 ) . From the end of the fourteenth century , Azerbaijan was repeatedly invaded by Tamberlaine and served as the theatre for his battles with the Golden Horde . The Turkmen dynasties of Qara-Qoyunlu and Aq-Qoyunlu ruled over Azerbaijan in 1410-1468 and 1468-1501 and under them Azerbaijan grew significantly in power . In 1501 , the Safavid state was formed in Azerbaijan , named after the ruling dynasty , with its capital at Tabriz . Under this dynasty , all the lands of Azerbaijan were united , for the first time in their history , into a single Azerbaijani state . The territory of the Safavid state stretched from the Amu Darya river to the Euphrates , and from Derbent to the shores of the Persian Gulf . This polity was created and developed as an essentially Azerbaijani state and all political power remained in the hands of the Azerbaijani feudal nobility . Senior court officials , military generals and provincial governors were all appointed from among the Azerbaijani nobility . The army was made up from the militia of the most powerful Azerbaijani clans . Azeri was the official language of the Safavid state . By the end of the sixteenth century , the capital of the Safavid state had been transferred to Isfahan and its shah now drew his support primarily from the Persian nobility . The State , while ruled by an Azerbaijan dynasty , took on an increasingly Persian aspect . In the 1740s , with the weakening of the power exercised by the Persian shahs over the territory of Azerbaijan , the country disintegrated into some 20 khanates , namely , Ardabil , Baku , Ganja , Derbent , Erivan , Javad , Karabagh , Karadagh , Khoi , Maku , Maragin , Nakhichevan , Quba , Salyan , Sarab , Shirvan , Sheki , Tabriz , Talysh and Urumi . In addition to these khanates , the country was further subdivided into the sultanates of Kazah-Samshadil , Borchala , Ilisu , Araxes , Gutgashen and Gabala . Upper Karabagh , which was inhabited by Azerbaijani Muslims and Albanian Christians , formed an integral part of the Azerbaijani khanate of Karabagh , which covered the territories lying between the Kura and Araxes rivers . The local duchies - or “ melikdoms ” - of Dizak , Varanda , Khachen , Jeraberd and Gulistan , all of which lay within the mountainous regions of Karabagh , also formed part of this khanate , to which their inhabitants owed allegiance as vassals . At the end of the eighteenth and in the first third of the nineteenth centuries , Azerbaijan was fought over by the Persian , Russian and Ottoman empires , each eager to secure hegemony over this country whose geopolitical situation lent it significant strategic advantages . A number of the khanates rose in arms to defend their sovereignty , while others were forced , in an effort to defend their own interests , to conclude agreements reducing them to the status of vassaldom . Thus , on 14 May 1805 , a treaty was signed on the banks of the river Kura with the Azerbaijani khan , Ibrahim Halil , under which the independent Azerbaijani khanate of Karabagh was placed under Russian overlordship . This treaty has particular resonance today , since it demonstrates that Karabagh historically formed part of Azerbaijan . The first Russo-Persian war of 1804-1813 , fought to establish dominance over the Azerbaijani khanates , resulted in the first division of Azerbaijani territories between Russia and Persia . The peace treaty of Gulistan , signed on 12 October 1813 by Russia and Persia , gave legal recognition to the effective annexation by Russia over the period 1800-1806 of the khanates of northern Azerbaijan , with the exception of Nakhichevan and Erivan . The second Russo-Persian war of 1826-1828 led , on 10 February 1828 , to the signing of the Turkmanchai peace treaty , under which Persia officially renounced its claims to northern Azerbaijan and finally recognized its annexation , with the inclusion of the Nakhichevan and Erivan khanates , by Russia . It is important to stress that all the khanates listed above , including Karabagh , were annexed to Russia as purely Azerbaijani possessions . They were Azerbaijani by virtue of their predominantly Azeri populations and the ethnic composition of their dominant feudal elite ( the khans themselves , the major landowners , the clergy etc. ) . Under the Treaty of Turkmanchai and the peace treaty concluded in Edirne in 1829 , the Armenians then inhabiting Persia and the Ottoman empire were relocated to Azerbaijan , primarily to the khanates of Nakhichevan , Erivan and Karabagh . Thus , the Russian scholar K. Shavrov records that , over the period 1828-1830 alone , some 40,000 Persian and 84,000 Turkish Armenians were relocated in the Trans-Caucasus , where they were settled in the best indigenous lands of the Yelisavetpol ( Karabagh ) and Erivan provinces , where the Armenian population had previously been negligible and where they were allocated 200,000 dessiatines ( 225,000 hectares ) of State land . In his notebooks , the Russian diplomat and playwright Alexander Griboedov wrote : “ For the most part , the Armenians were settled on the estates of Mohammedan landowners ( … ) . These new settlers are crowding out the Mohammedans ( … ) . We have also given careful thought to the council which must be given to the Mohammedans , so as to reconcile them to this aggravation , which will not be long in duration , and to dispel any apprehensions which they may have that the Armenians will take permanent possession of the lands where they have been initially settled . ” The American academic Justin McCarthy adduces the following facts about the settlement of the Southern Caucasus and , in particular , Azerbaijan , by Armenians . Between 1828 and 1920 , in pursuit of a policy designed to change the entire demographic make-up of Azerbaijan so that Armenians would outnumber Azerbaijanis , more than 2 million Muslims were forcibly expelled and an unknown number killed . On two occasions , in 1828 and 1854 , the Russians invaded eastern Anatolia and on both occasions they left , taking with them 100,000 Armenian sympathizers to the Caucasus , where they took the place of Turks - i. e. Azerbaijanis - who had emigrated or died . In the war of 1877-1878 , Russia seized the district of Kars-Ardahan , driving out the Muslim population and settling 70,000 Armenians in their homes . Some 60,000 Armenians resettled in the Russian Caucasus during the troubles of 1895-1896 . Finally , the migrations of the First World War resulted in an almost even exchange of 400,000 Armenians from eastern Anatolia for 400,000 Muslims from the Caucasus . According to McCarthy 's information , between 1828 and 1920 some 560,000 Armenians were resettled in Azerbaijan . In other words , it was actually after the conquest of the southern Caucasus by Russia that the Armenian population of the Azerbaijani lands north of the river Araxes increased so dramatically . When we look at Karabagh , we see from official records for 1810 - in other words , shortly before its annexation by Russia - that the khanate of Karabagh had some 12,000 households , of which 9,500 were Azerbaijani and a mere 2,500 Armenian . According to data for 1823 , there was one town in the Karabagh khanate - Shusha - and some 600 villages , 450 of which were Azerbaijani and about 150 Armenian , with a total population of some 90,000 . The relative figures for Azerbaijani and Armenian households in Shusha were 1,048 and 474 , and in the countryside , 12,902 and 4,331 , respectively . The Armenians living in Karabagh were in fact descendents of the local Albanian population , which had been extensively Armenianized . Thus , the Armenian writer B. Ishkhanian points out that the Armenians residing in Nagorny Karabakh are in part indigenous , descended from the ancient Albanians , and in part refugees from Turkey and Persia , for whom the Azerbaijani lands offered a refuge from persecution and oppression . Under a decree promulgated by Tsar Nicholas I on 21 March 1828 , the Azerbaijani khanates of Nakhichevan and Erivan were dissolved and replaced by a new administrative entity known as the “ Armenian oblast ” , administered by Russian officials ; in 1849 , the Armenian oblast was renamed the province ( “ guberniya ” ) of Erivan . In pursuit of their ultimate goals , the Armenians persuaded the Russian authorities to abolish the Albanian Christian patriarchate , which had been in operation in Azerbaijan , and to transfer its property to the Armenian Church . Following the loss of their state sovereignty and distinct confessional identity , the local Albanian population in the western regions of former Albania - the Karabagh region - into which Armenian settlers continued to pour , gradually started to undergo a process of Gregorianization , or Armenianization . After the revolutionary events of 1917 in Russia , the processes of disintegration of the country became more pronounced and the conditions were ripe for the formation , in outlying ethnic regions of the former Russian Empire , of independent States . Thus , on 28 May 1918 , the Azerbaijani Democratic Republic was proclaimed in the territory of the eastern part of the southern Caucasus - the first parliamentary democracy in the Islamic east - which was to play a historic role in the renaissance and formation of the sense of ethnic identity and statehood of the Azerbaijani nation . The development of the Azerbaijani Democratic Republic , both as a nation and as a State , was based on the doctrine of “ Azerbaijanism ” , which hinged on the principles of modernism , Islamism and Turanism , symbolizing the Azerbaijani people 's aspiration for progress based on preservation of their adherence to Islamic civilization and Turkic culture and on their separate ethnic identity . In its brief existence of less than two years , the multi-party Azerbaijani parliament and the coalition Government managed to take a number of important steps in the process of nation-building and the development of statehood , and in such areas as education , formation of an army , development of independent financial and economic systems and securing international recognition for the young republic as a full member of the international community of nations . On 11 January 1920 , the Paris Peace Conference , with the Treaty of Versailles , accorded de facto recognition of the independence of the Azerbaijani Republic , to whose capital - Baku - 20 countries had already sent their representatives . In late 1919 and early 1920 , however , the political situation of the Azerbaijani Democratic Republic - both at home and abroad - worsened considerably . The country found itself caught up in a ferocious tug-of-war between the countries of the Entente , Turkey , Russia and Persia , each pursuing its own geopolitical goals in this strategically important and oil-rich area . The political decision by the Bolshevist Government of the Russian Socialist Federative Republic ( RSFSR ) not to recognize the Azerbaijani Democratic Republic , the deployment of the Eleventh Red Army on the frontiers of the Azerbaijani Republic in Spring 1920 , the aggression waged by Dashnak-ruled Armenia against Azerbaijan in Karabagh and Zangezur , the terrorist strikes by Armenian groups and the Bolsheviks against the peaceful Azerbaijani population inside Azerbaijan and the social and economic crisis gripping the country - all these factors combined to bring about the weakening of the Azerbaijani Democratic Republic and led to the occupation of its capital by the Eleventh Army on 27-28 April 1920. As stated in a telegram from the general staff of the Caucasian front to the Eleventh Army command , dated 1 May 1920 , RSFSR troops had been instructed to take possession of the entire territory of Azerbaijan lying within the confines of the former Russian Empire , but without crossing the Persian border . The 70 years during which it formed part of the Union of Soviet Socialist Republics ( USSR ) marked a new , important stage in the development of Azerbaijani statehood , during which the Azerbaijan Soviet Socialist Republic forged ahead in its social , economic and cultural development . At the same time , the Soviet period also saw many negative trends emerge in Azerbaijan , as elsewhere throughout the USSR . At the economic level , the country became a reservoir of fuel , raw materials and agricultural produce for the Soviet economy . At the cultural level , the imposition of the Cyrillic alphabet in the place of the Latin alphabet severed the country 's ties with the fountainhead Azerbaijani literature and culture . The Soviet regime was at pains to suppress any efforts by the Azerbaijani intelligentsia to manifest their separate ethnic identity and to study the true history of their country . During the Soviet period , the territories of Zangezur , Gekcha , part of Naxçivan and other districts were hived off from Azerbaijan and attached to neighbouring Armenia . As a result , the country 's area , which during the period of the Azerbaijani Democratic Republic , in 1920 , had measured 114,000 square kilometres was reduced during the period 1920-1921 to 86,600 square kilometres . In addition , on 7 July 1923 , on the initiative of the Moscow leaders of the Bolshevist part , the so-called Nagorny Karabakh autonomous region , with a predominantly Armenian population , was artificially carved out of a part of the territory of historical Karabagh , the majority of whose population had been Azerbaijanis . That decision marked the first step in the political campaign to amputate Nagorny Karabakh from the rest of Azerbaijan . During the years 1988-1990 , the national democratic movement in Azerbaijan campaigned vigorously for the restoration of the country 's independence . With a view to suppressing this movement , on 20 January 1990 , with the approval of the Soviet leadership under Mikhail Gorbachev , Soviet army units were dispatched to Baku . Their reprisals , which were conducted with uncommon savagery , left hundreds of innocent Azerbaijani citizens dead and wounded . A state of emergency was declared in the country and this remained in force until mid-1991 . Notwithstanding these setbacks , the untiring struggle for independence by the patriotic forces of the Azerbaijani people culminated in the adoption on 31 August 1991 , by the Supreme Council of the Republic of Azerbaijan , of a declaration on the restoration of the State independence of the Republic of Azerbaijan . On 18 October 1991 saw the passage of the act establishing the State independence of the Republic of Azerbaijan , which set out the foundations for the statehood of an independent Azerbaijan and determined the principles of its political and economic structure . With that act , the Republic of Azerbaijan once again , after a 71-year interval , became an independent subject of international law . Constitution of the Republic of Azerbaijan Following a referendum on 12 November 1995 , the new Constitution of the Azerbaijani Republic was adopted and entered into force on 5 December 1995. The country 's basic law was developed in line with the fundamental principles and norms of international law . As stipulated by article 1 of the Constitution , “ In the Republic of Azerbaijan , the Azerbaijani people shall be the sole source of State power ” . Under article 2 of the Constitution , the people of Azerbaijan shall exercise their sovereign right directly through nationwide voting ( referendums ) and through representatives elected on the basis of universal , equal and direct suffrage by free , secret and personal ballot . Article 7 of the Constitution stipulates that the Azerbaijani State shall be a democratic , constitutional , secular and unitary republic . In Azerbaijan , the power of the State shall be restricted in domestic matters only by the country 's law and , in foreign affairs , only by the provisions arising from international treaties to which the Republic of Azerbaijan is a party . State power in the Republic of Azerbaijan shall be based on the principle of the following division of powers : ( a ) Legislative power shall be exercised by the Milli Meclis ( parliament ) of the Republic of Azerbaijan ; ( b ) Executive power rests with the President of the Republic of Azerbaijan ; ( c ) Judicial power shall be exercised by the courts of the Republic of Azerbaijan . Pursuant to the Constitution , the legislature , executive and judiciary shall interact with one another and be independent within their various jurisdictions . Article 8 of the Constitution states that the President of the Republic of Azerbaijan shall be the head of State . For the purpose of organizing the administration of executive power , the President of the Republic shall establish a cabinet of ministers , which shall serve as the supreme organ of executive power of the President of the Republic and shall be answerable and subordinate to the head of State . As stipulated by article 125 of the Constitution , judicial power in Azerbaijan shall be exercised only by the courts and on the basis of due process . The courts comprise the Constitutional Court , the Supreme Court , the Economic Court , and the general and special courts . C. Aggression by the Republic of Armenia against the Republic of Azerbaijan While still part of the USSR , Azerbaijan already encountered threats against its territorial integrity and security . In February 1988 a decision was taken by the regional council of the Nagorny Karabakh autonomous region of the Azerbaijan SSR , without the participation of any Azerbaijani deputies , for the withdrawal of the Nagorny Karabakh autonomous region from Azerbaijan and its annexation to Armenia . On 1 December 1989 , the Supreme Soviet of the Armenian SSR took a decision , which has never been rescinded , on the annexation of the Nagorny Karabakh region of Azerbaijan to Armenia . These decisions contravene the constitutions of the USSR and the Azerbaijan SSR . In 1988 , Azerbaijanis living in Armenia started to be driven out of the country . The Soviet authorities proved incapable of halting these unconstitutional acts by Armenia and preventing raids into Azerbaijani territory by paramilitary formations and terrorist groups . At the time the Nagorny Karabakh conflict first erupted , there were some 186,100 people living in the region , of whom 138,600 were Armenians ( 73.5 per cent ) and 47,500 Azerbaijanis ( 25.3 per cent ) . Full-scale military operations commenced in late 1991 and early 1992. Armenian military units launched combat operations in Nagorny Karabakh with the use of the latest weapons and these culminated in February 1992 with the seizure of the town of Khojaly , in the course of which more than 600 civilians were killed , including women , children and old people , and with the occupation in May 1992 of the town of Shusha and of Shusha district . Following these actions , the entire Azerbaijani population was expelled from Nagorny Karabakh and the occupation of the territory was completed . With the seizure of Lachin in May 1992 , the territory of Nagorny Karabakh was joined to Armenia . After this , hostilities spread further through Azerbaijan , passing beyond the administrative frontiers of the Nagorny Karabakh region , and also crossing the Armenian-Azerbaijani frontier . A further six Azerbaijani districts were occupied by Armenia . As a result , Armenian aggression against the Republic of Azerbaijan led to the occupation of more than 17,000 square kilometres , constituting some 20 per cent of the country 's territory , more than 50,000 people were wounded or left disabled and more than 18,000 people killed , and 877 settlements , 100,000 homes , more than 1,000 economic facilities , more than 600 schools and colleges , 250 medical centres and most of the architectural monuments situated within the occupied area were looted or destroyed . As a result of Armenian aggression and ethnic cleansing of Azerbaijanis , both from the territory of Armenia itself and from occupied Azerbaijani lands , there are now some 1 million refugees and displaced persons in Azerbaijan . Efforts to mediate a settlement to the conflict Efforts to mediate a settlement to the Armenian-Azerbaijani conflict were launched in February 1992 in the framework of the Conference on Security and Cooperation in Europe ( CSCE ) . At their meeting in Helsinki on 24 March 1992 , the CSCE Council of Ministers decided to convene a conference on Nagorny Karabakh in Minsk , under the auspices of CSCE as the standing body for negotiations to reach a peaceful settlement to conflicts on the basis of the Conference 's principles , obligations and provisions . In its resolutions 822 ( 1993 ) of 30 April 1993 , 853 ( 1993 ) of 29 July 1993 , 874 ( 1993 ) of 14 October 1993 and 884 ( 1993 ) of 12 November 1993 , the United Nations Security Council condemned the occupation of the territory of Azerbaijan Republic , reaffirmed respect for the sovereignty , territorial integrity and inviolability of the borders of the Azerbaijani Republic and the inadmissibility of the use of force for the acquisition of territory , and demanded the immediate cessation of armed hostilities and hostile acts , as well as the immediate , complete and unconditional withdrawal of all occupying forces from the occupied districts of Azerbaijan . A ceasefire has been in place since May 1994. At the CSCE Budapest Summit on 5 and 6 December 1994 , it was decided that the heads of State and Government of the countries members of CSCE would launch a process under the co-Chairmen of the Minsk Conference to coordinate all efforts to mediate a resolution of the conflict within the framework of CSCE . The Budapest Summit set the Chairman-in-Office of CSCE the task of conducting negotiations for the conclusion of a political agreement on the cessation of the armed conflict , the implementation of which would eliminate major consequences of the conflict and permit the convening of the Minsk Conference . A decision was also taken at the Summit to deploy a multinational CSCE peacekeeping force , following agreement among the parties for cessation of the armed conflict , and to convene a high-level planning group to prepare the envisaged peacekeeping operation . At the Lisbon Summit of the Organization for Security and Cooperation in Europe ( OSCE ) , the following principles were worked out for settling the armed conflict , recommended by the co-Chairmen of the OSCE Minsk Group and supported by all the OSCE member States , with the exception of Armenia : ( a ) Territorial integrity of the Armenian Republic and the Azerbaijani Republic ; ( b ) Legal status of Nagorny Karabakh as defined by an agreement based on self-determination and affording Nagorny Karabakh the highest degree of self-government within Azerbaijan ; ( c ) Guaranteed security for Nagorny Karabakh and its entire population , including mutual responsibility to ensure that all parties observe the provisions of the settlement . In 1999 , direct talks were instituted between the Presidents of Armenia and Azerbaijan but were prevented from reaching any settlement of the conflict by the obstructive position taken by the Armenian side . Despite the categorical requirements of the United Nations Security Council and other organizations , Armenia continues to the present day to occupy areas of Azerbaijan and to build up its military potential in those areas . As stipulated by article 12 of the Constitution of the Republic of Azerbaijan , it is the paramount objective of the State to uphold human and civil rights and freedoms . Chapter III of the Constitution is devoted to fundamental human and civil rights and freedoms . The chapter comprises the following articles : A rapid process of legal and judicial reform has been conducted in Azerbaijan , embracing the adoption of , such instruments as the Criminal Code , the Code of Criminal Procedure , the Civil Code , the Code of Civil Procedure and the Penal Enforcement Code . In addition , statutes have been adopted on the Constitutional Court , on the courts and judges , on the procuratorial system , on the bar and the legal profession , on the police , and on other important matters . A totally reconfigured three-stage judicial system has been set in place . New judges have been selected on the basis of examinations and appointed to their posts . The country 's penitentiary system has been brought into line with international standards . An act has been passed establishing an ombudsman 's office and amendments made to the acts on the Central Electoral Commission and on the mass media . Appropriate changes have been made to the country 's laws to take account of the views and recommendations of international organizations . Section VIII of the Azerbaijani Criminal Code , which entered into force on 1 September 2000 , deals with offences against the individual . It contains chapters on offences against life and health ( chap . 18 , arts . 120-143 ) ; the freedom and dignity of the individual ( chap . 19 , arts . 144-148 ) ; the sexual inviolability and sexual freedom of the individual ( chap . 20 , arts . 149-153 ) ; constitutional human and civil rights and freedoms ( chap . 21 , arts . 154-169 ) ; and matters relating to juveniles and families ( chap . 22 , arts . 170-176 ) . The procedures for legal defence are also set forth in the Code of Criminal Procedure , the Penal Enforcement Code and the statutes on the consideration of applications by citizens , of 10 June 1997 ; on compensation for injury caused to individuals through the unlawful acts of the initial inquiry , pre-trial investigation , procuratorial and court authorities , of 29 December 1998 ; and on the submission of complaints to the courts regarding decisions and actions or omissions which infringe citizens ' rights and freedoms , of 11 June 1999. As stated in article 1 of the Unlawful Acts by the Initial Inquiry , Pre-trial Investigation , Procuratorial and Court Authorities ( Compensation to Individuals ) Act , compensation must be paid for any injury caused to any person in the territory of the Republic of Azerbaijan through the unlawful actions of the country 's initial inquiry , pre-trial investigation , procuratorial or court authorities . The act contains a list of such unlawful actions . The Decision and Actions or Omissions Infringing Civil Rights and Freedoms ( Complaints to the Courts ) Act sets out rules for the lodging of challenges in the courts against decisions and actions or omissions which infringe the rights and freedoms enjoyed by Azerbaijani citizens established by the Constitution and by international treaties to which the Republic of Azerbaijan is a party and also contains provisions on judicial procedures to uphold the rights and freedoms of citizens . Pursuant to article 1 of the Decisions and Actions or Omissions Infringing Civil Rights and Freedoms ( Complaints to the Court ) Act , all citizens of the Republic of Azerbaijan who consider that their rights and freedoms have been infringed as a result of decisions and actions or omissions by State authorities , local authorities , enterprises , institutions , organizations , voluntary associations or officials , shall be entitled to appeal to the courts . Aliens and stateless persons may appeal to the appropriate court in the manner prescribed by law , except as otherwise stipulated in international treaties to which the Republic of Azerbaijan is a party . A court ruling which has entered into force shall be binding on all State and local authorities , enterprises , institutions , organizations , voluntary associations and officials . In the event that a court ruling is not observed , the court shall adopt the appropriate measures , as prescribed by Azerbaijani legislation ( see article 7 of the Decisions and Actions or Omissions Infringing Civil Rights and Freedoms ( Complaints to the Courts ) Act . The Parties to Criminal Proceedings ( State Protection ) Act of 11 December 1998 sets out a system of measures to ensure the safety and social protection of victims and witnesses in criminal proceedings and of other parties to such proceedings . The safety measures defined by this act shall be applied whenever the safety of those persons cannot be guaranteed by other means . The Republic of Azerbaijan is a party to all the major multilateral human rights treaties and regularly submits reports on its implementation of the provisions of those treaties to the appropriate treaty bodies . On 25 December 2001 , the Azerbaijani Parliament ratified the European Convention for the Protection of Human Rights and Fundamental Freedoms . Under the Azerbaijani legal system , the provisions of international treaties may be cited in the courts and in other administrative bodies . Pursuant to paragraph 2 of article 12 of the Azerbaijani Constitution , the human and civil rights and freedoms enumerated in the Constitution shall be exercised in accordance with the international treaties to which the Republic of Azerbaijan is a party . Paragraph 2 of article 148 of the Constitution states that international treaties to which the Republic of Azerbaijan is a party form an integral part of the legislative system of the Republic of Azerbaijan . Article 151 of the Constitution stipulates that , in the event of conflict between the laws and regulations forming part of Azerbaijani law ( except for the Constitution and statutes adopted by referendum ) and the provisions of international treaties to which the Republic of Azerbaijan is a party , the international treaty provisions shall prevail . In accordance with the presidential decree of 22 February 1998 on measures to uphold human and civil rights and freedoms , the Cabinet of Ministers of the Republic of Azerbaijan and the President 's own executive office are responsible , together with the appropriate State authorities , for taking the necessary steps , in connection with the legal reforms currently under way , to ensure that the country 's laws and regulations are fully consistent with international human rights standards . With a view to promoting and protecting human rights , the President of Azerbaijan has promulgated a number of decrees , including on a State human rights programme ; on additional measures to uphold the freedom of speech , opinion and information ; and on celebrations for the fiftieth anniversary of the Universal Declaration of Human Rights . In February 1998 , on the recommendation of the President , the Azerbaijani Parliament abolished the death sentence in Azerbaijan . Under the International Treaties of the Republic of Azerbaijan ( Conclusion , Application and Denunciation Procedure ) Act , the Republic of Azerbaijan is required to comply faithfully with its international treaties in accordance with the rules of international law . Article 17 of that act stipulates that the Cabinet of Ministers , ministries , State committees , departments and other government agencies of the Republic of Azerbaijan with jurisdiction over the various issues governed by the country 's international treaties shall be responsible for ensuring compliance with the obligations entered into under such treaties . Article 25 of the International Treaties of the Republic of Azerbaijan ( Conclusion , Application and Denunciation Procedure ) Act stipulates that international treaties of the Republic of Azerbaijan which have been ratified , approved or adopted in accordance with the provisions of the Act , or international treaties to which the Republic of Azerbaijan has acceded , shall be published , on application by the Ministry of Foreign Affairs , in the Gazette of the Milli Meclis and in the official State newspaper of the Republic of Azerbaijan . International treaties of the Republic of Azerbaijan whose authentic texts have been drawn up in foreign languages shall be published in one of these languages together with an official translation into Azeri . Article 26 of the same act requires all international treaties of the Republic of Azerbaijan to be registered by the Ministry of Foreign Affairs in the register of international treaties of the Republic of Azerbaijan . The Ministry of Foreign Affairs is also responsible for registration of all the country 's international treaties with the Secretariat of the United Nations or with the relevant offices of other international organizations . The Ministry of Justice includes among its services a department of legislation and legal publicity , one of whose responsibilities is to conduct public awareness measures relating to legal matters . To this end , employees of the department publish articles in the press and make presentations on television . Reports by the Republic of Azerbaijan under the international human rights treaties to which the country is a party are prepared by the Government in accordance with presidential decrees and decisions by the Cabinet of Ministers and are submitted to the Secretary-General of the United Nations by the Ministry of Foreign Affairs . For the purpose of preparing these reports , working groups are set up , by presidential order , which include among their members representatives of the relevant State agencies . The services of representatives of non-governmental organizations and independent experts are also enlisted in the preparation of these reports . The process of preparing these reports and their submission by government delegations to the treaty bodies of the United Nations is widely covered in the media . In 1998 , with the assistance of the Azerbaijani National Commission for UNESCO , a compilation of United Nations human rights treaties was published in the Azeri language . In 2001 , the Ministry of Justice issued a compilation of human rights instruments , including international treaties , presidential decrees and orders by the Ministry of Justice relating to human rights , the prevention of torture and respect for the rights of convicted persons in places of detention in accordance with international standards . This compilation is designed to be used by all the country 's law-enforcement agencies , correctional facilities and courts . Azeri translations of international human rights instruments and also scientific articles on various aspects of international human rights law are regularly published in the journals Vozrozhdenie - XXI vek and Mezhdunarodnoe pravo , published by the Institute for Nation-Building and International Affairs and the Association for International Law and International Relations . The technical assistance programme for Azerbaijan launched by the Office of the United Nations High Commissioner for Human Rights also contains provision for the dissemination of information about international human rights instruments . Notes HRI/CORE/1/Add.117 HRI/CORE/1/Add.117 Tadeusz Swietochowski , Russia and Azerbaijan : A Borderland in Transition ( New York , Colombia University Press , 1995 ) , p. 1. Trud , 26 April 1995. Shavrov , Novaya ugroza russkomu delu v Zakavkazye : rasprodazha Mugani inorodtsam , St. Petersburg , 1911. A. S. Griboedov , Gore ot uma . Pis'ma i zapiski , Baku , 1989 , p. 387. Justin McCarthy , “ Armenian terrorism : History as poison and antidote ” , in : Proceedings of the Symposium on International Terrorism , Ankara , 1984 , pp . 85-94 . Prisoedinenie vostochnoi Armenii k Rossii , vol . 1 , Yerevan , 1972 , p. 562. Opisaniya Karabakhskoi provintsii , sostavlennogo v 1823 g. deistvitenl'nym statskim sovetnikom Mogilevskim i polkovnikom Ermolovym , Tiflis , 1866. B. Ishkhanian , Narodnosti Kavkaza , Petrograd , 1916. </text>
<text id="un/HRI_CORE_1_ADD123">
core document forming part of the reports of states parties latvia [ 26 February 2002 ] Paragraphs Page General information The Republic of Latvia is an independent and democratic State situated in north-eastern Europe on the eastern coast of the Baltic Sea covering 64,589 square kilometres . The State borders with the Republic of Estonia in the north , with the Republic of Lithuania in the south and with the Republic of Belarus and the Russian Federation in the east . The landscape of the country is marked by lowland plains and rolling hills and most of the countryside is less than 100 metres above sea level . The country historically and culturally is divided into four regions : Kurzeme , Latgale , Zemgale and Vidzeme . There are 7 cities , 69 towns , 26 districts and 483 local municipalities in Latvia . The capital of the Republic of Latvia is Riga . The official language of the State is Latvian , which is one of the oldest of the Indo-European languages and is spoken by approximately 70-75 per cent of the population . The national currency is the lats ( LVL ) , officially pegged to the SDR ( Special Drawing Rights ) basket of currencies at the rate of 0.7997 SDR/LVL . The table below represents the basic statistical data on the characteristics of the Latvian population for the year 2000/01 . Table ( continued ) Demographic characteristics In year 2000 the population census was held throughout the country . There were 2,375,000 inhabitants , approximately 1,093,000 males and 1,282,000 females , permanently residing in the territory of Latvia . At the beginning of the year 2001 408,700 Latvians were under 15 , 1,448,400 aged from 15 to 59 and 509,000 aged 60 and over . According to the previous population census held in 1989 , the percentage of the population under 15 fell from 21.4 per cent to 17.3 per cent but the percentage of the population aged 60 years and over increased from 17.4 per cent to 21.5 per cent . The overall decline in the State 's population since 1996 is given below . ( Population figures have been revised on the basis of the results of the 2000 population census . As a consequence of tremendous political and socio-economic changes in the State since 1991 , the natural population growth has been negative . However , in 1999 the natural growth slowly improved . In 1999 , the number of children born in comparison with 1998 increased by 5.4 per cent . Furthermore , in 2000 the death rate per 100,000 residents was 1,357 - slightly lower than in 1999. The natural population growth is given below . The death rate of newborns has decreased from 15.8 per 1,000 in 1996 to 10.4 per 1,000 in 2000. The number of cases of maternal death per 100,000 babies born alive had decreased from 40.4 in 1996 to 24.8 in 2000. The Government has taken appropriate measures to improve the demographic situation ; thus , the Ministry of Welfare elaborated and the Cabinet of Ministers of the Republic of Latvia in February 2001 adopted “ The Strategy of Health Care of Mother and Child in Latvia ” . Ethnic characteristics During the 1990s the proportion of ethnic Latvians slightly increased while the proportion of Russians , Byelorussians , Ukrainians , Poles and other ethnic groups decreased . During 2000 the number of Latvians was also slightly higher , compared with other national groups living in Latvia . The distribution of Latvia 's population by ethnic origin between 1935 and 2001 is shown in the table below . Long-term historical cohabitation and friendly relations among different ethnic groups have made Latvia a place where significant conflicts among various ethnic and religious groups have not been possible . After regaining independence , the Government elaborated a policy to accommodate its various groups and their many cultural and religious traditions . The model which was chosen could be called “ a national State with a multicultural society ” : national in the sense that a condition of integration is one official State language and a unified territory , and multicultural in the sense that there is no common or State-supported religion and there are schools with different languages of instruction and conditions promoting development of all cultures . Since 1999 the State Programme of Integration of Society has been carried out and a special institution - the Fund for the Integration of the Society - is in the process of formation . The goals of the programme are to form a democratic , consolidated civil society founded on shared basic values , to provide for all people permanently residing in Latvia access to contemporary living standards , and to promote welfare , education , security and favourable relations between the various ethnic groups . Economic indicators Latvia has made significant advances in its economic , financial and social development since regaining its independence in 1990 , and has embraced comprehensive market economy reform . During the last several years , Government agreed on and continued the structural reform of the economy by accelerating privatization , strengthening the banking sector and the financial system in general , and stabilizing the overall situation in industry and agriculture . GDP growth has been based on a broad range of developments . Particularly strong advances have been made during the last decade in the transportation and financial sectors , in communication services and commerce . Since the beginning of the transition to a market economy , the Government has implemented a strict fiscal policy through a major revenue mobilization combined with expenditure restraint . Latvia has made substantial progress in establishing the State institutions needed for fiscal management in a market economy . Consistently tight monetary and successful financial policies have been reflected in the continuous fall of inflation from 958.6 per cent in 1992 to 23.1 per cent in 1995 , 13.1 per cent in 1996 and 7.0 per cent in 1997. In 1998 the annual inflation rate fell to 2.8 per cent , in 1999 the annual inflation rate was at 3.2 per cent and in 2000 it was 1.8 per cent . The table below shows the key indicators of economic development of the State ( the data for 2001 are estimates ) . Table ( continued ) The unemployment rate since 1998 has been decreasing slightly , although the rate is still relatively high . In order to address this issue , the National Employment Plan is elaborated annually . The main aims of the Plan are to prevent young unemployed people from becoming long-term unemployed ; to eliminate barriers to business and restrictions to starting entrepreneurial activity ; to strengthen cooperation between the Confederation of Employers and the Confederation of Free Trade Unions ; to implement measures aimed at ensuring equal opportunities for women and men in the labour market ; to reduce gender inequality in the area of employment and revenues ; and to encourage family-friendly social and labour policies . The basic detailed unemployment data in Latvia are the following : The gross wage earned by people employed in the national economy in 2000 grew on average by 6.1 per cent in comparison with the preceding year and reached almost 150 lats . The table below indicates the income of residents of the Republic of Latvia . The Government recognizes that notwithstanding the country 's substantial development and economic growth , the polarization of the society still continues . The results of the household budget surveys show that average household income per person is increasing , but simultaneously the income of the poorest members of society is decreasing even more . ii . political structure Historical background Historically , the territory of Latvia has always been regarded as a trading and transportation crossroads and has long served as a bridge between Western Europe and Russia . The ancestors of the Latvian nation settled on Latvian soil more than 4,000 years ago . Today Latvia has a multi-ethnic society and culture that has developed because of the historical , economic and social evolution of the country , providing good possibilities for using Latvia as a stable location to work in the Eastern and Western markets . The Republic of Latvia as a national State was proclaimed on 18 November 1918 in accordance with the principles of international law , and since then its de iure legal personality has never been interrupted . Latvia was granted international recognition in 1920 and became a member of the League of Nations in 1921. It has been continuously recognized as a State by other countries since 1920 despite occupations by the Soviet Union ( 1940-1941 , 1945-1991 ) and Nazi Germany ( 1941-1945 ) . The will and the right to self-determination of the people of Latvia was expressed in April 1920 when the people of Latvia gave their mandate to the Constitutional Assembly chosen in universal , equal , direct and proportional elections . The nation was united by the Latvian Provisional Government and on 11 August 1920 a peace treaty with Russia was signed in which Russia recognized Latvia 's independence . In February 1922 , the Assembly adopted the Constitution of the Republic of Latvia , which is still in force with some amendments , among them chapter VIII on Fundamental Human Rights , adopted in 1998. Until 1940 , Latvia witnessed impressive economic growth , a flourishing cultural life and a marked improvement in its standard of living . To guarantee the State 's economic and social stability , the Government of Latvia launched a programme of agrarian reform . Latvian culture was encouraged and ethnic minorities , which comprised around 25 per cent of the population , were granted educational rights . The ultimatum of 16 June 1940 from the Government of the Soviet Union to the Latvian Government , asking for its resignation , and the ensuing military aggression , resulted in the occupation of Latvia . The elections of 14 and 15 July 1940 of the Parliament ( Saeima ) of occupied Latvia were held under conditions of political terror after an illegal and unconstitutional elections law had been adopted . Of the 17 lists of candidates submitted , only one was permitted in the elections - the list of the Working People 's Bloc . The pre-election platform of the Bloc did not include any demand to establish Soviet power in Latvia or to join the Soviet Union . Furthermore , the results of the elections were falsified . The illegally and fraudulently formed Parliament did not represent the will of the Latvian people . It had no constitutional powers to change the system of government and bring to an end the sovereignty of Latvia . Only the people had the right to decide these matters , but no referendum was held . The incorporation of Latvia into the Soviet Union in 1940 is considered to be invalid also in accordance with international law . The will of the people of Latvia for freedom was expressed in the elections of the Latvian Supreme Council in 1990 of which a majority afterwards expressed the determination to restore the independence of Latvia . The Declaration of the Supreme Council of the Latvian SSR “ On the Renewal of the Independence of the Republic of Latvia ” was adopted on 4 May 1990. Being determined to restore de facto the free , democratic and independent Republic of Latvia , the Supreme Council of the Latvian SSR on that date declared illegal the joining of Latvia to the Soviet Union . Furthermore , it decided to re-establish the authority of the Constitution of the Republic of Latvia , adopted by the Constitutional Assembly on 15 February 1922 , in the entire territory of Latvia . On 17 September 1991 Latvia became a full-fledged member of the United Nations . Since 1995 it has been a member State of the Council of Europe . On 12 June 1995 , an Association Agreement was signed with the European Community and its member States , which came into force in February 1998. Political framework The legislative power is granted to the Saeima ( Parliament ) as well as to the people to the extent provided for by the Satversme ( Constitution ) . Furthermore , the Saeima approves the appointment of the judges of courts of all levels and declares amnesties . It consists of 100 Saeima members elected in general , direct , secret and proportional elections . The Saeima is elected for a period of four years . The Saeima elects the President of the State for a period of four years and the same person cannot hold the office of President of the State for more than two consecutive terms . The President of the State fulfils rather representative functions , however , it is the President of the State who nominates the Head of the Government - the Prime Minister . The Prime Minister forms the Government ( the Cabinet of Ministers ) - the executive power of the State - and receives the confidence of the Saeima ( Parliament ) . Latvia has a three-level court system - district/city courts , regional courts and the Supreme Court . The establishment of the Satversme Court ( Constitutional Court ) in 1996 completed the judicial reform in Latvia . The Public Prosecutor 's Office , the Collegium of Sworn Advocates and the Collegium of Notaries are the indispensable elements of the judicial system of the Republic of Latvia . iii . general legal framework within which human rights are protected Article 1 of the Constitution of the Republic of Latvia ( Satversme ) provides that Latvia is an independent democratic republic . This principle sets forth certain exact requirements for the Latvian legal system , which also influence the implementation of the obligations under the international human rights instruments . On 4 May 1990 the Supreme Council of the Soviet Republic of Latvia being concerned about the compliance of national law with international law principles in the sphere of human rights , adopted the Declaration on Accession to International Acts of Human Rights . By the Declaration Latvia acceded to 51 international documents ( declarations and conventions ) , inter alia the Universal Declaration of Human Rights , the International Covenant on Civil and Political Rights and the International Covenant on Economic , Social and Cultural Rights . The Optional Protocol to the International Covenant on Civil and Political Rights entered into force on 22 September 1994 ; thus , the Republic of Latvia recognizes the competence of the Human Rights Committee to receive and consider communications from individuals who claim to be victims of a violation by the State of the human rights set forth in the Covenant . Moreover , on 27 June 1997 the European Convention for the Protection of Human Rights and Fundamental Freedoms of 4 November 1950 entered into force in the Republic of Latvia . Thus , Latvia has accepted the jurisdiction of the European Court of Human Rights and accordingly an individual may complain about a violation of his/her rights provided for by the European Convention directly to the Court . In October 1998 , the Constitution of Latvia ( Satversme ) was amended and chapter VIII on Fundamental Human Rights was included . The adoption of these amendments clarified the debate concerning the role and legal status of human rights in the State 's legal system . It also added a more concrete understanding to the principle of democracy , as embodied in article 1 of the Satversme . Accordingly , article 89 states : “ The State shall recognize and protect fundamental human rights in accordance with the present Constitution , laws and international agreements binding upon Latvia . ” Article 91 of the Constitution encompasses both the principle of equality and the principle of non-discrimination . This article states : “ All human beings in Latvia shall be equal before the law and the courts . Human rights shall be secured without discrimination of any kind . ” Other newly included articles of the Constitution list fundamental human rights guaranteed by the State and also provide for possible restrictions on the exercise of these rights imposed by the State . International human rights treaties are directly applicable in the domestic legal system . They override norms of statutory law in case of a conflict of norms . It should be emphasized that international human rights norms are understood to have special status in relation to statutory laws because of their special aim and object and a direct link to the principle of democracy as embodied in Satversme . Thus , Satversme and international human rights treaties binding for Latvia provide for the catalogue of human rights and freedoms in the State . Regarding the institutional protection of human rights , the independent judiciary and the administrative process are the key elements . The courts are the main judicial institutions having jurisdiction over issues of respect and observance of human rights . According to the Law on the Judicial Power Latvia has a three-level court system . The district/city courts try civil , criminal and administrative cases ; they function mostly as courts of first instance . There are regional courts in each of the regions of Latvia and in the capital , Riga , that try those civil and criminal cases that fall within their authority under the Law on Civil Procedure and the Code of Criminal Procedure ; regional courts are also the courts of appeal for those cases that have been tried by district/city courts . The Supreme Court is the court of appeal and cassation for all cases tried by regional courts and district/city courts . The Supreme Court acts also as the first instance court for several cases according to the Law on the Judicial Branch . According to article 3 of the Law on the Judicial Branch every individual has the right to be protected by the court against infringements upon his/her life , health , personal freedom , honour , reputation and property . All individuals have equal rights to have their case heard fairly and publicly by an independent and impartial court , which determines his/her civil rights and obligations , or the validity of any criminal charge against him/her . Article 4 of the above-mentioned Law states that all individuals are equal before the law and the court , and have an equal right to be protected by law . Justice is administered by the court irrespective of the person 's origin , social status and property , race and nationality , sex , education , language , religious affiliation , type and nature of occupation , place of residence , and political or other views . According to article 17 of the Law on the Constitutional Court ( Satversme Court ) individuals whose fundamental rights guaranteed by the Constitution have been violated have the right to “ submit an application to initiate a case regarding compliance of laws and international agreements signed or entered into by Latvia - even before the Saeima has confirmed the agreement - with the Constitution ; compliance of other normative acts or their parts with the legal norms ( acts ) of higher legal force ; as well as compliance of national legal norms of Latvia with international agreements entered into by Latvia which are not contrary to the Constitution ” . In 1995 , the Regulations on the Process of Administrative Acts of the Cabinet of Ministers were adopted , establishing the procedure by which individuals may ask for , or complain about , or appeal against an administrative act adopted by a public institution . There are two main situations where an individual may appeal before the court against an administrative act : when the administrative act violates his/her rights provided in the Constitution of Latvia , international human rights instruments binding on Latvia or a statutory law ; or when the procedure governing the adoption of an administrative act has been abused . The law on the Prosecutor 's Office and the Law “ On the Police ” provide that the Prosecutor 's Office and the police also protect individuals against infringements upon their life , health , personal freedom , honour , reputation and property . According to the Law “ On the Repayment of Damages or Losses Caused by Unlawful or Unfounded Acts of Investigators , the Prosecutor 's Office or the Court ” , material compensation is paid to individuals who have suffered from unlawful or unfounded acts by State officials . Furthermore , the State Human Rights Office , the independent national institution , has a duty to review any claim of infringement of human rights in Latvia and immediately react on a violation of an individual 's rights , and on its own initiative , to investigate . iv . information and publicity Whenever the Republic of Latvia concludes an international agreement , the text of the agreement is translated into Latvian and published in the official newspaper , Latvijas Vēstnesis . In addition , the text in the original language of the agreement is published as well ( usually in English ) . This procedure applies also to international human rights instruments . Furthermore , the State institutions have access to the normative acts and international treaties and conventions in force in Latvia in the electronic database of the State . In addition , information on various international human rights instruments have been published in booklets by the State Human Rights Office . UNDP , UNHCR , UNESCO and UNICEF have opened representative offices that are functioning , with good results , in Latvia . Publications about human right issues have appeared and have been made available to any member of the society : “ Guidebook of Human Rights Tolerance ” , “ Human Rights Album ” ( published by the European Union ) , “ Concise Explanation of the European Convention for the Protection of Human Rights ” and others . Booklets on the rights of the child have been published and distributed by the Children Rights Protection Centre . The Latvian Human Rights Institute , which is the independent section of the State University quarterly , publishes a legal journal - Latvian Human Rights Quarterly - which contains articles on human rights issues in Latvia and abroad , international treaties and national laws , decisions of the European Court of Human Rights as well as of national courts concerning violations of human rights , as well as information on various activities ( conferences , seminars , courses on human rights ) provided by the Latvian Human Rights Institute or other institutions in Latvia . The national reports on the implementation of the human rights conventions in Latvia are prepared by working groups consisting of representatives of ministries and other State institutions and headed by the Representative of the Government before International Human Rights Organizations . Although the publication of reports is not required in national legislation , the practice to do so is developing . As a result of the cooperation between the Ministry of Foreign Affairs and the Latvian Human Rights Institute , the report and debate concerning the International Covenant on Civil and Political Rights was published in the Official Gazette and the Latvian Human Rights Quarterly . The Views of the Human Rights Committee on individual applications concerning possible violations of the Covenant were also published in the Official Gazette . HRI/CORE/1/Add.123 HRI/CORE/1/Add.123 </text>
<text id="un/HSP_GC_19_2_ADD2">
Nineteenth session* Nairobi , 5 - 9 May 2003 Item 4 of the provisional agenda** Activities of the United Nations Human Settlements Programme : progress report Report of the Executive Director Addendum World Summit on Sustainable Development Introduction The World Summit on Sustainable Development ( Johannesburg , 26 August - 4 September 2002 ) marked the culmination of a process that had started in early 2001 with progress reports prepared by United Nations system task managers on the implementation of Agenda 21 ( the reports were compiled by the end of 2001 into a formal report of the Secretary-General - Implementing Agenda 21 : E/CN.17/2002/PC.2/7 ) and that had involved four meetings of the Commission on Sustainable Development acting as the preparatory committee for the Summit . The Summit itself which was presided by President T. Mbeki of South Africa , received 21,000 registered participants ( 9,000 government delegations including 104 heads of State and numerous ministers ; 8,000 representatives of intergovernmental organizations and non-governmental organizations ; and 4,000 journalists ) and adopted two negotiated documents : ( a ) The Plan of Implementation of the World Summit on Sustainable Development ; 1 ( b ) The Johannesburg Declaration on Sustainable Development.2 In addition to the plenary and negotiation sessions as well as the high-level round-table discussions , the Summit provided a framework for exhibitions and over 500 side and parallel events at various sites . General world opinion of the negotiated results of the Summit and its preparatory process ( type one outcomes ) was not very positive for the following reasons : The negotiated texts barely confirm previous agreements , and , with very few exceptions , do not commit Governments to new goals , targets and time frames ( one such rare exception is the target to halve the number of people without access to sanitation by 2015 , but this target is only a step forward from the related millennium development goal on drinking water , adopted two years ago ) ; There is general disappointment over the lack of implementation of Agenda 21 and related international agreements with calls for postponement of any future summits until Governments have demonstrated a willingness and ability to implement agreements already reached . There were some positive views of the Summit with regard to the awareness-raising on the social , economic and environmental dimensions of sustainable development and the broader involvement of both non-governmental organizations and the business community in partnerships with Governments and intergovernmental organizations through tangible implementation initiatives ( type two outcomes ) . Outcomes for the United Nations Human Settlements Programme The United Nations Human Settlements Programme ( UN-HABITAT ) , with its own special concerns and task-manager responsibilities for chapters 7 , 21 and 28 of Agenda 21 ( sustainable settlements , waste and sanitation , local authorities ) , has participated actively in the Summit process . Its normative and operational mandate is reflected in the type one outcome of the Summit ( negotiated text ) . The Plan of Implementation contains important references to UN-HABITAT 's work in the sections on poverty eradication , changing unsustainable patterns of consumption and production , protecting and managing the natural resource base of economic and social development , sustainable development in Africa , means of implementation , and institutional framework for sustainable development . The following commitments expressed in the Plan are of special interest : Halve the number of people without access to drinking water and sanitation by 2015 ( paragraph 7 ( a ) ) ; Improve the lives of 100 million slum dwellers by 2020 , with respect to land , adequate shelter and the role of local authorities ( paragraph 11 ) ; Support African countries in their efforts to implement the Habitat Agenda and the Istanbul Declaration , in the areas of sustainable urbanization , adequate shelter , basic services , governance systems in cities and other human settlements , and national or local institutional capacities ( paragraph 71 ) ; Strengthen UN-HABITAT ( jointly with the United Nations Environment Programme ( UNEP ) , the United Nations Development Programme ( UNDP ) and the United Nations Conference on Trade and Development ( UNCTAD ) in its role to build capacities at all levels for implementing Agenda 21 ; Enhance the role of local authorities and partnerships involving local authorities and other levels of government as called for in the Habitat Agenda ( Paragraph 167 ) . Furthermore , there are numerous other references relevant to UN-HABITAT 's work , including the following : transport ( para . 21 ) ; waste management ( para . 22 ) ; water resource management ( paras . 26 and 28 ) ; coastal area management and land-based marine pollution ( paras . 30 and 32 ) ; disaster management ( paras . 37 and 64 ) ; lead pollution ( para . 7 ) ; capacity-building in the geographic information system , indicators , planning and management methodologies ( para . 136 ) ; and good governance and broad-based decision-making ( paras . 138 and 141 ) . The Johannesburg Declaration on Sustainable Development is a political statement agreed at the highest level and is not meant to repeat the much more detailed Plan of Implementation . However , even at this general policy level , the Declaration contains explicit reference to UN-HABITAT 's areas of responsibility , placing them at the top of the agenda , effectively updating the water and sanitation , energy , health , agriculture and biodiversity ( WEHAB ) list of priorities : “ 18. We welcome the focus of the Johannesburg Summit on the indivisibility of human dignity and are resolved , through decisions on targets , timetables and partnerships , to speedily increase access to such basic requirements as clean water , sanitation , adequate shelter , energy , health care , food security and the protection of biodiversity . ” The responsibilities of UN-HABITAT are also well reflected in the type two outcome of the Summit ( partnership implementation commitments ) . The Coalition for Sustainable Urbanization , developed by UN-HABITAT with more than 40 Habitat Agenda partners and posted on the official World Summit web site , was formally announced by the Executive Director in her plenary address , and was launched in a half-day “ corporate event ” involving the full range of partners . The Coalition has been praised by partners as a coherent cluster of mutually supportive initiatives linked by the common conceptual framework of sustainable urbanization . At the same time , individual components of the Coalition for Sustainable Urbanization have gained prominence in their own rights . Among them , and most importantly , the Water for Asian Cities partnership between UN-HABITAT , the Asian Development Bank , the Government of the Netherlands , and Governments of Asian countries , has received much attention . With its agreed $10 million in grants and $500 million in fast-track credit , the initiative is expected to demonstrate the complementarity between capacity-building and lending operations , between the United Nations and development finance institutions . Other noteworthy components of the Coalition for Sustainable Urbanization include close operational partnerships with global associations of local authorities ( individual or through the World Association of Cities and Local Authorities Coordination - WACLAC ) for strengthening local capacities for sustainable urbanization . These partnerships , also involving partner organizations such as UNEP , the United Nations Institute for Training and Research ( UNITAR ) , the International Labour Organization ( ILO ) , the United Nations Volunteers ( UNV ) programme and the World Health Organization ( WHO ) , focus on thematic issues such as HIV-AIDS , or on modalities for capacity development such as demonstration and replication , training , best practices , and city-to-city cooperation . Prominent among these partnerships is the next phase of the Sustainable Cities Programme with funding from the Government of the Netherlands and the Partnership for Local Capacity Development a result of joint work on city-to-city cooperation in which the international associations of local authorities place high expectations . Activities of UN-HABITAT in Johannesburg A focused and coherent message was prepared and agreed with Habitat Agenda partners from the beginning of UN-HABITAT 's preparations for the Summit in early 2002. This message was consistently promoted by all . It has the following two dimensions that parallel the two types of interrelated outcomes expected from the overall Summit process ( i. e. , type one , negotiated norms and policies ; and type two , partnership implementation commitments ) : Sustainable urbanization ( policy framework ) : There will be no sustainable development without sustainable urbanization Local capacities are key for sustainable urbanization . Coalition for Sustainable Urbanization ( 11 partnership implementation commitments ) : Millennium Cities Partnership Developing Local Capacities for Global Agendas Partnership for Local Capacity Development Model City-to-City Cooperation Partnerships Demonstrating Local Environmental Planning and Management National Capacities for Upscaling Local Agenda 21 Demonstrations Local Capacity-building and Training for Sustainable Urbanization Learning From Best Practices , Good Policies and Enabling Legislation in Support of Sustainable Urbanization Water for Asian Cities Partnership for Sustainable African Cities Partnership for Managing HIV/AIDS at the Local Level . Over the preparatory period , UN-HABITAT and its partners were relatively successful in ensuring that the key messages on sustainable urbanization and the key thematic areas addressed by the Coalition for Sustainable Urbanization would be reflected in the negotiated text of the Summit . This political work resulted in the UN-HABITAT related text mentioned in section A above , and was completed by the end of the fourth session of the preparatory committee in Bali . The remaining negotiations held in Johannesburg did not for the most part deal with text directly related to the mandate of UN-HABITAT - with the important exception of the political declaration , which was drafted from scratch in Johannesburg . The extraordinary achievement of getting “ adequate shelter ” mentioned as a priority concern in the Johannesburg Declaration was due to the constructive relationship between the Executive Director and her team , members of the Committee of Permanent Representatives to UN-HABITAT and concerned government representatives . During the 10 days of the World Summit itself , the work of the UN-HABITAT secretariat focused primarily on delivering the UN-HABITAT message and making best use of a variety of special opportunities presented by the Summit . These opportunities included plenary statements by the Executive Director , side and parallel events organized by UN-HABITAT , events organized by UN-HABITAT partners , press conferences , book launches , exhibitions , bilateral meetings , etc. Those events included the following : The Executive Director addressed close to 20 events during the 10-day Summit . This included two statements in the plenary and participation in a -level round table with Heads of State ; The Executive Director gave two official press briefings and close to 20 one-on-one interviews ; UN-HABITAT organized with various partners a dozen side and parallel events including : A “ corporate event ” on the Coalition for Sustainable Urbanization ; A partnership event on Sustainable African Cities ; Several partnership events on Water for Cities ; A meeting of the United Nations Advisory Committee of Local Authorities ( UNACLA ) ; UN-HABITAT organized a major exhibition on water and sanitation ; UN-HABITAT launched three publications : Sustainable Urbanization : Achieving Agenda 21 ( based on the outcome of the first World Urban Forum , in cooperation with the British Department for International Development ( DFID ) , providing the unifying framework for the Coalition , 1000 copies distributed in Johannesburg and 2000 copies distributed worldwide ) ; Coalition for Sustainable Urbanization : Partnership Commitments for Implementing Agenda 21 ( prepared with more than 40 Habitat Agenda partners , following the first World Urban Forum , 500 copies distributed at the Summit , 500 copies distributed worldwide ) ; Sustainable Urbanization : Bridging the Brown and the Green Agendas ( 260 pages , in cooperation with DFID and the Development Planning Unit ) ; UN-HABITAT staff participated in various roles - chairperson , keynote speaker or speaker - in numerous events organized by partners such as the following : Several meetings held in the context of the local government session organized by the International Council for Local Environmental Initiatives ( ICLEI ) ; An event organized by the Global Lead Network ; An official side event organized by UNITAR ; and A WHO launch of the “ Healthy Environment for Children”programme . C. Follow-up Only time will tell whether the World Summit has been a real success . As far as UN-HABITAT is concerned , initial assessment indicates that the Habitat Agenda has fared quite well in the Summit process , considering the generally acknowledged limitations of this process . UN-HABITAT made good use of the worldwide momentum created by the process , the worldwide sense of urgency of the need to address sustainable development in all its dimensions , and the heightened spirit of partnership that emerged . Accordingly , UN-HABITAT and its partners successfully used the process to make significant progress in three areas : There is sharper focus on what must be done in human settlement policies to achieve sustainable development . This has resulted in the policy framework of sustainable urbanization developed , agreed , published , and applied to partnership implementation agreements ; There has been a building of awareness of the important role of cities and other human settlements for sustainable development . This has resulted in enhanced recognition of the issue globally and among Habitat Agenda partners who are using sustainable urbanization as a unifying framework for joint normative and operational activities ; The momentum , heightened interest in sustainable development and partnership spirit have led to the development of implementation initiatives , complete with concrete work plans , agreed responsibilities and funding commitments . This has resulted in the Coalition for Sustainable Urbanization and its component initiatives ( e. g. , the Water for Asian Cities programme ) . UN-HABITAT 's participation in the World Summit was in keeping with the plan developed , refined and implemented over the eight months preparatory period in the context of close and systematic collaboration among UN-HABITAT 's senior management and professional staff , the Committee of Permanent Representatives to UN-HABITAT , and the full range of Habitat Agenda partners . Follow-up , in broad terms , is part of a similar broad based plan with three basic components : Follow-up on the Summit 's political outcome for UN-HABITAT , especially the recognition of “ adequate shelter ” as a thematic priority and “ framework for action ” at par with the other WEHAB areas ( paragraph 18 of the Johannesburg Declaration ) ; Administrative and managerial follow-up to enable UN-HABITAT fulfil its Summit mandates and commitments , especially with respect to institutional structures and capacities ; and Operational follow-up , including the further development and implementation of the Coalition for Sustainable Urbanization and its component initiatives . With regard to the political follow-up , the outcome of the Summit was reported to the UN-HABITAT Committee of Permanent Representatives one week after the Johannesburg event . The Committee in turn communicated to the Permanent Representatives in New York the significance of including , in paragraph 18 of the political declaration , adequate shelter alongside the other WEHAB thematic priority areas . In its communication , the Committee suggested specific language for all General Assembly resolutions on UN-HABITAT that would ensure recognition of the importance of urbanization issues such as adequate shelter , water and sanitation for the achievement of sustainable development . The Executive Director also took up the issue in her speech to the fifty seventh session of the General Assembly on UN-HABITAT and the secretariat addressed the issue in the Summit follow-up arrangements and mechanisms such as the open-ended working group established by the High-level Committee on Programmes and the task group formed within the programme group of the United Nations Development Group ( UNDG ) . Further , UN-HABITAT has used the Summit outcome to update its work under the millennium development goals , such as Target 10 on sustainable access to drinking water . With regard to the administrative and managerial follow-up , to facilitate UN-HABITAT 's Summit mandates and commitments , the Executive Director has taken important decisions , including the following : Signing of a memorandum of understanding with UNDP to place UN-HABITAT officers in UNDP country offices to ensure that issues of slum upgrading , adequate shelter and sustainable urbanization will be better incorporated and coordinated in macro-economic planning and local investment frameworks such as the poverty reduction strategy papers and the country development frameworks ; Establishment of a new subprogramme in the UN-HABITAT work programme to revive the Habitat and Human Settlements Foundation as per General Assembly resolution 56/206 of 21 December 2001. Donors have provided grants to support preparatory activities ; Establishment of a fully fledged Water , Sanitation and Infrastructure Branch , with eight professionals , to rise to the challenge of delivering the water and sanitation targets agreed in Johannesburg ; Creation of a Water and Sanitation Trust Fund , with an initial UN-HABITAT investment of $1 million , to make available funds that can be quickly disbursed in the area of water and sanitation . With regard to the operational follow-up , the component initiatives of the Coalition for Sustainable Urbanization are being developed further and implemented . New partners and new initiatives are joining the Coalition . Synergy and cohesion under the unifying framework of Sustainable Urbanization will be reviewed in the context of the World Urban Forum . Through this the concept of Sustainable Urbanization is being further developed enabling UN-HABITAT and its partners to enhance over time their important contribution to socially , economically , and environmentally sustainable development . Set out below are some examples : Developing Local Capacities for Global Agendas - UN-HABITAT and UNEP are continuing to develop local capacities for a two-way link between local development priorities and opportunities , and the global norms established in UN-HABITAT 's global campaigns ( e. g. , participation , accountability , security ) and UNEP 's environmental conventions ( e. g. climate change , land-based marine pollution , biodiversity ) . Strategies are being developed with the international local government community ( through WACLAC and UNACLA ) in international meetings such as the World Urban Forum and the annual partners meeting of the Sustainable Cities Programme ; Partnership for Local Capacity Development - This partnership implementation commitment is the primary joint instrument of UN-HABITAT and the international local government community ( through WACLAC and UNACLA ) to promote local capacity development . It builds on the joint achievements in city-to-city cooperation in response to resolutions 18/10 and 18/11 of the Commission on Human Settlements that were endorsed at the special session of the General Assembly for an overall review and appraisal of the implementation of the Habitat Agenda , the World Urban Forum and the local government session of the World Summit . City-to-city cooperation was the theme of the 2002 World Habitat Day and will be addressed at the nineteenth Governing Council in the context of dialogue on decentralization and local authorities development ; Demonstrating Local Environmental Planning and Management - Major donors are now committed to supporting the new phase of the joint UN-HABITAT/UNEP Sustainable Cities Programme , designed to broaden environmental planning and management demonstrations undertaken by local authorities and their local partners . Through expanded and more systematic collaboration with related international initiatives such as the UNDP Public-Private Partnership for the Urban Environment and the International Labour Organization ( ILO ) Advisory Support Information Services and Training , the Programme is addressing new issues such as sustainable mobility and improved basic urban services for the poor and marginalized groups ; National Capacities for Upscaling Local Agenda 21 Demonstrations - Based on the large number of joint local Agenda 21 demonstrations , UN-HABITAT and UNEP are now documenting lessons of experience in collaboration with local and central governments and national urban training institutions . This is aimed at building national capacities for effectively replicating the demonstration activities and for multiplying the positive impact of the investments made in connection with these demonstrations ; Learning from Best Practices , Good Policies and Enabling Legislation in Support of Sustainable Urbanzation - Two new partners have joined this partnership , ComHabitat and the Universal Forum of Cultures - Barcelona 2004. ComHabitat increases the outreach of the partnership to policy makers and grassroots leaders in 54 Commonwealth countries while the Universal Forum on Cultures - Barcelona 2004 help identify and document new practices and emerging policy responses , offering new opportunities for bringing lessons learned to the attention of the general public ; Water for Asian Cities -This partnership will be launched in March 2003 in Osaka ; Partnership for Sustainable African Cities - This partnership promotes the sharing of experience and know-how for broad-based planning and management of African cities . Following its launch at the World Summit , sustainable urbanization has been included in the New Partnership for African Development ( NEPAD ) with UN-HABITAT as the task manager . A concrete follow-up to the Johannesburg commitments at the national level was the launch of the South Africa Cities Network , on the 2002 World Habitat Day . To further operationalize the programme , preparations are underway to convene a ministerial meeting during the nineteenth Governing Council ; Partnership for Managing HIV/AIDS at the Local Level - Adequate shelter for HIV/AIDS orphans is being promoted by a Rockefeller Foundation - UN-HABITAT partnership . UNDP and UN-HABITAT have launched a new Urban Management Programme partnership on HIV/AIDS in eight selected cities throughout the world . There is also a new partnership with SAfAIDS ( Southern Africa AIDS Information and Dissemination Services , Harare ) in Blantyre , Malawi , and with UN-AMICAALL ( Alliance of Mayors Initiatives for Community Action on Aids at the Local Level ) for the launch of national chapters of the Alliance of Mayors on HIV/AIDS in Kenya and Malawi ; Weihai Conference on Sustainable Urbanization Strategies - This initiative of UN-HABITAT , the Chinese Ministry of Construction and the city of Weihai is a direct follow-up to the Summit and will support international exchange of experiences on sustainable urbanization strategies , including the implementation of the Water for Asian cities programme . It will take place in September 2003 ; Future meetings of the World Urban Forum in Europe , America and Asia - The World Urban Forum has an important role to play in the follow-up to the Summit by reviewing progress of the partnership initiatives and ensuring synergy and cohesion under the unifying framework of Sustainable urbanization . The World Urban Forum will be held once every two years . The first meeting of the Forum was held in Africa ( Nairobi , 2002 ) , the second will be held in Europe ( Barcelona , 2004 ) , the third in America ( Vancouver , 2006 ) , and discussions are under way for holding the fourth in Asia . * In its resolution 56/206 of 21 December 2001 , the General Assembly transformed the Commission on Human Settlements into the Governing Council of the United Nations Human Settlements Programme ( UN-HABITAT ) , a subsidiary organ of the General Assembly . This session has been designated as the nineteenth instead of the first session of the Governing Council to signify the continuity and relationship between the Governing Council and the Commission on Human Settlements . HS/GC/19/2/Add.2 HS/GC/19/2/Add.2 1 Report of the World Summit on Sustainable Development , Johannesburg , South Africa , 26 August - 4 September 2002 ( United Nations publication , Sales No. E.03 . II . A.1 ) chap . I , resolution 2 , annex . 2 Ibid . resolution 1 , annex . </text>
<text id="un/IDB25_6">
Industrial Development Board Twenty-fifth session Vienna , 15-16 May 2002 Item 4 of the provisional agenda Report by the Director-General The financial situation as at 31 March 2002 can be summarized in the following major points : ( a ) The regular budget is being implemented with an initial allocation of 97 per cent of the 2002 appropriations . Expenditure for the first quarter amounted to 26.5 per cent ; ( b ) The operational budget recorded a surplus of €1.6 million during the first quarter of 2002 ; therefore , the level of the operational budget reserve increased from €3.3 million ( $2.98 million ) as at 1 January 2002 to €4.9 million as at 31 March 2002 ; ( c ) The level of regular budget cash resources ( including the Working Capital Fund and the unencumbered balances of appropriations ) was €34.7 million . In comparison , the cash balance as at 31 March 2001 and 2000 was €29.8 million and €24.3 million , respectively ; ( d ) The collection rate of 2002 assessed contributions was 47.2 per cent and was favourable compared to the 2001 and 2000 rates of 35.7 and 35.9 per cent , respectively ; ( e ) The collection rate of prior years ' arrears , as compared to the current year 's assessments , was 2.3 per cent . The rates as at 31 March 2001 and 2000 , as compared to the assessments of those years , were 12.4 and 2.7 per cent , respectively ; ( f ) Outstanding contributions amounted to €144.9 million ( including arrears of €69.3 million by the United States of America , and €2.1 million by the former Yugoslavia ) ( annex I ) . The outstanding amounts as at 31 March 2001 and 2000 were €152.7 million and €158.6 million , respectively ( for comparison revalued at the December 2001 United Nations rate of exchange , $1 = €1.123 , in accordance with GC.9/Dec.15 ) ; ( g ) The Working Capital Fund is at the level of €7,423,030 ( $6,610,000 converted at the December rate of $1= €1.123 ) . However , an amount of €259,212 was outstanding as at 31 March 2002 ; ( h ) Pursuant to General Conference decision GC.9/Dec.12 , Ukraine and UNIDO signed a payment plan on 25 March 2002 , and the first instalment under the plan was received on 28 December 2001. Consultations are continuously taking place with a number of Member States regarding settlement of their arrears through payment plans ; ( i ) In compliance with General Conference decision GC.9/Dec.10 , unencumbered balances of appropriations , income from new Member States and interest income in excess of budgetary estimates ( total amount €7,195,414 ) are being allocated as requested by Member States ( annex II ) ; ( j ) Recent actions and developments with respect to the transition to a single currency system , as well as issues encountered , are provided as background information in a conference room paper ( IDB.25/CRP.3 ) . Regular and operational budgets , 2002-2003 Regular budget implementation of the approved programme and budgets , 2002-2003 , commenced as planned . In view of the expected collection rate of assessed contributions of some 97 per cent during the year ( both for current and prior years ) , as well as the healthy cash position of the Organization at the beginning of 2002 , an average release of 97 per cent of the appropriations for 2002 under the regular budget , including UNIDO 's share of Buildings Management Services , was approved . This included 100 per cent release for staff costs , the Regular Programme of Technical Cooperation , field operating costs and information technology ; and an average of 86.3 per cent under consultants , travel , meetings and operating costs . The pattern compares favourably with the start of the 2000-2001 biennium , whereby after the first three months of 2000 only 90 per cent of appropriations were released . The Buildings Management gross appropriation was released at the level of 96 per cent , reflecting the actual higher-than-budgeted vacancy rate under established posts . Operating costs were fully released . Expenditure during the period 1 January to 31 March 2002 amounted to €18.1 million under the regular budget . This amount corresponds to 26.5 per cent of the total appropriation for 2002 and is comparable with the preceding biennium . The current value represents a smooth budget implementation with a lesser risk of delaying or non-implementing approved programmes . The initial allocation under the operational budget was set at 95 per cent of the approved estimate . With a $32 million delivery of technical cooperation activities as of 31 March 2002 ( delivery as of 31 March 2001 for the same period was $27 million ) , income for the first quarter amounted to €4.1 million ( $3.6 million ) for support cost reimbursement . Expenditure for the same period amounted to €2.5 million , leading to a surplus of €1.6 million during the first quarter of 2002. Therefore , the level of the operational budget reserve increased from €3.3 million ( $2.98 million ) as at 1 January 2002 to €4.9 million as at 31 March 2002. Regular and operational budgets , 2000-2001 The accounts for the biennium 2000-2001 have been submitted for audit to the External Auditor . In accordance with legislative mandates , the report of the External Auditor , financial performance report and programme performance report for the biennium 2000-2001 will be submitted to the twenty-sixth session of the Board through the Programme and Budget Committee . The overall implementation of the regular budget for the last biennium was 96.4 per cent , resulting in a provisional surplus of $4,248,200 , which represents 3.6 per cent of the restated appropriations after applying the adjustment formula shown in the GC.8/Dec.17 to take account of the average exchange rate actually experienced during the biennium . This implementation compares favourably with the last four bienniums ( 1998-1999 : 91.7 per cent ; 1996-1997 : 80.7 per cent ; 1994-1995 : 88.3 per cent ; 1992-1993 : 94.5 per cent ) . The higher implementation of the biennium 2000-2001 is due to the favourable cash position of the Organization , which , inter alia , has resulted from a better collection rate of both current and prior years ' assessed contributions . The programme support cost income of the operational budget for the biennium amounted to $18.65 million , with expenditures of $17.29 million . As a result , the operational budget recorded a surplus of $1.36 million . The reserve level thus increased from $1.62 million on 1 January 2000 to $2.98 million as at 31 December 2001. Technical cooperation delivery during 2001 amounted to $84.7 million . However , should technical services at the programme and project levels of United Nations Development Programme and Industrial Development Decade for Africa supplementary activities be included , the volume of technical services provided by UNIDO during the year totalled more than $90 million . Collections A total of 27 Member States , including two least developed countries ( LDCs ) , have made full payments and 20 Member States , including five LDCs , have made partial payments of their assessed contributions for the year 2002. The collections in the period from January to March 2002 , broken down by Lists of States , are shown in table 1. Table 1. Collections , January-March 2002 ( In millions of euros ) * As contained in document GC.9/16 . Outstanding contributions The detailed status of assessed contributions outstanding as at 31 March 2002 is contained in annex I to the present document . The scale of assessment and outstanding contributions as at 31 March 2002 , broken down by Lists of States , are shown in table 2. Table 2. Scale of assessment and outstanding contributions , as at 31 March 2002 * As contained in document GC.9/16 . On 6 December 2000 , the Federal Republic of Yugoslavia deposited the instrument of accession to the Constitution of UNIDO and thus became a new Member State . As the former Yugoslavia has ceased to exist , a decision will have to be taken with regard to the treatment of the arrears of the former Yugoslavia , amounting to €2,084,146 . The issue is among the items on the agenda of the United Nations General Assembly and document A/56/767 of 9 January 2002 contains details . The Secretariat is closely following further developments and any decision to be taken by the General Assembly in this respect will be conveyed to the UNIDO governing bodies . As indicated in annex I to the present document and as summarized in table 3 , the voting rights of 61 Member States had been suspended as at 31 March 2002 in accordance with Article 5.2 of the Constitution and financial regulation 5.5(b ) . Table 3. Suspension of voting rights , as at 31 March In order to restore their voting rights for the remainder of 2002 , these Member States must pay their full contributions for 1999 and prior years , including advances to the Working Capital Fund , as well as a partial contribution for 2000. The minimum total amount that would have to be paid by these Member States is €22,259,710 . Information was provided in document GC.9/10 of 22 October 2001 on the implementation of the measures recommended by the open-ended discussion group on timely payment of assessed contributions . Since that time one payment plan has been concluded ( with Ukraine , as approved by the General Conference in decision GC.9/Dec.12 ) , and the first instalment under the plan has been received . Informal consultations are continuously taking place with a number of Member States regarding settlement of their arrears through payment plans . As reported in document GC.9/10 , the United States of America owes €69,264,731 ( equivalent to $61,678,302 ) , against assessed contributions for the years 1994-1996 and €953,547 ( $849,107 ) against the Tax Reimbursement Agreement—a total amount of €70,218,278 . There has been no further development on the collection of this amount , although the Secretariat has again followed up this year with the Permanent Representative of the United States of America to the United Nations ( Vienna ) for the settlement of the arrears . PRIATIONS , INCOME FROM NEW MEMBER STATES AND INTEREST INCOME IN EXCESS OF BUDGETARY ESTIMATES Detailed information on the unencumbered balances of appropriations , income from new Member States and interest income in excess of budgetary estimates was provided in document GC.9/10 . The following amounts in euros were due for distribution to eligible Member States ( i. e. those that had fully paid their assessed contributions for the respective biennium ) in accordance with financial regulations 4.2(b ) and ( c ) : While adopting the decision on the scale of assessments ( GC.9/Dec.10 ) , the General Conference strongly encouraged Member States to consider renouncing voluntarily their shares of the balances and income referred to above , for the regular budget and/or for technical cooperation activities of UNIDO , and requested the Director-General to report to the Board on the amounts renounced and purposes specified by Member States . From early January 2002 , the Secretariat solicited from Member States their intention as to the utilization of their respective share and requested replies to be returned by 28 February 2002. Responses received as at 31 March 2002 are shown in annex II and are summarized below . As reported in various documents , including GC.9/10 ( chap . VII ) , UNIDO gradually introduced a new computerized financial performance control system ( FPCS ) during 2000-2001 . After one year of parallel operation of the previous mainframe system and FPCS , UNIDO has been using FPCS as the sole system for all accounting transactions since 1 January 2002. The parallel operation was helpful in fine-tuning the application and adjusting procedures to make best use of the features offered by the new system . The switch-over coincided with the introduction of the euro as the base currency for UNIDO 's accounts . Most of the remaining issues with the new system are related to the requirement of continuing the accounting for technical cooperation activities in United States dollars , whereas the base currency is now the euro . Work will also continue in the area of designing various reports based on transaction data captured by the new system as well as linking it to existing executive management systems . In addition , the application will be rolled out to all staff involved in financial operations for capturing data at the point of origin , and enabling staff to have on-line information on the status of activities for which they are responsible . In accordance with General Conference decision GC.8/Dec.16 , a single currency system of assessment based on the euro became effective with the current fiscal period 2002-2003 . Since the adoption of that decision in 1999 , the Secretariat has kept Member States informed of steps taken for the introduction of the single currency system . Recent action and developments with respect to the transition , as well as issues encountered , are provided as background information in a conference room paper ( IDB.25/CRP.3 ) , and a document on the subject will be issued to the Programme and Budget Committee at its forthcoming eighteenth session . Among the steps taken in compliance with decision GC.8/Dec.16 was the amendment of the concomitant Financial Regulations of UNIDO . A conference room paper containing the updated regulations will be issued under the symbol IDB.25/CRP.4 . The Industrial Development Board may wish to consider adopting the following draft decision : “ The Industrial Development Board : “ ( a ) Takes note of the information provided in document IDB.25/6 ; “ ( b ) Also takes note of the information on the implementation of General Conference decision GC.9/Dec.10 ( IDB.25/6 , chap . VI ) ; “ ( c ) Urges those Member States that have not yet paid their assessed contributions , including advances to the Working Capital Fund and prior years ' arrears , to do so without delay . ” Annex I As at 31 March 2002 ( in Euros ) Notes : ( p ) Partial payment . Voting rights of 61 Member States have been suspended in accordance with Article 5.2 of the Constitution of UNIDO . Four Members of the Industrial Development Board are without voting rights : Belarus , Côte d'Ivoire , Guatemala and Libyan Arab Jamahiriya . The General Conference has approved a payment plan for Ukraine to settle its arrears and its voting right was regained ( GC.9/Dec.12 ) . Outstanding contribution to be resolved following decision by the United Nations General Assembly . Member State of UNIDO until 31 December 1996. Since 31 March 2002 , full or partial payments were received from the following Member States : Belgium , Côte d'Ivoire , Cuba , Cyprus , Denmark , Ecuador , Guatemala , Mexico and Oman ( an update will be issued as a conference room paper ) . Annex II STATUS OF UNENCUMBERED BALANCES OF APPROPRIATIONS , INCOME FROM NEW MEMBER STATES AND INTEREST INCOME IN EXCESS OF BUDGETARY ESTIMATES ( GC.9/Dec.10 ) As at 31 March 2002 ( in Euros ) Provides information on the financial situation of UNIDO , including arrears , as at 31 March 2002. Also refers to the initial experience of the Organization in the transition to a single currency system of assessment . A conference room paper will be issued during the session to provide updated information on the status of assessed contributions , voting rights and disposition of unencumbered balances of appropriations , income from new Member States and interest income in excess of budgetary estimates . For reasons of economy , this document has been printed in a limited number . Delegates are kindly requested to bring their copies of documents to meetings . </text>
<text id="un/IDB35_13">
Personnel matters Report by the Director-General Contents Developments on personnel-related matters The Organization continued to strengthen its field presence by increasing the number of Professional staff ( international and local ) in the field . As of 1 September 2008 there were 56 Professional staff in the field ( 39 international and 17 national ) , which constitutes a 43 per cent increase since the field mobility policy was launched in April 2006. The modalities of implementation of the Young Professionals Programme ( YPP ) were finalized and a policy document was issued containing provisions for the recruitment and career management of those to be recruited under this programme . The programme aims at facilitating succession planning , knowledge retention and rejuvenating the workforce through the recruitment , on a competitive basis , of young talent into the Organization . The programme targets individuals under the age of 30 who will be recruited for a three-year fixed term appointment at the P-1 level . Once recruited they will follow a managed development programme , including the possibility of a field assignment . The YPP includes ten positions in the Programme Development and Technical Cooperation ( PTC ) and the Programme Coordination and Field Operations ( PCF ) Divisions . A revised learning policy has been presented for staff/management consultations to the Joint Advisory Committee ( JAC ) . The policy recognizes the fact that UNIDO 's most important resource is its staff and the knowledge and technical expertise embodied in them . It takes into consideration the challenging and dynamic business environment , in which UNIDO is operating as well as the need for the Organization to be a learning organization . The policy also introduces some measures to encourage continuous flow of knowledge and ideas between the Organization and the external environment through partnerships and exchanges with educational and research institutions as well as other organizations . Following the success of the leadership development programme that was implemented in 2007 for managers , the Organization has introduced a management development programme for all Professional staff at the P-1 to P-4 levels as well as National Programme Officers . The programme is made up of three specific modules and seeks to enhance staff members ' management skills and competencies in achieving results through working with other people and leading their subordinates . The programme will continue over two years . In addition to its regular training programmes , the Organization also introduced a number of training events to familiarize and update staff with its various administrative rules and processes . Programmes were run on the Financial Performance Control System ( FPCS ) and project management . A mandatory procurement training programme was introduced to ensure that staff members involved in procurement activities have sufficient knowledge of the related rules . Participants in the first phase of this programme do a self study of the Procurement Manual following which they undertake an intranet-based test . Upon successful completion of the test , they receive a certificate . Advanced training on procurement will also be provided covering issues such as preparing technical specifications and terms of reference , evaluating offers , procurement ethics and fiduciary oversight . Staff in duty stations away from Headquarters were also invited for a one week training programme organized in Vienna . The training included staff assigned to Investment and Technology Promotion Offices and other offices . The training focused on supporting staff in these offices to increase the offices ' level of efficiency and effectiveness . Good employee relations remained a high priority for management and various actions were implemented to ensure staff engagement . The year was marked by an intensification of staff/management consultations , especially within the framework of the Joint Advisory Committee ( JAC ) . During the relevant period , meetings were held regularly ( at least once a month ) , during which staff and management representatives discussed various issues related to staff welfare , conditions of work , reviewed existing policies and consulted on new ones . The discussions included such subjects as the UNIDO Young Professionals Programme , the UNIDO policy on protection against retaliation for reporting misconduct and for cooperating with duly authorized audits and investigations , the UNIDO policy on learning and performance appraisal . JAC discussions will also include the UNIDO Code of Conduct and the financial disclosure programme . The Director-General continued to meet directly with randomly selected staff members in the context of his initiative “ Dialogue with the Director-General ” . Two such meetings were held in 2008 and they continued to be a valuable forum for generating proposals , inputs and feedback on organizational issues . A similar initiative has been introduced by the Managing Director of the Programme Development and Technical Cooperation Division ( PTC ) . In addition to meeting with the Professional staff as part of the performance appraisal process , he also met with his General Service staff . The views generated from such meetings will serve as valuable inputs for management decision-making . Common system developments Salary scale for staff in the Professional and higher categories Schedule I to the staff regulations . The concept of the base/floor salary scale was introduced by the United Nations General Assembly in resolution 44/198 , section I. H , of 21 December 1989. The scale is set by reference to the salary scale of the comparator civil service ( the federal civil service of the United States of America ) in Washington , D. C. Periodic adjustments are made on the basis of a comparison of net base salaries of United Nations officials with the corresponding salaries of their counterparts in the United States federal civil service . By resolution 62/227 of 21 December 2007 , the General Assembly approved , with effect from 1 January 2008 , a revised base scale for staff in the Professional and higher categories . The scale reflects the consolidation , on a no loss/no gain basis , of 1.97 multiplier points of post adjustment into the base salary scale . The increase of the base/floor salary scale by 1.97 per cent does not affect the level of remuneration of staff , as the post adjustment portion has been reduced by the amount consolidated into the base salary . Upon implementation of the revised base salary scale , revised post adjustment indices and multipliers have been established by the International Civil Service Commission ( ICSC ) for all duty stations . Changes in post adjustment multipliers due after 1 January 2008 have been effected on the basis of the movement of the newly consolidated post adjustment indices . The revised base salary scale for staff in the Professional and higher categories , effective 1 January 2008 , is set out in annex I to this document . The financial implications of the consolidation of 1.97 per cent of post adjustment into base salaries on a no gain/no loss basis normally had an impact on two groups of staff entitlements , namely the hardship/mobility allowance and the repatriation grant . Following changes in the hardship and mobility scheme effective 1 January 2007 ( see below ) , this allowance is no longer linked to the salary scale and is no longer relevant in connection with the consolidation process . As for the repatriation grant , the consolidation resulted in a similar increase in the payments of this entitlement to eligible staff . The programme and budgets , 2008-2009 , as approved by Member States , contains provisions to absorb the related cost increases . Matters related to the staff rules Pensionable remuneration for staff in the Professional and higher categories Appendix C to the staff rules . In accordance with Article 54 ( b ) of the regulations of the United Nations Joint Staff Pension Fund , the scale of pensionable remuneration for the Professional and higher categories must be adjusted on the same date and by the same percentage as the net remuneration of United Nations officials serving in New York . In accordance with this provision , ICSC promulgated revised scales of pensionable remuneration effective 1 September 2007 and 1 August 2008. These were promulgated in appendix C to the staff rules and are contained in annexes II and III to the present document . Salary scale for staff in the General Service category Appendix A to the staff rules . In accordance with the Flemming principle , General Service staff shall have pay and other conditions of employment that match the best on offer at the duty station . The principle was first stated in 1949 by a body of experts on pay established by the United Nations General Assembly . It is the cornerstone of the methodology followed by ICSC for the conduct of local salary surveys . Based upon the Flemming principle , staff regulation 6.5 ( a ) provides that “ The Director-General shall fix the salary scales for staff in the General Service and related categories , normally on the basis of the best prevailing conditions of employment in the locality , taking into account the recommendations of the International Civil Service Commission . ” According to the approved ICSC methodology , which takes account of changes in the consumer price and wages indices over a period of 12 months , and in consultation with the other Vienna-based organizations , the Director-General implemented effective 1 April 2007 an interim adjustment of the salary scales for General Service staff of 1.96 per cent . The revised scale is contained in annex IV to the present document . Assignment grant and mobility/hardship allowance Appendix N to the Staff Rules has been amended to reflect changes to the mobility and hardship scheme effective 1 January 2007 , as approved by the General Assembly in its resolution 61/239 of 22 December 2006 on the recommendation of the International Civil Service Commission . Following extensive consultations on the modalities of implementation of the revised scheme among the United Nations Common System Organizations , the scheme was implemented with appropriate transitional measures . The new Appendix N containing the revised conditions is shown in annex V to the present document with deletions shown in square brackets and amendments being underlined . Staff rule 103.12 on Appointment and Promotion Board Staff rule 103.12 ( a ) ( i ) has been amended to indicate that posts in the General Service category in field duty stations are exempt from submission to the General Service Selection Panel of the Appointment and Promotion Board . The revised staff rule 103.12 ( a ) ( i ) is contained in annex VI to the present document with amendments being underlined . The amendment was introduced in the interest of efficiency while the competitive process was maintained and is implemented locally . Financial implications The financial implications of the above changes have been anticipated in the programme and budgets for the biennium 2008-2009 . Social Security Agreement Negotiations between UNIDO and the Republic of Austria regarding a new social security agreement as a supplementary agreement to the Headquarters Agreement of 1995 ( decision GC.6/Dec.21 refers ) have been concluded . The agreement will be presented to the Board at its thirty-sixth session for approval and may be provisionally applied pending its approval by the Industrial Development Board and the General Conference and its entry into force . Action required by the Board The Board may wish to consider the adoption of the following draft decision : “ The Industrial Development Board ; “ ( a ) Takes note of the information contained in document IDB.35/13 ; “ ( b ) Notes the amendments made in pursuance to staff regulation 13.3 to schedule I of the staff regulations in order to bring them into conformity with the decision of the General Assembly set out in resolution 62/227 ; “ ( c ) Also notes the amendment to appendices A , C and N to the staff rules and to the staff rule 103.12 ( a ) ( i ) . ” Annex I Schedule I Salary scales for the Professional and higher categories showing annual gross salaries and the net equivalents after application of staff assessment ( in United States dollars ) Effective 1 January D=Rate applicable to staff members with a dependent spouse or child . S=Rate applicable to staff members with no dependent spouse or child . Annex II Appendix C Scale of pensionable remuneration for the Professional and higher categories ( For purposes of pension benefits and pension contributions ) ( in United States dollars ) Effective 1 September 2007 Annex III Appendix C Scale of pensionable remuneration for the Professional and higher categories ( For purposes of pension benefits and pension contributions ) ( in United States dollars ) Effective 1 August 2008 Annex IV Appendix A Salary scales for staff in the General Service category showing annual gross , gross pensionable and net salary after application of staff assessment ( in Euros ) Effective 1 April 2007 * Long-service step Annex V Appendix N Assignment grant and mobility/hardship allowance Assignment grant ( a ) No change . ( b ) No change . ( c ) No change . ( d ) No change . ( e ) The lump sum portion of the grant shall normally be payable only to staff members for whom no entitlement to removal exists . It shall be paid to them according to the following rates : ( i ) At H duty stations : for staff in the Professional and higher categories and project personnel , one month 's net base salary plus post adjustment applicable to the duty station at the staff member 's grade , step and rate ; for internationally recruited General Service staff , one month 's net base salary , plus any language allowance and dependency allowance in respect of a dependent spouse or first dependent child , whichever is applicable , at the staff member 's grade and step ; ( ii ) At all other duty stations : for staff in the Professional and higher categories and project personnel for assignments expected to be of three years or more , two months ' net base salary plus post adjustment applicable to the duty station at the staff member 's grade , step and rate ; for internationally recruited General Service staff , two months ' net base salary , plus any language allowance and dependency allowance in respect of a dependent spouse or first dependent child , applicable to the duty station at the staff member 's grade , step and rate . If the staff member did not remain for at least three years , recovery of a one-month lump sum shall be effected . If , however , the staff member 's appointment or expected duration of assignment to the duty station is for two years or less , only one month 's net base salary ( plus appropriate additional elements ) is payable ; the second month 's net base salary ( plus appropriate additional elements ) is payable at the start of the third year at the duty station if the staff member 's appointment or assignment is extended to a total period of three years or more . ( f ) No change . ( g ) No change . ( h ) No change . ( i ) No change . ( j ) No change . Mobility/hardship allowance ( a ) Staff members in the Professional and higher categories , including project personnel and internationally recruited General Service staff members , who are appointed or assigned to a duty station for one year or more shall be eligible for the payment of a mobility/hardship allowance . The allowance shall be paid according to the staff member 's entitlements with respect to the following components of the allowance : ( i ) The mobility element , as an incentive [ to staff of organizations participating in the United Nations common system to accept reassignments to different duty stations ] for the geographic mobility of staff ; ( ii ) The hardship element , [ as an incentive to staff to serve at field duty stations with varying degrees of hardship ] as compensation for the varying degrees of hardship at different duty stations ; ( iii ) The non removal element , as compensation for the non removal of personal effects and household goods . ( b ) [ The staff member 's entitlement to the allowance are reckoned in terms of percentage points of a base salary rate , as defined in paragraph ( d ) below . With respect to each of the three elements , the percentage points may be accrued as follows : ] Lump sum payments of the mobility/hardship allowances are made in the form of flat amounts set by the International Civil Service Commission . The amount of the allowances payable to each eligible staff member may vary as follows : ( i ) Mobility [ element : ] allowance : At H duty stations , nil for the first three assignments . Mobility allowance is paid upon [ 4 percentage points for ] the fourth assignment ( provided that at least two of the previous assignments were at A-E [ field ] duty stations ) . [ and 6 percentage points for the fifth and subsequent assignments ; ] For payment purposes , the number of assignments are grouped as four to six assignments and seven or more assignments ; b. At [ all other ] A-E duty stations , nil for the first assignment[ ; ] . Mobility allowance is paid upon [ 10 percentage points for ] the second assignment . -[and 2 additional percentage points for each subsequent assignment up to and including the fifth assignment ; ] For payment purposes , the number of assignments are grouped as two to three assignments , four to six assignments and seven or more assignments ; ( ii ) Hardship [ element ] allowance : nil for H and A duty stations . [ and 8 , 15 , 20 and 25 percentage points ] Payments begin with first assignment to [ for ] B , C , D and E duty stations [ respectively ] ; ( iii ) Non removal [ element ] allowance : [ 3 percentage points at H duty stations and 5 percentage points at all other duty stations . ] Flat amounts are paid for duty stations H to E. [ ( c ) The matrix below shows the various combinations of percentage points that may be accrued cumulatively on account of the three elements of the allowance . Mobility/hardship allowance matrix a Plus 3 per cent if the staff member is not entitled to the removal of household goods . b Provided that the staff member has previously served on two or more assignments in A E duty stations , otherwise no entitlement is payable . c Minus 5 per cent if the staff member receives full household removal . ] [ ( d ) ] ( c ) [ The actual amount of the allowance is determined by applying the percentage points to a base salary rate , which is equivalent to the net base salary of staff at the mid point of the Professional salary scale , i. e. P 4 , step VI , at the dependency rate . This base salary rate is applicable to staff at levels P 4 and P 5. It is increased by 13 per cent for staff at levels D1 and above and reduced by 13 per cent for staff at levels P 1 to P 3 and internationally recruited General Service staff . For staff who have no dependent spouse or child , the allowance is calculated at 75 per cent of the base salary rate appropriate to their grade . ] The mobility/hardship allowances are flat amounts . Payments are differentiated by the following grade groupings : P-1 to P-3 and internationally recruited General Service staff , P-4 and P-5 and D-1 and above . Single staff shall receive 75 per cent of the flat amount paid to staff with dependants of the corresponding grade range . [ ( e ) ] ( d ) The mobility/hardship allowance is payable to all eligible staff [ including those serving in their own country ] and is non pensionable . [ The allowance is normally paid in a lump sum at the beginning of each 12 month period that the staff member is expected to remain at the duty station or pro rata as appropriate . ] [ ( f ) ] ( e ) The allowance shall be payable at the dependency rate to a staff member with recognized dependants , irrespective of where the dependants actually reside . When both husband and wife are staff members entitled to the allowance , it shall be paid to each of them in an amount calculated on the basis of his or her own salary level . [ ( g ) ] ( f ) Staff members who are assigned to a particular duty station and are then placed in travel or mission status while in receipt of a daily subsistence allowance ( DSA ) shall be eligible for the mobility/hardship allowance in respect of the duty station to which they were originally assigned and not in respect of the duty station at which they are in travel or mission status . Mobility element [ ( h ) ] ( g ) Entitlement to the mobility element is subject to the requirement that the staff member concerned should have had five or more consecutive years of service in an organization participating in the United Nations common system . This requirement may be considered as met if the staff member has accumulated five years of service within a period of six consecutive years . Continuity of service is not considered as broken by periods of special leave without pay , but full months of any such period are not to be credited as service for the purpose of this allowance . [ ( i ) ] ( h ) In counting the number of assignments for the application of the mobility element , the following guidelines will be taken into account : ( A ) An assignment will not be counted as such unless it involves the installation of the staff member at the duty station ( i. e. payment by the Organization of travel expenses and the assignment grant ) except in the case of an initial appointment for one year or more where no travel expenses and assignment grant have been paid ; ( B ) Any period of service on travel or mission status while in receipt of DSA will not be counted as an assignment . However , if such status is extended beyond one year at the same duty station , that period will be so counted ; ( C ) If a staff member is posted to a duty station for an initial period of less than one year and the period is subsequently extended so that service at the duty station equals or exceeds one year , such service will be counted as an assignment ; ( D ) In the case of consecutive assignments of less than one year at different duty stations during which the staff member is paid post adjustment under staff rule 106.04(c)(i ) or 206.12(d ) , the combined periods of such assignments may be counted as one assignment ; ( E ) If a staff member is assigned to a duty station for a period of one year or more and the period is subsequently reduced on the initiative of the Organization to less than a year 's duration , such service should normally be counted as an assignment . [ ( j ) ] ( i ) Transfers , secondments and loans to other organizations participating in the United Nations common system are treated in the same way as movement within the Organization for the purpose of the mobility element , i. e. in order to be counted as an assignment , such transfers , secondments and loans should be for a period of one year or more and involve a change of duty station . [ ( k ) ] ( j ) The mobility allowance is paid in monthly instalments . Payment ceases after [ After ] five years of service at the same duty station . [ , the mobility element is reduced by 10 percentage points on the matrix ; and if the duty station is one of the H duty stations , the mobility element will be reduced to nil . This limited period of five years may exceptionally be extended by the Organization up to one more year , if the staff member : ( a ) remains at the duty station on the initiative of the Organization ; or ( b ) is expected to be reassigned before the end of the sixth year . ] Hardship element [ ( l ) ] ( k ) The hardship element is payable from the initial appointment or the first assignment of a staff member to any of the duty stations classified in the B , C , D or E category , provided that the staff member meets the general conditions of eligibility for the allowance . Payments are made in monthly instalments . It remains applicable for the entire duration of the staff member 's service at the duty station and for as long as that duty station remains classified in the category concerned . Upon a change in the classified category , an appropriate adjustment of [ the percentage points for ] the hardship element and the resulting amount of payment will be made . Non-removal element [ ( m ) ] ( l ) The element for non removal is applicable for a maximum period of five years at one duty station , provided the staff member is not entitled to a removal of household goods , irrespective of the length of his or her total consecutive service with an organization participating in the United Nations common system or at the duty station . Payments will be made in a lump-sum at the beginning of the assignment , up to a maximum of five years . [ This period may , exceptionally , be extended for up to two more years at the discretion of the Director-General . ] Annex VI Staff Rule 103.12 Appointment and Promotion Board ( a ) ( i ) An Appointment and Promotion Board shall be established by the Director-General to give advice on the appointment and promotion of staff in the Professional and General Service categories , and at the D-2 and D-1 levels , except for staff in the Office of the Director-General , heads of the Bureaux reporting to the Director-General , entry grades G-1/G-2 in the General Service category and staff in the General Service category serving at field duty stations ; For reasons of economy , this document has been printed in a limited number . Delegates are kindly requested to bring their copies of documents to meetings . </text>
<text id="un/ISBA_8_A_1">
Eighth session Kingston , Jamaica 5-16 August 2002 Summary presentations on polymetallic massive sulphide deposits and cobalt-rich ferromanganese crusts Marine minerals and the United Nations Convention on the Law of the Sea1 A scientific revolution in our understanding of the way the Earth works occurred in the 1970s and early 1980s which significantly expanded our knowledge of marine minerals while the United Nations Convention on the Law of the Sea was being formulated . The scientific revolution entailed a major change in viewing the ocean basins and continents . Before the scientific revolution , the ocean basins were viewed as passive containers for the oceans . The continents and ocean basins were viewed as permanent features that had remained in their present positions through most of Earth 's history . The marine mineral provisions of the Convention were written in terms of this old view , which only recognized those marine mineral deposits that had been derived from erosion of land and carried into the ocean in particulate or dissolved form by rivers . These minerals comprised heavy metal deposits ( tin , gold , etc. ) and gemstones ( especially diamonds ) deposited in sediments on continental margins , and manganese nodules precipitated on the floor of the deep ocean from metals dissolved in seawater . The scientific revolution revealed that the ocean basins are dynamic features that open and close on a time scale of millions of years , with concomitant movement of the land areas known as continental drift . The scientific revolution recognized the ocean basins as sources of types of mineral deposits in addition to those previously known . These newly recognized types of marine mineral resources include polymetallic sulphides containing copper , zinc , silver and gold in varying amounts . Polymetallic sulphide deposits are concentrated over thousands of years by seafloor hot springs at sites along an active global submerged volcanic mountain range that extends through all the ocean basins of the world . Polymetallic sulphide deposits also occur at sites associated with volcanic island chains such as those along the western boundary of the Pacific Ocean . Another newly recognized type of marine mineral resource is cobalt-rich iron-manganese crusts that are precipitated over millions of years on the submerged flanks of inactive underwater volcanoes from metals dissolved in seawater derived from input of metals by both rivers and seafloor hot springs . The hot springs not only concentrate polymetallic sulphide deposits and disperse metals into the oceans that contribute to the accumulation of cobalt-rich iron-manganese crusts , but also provide chemical energy from the Earth 's interior that is used by microbes for their growth . The microbes are at the base of the food chain of an ecosystem of life forms at the hot springs that is largely independent of the light energy that fuels the photosynthesis in plants at the base of the food chain on land . The microbes are proving important as the source of new compounds for industrial and medical applications , and also include primitive forms that may hold the key to the origin of life . A current challenge is to incorporate these new mineral resources into the Convention regime in a way that protects the valuable life forms that they host . Polymetallic massive sulphide deposits at the modern seafloor and their resource potential2 Since 1979 , polymetallic massive sulphide deposits have been found at water depths up to 3,700 m in a variety of tectonic settings at the modern seafloor , including mid-ocean ridges , back-arc rifts and seamounts . Many of the sulphide deposits consist of a black smoker complex on top of a sulphide mound which commonly is underlain by a stockwork zone . It has been widely established that circulating seawater which is modified in a reaction zone close to a subaxial magma chamber is the principal carrier of metals and sulphur which are leached out of the oceanic basement . Precipitation of massive and stockwork sulphides at and beneath the seafloor takes place in response to mixing of the high-temperature ( up to 400°C ) metal-rich hydrothermal seawater fluid with ambient seawater . Polymetallic seafloor sulphide deposits can reach considerable size ( up to 100 million tonnes ) and often carry high concentrations of copper ( chalcopyrite ) , zinc ( sphalerite ) and lead ( galena ) in addition to gold and silver . It has been clearly documented that the mineralogical and chemical composition of polymetallic massive sulphides at the basalt-dominated mid-ocean ridges differs from those at back-arc spreading centres which are associated with more felsic volcanic rocks ( dacite , rhyolite ) . The latter are more similar to major sulphide deposits that are being mined on land today but which were once formed at spreading centres of paleo-oceans . Extremely high concentrations of gold ( up to 230 g/t with an average of 26 g/t for 40 samples analysed ) have recently been found in a new type of seafloor mineral deposit located in the crater of an extinct volcano in the territorial waters of Papua New Guinea . The particular style of mineralization and alteration bears many similarities to so-called “ epithermal gold deposits ” so far only known on the continents . In addition to circulating seawater , magmatic fluids carrying high concentrations of gold appear to be a significant metal source and are likely responsible for the strong precious metal enrichment . This type of mineralization is most likely to exist in other arc-related environments of the world 's oceans . Due to the high concentration of base and precious metals , seafloor polymetallic sulphide deposits have recently attracted the interest of the international mining industry . The recovery of some of these deposits appears to be both economically and environmentally feasible due to certain advantages over land-based deposits and will likely become a reality within the present decade . Cobalt-rich ferromanganese crusts : geology , resources and technology3 Cobalt-rich iron-manganese crusts occur throughout the global ocean on seamounts , ridges and plateaux where currents have kept the rocks swept clean of sediments for millions of years . Crusts precipitate from cold ambient seawater onto rock substrates , forming pavements up to 250 mm thick . Crusts are important as a potential resource primarily for cobalt , but also for titanium , cerium , nickel , platinum , manganese , thallium , tellurium , tungsten , bismuth , zirconium and other metals . Crusts form at water depths of about 400-4,000 m , with the thickest and most cobalt-rich crusts occurring at depths of about 800-2,500 m. Gravity processes such as landslides , as well as sediment cover , submerged and emergent reefs , and currents control the distribution and thickness of crusts . Crusts occur on a wide variety of substrate rocks , making it difficult to distinguish the crusts from the substrate using remotely sensed data , which is an important aspect in terms of developing exploration technologies . Fortunately , crusts can be distinguished from the substrates by their much higher levels of gamma radiation . The physical properties of crusts , such as high mean porosity ( 60 per cent ) and extremely high mean surface area ( 300 m2/g ) , as well as their incredibly slow rates of growth ( 1-6 millimetres per million years ) , are instrumental in allowing for the adsorption of large quantities of economically important metals from seawater onto the crust surfaces . Crusts are composed of the minerals vernadite ( manganese oxide ) and feroxyhyte ( iron oxide ) , with moderate amounts of carbonate fluorapatite ( CFA ) in thick crusts and minor amounts of quartz and feldspar in most crusts . Elements that commonly adsorbed on the vernadite include cobalt , nickel , zinc and thallium , and on the iron oxide , copper , lead , titanium , molybdenum , arsenic , vanadium , tungsten , zirconium , bismuth and tellurium . Bulk crusts contain maximum cobalt contents of up to 1.7 per cent , nickel to 1.1 per cent , and platinum to 1.3 parts per million ( ppm ) . Average cobalt contents of up to 0.5 to 1 per cent for large regions of the oceans make crusts the richest potential ore for cobalt that exists , onshore as well as offshore . Cobalt , nickel , titanium and platinum concentrations decrease , whereas silicon and aluminium increase in continental-margin crusts and in crusts with close proximity to West Pacific volcanic arcs . Vernadite-related elements decrease , whereas iron and copper increase with increasing water depth of crust occurrence . Cobalt , cerium , thallium , titanium , lead , tellurium and platinum are strongly concentrated in crusts over other metals because they are incorporated by oxidation reactions that produce more stable , less mobile compounds . Total rare-earth elements commonly vary between 0.1 per cent and 0.3 per cent and are derived from seawater along with other hydrogenetic elements , cobalt , manganese , nickel , etc. Cerium is a rare-earth element that is strongly enriched in crusts and has important economic potential . The seamounts and ridges on which crusts grow obstruct the flow of oceanic water masses , thereby creating a wide array of seamount-generated currents of generally enhanced energy relative to flow away from the seamounts . The effects of these currents are strongest at the outer rim of the summit region of seamounts , the area where the thickest crusts are found . Those seamount-specific currents also enhance turbulent mixing and produce upwelling , which increases primary productivity . These physical processes affect seamount biological communities , which vary from seamount to seamount . Seamount communities are characterized by relatively low density and low diversity where the crusts are thickest and cobalt-rich . The make-up of the seamount communities is determined by current patterns , topography , bottom sediment and rock types and coverage , seamount size , water depth , and size and magnitude of the oxygen-minimum zone . Environmental impact documents will require a much better understanding of seamount ecosystems and communities than currently exits . About 40 research cruises have been dedicated to the study of cobalt-rich crusts , mainly by Germany , Japan , United States of America , the Republic of Korea , the Russia Federation , China and France . The estimate of 40 cruises does not include some cruises completed by the USSR ( and later the Russia Federation ) and China that are not available to the author . However , based on an estimated 42 research cruises from 1981 through 2001 , it is suggested that minimum expenditures were about US$ 32 million for ship and associated scientific operations related to fieldwork , and $42 million for shore-based research , for a total investment of about $74 million . Research and development on the technology for mining crusts are only in their infancy . Detailed maps of crust deposits and a comprehensive understanding of small-scale seamount topography are not available , but are required to design the most appropriate mining strategies . Typical field operations for exploration have been to produce SeaBeam bathymetric maps and derivative back-scatter and slope-angle maps , along with seismic profiles , which are used together to select sampling sites . For reconnaissance work , 15 to 20 dredge hauls and cores are taken per seamount . Then video-camera surveys delineate crust , rock and sediment types and distributions , as well as crust thicknesses if possible . These exploration activities require the use of a large , well-equipped research vessel because of the large number of bottom acoustic beacons , the large towed equipment and the volume of samples collected . During advanced stages of exploration and site-specific surveys , it is suggested to use deep-towed side-scan sonar including swath bathymetry , and tethered remotely operated vehicles ( ROVs ) for mapping and delineation of small-scale topography . Extensive sampling of deposits can be accomplished by dredging , coring , using ROVs , and a device to take close-spaced samples that has not yet been developed . Gamma-radiation surveys will delineate crust thicknesses and the existence of crusts under thin blankets of sediment . Current-meter moorings will be required for an understanding of the seamount environment and biological sampling and surveys will be necessary . Twelve criteria have been developed for exploration for and exploitation of crusts : ( a ) Regional criteria ( i ) Large volcanic edifices shallower than 1,000-1,500 m ; ( ii ) Volcanic edifices older than 20 million years ; ( iii ) Volcanic structures not capped by large atolls or reefs ; ( iv ) Areas of strong and persistent bottom currents ; ( v ) A shallow and well-developed oxygen-minimum zone ; ( vi ) Areas isolated from input of abundant fluvial and eolian debris . ( b ) Site-specific criteria ( vii ) Subdued small-scale topography ; ( viii ) Summit terraces , saddles and passes ; ( ix ) Slope stability ; ( x ) Absence of local volcanism ; ( xi ) Average cobalt contents ≥0.8 per cent ; ( xii ) Average crust thicknesses ≥40 mm . Crust mining is technologically more difficult than manganese nodule mining . Recovery of nodules is relatively easy because they sit on a soft-sediment substrate , whereas crusts are weakly to strongly attached to substrate rock . For successful crust mining , it is essential to recover the crusts without collecting substrate rock , which would significantly dilute the ore grade . Five possible crust mining operations include fragmentation , crushing , lifting , pick-up and separation . The proposed method of crust recovery consists of a bottom-crawling vehicle attached to a surface-mining vessel by means of a hydraulic-pipe lift system and an electrical umbilical . The mining machine provides its own propulsion and travels at a speed of about 20 cm/s . Material throughput for the base-case mining scenario is 1,000,000 t/y . That scenario allows 80 per cent fragmentation efficiency and 25 per cent dilution of crust with substrate as reasonable miner capabilities . Some new and innovative systems that have been suggested for crust mining include water-jet stripping of crusts from the substrate , in situ leaching techniques and sonic removal of crusts from substrates . These suggestions offer promise and need to be further developed . The importance to the world economy of metals contained in crusts is reflected in their patterns of consumption . The primary uses of manganese , cobalt and nickel are in the manufacture of steel , to which they provide unique characteristics . Cobalt is also used in the electrical , communications , aerospace , and engine and tool manufacturing industries . Nickel is used additionally in chemical plants , petroleum refineries , electrical appliances and motor vehicles . Cobalt is produced as a by-product of copper mining and consequently the supply of cobalt is tied to the demand for copper . This is also true for tellurium , which is produced as a by-product of both copper and gold mining . This uncertainty in supply has caused industry to seek alternatives to cobalt and tellurium , resulting in only a modest growth in their markets over the past decade , and consequently relatively low prices . If substantial alternative sources of these metals are developed , there should be a greater incentive to reintroduce them in products and expanding markets . It has recently been determined that crusts contain metals other than manganese , cobalt , nickel , copper and platinum that may offer additional incentives in recovery . For example , titanium has the highest value after cobalt , cerium has a greater value than nickel , zirconium is equivalent to nickel , and tellurium has nearly twice the value of copper . This analysis assumes that economic extractive metallurgy can be developed for each of those metals . Based on grade , tonnage and oceanographic conditions , the central-equatorial Pacific region offers the best potential for crust mining , particularly the exclusive economic zone of Johnston Island ( United States ) , the Marshall Islands and international waters in the Mid-Pacific Mountains , although the exclusive economic zone of French Polynesia , Kiribati and the Federated States of Micronesia should also be considered . Supplies of the many metals found in crusts are essential for maintaining the efficiency of modern industrial societies and in improving the standard of living in the twenty-first century . There is a growing recognition that cobalt-rich crusts are an important potential resource . Accordingly , it is necessary to fill the information gap concerning various aspects of crust mining through research , exploration and technology development . Sulphide mineral resource exploitation and the hydrothermal vent fauna4 More than 500 new animal species have been described from deep-sea hydrothermal vents since their discovery in 1977. Deep-sea vents have a high scientific value because they contain a large number of endemic and unusual species and are refuges for close relatives of ancient forms of life . Because they are visually spectacular , extreme environments , vent ecosystems have generated widespread public interest and are a resource which can be used to inform the public about earth processes and the way in which scientists work . It is not currently possible to predict how rapidly vent sites may recover from mining operations . Some organisms will be directly killed by mining machinery , while others nearby risk smothering by material settling from plumes of particulate matter . Individuals surviving these perturbations would be subject to a radical change in habitat , and the exploited sites will have a lesser scientific and educational value . Long-lived vent fields that host the largest mineral deposits are likely to be the most ecologically stable and have the highest biodiversity . A concentration of mining activities at such sites could produce regional effects on biological processes and organism abundance , to the point where the survival of some species could become an issue . The management or protection of all of the world 's marine hydrothermal and seep sites is an unrealistic goal . Discussions should focus instead on the criteria for identifying sites for future protection that are of critical importance , or particularly sensitive to disturbance , because of their scientific or educational value or their significance for species survival . Notes 1 Peter A. Roma , Institute of Marine and Coastal Sciences , Rutgers University , New Jersey , United States of America . 2 Peter M. Herzig , Freiberg University of Mining and Technology , Germany . 3 James R. Hein , President , International Marine Minerals Society . Kim Juniper , Université du Québec , Montréal , Canada . </text>
<text id="un/NPT_CONF2005_PCI_10">
First session New York , 8-19 April 2002 Implementation of article VI and paragraph 4 ( c ) of the 1995 Decision on “ Principles and objectives for nuclear non-proliferation and disarmament ” Report submitted by Sweden As stated in the Final Document of the 2000 Review Conference of the Parties to the Treaty on the Non-Proliferation of Nuclear Weapons , in the section entitled “ Article VI and eighth to twelfth preambular paragraphs ” , in paragraph 15 , subparagraph 12 , the Conference agreed on : “ Regular reports , within the framework of the strengthened review process for the Non-Proliferation Treaty , by all States parties on the implementation of article VI and paragraph 4 ( c ) of the 1995 Decision on ` Principles and Objectives for Nuclear Non-Proliferation and Disarmament ' ” . Sweden would hereby like to submit its report to the first session of the Preparatory Committee for the 2005 Review Conference of the Parties to the Treaty on the Non-Proliferation of Nuclear Weapons . Nuclear disarmament The 2000 NPT Review Conference During the 2000 Review Conference of the Parties to the Treaty on the Non-Proliferation of Nuclear Weapons , Sweden participated in the New Agenda Coalition , which played a role in the final negotiations with the nuclear-weapon States to secure a successful outcome of the Conference . The group had prepared extensively for the Review Conference and had a common position as basis for negotiations . Sweden , as a member of the European Union ( EU ) , also participated in developing a common EU position for the Review Conference . The Union delivered a statement on the basis of the joint position at the Conference . Since the 2000 Review Conference , the New Agenda Coalition has engaged in a constructive dialogue with the nuclear-weapon States on their implementation of the 13 steps agreed to at the Conference on how to achieve nuclear disarmament . In November 2000 , the work of the 2000 Review Conference was followed up at the fifty-fifth session of the United Nations General Assembly . The New Agenda , coordinated by Sweden , presented a draft resolution ( A/C.1/55/L.4 and Rev.1 , subsequently adopted as resolution 55/33C ) , which reaffirmed the results of the Conference . It received very strong support by Member States and was adopted on 20 November 2000 with only three countries voting against ( India , Pakistan and Israel ) and eight countries abstaining . During the fifty-fifth session of the General Assembly , Sweden voted in favour of resolution 55/41 , entitled “ Comprehensive Nuclear-Test-Ban Treaty ” , which called for necessary measures to enable the Treaty to enter into force . During spring 2001 , Sweden held the Presidency of the European Union and delivered a statement on behalf of the Union in the Conference on Disarmament calling , inter alia , for the early entry into force of the Comprehensive Nuclear-Test-Ban Treaty and the commencement of work in the Conference on Disarmament . Sweden strived to advance the European Union work in the spring session of the United Nations Disarmament Commission on the nuclear topic “ Ways and means to achieve nuclear disarmament ” . In October 2001 , the New Agenda decided not to present a resolution in the First Committee of the fifty-sixth session of the General Assembly . The New Agenda Ministers for Foreign Affairs expressed their views in a Ministerial Communiqué presented on 8 October 2001 in the Committee by the coordinator of the Group , South Africa.1 The Ministers agreed that the priority would be to pursue their initiative in the context of the forthcoming Non-Proliferation Treaty review process beginning in 2002. “ The 2000 NPT undertakings on nuclear disarmament had been given . Implementation of them was now the imperative . ” In November 2001 , the Swedish Minister for Foreign Affairs , Ms. Anna Lindh , participated in the Conference on Facilitating the Entry into Force of the Comprehensive Nuclear-Test-Ban Treaty . Ms. Lindh held a national statement in the plenary , which dealt with nuclear disarmament in general and with the Treaty in particular . In the margins of the conference , Sweden , together with Canada and Australia , financed a seminar , organized by the United Kingdom-based NGO VERTIC , to promote the verification system of the Comprehensive Nuclear-Test-Ban Treaty , the Comprehensive Nuclear-Test-Ban Treaty Organization ( CTBTO ) in Vienna . Foreign Minister Lindh made an introductory statement , expressing strong support for CTBTO and its capacity to verify the Treaty . Furthermore , Ms. Lindh also gave a speech in the General Assembly in November 2001.2 A significant section of the Swedish speech was devoted to nuclear disarmament . In November 2001 , the Swedish Minister for Foreign Affairs , in a press statement , welcomed the announcements by the United States of America and the Russian Federation concerning planned reductions in their strategic nuclear weapons arsenals . She also expressed hope that the reductions would be irreversible , transparent and verifiable . In December 2001 , Foreign Minister Anna Lindh issued a press statement expressing concern about the potential negative consequences the unilateral withdrawal by the United States from the Anti-Ballistic Missile Treaty could have on nuclear disarmament and non-proliferation and urging the United States to continue its consultations , in particular with the Russian Federation and China respectively . Preparations for the session of the Preparatory Committee in 2002 In autumn 2001 , Sweden , through Ambassador Henrik Salander , Permanent Representative of Sweden to the Conference on Disarmament , was appointed Chair of the first session of the Preparatory Committee for the 2005 Review Conference of the Parties to the Treaty on the Non-Proliferation of Nuclear Weapons , to be held in New York in April 2002. During winter and spring 2002 , Sweden , through Ambassador Salander , prepared for the first session of the Preparatory Committee by consulting with all States parties to the Treaty . Sweden also participated actively in the New Agenda 's preparations for the Preparatory Committee session . A position paper was drafted stating fundamental principles of nuclear disarmament , taking stock of the developments since the 2000 Review Conference and making short-term and long-term suggestions for the way ahead . The New Agenda also prepared statements to be held in the general debate and in the cluster debate about nuclear disarmament and released a press statement preceding the opening of the Preparatory Committee session . The New Agenda will continue to be active in the period leading up to the opening meeting of the First Committee of the General Assembly at its fifty-seventh session . In spring 2002 , the European Union prepared a Statement to be delivered on behalf of the Union at the first session of the Preparatory Committee , during the general debate . Conference on Disarmament The Conference on Disarmament has not been able to agree on a programme of work and has thus remained idle in the period following the 2000 Review Conference . Several decisions of the Conference included in the 13-step action plan have therefore not yet materialized : the commencement of negotiations on a fissile material cut-off treaty and consideration of the questions of nuclear disarmament in subsidiary bodies of the Conference on Disarmament . In February 2002 , the Swedish Minister for Foreign Affairs , Ms. Anna Lindh , spoke in the Conference on Disarmament . The speech covered the whole disarmament agenda : weapons of mass destruction as well as conventional weapons . A significant part of the speech was devoted to nuclear disarmament , emphasizing issues such as an early entry into force of the Comprehensive Nuclear-Test-Ban Treaty , universality of and compliance with the Non-Proliferation Treaty , the principle of irreversibility in nuclear reductions , etc. Ms. Lindh also called upon the Conference on Disarmament to agree on a programme of work and expressed Sweden 's readiness to accept the Amorim proposal in order to start negotiations on a fissile material cut-off treaty as well as to start dealing with nuclear disarmament and the prevention of an arms race in outer space . In February 2002 , the European Union , under the Presidency of Spain , delivered a statement in the Conference on Disarmament calling for the commencement of work in the Conference . Destruction of nuclear weapons The primary responsibility for the destruction of nuclear weapons rests with the countries concerned , i. e. the nuclear-weapon States . Sweden believes , however , that international cooperation is essential . Thus Sweden has agreed , on invitation , to participate as an observer in the successor group to the G8 Plutonium Disposition Planning Group . The new group will be launched in the near future . Sweden agrees with the G8 Group that it is critical to ensure that excess weapons-grade plutonium resulting from arms reduction is managed and disposed of in such a way that it can no longer be available for future use or diversion for nuclear weapons . Sweden has a great deal of expertise available in the fields of nuclear safety , safeguards and nuclear fuel and waste management . Thus Sweden has been able to provide cooperation and assistance to Russia and other countries members of the Commonwealth of Independent States in the field of nuclear non-proliferation , including : regulatory frameworks , material accounting and protection , export/import controls and management of spent nuclear fuel ( e. g. from Russian submarines and ice-breakers ) . Most of this takes place in cooperation with other countries , the European Union and the International Atomic Energy Agency . Sweden also has taken an active part in conferences organized under the Non-Proliferation and Disarmament Cooperation Initiative and its predecessor the Expanded Threat Reduction Initiative . Sweden has been contributing from the outset to the International Science and Technology Centre in Moscow and was one of the funding parties of the Science and Technology Centre in Ukraine . These two centres were set up to provide former Soviet weapon scientists with employment opportunities in the civilian sector . Safeguards Agreement Before Sweden became a member of the European Union in 1995 , the safeguards agreement requirement by article III of the NPT was satisfied by the Safeguards Agreement between the International Atomic Energy Agency and Sweden.3 In the context of Sweden 's accession to the European Union , notifications to the Agency by Sweden and by the European Atomic Energy Community , as required by the Safeguards Agreement between non-nuclear-weapon States of the European Union and the European Atomic Energy Community , and the Agency,4 were received by the IAEA on 24 May 1995. For practical accounting purposes , as proposed in the notifications , the Agreement came into force with regard to Sweden on 1 June 1995.5 On the same date , the previous Swedish Safeguards Agreement with the Agency was suspended.6 With regard to the Additional Protocol , Sweden , as a member of the European Union , has fulfilled its own requirements for entry into force . Additional Protocols for the EU member States will enter into force on the date when the Agency receives written notification from the EU States and Euratom that their respective requirements for entry into force have been met . Illicit trafficking In May 2001 , Sweden hosted an International Conference on illicit trafficking of fissile material and other radioactive sources and physical protection . The Conference , with participants from 70 countries , was organized by the International Atomic Energy Agency and the Swedish Nuclear Power Inspectorate . Export control As a supplier of nuclear commodities , Sweden participates in the Zangger Committee and the Nuclear Suppliers Group . The implementation of our obligation under article III , paragraph 2 , of the Non-Proliferation Treaty is ensured by means of controlling exports from Sweden in accordance with EU Council regulation ( EC ) 1334/2000 . In the view of Sweden , an effective domestic export control system also facilitates cooperation for peaceful purposes in the nuclear field . Nuclear energy for peaceful purposes Traditionally Sweden attaches great importance to the Agency 's Technical Cooperation Programme . Over the years , Sweden has paid its full target share to the Technical Cooperation Fund , and Sweden also hosts a number of technical and scientific visits for students from developing countries . Regional treaties At the fifty-fifth and fifty-sixth sessions of the United Nations General Assembly , Sweden voted in favour of resolutions and decisions calling for regional nuclear-weapon-free zones . They are : • Establishment of a nuclear-weapon-free zone in the region of the Middle East — resolutions 55/30 and 56/21 ; • Establishment of a nuclear-weapon-free zone in Central Asia — resolution 55/33 W and decision 56/412 ; • Nuclear-weapon-free southern hemisphere and adjacent areas — resolutions 55/33 I and 56/24 G ; • Consolidation of the regime established by the Treaty for the Prohibition of Nuclear Weapons in Latin America and the Caribbean ( Treaty of Tlatelolco ) — resolutions 55/39 and 56/30 ; • African Nuclear-Weapon-Free Zone Treaty ( Treaty of Pelindaba ) — resolution 56/17 . Notes 1 A/C.1/56/4 , annex . 3 Agreement of 14 April 1975 between the Government of the Kingdom of Sweden and the International Atomic Energy Agency for the Application of Safeguards in Connection with the Treaty on the Non-Proliferation of Nuclear Weapons ( INFCIRC/234 ) . 4 Agreement between Belgium , Denmark , the Federal Republic of Germany , Greece , Ireland , Italy , Luxembourg , the Netherlands , Portugal , the European Atomic Energy Community and the Agency in Connection with the Treaty on the Non-Proliferation of Nuclear Weapons ( INFCIRC/193 ) . 5 INFCIRC/193/Add.5 . 6 INFCIRC/234/Mod.1 . </text>
<text id="un/PBC24_1_ADD1">
Annotated provisional agenda Opening of the session The twenty-fourth session of the Programme and Budget Committee will be opened by Ms. T. Feroukhi ( Algeria ) in her capacity as Acting Chairperson of the twenty-third session . Item 1. Election of officers In accordance with rule 17.1 , each year , at the commencement of its regular session , the Committee shall elect from among the representatives of its members a Chairman and three Vice-Chairmen , and from among the delegations of its members a Rapporteur . Rule 17.3 stipulates that the offices of the Chairperson , the three Vice-Chairpersons and the Rapporteur shall be subject to equitable geographical rotation within a five-year cycle in accordance with appendix A to the rules of procedure . According to that appendix , the Chairman of the twenty-fourth session should be elected from members of the Committee from Asian States in List A , and the three Vice-Chairmen from the States in List B , States in List C and States in List D. The Rapporteur should be elected from members of the Committee from the African States in List A. Item 2. Adoption of the agenda A provisional agenda for the twenty-fourth session , prepared by the Director-General in consultation with the Acting Chairperson of the Committee in accordance with rules 8 and 9 of the rules of procedure , is submitted to the Committee for adoption in document PBC.24/1 as stipulated in rule 12. The Committee will have before it : • Provisional agenda ( PBC.24/1 ) • Annotated provisional agenda ( PBC.24/1/Add.1 ) • List of documents ( PBC.24/CRP.1 ) Item 3. Report of the External Auditor , financial performance report and programme performance report for the biennium 2006-2007 Financial regulations 11.9 and 11.10 stipulate that the reports of the External Auditor , together with the audited financial statements , shall be transmitted through the Committee to the Board in accordance with directions given by the Conference . The Committee shall examine the financial statements and the audit reports and submit recommendations to the Board , which shall forward them to the Conference with such comments as it deems appropriate . The Committee in its conclusion 1987/19 requested the Director-General to submit each year to the Board through the Committee a clear and detailed financial performance report itemizing the utilization of financial resources , as well as a programme performance report describing the level of programme implementation . Subsequently , the Board at its seventh session ( decision IDB.7/Dec.11 ( e ) ) approved the incorporation of the programme performance report in the annual report . Likewise the General Conference in its resolution GC.4/Res.2 ( 2 ) requested the Director-General to fully incorporate in future annual reports the programme performance report according to Board decision IDB.7/Dec.11 ( e ) . Thus , the Annual Report of UNIDO 2007 contains the programme performance report for 2007. The Committee will have before it : • Report of the External Auditor on the accounts of UNIDO for the financial period 1 January 2006 to 31 December 2007 ( PBC.24/3-IDB.35/3 ) • Financial performance report for the biennium 2006-2007 . Submitted by the Director-General ( PBC.24/4-IDB.35/4 ) • Annual Report of UNIDO 2007 ( including programme performance report for 2007 ) ( PBC.24/2-IDB.34/2 ) Item 4. Financial situation of UNIDO The report by the Director-General to the Board at its thirty-fourth session ( IDB.34/8 ) , amended through a note by the Secretariat ( IDB.34/CRP.2 ) , covered a wide range of issues within the context of the financial situation . That information will be updated in a document submitted to the present session . The Committee will thus have before it : • Financial situation of UNIDO . Report by the Director-General ( PBC.24/5-IDB.35/5 ) Item 5. Accounting standards At its twelfth session , the General Conference decided that UNIDO adopt the International Public Sector Accounting Standards ( IPSAS ) , effective 1 January 2010 , as part of the United Nations system wide adoption of those Standards ( GC.12/Dec.14 ) . In accordance with a related decision ( IDB.33/Dec.5 ) , the Board at its thirty-third session , requested that the policymaking organs be kept informed of developments relevant to UNIDO with respect to IPSAS . The Committee will thus have before it : • International Public Sector Accounting Standards . Progress report by the Secretariat ( PBC.24/6-IDB.35/6 ) Item 6. Mobilization of financial resources At its twenty-fifth session the Board adopted decision IDB.25/Dec.5 on funds mobilization for integrated programmes . In that decision in paragraph ( i ) , the Board , inter alia , requested the Director-General to maintain a continuous dialogue with Member States in order to actively sustain the common resource mobilization efforts . A report on progress made will be submitted to the Board through the Committee , and should be considered in conjunction with the Annual Report of UNIDO 2007 , which provides information on mobilization of financial resources for that year . The Committee will have before it : • Mobilization of financial resources . Report by the Director-General ( PBC.24/7-IDB.35/7 ) • Funding performance . Annual Report of UNIDO 2007 ( PBC.24/2-IDB.34/2 , chapter I. C. ) • Projects approved under the Industrial Development Fund , trust funds and other voluntary contributions in 2007 ( PBC.24/CRP.2 ) Item 7. Medium-term programme framework , 2010-2013 In accordance with General Conference decision GC.2/Dec.23 , and as subsequently modified in decision GC.6/Dec.10 , the Director-General is requested to submit to the Board in the first year of each fiscal period , through the Committee , a draft medium-term programme framework for the four years that follow the current fiscal period . Furthermore , in compliance with paragraph ( b ) ( v ) ( d ) of the same decision , the Director-General will indicate a general ceiling for the biennium 2010-2011 based on anticipated resources and on programme activity . The Committee will have before it : • Medium-term programme framework , 2010-2013 . Proposals of the Director-General ( PBC.24/8-IDB.35/8 ) Item 8. Date of the twenty-fifth session The following dates have been reserved for the policymaking organs of UNIDO in 2008 and 2009 : Item 9. Adoption of the report For reasons of economy , this document has been printed in a limited number . Delegates are kindly requested to bring their copies of documents to meetings . </text>
<text id="un/PBC24_4-IDB35_4">
Financial performance report for the biennium 2006-2007 Submitted by the Director-General Contents Introduction In its conclusion 1987/19 , paragraph ( j ) , the Programme and Budget Committee requested the Director-General to submit each year to the Industrial Development Board through the Committee a clear and detailed financial performance report itemizing the utilization of financial resources . The present document presents a comparison of the budget estimates in terms of appropriations and income with actual expenditures and income for the biennium 2006-2007 . The information is provided for both the regular and operational budgets . Regular budget Budget estimates for the biennium The budget estimates for the biennium 2006-2007 approved by the General Conference in decision GC.11/Dec.18 consisted of gross expenditure of €154,009,900 to be financed from assessed contributions in the amount of €150,785,600 and other income of €3,224,300 . The present document thus presents the financial performance report on the basis of the programme and budgets for 2006-2007 , as contained in document GC.11/11 , approved in General Conference decision GC.11/Dec.18 and assessed on Member States . Assessed contribution income for 2006-2007 The financial implementation of the approved programme and budgets is dependent on the actual level of cash resources available during the biennium . The source of financing of the regular budget is the assessed contributions of Member States . Assessed contributions for the biennium 2006-2007 paid to the Organization as compared with the amounts originally assessed in accordance with General Conference decision GC.11/Dec.18 are as follows : a See document IDB.35/3-PBC.24/3 , schedule 1. C. Comparison of budget with actual expenditure and income for 2006-2007 A comparison of actual expenditure and income with the approved budget for the biennium is presented below : Comparisons of budget estimates with actual expenditure and income by major programme and major object of expenditure are presented in tables 1 and 2 respectively . Explanations of underutilization by major programme and major object of expenditure are provided in the following paragraphs . Utilization of the budget The net underutilization of the regular budget of €12.4 million ( 8.3 per cent ) comprised an under-expenditure of €14.5 million ( 9.5 per cent ) and a shortfall in income of €2.1 million ( 65.2 per cent ) . The single most important factor contributing to the underutilization was due to non- or late/uncertain payment of assessed contributions . Collection rates As seen from the table , the collection rate during the biennium developed slower than in the previous biennium . While the final collection rate was in fact higher , the rates in March , June and September were lower than in the same period in the previous biennium . The delayed collections had a negative impact on the expenditure planning . E. Financial implementation by major programme Most major programmes were affected by the overall underutilization of the regular budget for the reasons described in paragraph 7 above . Major Programme A ( Governing Bodies ) had an unutilized balance of €0.2 million ( 6 per cent ) out of the approved budget , mainly due to savings resulting from joint translation costs and delayed recruitment of staff . Major Programme B ( General Management ) had an unutilized balance of €1.1 million ( 8.7 per cent ) out of the approved budget estimate . Most of the savings occurred under personnel costs as a consequence of unoccupied posts . Major Programme C ( Energy and Environment ) had an unutilized balance of €1.2 million ( 6.4 per cent ) of the originally approved budget . This mostly occurred as a result of a programmatic shift in the Special Resources for Africa from Major Programme C to Major Programme D ( Trade Capacity-building ) . Major Programme D ( Trade Capacity-building ) had an unutilized balance of €0.2 million ( 1.2 per cent ) of the originally approved budget . Staff cost savings in the amount of €1.7 million have been partially offset by increased expenditure under consultancy ( €0.27 million ) as well as higher spending for the Special Resources for Africa ( €1.6 million ) as described above . Major Programme E ( Poverty Reduction through Productive Activities ) had spent €3.6 million ( 19.5 per cent ) less than budgeted . The Major Programme was subject to savings under personnel costs mainly from a high vacancy rate resulting in a saving of €2.0 million . There was also a saving in the Special Resources for Africa in the amount of €1.6 million due to a shift in the programmatic focus towards Major Programme F. Major Programme F ( Cross-Cutting Programmes ) had been implemented with a reduced expenditure of €4.09 million ( 13.2 per cent ) . The main contributing factor was staff cost savings in the amount of €4.0 million , followed by underexpenditure in field network operating costs ( €1.4 million ) mainly arising from the fluctuation of the dollar . These savings were partly offset by increased expenditure in the Special Resources for Africa amounting to €1.3 million , as mentioned in the previous paragraph . Major Programme G ( Administration ) had been implemented with a reduced expenditure of €1.3 million ( 4.9 per cent ) . The main contributing factor was underexpenditure in communication costs of €0.6 million , which was driven by lower communication service charges . This is followed by underexpenditure in operating costs of €0.3 million and staff cost savings in the amount of €0.3 million . Major Programme H ( Buildings Management ) had generated savings amounting to some €3.3 million under staff costs due to high vacancy rates during the biennium . At the same time , the Buildings Management Services ( BMS ) special account recorded a surplus of €4.3 million , which brought the closing balance to a level of €19.9 million , out of which €9.3 million is still receivable . The accumulated funds on the BMS special account are fully programmed in connection with the ongoing refurbishment activities in the VIC , including that of the present conference building C. Major Programme I ( Indirect Costs ) had recorded savings in the amount of €2.6 million ( 13.4 per cent ) . The savings were partly attributable to UNIDO 's share of the reduced staff costs in BMS ( €0.9 million ) as reported above , but also to reduced expenditures under the various joint and common services , for example the security and safety services of €0.75 million . Financial implementation by major object of expenditure The underutilization of budgeted costs of €9.2 million ( 8.8 per cent ) under personnel costs comprises : As it is apparent from the above table , the underutilization of budgeted salary and common staff costs was mainly due to the higher than budgeted vacancy factors for Professional and General Service posts . Given that the largest component of the Organization 's regular budget is staff costs , it was necessary to make the most significant savings under this item in order to compensate for the expected non- or late/uncertain payment of assessed contributions . As the payment pattern became clearer in the second year of the biennium , some of the staff shortages were alleviated by an increased usage of temporary assistance and consultancy funds . Underutilization of funds for official travel of €0.03 million ( 1.4 per cent ) represented an almost full utilization . Savings in operating cost items in the amount of €4.3 million ( 16.2 per cent ) were the result of reduced requirements for document production and translation of €1.4 million , savings under the contribution to the security and safety services of €0.8 million and on UNIDO 's share of the overall reduced costs in BMS of €1.2 million and €0.9 million in total field network operating costs mainly arising from the fluctuation of the United States dollar . The underutilization of €0.9 million ( 15.2 per cent ) of information and communication technology resources was due to the reduction in communication service charges of €0.71 million and a reduction in IT consultancy costs of €0.37 million , partially offset by increases in other IT expenses . Regular Programme of Technical Cooperation resources were administered under the special account created for the purpose to which the full appropriation has been transferred . A marginal underutilization of €0.16 million was recognized under the Special Resources for Africa . Income The deficit of income over the budget estimates comprises : The deficit in cost reimbursement income of €0.8 million was directly related to the lower than anticipated contributions of Governments to the costs of UNIDO field offices . Miscellaneous income as contained in the budget estimates approved in decision GC.11/Dec.18 of €1.5 million was not fully achieved as illustrated below . Of the €1.7 million net currency exchange adjustment , €1.2 million represents the mandatory transfer to the exchange reserve account in line with the terms of decision GC.8/Dec.16 , to protect the Organization from exchange rate fluctuations . The remaining €0.5 million represent a net revaluation loss of book balances . Operational budget The operational budget is funded mainly from support cost reimbursement income earned on technical cooperation project delivery and from technical services provided by the Organization . Expenditure estimates to be financed during the biennium from support cost income were presented in the programme and budget document GC.11/11 and approved by the General Conference in decision GC.11/Dec.18 . The financial results for the biennium are as follows : A comparison of actual expenditure with the budget estimates is presented in tables 3 and 4 by major programme and major object of expenditure , respectively . While actual technical cooperation delivery and income did not reach the budgeted level , expenditure control resulted in the further increase of the operating reserve . Accordingly , the net reserve of €5.1 million brought forward from 2005 , increased to €6.5 million as at 31 December 2007 resulting in a surplus for the biennium 2006-2007 of €1.4 million , after taking into account cancellation of prior biennium obligations and prior biennium adjustments . Action required of the Committee The Committee may wish to take note of the information provided in the present document . Table 1 Regular budget Financial performance report for 2006-2007 by major programme ( In thousands of euros ) a Approved in decision GC.11/Dec.18 . b The balance of the appropriation reported above is attributed to the special account of BMS and is not subject to the financial regulations 4.2 ( b ) and 4.2 ( c ) . * Itemized separately below . Table 2 Regular budget Financial performance report for 2006-2007 by major object of expenditure ( In thousands of euros ) a Approved in decision GC.11/Dec.18 . Table 3 Operational budget Financial performance report for 2006-2007 by major programme ( In thousands of euros ) a Approved in decision GC.11/Dec.18 . Table 4 Operational budget Financial performance report for 2006-2007 by major object of expenditure ( In thousands of euros ) a Approved in decision GC.11/Dec.18 . For reasons of economy , this document has been printed in a limited number . Delegates are kindly requested to bring their copies of documents to meetings . </text>
<text id="un/PBC_2_SLE_9">
Peacebuilding Commission Second session Sierra Leone configuration Progress report on the implementation of the Sierra Leone Peacebuilding Cooperation Framework Contents Introduction The Peacebuilding Commission and the Government of Sierra Leone adopted the Peacebuilding Cooperation Framework ( PBC/2/SLE/1 ) on 12 December 2007. Six months later , the Framework is widely recognized as one of the principal engagement and partnership tools between the Government of Sierra Leone and the international community . As part of the follow-up to the implementation of the commitments contained in the Framework , and in recognition that the Framework is a “ living document ” , the Government and the Peacebuilding Commission have developed the present progress report . The report takes stock of the progress made and challenges encountered by all stakeholders in the implementation of the Framework and contains recommendations on the required next steps . Trend analysis and risk assessment of peacebuilding Youth employment and empowerment Youth unemployment and marginalization continue to represent a threat to peace consolidation in Sierra Leone . The Government of Sierra Leone , with the support of its international partners , has made a strong commitment to address the situation of youth and has established various institutions , policies and programmes to do so . However , owing to the fragmentation of actors and the proliferation of small projects , such efforts have not generated the desired impact . As a result , the Government has announced plans to create a national youth commission to provide the necessary policy direction and leadership to the many agencies and departments of the Government and the international actors addressing issues of youth . The Government also plans to set up district-level labour centres to invest in the national workforce and to assist in job placement . There is now growing recognition among all partners that short-term efforts for employment must be complemented by long-term employment-generation strategies and overall economic growth through private sector development . In addition , youth empowerment efforts must closely involve youth organizations and contain targeted interventions to address the particular needs of young women and girls . Justice and security sector reform The security sector reform has been recognized as one of the major successes of post-conflict peacebuilding in Sierra Leone . The institutions of the sector are well established , with clear lines of authority and a functioning coordination structure . The performance of the security institutions in the 2007 national elections and in the preparatory process for the 2008 local council elections has demonstrated their growing capacity and credibility in the eyes of the local population and international observers . However , the sector continues to be heavily dependent on international support , undermining the sustainability of the reform initiatives . In addition , the security sector must play a more active role in facilitating economic growth , increasing revenue generation and supporting anti-corruption initiatives . For example , the sector could play a significant role in enhancing border security and border management , thus reducing the significant revenues currently lost through diamond and gold smuggling . Access to justice continues to be a challenge for the majority of Sierra Leoneans . In the context of the Justice Sector Development Programme , and with the support of the Peacebuilding Fund , concerted efforts are ongoing to improve the provision of justice services , to reduce the backlog of court cases , to address overcrowded conditions in prisons and to provide training to justice sector personnel . The Presidential task force constituted to identify the causes for the delays in justice delivery submitted its report in January 2008. The recommendations of the report have been incorporated in the recently approved Justice Sector Reform Strategy . C. Consolidation of democracy and good governance The successful conclusion of the presidential and parliamentary elections in 2007 and the peaceful and democratic transfer of power in Sierra Leone are significant achievements in the consolidation of democracy and good governance . The new Government has embarked on a number of measures aimed at strengthening accountability and public sector performance . In particular , encouraging reforms are being implemented by the Anti-Corruption Commission . However , additional efforts are needed to strengthen local governance institutions , in particular by clarifying the relationship between the local councils and the traditional authorities . Greater efforts are also needed to foster national reconciliation and enhanced inter-party and intra-party dialogue . National institutions such as the Political Parties Registration Commission , the National Democracy Commission and the Parliament should play a greater role in such efforts . D. Capacity-building The limited capacity of the Government of Sierra Leone , as well as other national actors , represents a major obstacle to peacebuilding in Sierra Leone . The Government , has prioritized capacity development at all levels , especially in the areas of human resources development and civil service reform . The international community is also committed to ensuring that all of its activities in the country have a capacity-building component . The United Nations in particular specializes in capacity-building of national actors and institutions . However , there is still a lack of conceptual clarity on what constitutes effective capacity-building and how best to ensure the sustainability of reform efforts . E. Energy sector In the last few months , impressive developments have been observed in the energy sector . The sector was identified as an urgent priority of the new Government . Guided by the Government 's vision and prioritization , the partners of Sierra Leone have been able to contribute effectively to the implementation of the emergency energy plan for the Western Area . With these efforts under way , greater attention must be paid to the development of an overall energy sector strategy and coordination structures to bring together the various departments and agencies working on energy production , transmission and distribution . The Government of Sierra Leone projects that by the end of 2008 the energy situation will be out of the emergency phase . F. Subregional dimension of peacebuilding The leaders in the Mano River subregion are demonstrating a greater appreciation for the strong linkages between their countries and an increased commitment to a subregional approach to solving issues of peace , security and development . This is particularly encouraging given the region 's recent turbulent history . The Mano River subregion has been one of the most violent and politically unstable parts of the world . As recently as October 2004 , nearly half of the total number of United Nations peacekeepers deployed in the world was in the subregion . It is , however , also encouraging to note that some of the best outcomes of United Nations involvement in conflict situations have taken place in that subregion . By now it is well understood that conflict and instability in one country in the subregion will have significant impact on the others . Recent activities of the Mano River Union , notably the Heads of Government Summit , held in Monrovia on 14 and 15 May 2008 , have been encouraging , and must be further supported through capacity-building of the Mano River Union secretariat . Review of mutual commitments Commitments of the Government of Sierra Leone As noted by the Minister for Foreign Affairs of Sierra Leone , “ Sierra Leone attaches great importance to the Framework and its speedy implementation as a deterrent to relapse into conflict . ” Over the last six months , the Government of Sierra Leone , with the support of the United Nations and other partners , has made significant progress in implementing several commitments contained in the Peacebuilding Cooperation Framework . In particular , the Government has made significant progress in the areas of anti-corruption , good governance , planning for the local council elections , energy sector development and the justice and security sector reform . Concerted additional efforts are needed to meet the commitments on youth empowerment and employment and capacity-building . Annex I to the present report contains a detailed report on the implementation of the Government 's commitments and the necessary next steps . Consolidation of democracy and good governance In order to foster a common vision and create a culture of accountability and good governance , President Koroma launched an “ agenda for change ” at a retreat attended by all Government ministers and senior officials . The following focus areas were identified at the retreat : ( a ) energy and water supply ; ( b ) transportation : roads , air ; ( c ) youth unemployment ; ( d ) growth sectors : ( i ) agriculture ; ( ii ) mining ; ( iii ) fisheries and marine resources ; ( iv ) tourism ; ( e ) social services : ( i ) education ; ( ii ) health care ; ( iii ) affordable housing ; ( f ) capacity development : ( i ) public sector ; ( ii ) local government ; ( iii ) private sector ; ( iv ) justice system . As a result , a commitment was made to develop performance contracts for all ministers and senior officials . The President has instituted a “ zero tolerance policy for corruption ” and has launched an attitudinal change campaign , clearly signalling his resolve to seriously address the issues . The President has also made national reconciliation and unity a personal priority and has on several occasions invited members of the opposition to accompany him on official overseas travel . Consistent with the commitments contained in the Peacebuilding Cooperation Framework , a revised National Anti-Corruption Strategy was approved by the Cabinet and forwarded for consideration by the Parliament . The revised strategy strengthens the independence of the Anti-Corruption Commission . The Government of Sierra Leone has also pledged to introduce a Public Members Bill in Parliament that will confer prosecutorial powers on the Commission to enable them to prosecute cases directly . The need to separate the Office of the Attorney-General from that of the Minister of Justice has also been acknowledged in the report of the Constitutional Review Commission . The Anti-Corruption Commission has undertaken promising internal reforms and has developed a strategic plan for 2008-2010 . Preparations for the local council elections are under way , with the required financial resources pledged or committed through the United Nations Development Programme ( UNDP ) managed elections basket fund . The ward boundaries delimitation process has been completed and was adopted by the Parliament despite some concerns raised by the minority Sierra Leone People 's Party . The voter registration process and the nomination of candidates were also undertaken successfully . However , the Government of Sierra Leone is still reviewing electoral regulations , in particular , the regulation on vote counting and tallying . The Political Parties Registration Commission is active in ensuring that the political parties adhere to a code of conduct , thus contributing to a peaceful and orderly electoral process . Following the elections , it will be critical to ensure institutionalization of the National Electoral Commission and the Political Parties Registration Commission and the reform of the regulatory framework for the elections . Justice and security sector reform The Sierra Leone Justice Sector Reform and Investment Plan 2008-2010 was launched under the leadership of the President of Sierra Leone in February 2008. The strategy is costed , prioritized and well sequenced , providing a good model for the development of other sector-wide strategies , especially for youth employment and empowerment . In line with the Peacebuilding Cooperation Framework , the justice sector strategy , developed with the support of the Department for International Development ( United Kingdom of Great Britain and Northern Ireland ) , does not try to address all justice sector challenges , but rather focuses on specific initiatives that can be undertaken in a three-year time frame . The Justice Sector Coordination Office has been set up in the Ministry of Justice to facilitate the implementation of the strategy . However , the overall responsibility for its implementation rests with the Justice Leadership Group , composed of the Minister of Justice , the Minister of Internal Affairs and the Chief Justice . The strategy is costed at $30 million over three years , of which $4.5 million is currently unfunded . Resource allocation across the sector will be provided in the context of the Medium-Term Expenditure Framework and the normal budgeting process of the Government . Additional progress has also been made with the support of the Peacebuilding Fund , especially in addressing the backlog of cases and training of the legal executives . Furthermore , some positive steps have been made towards building the capacity of the prosecutorial system by supporting the training of over 100 police prosecutors and investigators ( a more detailed discussion of Peacebuilding Fund projects is provided in para . The Constitutional Review Commission has submitted its report for consideration by the Cabinet , to be followed by consideration by the Parliament . A Cabinet subcommittee has been constituted to study the report and advise the full Cabinet on the actions to be taken . The report contains 136 amendments to the 1991 Constitution , 15 of which require a national referendum for approval . The United Nations and other actors remain engaged with the Government of Sierra Leone to ensure that the final document addresses the key recommendations and is consistent with the Lomé Peace Accord and the recommendations of the Truth and Reconciliation Commission , and takes a modern , development-oriented approach to the organization of the State administration at all levels . Consistent with its commitment in the Framework , the Government of Sierra Leone has announced its intention to reduce the size of the national armed forces to 8,500 from the current strength of 10,500 . This reduction proposal comes after a comprehensive core review undertaken by the Government with the support of the United Kingdom of Great Britain and Northern Ireland . The downsizing process will need to be carefully monitored to ensure reintegration of former soldiers into civilian life and the job market . A company of soldiers is currently being trained to participate in the standby force of the Economic Community of West African States ( ECOWAS ) . The National Human Rights Commission is now fully operational , with 28 staff . The Commission is currently working on a comprehensive report on the state of human rights in Sierra Leone , consistent with its statutory mandate . Importantly , the mandate for the Commission also includes follow-up on the recommendations of the Truth and Reconciliation Commission . The Government of Sierra Leone has made a commitment to assume the operational costs of the Commission , including the salary of core staff , after the completion of the ongoing Peacebuilding Fund support . Meanwhile , the Government continues to provide , albeit in minimal amounts , support to cover some operational costs . The Government , in collaboration with the United Nations , has put in place a mechanism to report on human rights activities in Sierra Leone . These activities will be jointly coordinated with the help of the Ministry of Foreign Affairs and International Cooperation and the National Human Rights Commission . Gender-based violence , limited participation in decision-making and endemic poverty are critical challenges to gender equality and the empowerment of women in Sierra Leone . Inclusion of women and youth in the governance of the country , improved local revenue generation and sustainability of the State remain critical to peace consolidation . Youth employment and empowerment In the last few months , the Government of Sierra Leone , with the support of its partners , has undertaken efforts to revitalize the Youth Employment Scheme , the National Steering Committee on Youth Employment and Empowerment and the Youth Basket Fund , managed by UNDP . The Youth Employment Scheme and the activities of the Steering Committee and the Basket Fund experienced significant difficulties in 2007. In order to address those challenges , in early 2008 , the Department for International Development was requested to conduct an institutional review of the scheme and make recommendations to strengthen it . The results of the review were shared at a workshop on 10 April 2008 which brought together representatives from the donor community , non-governmental organizations , the private sector and a number of Government of Sierra Leone line ministries . The review identified two main weaknesses in the Youth Employment Scheme strategy : ( a ) its focus on the creation of short-term employment interventions which have created little long-term positive impact on the prospects of youth in the labour market ; ( b ) its lack of connection or coordination with the private sector development activities and ( c ) relatively little engagement of the Scheme with the business community . The overall recommendation of the review was for the Scheme to shift its primary focus away from short-term supply-side and socially designed interventions to focus on medium to longer-term demand-driven activities which are appropriately linked to labour market needs and targeted towards future growth sectors in the economy . Coordination on issues of youth employment and empowerment among the ministries , donors and United Nations agencies has also been a serious challenge in the past year . Recently , efforts have been made to empower the National Steering Committee and make it into an effective forum for discussion of youth issues . The Ministry of Youth , Sports and Education hosted an inaugural Steering Committee meeting on 24 January 2008 at which the Government of Sierra Leone reconfirmed its commitment to youth employment , requested assistance from the donors and promised its support to speed up the implementation of activities . On 8 May 2008 , at a Steering Committee meeting , the disbursement of $600,000 to microfinance institutions from the Peacebuilding Fund was approved . The funds are being used to increase the access of vulnerable youth to microcredit . On 5 June , at the Steering Committee meeting , the operational framework of the Youth Employment Scheme and the development of short-term and long-term strategies were discussed . Capacity-building The Government of Sierra Leone and its international partners need to agree on a comprehensive civil service reform package . The Ministry of Foreign Affairs and International Cooperation has recently undergone a personnel review in order to create a professional diplomatic and career service . The President has also set up a Public Service Reform Committee to look into reforming the civil service , especially in the areas of policy formulation and implementation capacity . The Government has stressed that without a serious purpose-oriented public service with a strategic focus , it will be impossible for the political machinery to succeed . As a result , the Government has put a premium on capacity-building efforts at all levels . It is hoped that this strategy will enable the public sector to become one of the drivers of Sierra Leone 's progress . Energy sector Since the adoption of the Framework in December 2007 , there has been remarkable improvement in the energy sector . In the Western Area , power generation has increased from 5 megawatts to 15 megawatts , representing an increase of about 300 per cent . The Government of Sierra Leone has also secured funding for the completion of the Bambuna hydroelectric power station by the end of 2008. However , additional resources are still needed to rehabilitate the transmission and distribution networks . In May 2008 , the Government convened a meeting of all relevant actors in the energy sector . Such coordination meetings must continue , resulting in the development of a well-costed and sequenced energy sector strategy . Subregional dimension of peacebuilding At the 18th session of the Mano River Union Summit , held in Monrovia on 14 and 15 May 2008 , Côte d'Ivoire formally joined the Union . The Summit also considered issues of common interest and concern relating to the revitalization of the Mano River Union secretariat , the consolidation of peace , security and stability , and the challenges posed by the global food crisis . In particular , the leaders agreed that the Mano River Union secretariat should take on critical peace and security matters within the subregion , including the control of small arms and light weapons , and harmonization of legislation on arms control . To address the growing food crisis , the leaders decided , inter alia , to promote subregional cooperation in managing the agricultural chain of input supply , production and marketing , as well as to focus on common geographical areas of high vulnerability and risk within the subregion . The Government of Sierra Leone is also looking at the ECOWAS military strategy for rapid deployment capacity to be set up in Sierra Leone . Commitments of the Peacebuilding Commission In the last few months , the Peacebuilding Commission has made significant strides towards fulfilling its commitments within the Peacebuilding Cooperation Framework . Individually and collectively , Peacebuilding Commission members have supported the Government of Sierra Leone by raising international awareness , mobilizing resources and providing technical support consistent with the priority areas of the Framework . Twenty-one country-specific meeting members are active in Sierra Leone either bilaterally or through multilateral channels . Through their engagement , notable support has already been provided in the priority areas of good governance , justice and security sector reform , and energy sector development . Several country-specific meeting members , such as Japan , Norway and Sweden have also recently increased their support for the country . However , additional and more targeted efforts are needed to support the implementation of commitments related to youth empowerment , regional cooperation and capacity-building . Annex II to the present report summarizes progress made under each of the commitment areas and outlines the necessary next steps . A mapping of all programmes in the five priority areas of the Framework supported by the country-specific meeting members was undertaken by the Peacebuilding Support Office and is being regularly updated . Immediately following the adoption of the Framework , the Sierra Leone country-specific meeting agreed on a six-month workplan for resource mobilization , outreach and advocacy . Subsequently , the Chairman of the Sierra Leone country-specific meeting undertook bilateral meetings with many member States and representatives of the international financial institutions , and visited capitals ( Washington , D. C. , London , Brussels , Berlin , and The Hague ) to garner political and financial support for the Framework and its implementation . The Framework was also transmitted to all relevant stakeholders through a joint letter from the Minister for Foreign Affairs of Sierra Leone and the Minister for Development Cooperation of the Netherlands . In order to broaden Sierra Leone 's donor base , the country-specific meeting Chairman convened meetings with representatives of the private sector , non-traditional donors and private foundations . These advocacy efforts culminated in a High-Level Stakeholders Consultation on the implementation of the Framework , held on 19 May in New York . Moving forward , the country-specific meeting would need to ensure that its advocacy efforts feed into the Sierra Leone Consultative Group meeting scheduled for the fourth quarter of 2008. In addition to advocacy and resource mobilization , in the first half of 2008 , the country-specific meeting also focused on the issues of support to local council elections , fostering of national reconciliation and inter-party and intra-party dialogue , and the implementation of the energy sector emergency plan . In order to obtain first-hand information on the status of the implementation of the Framework and to raise international attention for Sierra Leone , a nine-member Peacebuilding Commission delegation visited the country from 1 to 7 June . The visit highlighted the progress made in the country and the need for continued international support for national reconciliation , greater political dialogue and more robust economic growth and job creation . The visit further reaffirmed the conclusions of the 19 May High-Level Stakeholders Consultation , namely that support to the efforts of the Government , to the extent possible , should be provided through direct budget support and sector programmes . In order for such assistance to be effective and targeted , the Government of Sierra Leone needs to develop sector-wide strategies , complete the drafting of the next poverty reduction strategy paper and revitalize in-country donor coordination mechanisms . In support of the lead role of the Government of Sierra Leone , the United Nations would need to maintain an integrated presence in the country with significantly strengthened capacity to provide high-quality technical advice and capacity-building support . C. Roles and responsibilities of the United Nations in support of the Framework The United Nations system in Sierra Leone , in accordance with the mandate of the United Nations Integrated Office in Sierra Leone ( UNIOSIL ) , has been actively engaged in support of the Government in the implementation of the Peacebuilding Cooperation Framework . United Nations efforts have been particularly effective in the areas of justice and security sector reform , preparations for the local council elections and the capacity-building of the National Human Rights Commission . Annex III to the present report provides additional details on implementation of United Nations commitments . The United Nations in Sierra Leone is currently undergoing a transition from UNIOSIL to an integrated Peacebuilding Support Office . This transition period provides further opportunities to strengthen the capacities of the United Nations to provide more targeted and effective support to the Government of Sierra Leone . In the justice sector , with the support of the Peacebuilding Fund , the United Nations has provided much-needed logistical support , including vehicles , computers and furniture . The Backlog Courts established under the Justice Sector Project have resolved 400 of an estimated 700 total backlog cases . To date , more than 100 judicial officers have undergone computer training . A six-month training programme for 20 legal executives was completed in the first week of June . Similarly , the training of 100 police prosecutors is now in progress . Magistrates have been assigned in all the districts and new judges have been appointed to the High Court and the Supreme Court . Notwithstanding these efforts , the justice sector continues to face challenges characterized by the delays in justice delivery , lack of adequate manpower in the judiciary and in the Ministry of Justice , logistical constraints of the police and poor prison conditions , including overcrowding . The United Nations has provided capacity-building and has supported the operationalization of the National Human Rights Commission . Over 28 staff members have been recruited and trained , various operational tools have been finalized and sent for legislative process and necessary logistics have been procured . Development of a five-year Strategic Action Plan for the Commission with clearly defined and costed priorities is also in progress . In collaboration with UNIOSIL , the Commission held a two-day consultative conference on the status of implementation of the Truth and Reconciliation Commission recommendations and identified a number of strategies to facilitate the process . The Commission is also facilitating the formulation of a national action plan for human rights . A strategy for the formulation of the plan has been drafted and is being reviewed through a consultative process . The main challenge facing the Commission now is ensuring sustainability of its activities and long-term funding . In order to strengthen the Family Support Units of the Sierra Leone police , the Police Training Division , with the support of the United Nations , embarked on a project to create policies on sexual exploitation , sexual abuse and sexual harassment and on gender mainstreaming . In May 2008 , the two monumental policies were approved by the police executives . The next objective of the project will be to develop training modules and to conduct training workshops for the police force . Funding for this project was made possible by a grant from the Government of Norway . In line with the commitments of the Framework to enhance Sierra Leone 's participation in the United Nations peacekeeping operations , UNIOSIL has assisted and continues to assist the Sierra Leone police in preparing their officers to take part in the United Nations predeployment assessment . To date , the United Nations has assisted , mentored and prepared 20 Sierra Leone police officers currently deployed to the African Union-United Nations Hybrid Operation in Darfur . In addition , in June 2008 , the United Nations will conduct a second predeployment assessment of 88 Sierra Leone police officers in order to establish an eligibility list of officers available for United Nations peacekeeping deployment . Although the Sierra Leone police , with the assistance of the United Nations and Department for International Development ( United Kingdom of Great Britain and Northern Ireland ) , has made tremendous strides to provide its officers and recruits with quality housing , a large number of officers and recruits live in substandard and deplorable conditions . In order to address this problem , the United Nations , in consultation with key members of the Sierra Leone police Executive Management Board , submitted a proposal to the Ministry of Foreign Affairs of Germany . In 2008 , the Government of Germany approved a €1.4 million project to rehabilitate seven dormitories and barracks and one police station . The United Nations is working with both the Sierra Leone police and the German Government to expedite the completion of the project . In the lead-up to the 2008 local council elections , United Nations police advised and mentored the Sierra Leone police in the development of a national security operational plan and budget for every phase of the elections . In order to improve police accountability , the United Nations Police Professional Standards Adviser developed , organized and conducted training for 890 Sierra Leone police officers in the areas of ethics , code of conduct , human rights , discipline and regulations . Roles and responsibilities of the international partners The international community in Sierra Leone has been supporting the Government of Sierra Leone in the implementation of the Peacebuilding Cooperation Framework . In the context of the finalization of the second-generation poverty reduction strategy paper , Sierra Leone 's development partners have also been actively engaged in the development of a national aid policy in line with the Paris Declaration , through their participation in the Donor Harmonization Task Force . In addition to the significant direct budget support provided to the Government of Sierra Leone by the four major partners , namely , the Department for International Development ( United Kingdom of Great Britain and Northern Ireland ) , the European Union , the African Development Bank and the World Bank , a number of donors have continued to support the country in funding the various priority areas . The United States of America and Germany have continued to support interventions in the area of youth employment and empowerment . In the justice and security sectors , the Department for International Development ( United Kingdom of Great Britain and Northern Ireland ) and the International Military Assistance Training Team continue to play a lead role , providing significant support , including in the implementation of the Justice Sector Development Programme and security sector reform strategies . Funding for the local council elections has been provided through generous support from a number of donors , especially the United Kingdom of Great Britain and Northern Ireland , the European Union , Japan , Ireland and Norway , to the UNDP-managed elections basket fund , while other partners , such as the United States , also funded special election-related activities , such as support for women 's participation . Responding to an urgent request from the Government of Sierra Leone , the European Union , the Department for International Development , the African Development Bank , the World Bank and Italy have provided significant support for the completion of the Bambuna hydropower project and the implementation of the emergency energy plan . Other countries , such as China and Japan are also supporting the energy sector . Overall assessment of progress to date and emerging issues Significant progress has been made in the implementation of the Framework in the short time since its adoption . Notwithstanding these impressive developments , most notably in the areas of justice and security sector reform , anti-corruption activity , energy sector development and local council elections , there are a number of challenges involved in the implementation of the Framework which must be addressed in the next few months . The overall economic situation in Sierra Leone remains fragile . Furthermore , the global food crisis and rising oil prices risk undermining the efforts of the Government to provide long-awaited peace dividends and meet the high expectations of the population . President Koroma has stressed that starting in June 2008 , agricultural development and food security will become the top priority of the Government . The Government has already requested additional support in this area from Brazil , Canada and the United States . As the preparations for the local council elections have demonstrated , Sierra Leone remains divided along ethnic and geographic lines , requiring intensified efforts for national reconciliation and unity . Additional efforts are also needed to strengthen the national dispute resolution mechanisms . The Parliament has an important role to play and needs to be supported in a comprehensive and integrated manner . The Government of Sierra Leone is in the process of developing a new poverty reduction strategy paper . A first draft is expected at the end of June . All stakeholders will need to ensure that the drafting of the paper takes into account the provisions and commitments of the Framework . The success of the poverty reduction strategy paper will hinge on the availability of adequate capacities and resources . Drawing on previous experiences , the paper must be well prioritized and sequenced and finalized as soon as possible . The absence of a poverty reduction strategy paper since January 2008 has hindered the ability of some donors to release and commit funding . Since coming into office , the Government has been reviewing the existing aid coordination structure in Sierra Leone , which was headed by the Office of the Vice-President and included quarterly Development Partnership Committee meetings . Consequently , regular meetings between the Government of Sierra Leone and many of its international partners have been suspended , while some meetings are occurring between the Government and the four budget support donors . The Government needs to finalize and communicate its decisions on the aid coordination structure as soon as possible . The international partners , on the other hand , need to further harmonize their engagement frameworks and channel their support , to the extent possible , through budget support and sector-wide multi-donor funding mechanisms . Current multi-donor funding mechanisms need to be reviewed and enhanced to allow for greater donor participation . In the security sector , there is growing concern regarding the increased use of Sierra Leone as a transit country for narcotics . A Government of Sierra Leone inter-agency committee comprising the Office of National Security and the police has been set up to address the issue . The international community , and particularly the United Nations , needs to provide additional support in this area . Gender equality and women 's empowerment must be given additional attention in the implementation of the Framework . In particular , law enforcement agencies and the judiciary need to conduct training on the recently adopted gender bills to ensure their full use and implementation . Efforts to simplify the provisions of the bills and to conduct awareness-raising and trainings with women 's groups and the Sierra Leone police and judiciary need to be supported and prioritized . Annex I Implementation of the commitments of the Government of Sierra Leone Youth employment and empowerment Justice and security sector reform C. Good governance D. Capacity-building E. Energy F. Subregional G. Peacebuilding Commission Annex II Implementation of the commitments of the Peacebuilding Commission General commitments Youth employment C. Justice and security sector reform Good governance E. Capacity-building Energy G. Subregional Annex III Implementation of the commitments of the United Nations General commitments </text>
<text id="un/PCNICC_2000_1_ADD1">
nm New York 13-31 March 2000 12-30 June 2000 Report of the Preparatory Commission for the International Criminal Court Addendum * Incorporating document PCNICC/2000/INF/3/Add.1 and corrections to the Arabic , French and Spanish versions submitted by Governments pursuant to paragraph 16 of the Introduction . Part I Finalized draft text of the Rules of Procedure and Evidence* Explanatory note The Rules of Procedure and Evidence are an instrument for the application of the Rome Statute of the International Criminal Court , to which they are subordinate in all cases . In elaborating the Rules of Procedure and Evidence , care has been taken to avoid rephrasing and , to the extent possible , repeating the provisions of the Statute . Direct references to the Statute have been included in the Rules , where appropriate , in order to emphasize the relationship between the Rules and the Rome Statute , as provided for in article 51 , in particular , paragraphs 4 and 5. In all cases , the Rules of Procedure and Evidence should be read in conjunction with and subject to the provisions of the Statute . The Rules of Procedure and Evidence of the International Criminal Court do not affect the procedural rules for any national court or legal system for the purpose of national proceedings . In connection with rule 41 , the Preparatory Commission considered whether the application of the rule would be facilitated by including a provision in the Regulations of the Court that at least one of the judges of the Chamber in which the case is heard knows the official language used as a working language in a given case . The Assembly of States Parties is invited to give further consideration to this issue . Rules of Procedure and Evidence Contents Chapter 1 General provisions Rule 1 Use of terms In the present document : - “ article ” refers to articles of the Rome Statute ; - “ Chamber ” refers to a Chamber of the Court ; - “ Part ” refers to the Parts of the Rome Statute ; - “ Presiding Judge ” refers to the Presiding Judge of a Chamber ; - “ the President ” refers to the President of the Court ; - “ the Regulations ” refers to the Regulations of the Court ; - “ the Rules ” refers to the Rules of Procedure and Evidence . Rule 2 Authentic texts The Rules have been adopted in the official languages of the Court established by article 50 , paragraph 1. All texts are equally authentic . Rule 3 Amendments Amendments to the rules that are proposed in accordance with article 51 , paragraph 2 , shall be forwarded to the President of the Bureau of the Assembly of States Parties . The President of the Bureau of the Assembly of States Parties shall ensure that all proposed amendments are translated into the official languages of the Court and are transmitted to the States Parties . The procedure described in sub-rules 1 and 2 shall also apply to the provisional rules referred to in article 51 , paragraph 3. Chapter 2 Composition and administration of the Court Section I General provisions relating to the composition and administration of the Court Rule 4 Plenary sessions The judges shall meet in plenary session not later than two months after their election . At that first session , after having made their solemn undertaking , in conformity with rule 5 , the judges shall : ( a ) Elect the President and Vice-Presidents ; ( b ) Assign judges to divisions . The judges shall meet subsequently in plenary session at least once a year to exercise their functions under the Statute , the Rules and the Regulations and , if necessary , in special plenary sessions convened by the President on his or her own motion or at the request of one half of the judges . The quorum for each plenary session shall be two-thirds of the judges . Unless otherwise provided in the Statute or the Rules , the decisions of the plenary sessions shall be taken by the majority of the judges present . In the event of an equality of votes , the President , or the judge acting in the place of the President , shall have a casting vote . The Regulations shall be adopted as soon as possible in plenary sessions . Rule 5 Solemn undertaking under article 45 As provided in article 45 , before exercising their functions under the Statute , the following solemn undertakings shall be made : ( a ) In the case of a judge : “ I solemnly undertake that I will perform my duties and exercise my powers as a judge of the International Criminal Court honourably , faithfully , impartially and conscientiously , and that I will respect the confidentiality of investigations and prosecutions and the secrecy of deliberations . ” ; ( b ) In the case of the Prosecutor , a Deputy Prosecutor , the Registrar and the Deputy Registrar of the Court : “ I solemnly undertake that I will perform my duties and exercise my powers as ( title ) of the International Criminal Court honourably , faithfully , impartially and conscientiously , and that I will respect the confidentiality of investigations and prosecutions . ” The undertaking , signed by the person making it and witnessed by the President or a Vice-President of the Bureau of the Assembly of States Parties , shall be filed with the Registry and kept in the records of the Court . Rule 6 Solemn undertaking by the staff of the Office of the Prosecutor , the Registry , interpreters and translators Upon commencing employment , every staff member of the Office of the Prosecutor and the Registry shall make the following undertaking : “ I solemnly undertake that I will perform my duties and exercise my powers as ( title ) of the International Criminal Court honourably , faithfully , impartially and conscientiously , and that I will respect the confidentiality of investigations and prosecutions . ” ; The undertaking , signed by the person making it and witnessed , as appropriate , by the Prosecutor , the Deputy Prosecutor , the Registrar or the Deputy Registrar , shall be filed with the Registry and kept in the records of the Court . Before performing any duties , an interpreter or a translator shall make the following undertaking : “ I solemnly declare that I will perform my duties faithfully , impartially and with full respect for the duty of confidentiality . ” ; The undertaking , signed by the person making it and witnessed by the President of the Court or his or her representative , shall be filed with the Registry and kept in the records of the Court . Rule 7 Single judge under article 39 , paragraph 2 ( b ) ( iii ) Whenever the Pre-Trial Chamber designates a judge as a single judge in accordance with article 39 , paragraph 2 ( b ) ( iii ) , it shall do so on the basis of objective pre-established criteria . The designated judge shall make the appropriate decisions on those questions on which decision by the full Chamber is not expressly provided for in the Statute or the Rules . The Pre-Trial Chamber , on its own motion or , if appropriate , at the request of a party , may decide that the functions of the single judge be exercised by the full Chamber . Rule 8 Code of Professional Conduct The Presidency , on the basis of a proposal made by the Registrar , shall draw up a draft Code of Professional Conduct for counsel , after having consulted the Prosecutor . In the preparation of the proposal , the Registrar shall conduct the consultations in accordance with rule 20 , sub-rule 3. The draft Code shall then be transmitted to the Assembly of States Parties , for the purpose of adoption , according to article 112 , paragraph 7. The Code shall contain procedures for its amendment . Section II The Office of the Prosecutor Rule 9 Operation of the Office of the Prosecutor In discharging his or her responsibility for the management and administration of the Office of the Prosecutor , the Prosecutor shall put in place regulations to govern the operation of the Office . In preparing or amending these regulations , the Prosecutor shall consult with the Registrar on any matters that may affect the operation of the Registry . Rule 10 Retention of information and evidence The Prosecutor shall be responsible for the retention , storage and security of information and physical evidence obtained in the course of the investigations by his or her Office . Rule 11 Delegation of the Prosecutor 's functions Except for the inherent powers of the Prosecutor set forth in the Statute , inter alia , those described in articles 15 and 53 , the Prosecutor or a Deputy Prosecutor may authorize staff members of the Office of the Prosecutor , other than those referred to in article 44 , paragraph 4 , to represent him or her in the exercise of his or her functions . Section III The Registry Subsection 1 General provisions relating to the Registry Rule 12 Qualifications and election of the Registrar and the Deputy Registrar As soon as it is elected , the Presidency shall establish a list of candidates who satisfy the criteria laid down in article 43 , paragraph 3 , and shall transmit the list to the Assembly of States Parties with a request for any recommendations . Upon receipt of any recommendations from the Assembly of States Parties , the President shall , without delay , transmit the list together with the recommendations to the plenary session . As provided for in article 43 , paragraph 4 , the Court , meeting in plenary session , shall , as soon as possible , elect the Registrar by an absolute majority , taking into account any recommendations by the Assembly of States Parties . In the event that no candidate obtains an absolute majority on the first ballot , successive ballots shall be held until one candidate obtains an absolute majority . If the need for a Deputy Registrar arises , the Registrar may make a recommendation to the President to that effect . The President shall convene a plenary session to decide on the matter . If the Court , meeting in plenary session , decides by an absolute majority that a Deputy Registrar is to be elected , the Registrar shall submit a list of candidates to the Court . The Deputy Registrar shall be elected by the Court , meeting in plenary session , in the same manner as the Registrar . Rule 13 Functions of the Registrar Without prejudice to the authority of the Office of the Prosecutor under the Statute to receive , obtain and provide information and to establish channels of communication for this purpose , the Registrar shall serve as the channel of communication of the Court . The Registrar shall also be responsible for the internal security of the Court in consultation with the Presidency and the Prosecutor , as well as the host State . Rule 14 Operation of the Registry In discharging his or her responsibility for the organization and management of the Registry , the Registrar shall put in place regulations to govern the operation of the Registry . In preparing or amending these regulations , the Registrar shall consult with the Prosecutor on any matters which may affect the operation of the Office of the Prosecutor . The regulations shall be approved by the Presidency . The regulations shall provide for defence counsel to have access to appropriate and reasonable administrative assistance from the Registry . Rule 15 Records The Registrar shall keep a database containing all the particulars of each case brought before the Court , subject to any order of a judge or Chamber providing for the non-disclosure of any document or information , and to the protection of sensitive personal data . Information on the database shall be available to the public in the working languages of the Court . The Registrar shall also maintain the other records of the Court . Subsection 2 Victims and Witnesses Unit Rule 16 Responsibilities of the Registrar relating to victims and witnesses In relation to victims , the Registrar shall be responsible for the performance of the following functions in accordance with the Statute and these Rules : ( a ) Providing notice or notification to victims or their legal representatives ; ( b ) Assisting them in obtaining legal advice and organizing their legal representation , and providing their legal representatives with adequate support , assistance and information , including such facilities as may be necessary for the direct performance of their duty , for the purpose of protecting their rights during all stages of the proceedings in accordance with rules 89 to 91 ; ( c ) Assisting them in participating in the different phases of the proceedings in accordance with rules 89 to 91 ; ( d ) Taking gender-sensitive measures to facilitate the participation of victims of sexual violence at all stages of the proceedings . In relation to victims , witnesses and others who are at risk on account of testimony given by such witnesses , the Registrar shall be responsible for the performance of the following functions in accordance with the Statute and these Rules : ( a ) Informing them of their rights under the Statute and the Rules , and of the existence , functions and availability of the Victims and Witnesses Unit ; ( b ) Ensuring that they are aware , in a timely manner , of the relevant decisions of the Court that may have an impact on their interests , subject to provisions on confidentiality . For the fulfilment of his or her functions , the Registrar may keep a special register for victims who have expressed their intention to participate in relation to a specific case . Agreements on relocation and provision of support services on the territory of a State of traumatized or threatened victims , witnesses and others who are at risk on account of testimony given by such witnesses may be negotiated with the States by the Registrar on behalf of the Court . Such agreements may remain confidential . Rule 17 Functions of the Unit The Victims and Witnesses Unit shall exercise its functions in accordance with article 43 , paragraph 6. The Victims and Witnesses Unit shall , inter alia , perform the following functions , in accordance with the Statute and the Rules , and in consultation with the Chamber , the Prosecutor and the defence , as appropriate : ( a ) With respect to all witnesses , victims who appear before the Court , and others who are at risk on account of testimony given by such witnesses , in accordance with their particular needs and circumstances : ( i ) Providing them with adequate protective and security measures and formulating long- and short-term plans for their protection ; ( ii ) Recommending to the organs of the Court the adoption of protection measures and also advising relevant States of such measures ; ( iii ) Assisting them in obtaining medical , psychological and other appropriate assistance ; ( iv ) Making available to the Court and the parties training in issues of trauma , sexual violence , security and confidentiality ; ( v ) Recommending , in consultation with the Office of the Prosecutor , the elaboration of a code of conduct , emphasizing the vital nature of security and confidentiality for investigators of the Court and of the defence and all intergovernmental and non-governmental organizations acting at the request of the Court , as appropriate ; ( vi ) Cooperating with States , where necessary , in providing any of the measures stipulated in this rule ; ( b ) With respect to witnesses : ( i ) Advising them where to obtain legal advice for the purpose of protecting their rights , in particular in relation to their testimony ; ( ii ) Assisting them when they are called to testify before the Court ; ( iii ) Taking gender-sensitive measures to facilitate the testimony of victims of sexual violence at all stages of the proceedings . In performing its functions , the Unit shall give due regard to the particular needs of children , elderly persons and persons with disabilities . In order to facilitate the participation and protection of children as witnesses , the Unit may assign , as appropriate , and with the agreement of the parents or the legal guardian , a child-support person to assist a child through all stages of the proceedings . Rule 18 Responsibilities of the Unit For the efficient and effective performance of its work , the Victims and Witnesses Unit shall : ( a ) Ensure that the staff in the Unit maintain confidentiality at all times ; ( b ) While recognizing the specific interests of the Office of the Prosecutor , the defence and the witnesses , respect the interests of the witness , including , where necessary , by maintaining an appropriate separation of the services provided to the prosecution and defence witnesses , and act impartially when cooperating with all parties and in accordance with the rulings and decisions of the Chambers ; ( c ) Have administrative and technical assistance available for witnesses , victims who appear before the Court , and others who are at risk on account of testimony given by such witnesses , during all stages of the proceedings and thereafter , as reasonably appropriate ; ( d ) Ensure training of its staff with respect to victims ' and witnesses ' security , integrity and dignity , including matters related to gender and cultural sensitivity ; ( e ) Where appropriate , cooperate with intergovernmental and non-governmental organizations . Rule 19 Expertise in the Unit In addition to the staff mentioned in article 43 , paragraph 6 , and subject to article 44 , the Victims and Witnesses Unit may include , as appropriate , persons with expertise , inter alia , in the following areas : ( a ) Witness protection and security ; ( b ) Legal and administrative matters , including areas of humanitarian and criminal law ; ( c ) Logistics administration ; ( d ) Psychology in criminal proceedings ; ( e ) Gender and cultural diversity ; ( f ) Children , in particular traumatized children ; ( g ) Elderly persons , in particular in connection with armed conflict and exile trauma ; ( h ) Persons with disabilities ; ( i ) Social work and counselling ; ( j ) Health care ; ( k ) Interpretation and translation . Subsection 3 Counsel for the defence Rule 20 Responsibilities of the Registrar relating to the rights of the defence In accordance with article 43 , paragraph 1 , the Registrar shall organize the staff of the Registry in a manner that promotes the rights of the defence , consistent with the principle of fair trial as defined in the Statute . For that purpose , the Registrar shall , inter alia : ( a ) Facilitate the protection of confidentiality , as defined in article 67 , paragraph 1 ( b ) ; ( b ) Provide support , assistance , and information to all defence counsel appearing before the Court and , as appropriate , support for professional investigators necessary for the efficient and effective conduct of the defence ; ( c ) Assist arrested persons , persons to whom article 55 , paragraph 2 , applies and the accused in obtaining legal advice and the assistance of legal counsel ; ( d ) Advise the Prosecutor and the Chambers , as necessary , on relevant defence-related issues ; ( e ) Provide the defence with such facilities as may be necessary for the direct performance of the duty of the defence ; ( f ) Facilitate the dissemination of information and case law of the Court to defence counsel and , as appropriate , cooperate with national defence and bar associations or any independent representative body of counsel and legal associations referred to in sub-rule 3 to promote the specialization and training of lawyers in the law of the Statute and the Rules . The Registrar shall carry out the functions stipulated in sub-rule 1 , including the financial administration of the Registry , in such a manner as to ensure the professional independence of defence counsel . For purposes such as the management of legal assistance in accordance with rule 21 and the development of a Code of Professional Conduct in accordance with rule 8 , the Registrar shall consult , as appropriate , with any independent representative body of counsel or legal associations , including any such body the establishment of which may be facilitated by the Assembly of States Parties . Rule 21 Assignment of legal assistance Subject to article 55 , paragraph 2 ( c ) , and article 67 , paragraph 1 ( d ) , criteria and procedures for assignment of legal assistance shall be established in the Regulations , based on a proposal by the Registrar , following consultations with any independent representative body of counsel or legal associations , as referred to in rule 20 , sub-rule 3. The Registrar shall create and maintain a list of counsel who meet the criteria set forth in rule 22 and the Regulations . The person shall freely choose his or her counsel from this list or other counsel who meets the required criteria and is willing to be included in the list . A person may seek from the Presidency a review of a decision to refuse a request for assignment of counsel . The decision of the Presidency shall be final . If a request is refused , a further request may be made by a person to the Registrar , upon showing a change in circumstances . A person choosing to represent himself or herself shall so notify the Registrar in writing at the first opportunity . Where a person claims to have insufficient means to pay for legal assistance and this is subsequently found not to be so , the Chamber dealing with the case at that time may make an order of contribution to recover the cost of providing counsel . Rule 22 Appointment and qualifications of Counsel for the defence A counsel for the defence shall have established competence in international or criminal law and procedure , as well as the necessary relevant experience , whether as judge , prosecutor , advocate or in other similar capacity , in criminal proceedings . A counsel for the defence shall have an excellent knowledge of and be fluent in at least one of the working languages of the Court . Counsel for the defence may be assisted by other persons , including professors of law , with relevant expertise . Counsel for the defence engaged by a person exercising his or her right under the Statute to retain legal counsel of his or her choosing shall file a power of attorney with the Registrar at the earliest opportunity . In the performance of their duties , Counsel for the defence shall be subject to the Statute , the Rules , the Regulations , the Code of Professional Conduct for Counsel adopted in accordance with rule 8 and any other document adopted by the Court that may be relevant to the performance of their duties . Section IV Situations that may affect the functioning of the Court Subsection 1 Removal from office and disciplinary measures Rule 23 General principle A judge , the Prosecutor , a Deputy Prosecutor , the Registrar and a Deputy Registrar shall be removed from office or shall be subject to disciplinary measures in such cases and with such guarantees as are established in the Statute and the Rules . Rule 24 Definition of serious misconduct and serious breach of duty For the purposes of article 46 , paragraph 1 ( a ) , “ serious misconduct ” shall be constituted by conduct that : ( a ) If it occurs in the course of official duties , is incompatible with official functions , and causes or is likely to cause serious harm to the proper administration of justice before the Court or the proper internal functioning of the Court , such as : ( i ) Disclosing facts or information that he or she has acquired in the course of his or her duties or on a matter which is sub judice , where such disclosure is seriously prejudicial to the judicial proceedings or to any person ; ( ii ) Concealing information or circumstances of a nature sufficiently serious to have precluded him or her from holding office ; ( iii ) Abuse of judicial office in order to obtain unwarranted favourable treatment from any authorities , officials or professionals ; or ( b ) If it occurs outside the course of official duties , is of a grave nature that causes or is likely to cause serious harm to the standing of the Court . For the purposes of article 46 , paragraph 1 ( a ) , a “ serious breach of duty ” occurs where a person has been grossly negligent in the performance of his or her duties or has knowingly acted in contravention of those duties . This may include , inter alia , situations where the person : ( a ) Fails to comply with the duty to request to be excused , knowing that there are grounds for doing so ; ( b ) Repeatedly causes unwarranted delay in the initiation , prosecution or trial of cases , or in the exercise of judicial powers . Rule 25 Definition of misconduct of a less serious nature For the purposes of article 47 , “ misconduct of a less serious nature ” shall be constituted by conduct that : ( a ) If it occurs in the course of official duties , causes or is likely to cause harm to the proper administration of justice before the Court or the proper internal functioning of the Court , such as : Interfering in the exercise of the functions of a person referred to in article 47 ; ( ii ) Repeatedly failing to comply with or ignoring requests made by the Presiding Judge or by the Presidency in the exercise of their lawful authority ; ( iii ) Failing to enforce the disciplinary measures to which the Registrar or a Deputy Registrar and other officers of the Court are subject when a judge knows or should know of a serious breach of duty on their part ; or ( b ) If it occurs outside the course of official duties , causes or is likely to cause harm to the standing of the Court . Nothing in this rule precludes the possibility of the conduct set out in sub-rule 1 ( a ) constituting “ serious misconduct ” or “ serious breach of duty ” for the purposes of article 46 , paragraph 1 ( a ) . Rule 26 Receipt of complaints For the purposes of article 46 , paragraph 1 , and article 47 , any complaint concerning any conduct defined under rules 24 and 25 shall include the grounds on which it is based , the identity of the complainant and , if available , any relevant evidence . The complaint shall remain confidential . All complaints shall be transmitted to the Presidency , which may also initiate proceedings on its own motion , and which shall , pursuant to the Regulations , set aside anonymous or manifestly unfounded complaints and transmit the other complaints to the competent organ . The Presidency shall be assisted in this task by one or more judges , appointed on the basis of automatic rotation , in accordance with the Regulations . Rule 27 Common provisions on the rights of the defence In any case in which removal from office under article 46 or disciplinary measures under article 47 is under consideration , the person concerned shall be so informed in a written statement . The person concerned shall be afforded full opportunity to present and receive evidence , to make written submissions and to supply answers to any questions put to him or her . The person may be represented by counsel during the process established under this rule . Rule 28 Suspension from duty Where an allegation against a person who is the subject of a complaint is of a sufficiently serious nature , the person may be suspended from duty pending the final decision of the competent organ . Rule 29 Procedure in the event of a request for removal from office In the case of a judge , the Registrar or a Deputy Registrar , the question of removal from office shall be put to a vote at a plenary session . The Presidency shall advise the President of the Bureau of the Assembly of States Parties in writing of any recommendation adopted in the case of a judge , and any decision adopted in the case of the Registrar or a Deputy Registrar . The Prosecutor shall advise the President of the Bureau of the Assembly of States Parties in writing of any recommendation he or she makes in the case of a Deputy Prosecutor . Where the conduct is found not to amount to serious misconduct or a serious breach of duty , it may be decided in accordance with article 47 that the person concerned has engaged in misconduct of a less serious nature and a disciplinary measure imposed . Rule 30 Procedure in the event of a request for disciplinary measures In the case of a judge , the Registrar or a Deputy Registrar , any decision to impose a disciplinary measure shall be taken by the Presidency . In the case of the Prosecutor , any decision to impose a disciplinary measure shall be taken by an absolute majority of the Bureau of the Assembly of States Parties . In the case of a Deputy Prosecutor : ( a ) Any decision to give a reprimand shall be taken by the Prosecutor ; ( b ) Any decision to impose a pecuniary sanction shall be taken by an absolute majority of the Bureau of the Assembly of States Parties upon the recommendation of the Prosecutor . Reprimands shall be recorded in writing and shall be transmitted to the President of the Bureau of the Assembly of States Parties . Rule 31 Removal from office Once removal from office has been pronounced , it shall take effect immediately . The person concerned shall cease to form part of the Court , including for unfinished cases in which he or she was taking part . Rule 32 Disciplinary measures The disciplinary measures that may be imposed are : ( a ) A reprimand ; or ( b ) A pecuniary sanction that may not exceed six months of the salary paid by the Court to the person concerned . Subsection 2 Excusing , disqualification , death and resignation Rule 33 Excusing of a judge , the Prosecutor or a Deputy Prosecutor A judge , the Prosecutor or a Deputy Prosecutor seeking to be excused from his or her functions shall make a request in writing to the Presidency , setting out the grounds upon which he or she should be excused . The Presidency shall treat the request as confidential and shall not make public the reasons for its decision without the consent of the person concerned . Rule 34 Disqualification of a judge , the Prosecutor or a Deputy Prosecutor In addition to the grounds set out in article 41 , paragraph 2 , and article 42 , paragraph 7 , the grounds for disqualification of a judge , the Prosecutor or a Deputy Prosecutor shall include , inter alia , the following : ( a ) Personal interest in the case , including a spousal , parental or other close family , personal or professional relationship , or a subordinate relationship , with any of the parties ; ( b ) Involvement , in his or her private capacity , in any legal proceedings initiated prior to his or her involvement in the case , or initiated by him or her subsequently , in which the person being investigated or prosecuted was or is an opposing party ; ( c ) Performance of functions , prior to taking office , during which he or she could be expected to have formed an opinion on the case in question , on the parties or on their legal representatives that , objectively , could adversely affect the required impartiality of the person concerned ; ( d ) Expression of opinions , through the communications media , in writing or in public actions , that , objectively , could adversely affect the required impartiality of the person concerned . Subject to the provisions set out in article 41 , paragraph 2 , and article 42 , paragraph 8 , a request for disqualification shall be made in writing as soon as there is knowledge of the grounds on which it is based . The request shall state the grounds and attach any relevant evidence , and shall be transmitted to the person concerned , who shall be entitled to present written submissions . Any question relating to the disqualification of the Prosecutor or a Deputy Prosecutor shall be decided by a majority of the judges of the Appeals Chamber . Rule 35 Duty of a judge , the Prosecutor or a Deputy Prosecutor to request to be excused Where a judge , the Prosecutor or a Deputy Prosecutor has reason to believe that a ground for disqualification exists in relation to him or her , he or she shall make a request to be excused and shall not wait for a request for disqualification to be made in accordance with article 41 , paragraph 2 , or article 42 , paragraph 7 , and rule 34. The request shall be made and the Presidency shall deal with it in accordance with rule 33. Rule 36 Death of a judge , the Prosecutor , a Deputy Prosecutor , the Registrar or a Deputy Registrar The Presidency shall inform , in writing , the President of the Bureau of the Assembly of States Parties of the death of a judge , the Prosecutor , a Deputy Prosecutor , the Registrar or a Deputy Registrar . Rule 37 Resignation of a judge , the Prosecutor , a Deputy Prosecutor , the Registrar or a Deputy Registrar A judge , the Prosecutor , a Deputy Prosecutor , the Registrar or a Deputy Registrar shall communicate to the Presidency , in writing , his or her decision to resign . The Presidency shall inform , in writing , the President of the Bureau of the Assembly of States Parties . A judge , the Prosecutor , a Deputy Prosecutor , the Registrar or a Deputy Registrar shall endeavour to give notice of the date on which his or her resignation will take effect at least six months in advance . Before the resignation of a judge takes effect , he or she shall make every effort to discharge his or her outstanding responsibilities . Subsection 3 Replacements and alternate judges Rule 38 Replacements A judge may be replaced for objective and justified reasons , inter alia : ( a ) Resignation ; ( b ) Accepted excuse ; ( c ) Disqualification ; ( d ) Removal from office ; ( e ) Death . Replacement shall take place in accordance with the pre-established procedure in the Statute , the Rules and the Regulations . Rule 39 Alternate judges Where an alternate judge has been assigned by the Presidency to a Trial Chamber pursuant to article 74 , paragraph 1 , he or she shall sit through all proceedings and deliberations of the case , but may not take any part therein and shall not exercise any of the functions of the members of the Trial Chamber hearing the case , unless and until he or she is required to replace a member of the Trial Chamber if that member is unable to continue attending . Alternate judges shall be designated in accordance with a procedure pre-established by the Court . Section V Publication , languages and translation Rule 40 Publication of decisions in official languages of the Court For the purposes of article 50 , paragraph 1 , the following decisions shall be considered as resolving fundamental issues : ( a ) All decisions of the Appeals Division ; ( b ) All decisions of the Court on its jurisdiction or on the admissibility of a case pursuant to articles 17 , 18 , 19 and 20 ; ( c ) All decisions of a Trial Chamber on guilt or innocence , sentencing and reparations to victims pursuant to articles 74 , 75 and 76 ; ( d ) All decisions of a Pre-Trial Chamber pursuant to article 57 , paragraph 3 ( d ) . Decisions on confirmation of charges under article 61 , paragraph 7 , and on offences against the administration of justice under article 70 , paragraph 3 , shall be published in all the official languages of the Court when the Presidency determines that they resolve fundamental issues . The Presidency may decide to publish other decisions in all the official languages when such decisions concern major issues relating to the interpretation or the implementation of the Statute or concern a major issue of general interest . Rule 41 Working languages of the Court For the purposes of article 50 , paragraph 2 , the Presidency shall authorize the use of an official language of the Court as a working language when : ( a ) That language is understood and spoken by the majority of those involved in a case before the Court and any of the participants in the proceedings so requests ; or ( b ) The Prosecutor and the defence so request . The Presidency may authorize the use of an official language of the Court as a working language if it considers that it would facilitate the efficiency of the proceedings . Rule 42 Translation and interpretation services The Court shall arrange for the translation and interpretation services necessary to ensure the implementation of its obligations under the Statute and the Rules . Rule 43 Procedure applicable to the publication of documents of the Court The Court shall ensure that all documents subject to publication in accordance with the Statute and the Rules respect the duty to protect the confidentiality of the proceedings and the security of victims and witnesses . Chapter 3 Jurisdiction and admissibility Section I Declarations and referrals relating to articles 11 , 12 , 13 and 14 Rule 44 Declaration provided for in article 12 , paragraph 3 The Registrar , at the request of the Prosecutor , may inquire of a State that is not a Party to the Statute or that has become a Party to the Statute after its entry into force , on a confidential basis , whether it intends to make the declaration provided for in article 12 , paragraph 3. When a State lodges , or declares to the Registrar its intent to lodge , a declaration with the Registrar pursuant to article 12 , paragraph 3 , or when the Registrar acts pursuant to sub-rule 1 , the Registrar shall inform the State concerned that the declaration under article 12 , paragraph 3 , has as a consequence the acceptance of jurisdiction with respect to the crimes referred to in article 5 of relevance to the situation and the provisions of Part 9 , and any rules thereunder concerning States Parties , shall apply . Rule 45 Referral of a situation to the Prosecutor A referral of a situation to the Prosecutor shall be in writing . Section II Initiation of investigations under article 15 Rule 46 Information provided to the Prosecutor under article 15 , paragraphs 1 and 2 Where information is submitted under article 15 , paragraph 1 , or where oral or written testimony is received pursuant to article 15 , paragraph 2 , at the seat of the Court , the Prosecutor shall protect the confidentiality of such information and testimony or take any other necessary measures , pursuant to his or her duties under the Statute . Rule 47 Testimony under article 15 , paragraph 2 The provisions of rules 111 and 112 shall apply , mutatis mutandis , to testimony received by the Prosecutor pursuant to article 15 , paragraph 2. When the Prosecutor considers that there is a serious risk that it might not be possible for the testimony to be taken subsequently , he or she may request the Pre-Trial Chamber to take such measures as may be necessary to ensure the efficiency and integrity of the proceedings and , in particular , to appoint a counsel or a judge from the Pre-Trial Chamber to be present during the taking of the testimony in order to protect the rights of the defence . If the testimony is subsequently presented in the proceedings , its admissibility shall be governed by article 69 , paragraph 4 , and given such weight as determined by the relevant Chamber . Rule 48 Determination of reasonable basis to proceed with an investigation under article 15 , paragraph 3 In determining whether there is a reasonable basis to proceed with an investigation under article 15 , paragraph 3 , the Prosecutor shall consider the factors set out in article 53 , paragraph 1 ( a ) to ( c ) . Rule 49 Decision and notice under article 15 , paragraph 6 Where a decision under article 15 , paragraph 6 , is taken , the Prosecutor shall promptly ensure that notice is provided , including reasons for his or her decision , in a manner that prevents any danger to the safety , well-being and privacy of those who provided information to him or her under article 15 , paragraphs 1 and 2 , or the integrity of investigations or proceedings . The notice shall also advise of the possibility of submitting further information regarding the same situation in the light of new facts and evidence . Rule 50 Procedure for authorization by the Pre-Trial Chamber of the commencement of the investigation When the Prosecutor intends to seek authorization from the Pre-Trial Chamber to initiate an investigation pursuant to article 15 , paragraph 3 , the Prosecutor shall inform victims , known to him or her or to the Victims and Witnesses Unit , or their legal representatives , unless the Prosecutor decides that doing so would pose a danger to the integrity of the investigation or the life or well-being of victims and witnesses . The Prosecutor may also give notice by general means in order to reach groups of victims if he or she determines in the particular circumstances of the case that such notice could not pose a danger to the integrity and effective conduct of the investigation or to the security and well-being of victims and witnesses . In performing these functions , the Prosecutor may seek the assistance of the Victims and Witnesses Unit as appropriate . A request for authorization by the Prosecutor shall be in writing . Following information given in accordance with sub-rule 1 , victims may make representations in writing to the Pre-Trial Chamber within such time limit as set forth in the Regulations . The Pre-Trial Chamber , in deciding on the procedure to be followed , may request additional information from the Prosecutor and from any of the victims who have made representations , and , if it considers it appropriate , may hold a hearing . The Pre-Trial Chamber shall issue its decision , including its reasons , as to whether to authorize the commencement of the investigation in accordance with article 15 , paragraph 4 , with respect to all or any part of the request by the Prosecutor . The Chamber shall give notice of the decision to victims who have made representations . The above procedure shall also apply to a new request to the Pre-Trial Chamber pursuant to article 15 , paragraph 5. Section III Challenges and preliminary rulings under articles 17 , 18 and 19 Rule 51 Information provided under article 17 In considering the matters referred to in article 17 , paragraph 2 , and in the context of the circumstances of the case , the Court may consider , inter alia , information that the State referred to in article 17 , paragraph 1 , may choose to bring to the attention of the Court showing that its courts meet internationally recognized norms and standards for the independent and impartial prosecution of similar conduct , or that the State has confirmed in writing to the Prosecutor that the case is being investigated or prosecuted . Rule 52 Notification provided for in article 18 , paragraph 1 Subject to the limitations provided for in article 18 , paragraph 1 , the notification shall contain information about the acts that may constitute crimes referred to in article 5 , relevant for the purposes of article 18 , paragraph 2. A State may request additional information from the Prosecutor to assist it in the application of article 18 , paragraph 2. Such a request shall not affect the one-month time limit provided for in article 18 , paragraph 2 , and shall be responded to by the Prosecutor on an expedited basis . Rule 53 Deferral provided for in article 18 , paragraph 2 When a State requests a deferral pursuant to article 18 , paragraph 2 , that State shall make this request in writing and provide information concerning its investigation , taking into account article 18 , paragraph 2. The Prosecutor may request additional information from that State . Rule 54 Application by the Prosecutor under article 18 , paragraph 2 An application submitted by the Prosecutor to the Pre-Trial Chamber in accordance with article 18 , paragraph 2 , shall be in writing and shall contain the basis for the application . The information provided by the State under rule 53 shall be communicated by the Prosecutor to the Pre-Trial Chamber . The Prosecutor shall inform that State in writing when he or she makes an application to the Pre-Trial Chamber under article 18 , paragraph 2 , and shall include in the notice a summary of the basis of the application . Rule 55 Proceedings concerning article 18 , paragraph 2 The Pre-Trial Chamber shall decide on the procedure to be followed and may take appropriate measures for the proper conduct of the proceedings . It may hold a hearing . The Pre-Trial Chamber shall examine the Prosecutor 's application and any observations submitted by a State that requested a deferral in accordance with article 18 , paragraph 2 , and shall consider the factors in article 17 in deciding whether to authorize an investigation . The decision and the basis for the decision of the Pre-Trial Chamber shall be communicated as soon as possible to the Prosecutor and to the State that requested a deferral of an investigation . Rule 56 Application by the Prosecutor following review under article 18 , paragraph 3 Following a review by the Prosecutor as set forth in article 18 , paragraph 3 , the Prosecutor may apply to the Pre-Trial Chamber for authorization in accordance with article 18 , paragraph 2. The application to the Pre-Trial Chamber shall be in writing and shall contain the basis for the application . Any further information provided by the State under article 18 , paragraph 5 , shall be communicated by the Prosecutor to the Pre-Trial Chamber . The proceedings shall be conducted in accordance with rules 54 , sub-rule 2 , and 55. Rule 57 Provisional measures under article 18 , paragraph 6 An application to the Pre-Trial Chamber by the Prosecutor in the circumstances provided for in article 18 , paragraph 6 , shall be considered ex parte and in camera . The Pre-Trial Chamber shall rule on the application on an expedited basis . Rule 58 Proceedings under article 19 A request or application made under article 19 shall be in writing and contain the basis for it . When a Chamber receives a request or application raising a challenge or question concerning its jurisdiction or the admissibility of a case in accordance with article 19 , paragraph 2 or 3 , or is acting on its own motion as provided for in article 19 , paragraph 1 , it shall decide on the procedure to be followed and may take appropriate measures for the proper conduct of the proceedings . It may hold a hearing . It may join the challenge or question to a confirmation or a trial proceeding as long as this does not cause undue delay , and in this circumstance shall hear and decide on the challenge or question first . The Court shall transmit a request or application received under sub-rule 2 to the Prosecutor and to the person referred to in article 19 , paragraph 2 , who has been surrendered to the Court or who has appeared voluntarily or pursuant to a summons , and shall allow them to submit written observations to the request or application within a period of time determined by the Chamber . The Court shall rule on any challenge or question of jurisdiction first and then on any challenge or question of admissibility . Rule 59 Participation in proceedings under article 19 , paragraph 3 For the purpose of article 19 , paragraph 3 , the Registrar shall inform the following of any question or challenge of jurisdiction or admissibility which has arisen pursuant to article 19 , paragraphs 1 , 2 and 3 : ( a ) Those who have referred a situation pursuant to article 13 ; ( b ) The victims who have already communicated with the Court in relation to that case or their legal representatives . The Registrar shall provide those referred to in sub-rule 1 , in a manner consistent with the duty of the Court regarding the confidentiality of information , the protection of any person and the preservation of evidence , with a summary of the grounds on which the jurisdiction of the Court or the admissibility of the case has been challenged . Those receiving the information , as provided for in sub-rule 1 , may make representation in writing to the competent Chamber within such time limit as it considers appropriate . Rule 60 Competent organ to receive challenges If a challenge to the jurisdiction of the Court or to the admissibility of a case is made after a confirmation of the charges but before the constitution or designation of the Trial Chamber , it shall be addressed to the Presidency , which shall refer it to the Trial Chamber as soon as the latter is constituted or designated in accordance with rule 130. Rule 61 Provisional measures under article 19 , paragraph 8 When the Prosecutor makes application to the competent Chamber in the circumstances provided for in article 19 , paragraph 8 , rule 57 shall apply . Rule 62 Proceedings under article 19 , paragraph 10 If the Prosecutor makes a request under article 19 , paragraph 10 , he or she shall make the request to the Chamber that made the latest ruling on admissibility . The provisions of rules 58 , 59 and 61 shall be applicable . The State or States whose challenge to admissibility under article 19 , paragraph 2 , provoked the decision of inadmissibility provided for in article 19 , paragraph 10 , shall be notified of the request of the Prosecutor and shall be given a time limit within which to make representations . Chapter 4 Provisions relating to various stages of the proceedings Section I Evidence Rule 63 General provisions relating to evidence The rules of evidence set forth in this chapter , together with article 69 , shall apply in proceedings before all Chambers . A Chamber shall have the authority , in accordance with the discretion described in article 64 , paragraph 9 , to assess freely all evidence submitted in order to determine its relevance or admissibility in accordance with article 69. A Chamber shall rule on an application of a party or on its own motion , made under article 64 , subparagraph 9 ( a ) , concerning admissibility when it is based on the grounds set out in article 69 , paragraph 7. Without prejudice to article 66 , paragraph 3 , a Chamber shall not impose a legal requirement that corroboration is required in order to prove any crime within the jurisdiction of the Court , in particular , crimes of sexual violence . The Chambers shall not apply national laws governing evidence , other than in accordance with article 21. Rule 64 Procedure relating to the relevance or admissibility of evidence An issue relating to relevance or admissibility must be raised at the time when the evidence is submitted to a Chamber . Exceptionally , when those issues were not known at the time when the evidence was submitted , it may be raised immediately after the issue has become known . The Chamber may request that the issue be raised in writing . The written motion shall be communicated by the Court to all those who participate in the proceedings , unless otherwise decided by the Court . A Chamber shall give reasons for any rulings it makes on evidentiary matters . These reasons shall be placed in the record of the proceedings if they have not already been incorporated into the record during the course of the proceedings in accordance with article 64 , paragraph 10 , and rule 137 , sub-rule 1. Evidence ruled irrelevant or inadmissible shall not be considered by the Chamber . Rule 65 Compellability of witnesses A witness who appears before the Court is compellable by the Court to provide testimony , unless otherwise provided for in the Statute and the Rules , in particular rules 73 , 74 and 75. Rule 171 applies to a witness appearing before the Court who is compellable to provide testimony under sub-rule 1. Rule 66 Solemn undertaking Except as described in sub-rule 2 , every witness shall , in accordance with article 69 , paragraph 1 , make the following solemn undertaking before testifying : “ I solemnly declare that I will speak the truth , the whole truth and nothing but the truth . ” A person under the age of 18 or a person whose judgement has been impaired and who , in the opinion of the Chamber , does not understand the nature of a solemn undertaking may be allowed to testify without this solemn undertaking if the Chamber considers that the person is able to describe matters of which he or she has knowledge and that the person understands the meaning of the duty to speak the truth . Before testifying , the witness shall be informed of the offence defined in article 70 , paragraph 1 ( a ) . Rule 67 Live testimony by means of audio or video-link technology In accordance with article 69 , paragraph 2 , a Chamber may allow a witness to give viva voce ( oral ) testimony before the Chamber by means of audio or video technology , provided that such technology permits the witness to be examined by the Prosecutor , the defence , and by the Chamber itself , at the time that the witness so testifies . The examination of a witness under this rule shall be conducted in accordance with the relevant rules of this chapter . The Chamber , with the assistance of the Registry , shall ensure that the venue chosen for the conduct of the audio or video-link testimony is conducive to the giving of truthful and open testimony and to the safety , physical and psychological well-being , dignity and privacy of the witness . Rule 68 Prior recorded testimony When the Pre-Trial Chamber has not taken measures under article 56 , the Trial Chamber may , in accordance with article 69 , paragraph 2 , allow the introduction of previously recorded audio or video testimony of a witness , or the transcript or other documented evidence of such testimony , provided that : ( a ) If the witness who gave the previously recorded testimony is not present before the Trial Chamber , both the Prosecutor and the defence had the opportunity to examine the witness during the recording ; or ( b ) If the witness who gave the previously recorded testimony is present before the Trial Chamber , he or she does not object to the submission of the previously recorded testimony and the Prosecutor , the defence and the Chamber have the opportunity to examine the witness during the proceedings . Rule 69 Agreements as to evidence The Prosecutor and the defence may agree that an alleged fact , which is contained in the charges , the contents of a document , the expected testimony of a witness or other evidence is not contested and , accordingly , a Chamber may consider such alleged fact as being proven , unless the Chamber is of the opinion that a more complete presentation of the alleged facts is required in the interests of justice , in particular the interests of the victims . Rule 70 Principles of evidence in cases of sexual violence In cases of sexual violence , the Court shall be guided by and , where appropriate , apply the following principles : ( a ) Consent cannot be inferred by reason of any words or conduct of a victim where force , threat of force , coercion or taking advantage of a coercive environment undermined the victim 's ability to give voluntary and genuine consent ; ( b ) Consent cannot be inferred by reason of any words or conduct of a victim where the victim is incapable of giving genuine consent ; ( c ) Consent cannot be inferred by reason of the silence of , or lack of resistance by , a victim to the alleged sexual violence ; ( d ) Credibility , character or predisposition to sexual availability of a victim or witness cannot be inferred by reason of the sexual nature of the prior or subsequent conduct of a victim or witness . Rule 71 Evidence of other sexual conduct In the light of the definition and nature of the crimes within the jurisdiction of the Court , and subject to article 69 , paragraph 4 , a Chamber shall not admit evidence of the prior or subsequent sexual conduct of a victim or witness . Rule 72 In camera procedure to consider relevance or admissibility of evidence Where there is an intention to introduce or elicit , including by means of the questioning of a victim or witness , evidence that the victim consented to an alleged crime of sexual violence , or evidence of the words , conduct , silence or lack of resistance of a victim or witness as referred to in principles ( a ) through ( d ) of rule 70 , notification shall be provided to the Court which shall describe the substance of the evidence intended to be introduced or elicited and the relevance of the evidence to the issues in the case . In deciding whether the evidence referred to in sub-rule 1 is relevant or admissible , a Chamber shall hear in camera the views of the Prosecutor , the defence , the witness and the victim or his or her legal representative , if any , and shall take into account whether that evidence has a sufficient degree of probative value to an issue in the case and the prejudice that such evidence may cause , in accordance with article 69 , paragraph 4. For this purpose , the Chamber shall have regard to article 21 , paragraph 3 , and articles 67 and 68 , and shall be guided by principles ( a ) to ( d ) of rule 70 , especially with respect to the proposed questioning of a victim . Where the Chamber determines that the evidence referred to in sub-rule 2 is admissible in the proceedings , the Chamber shall state on the record the specific purpose for which the evidence is admissible . In evaluating the evidence during the proceedings , the Chamber shall apply principles ( a ) to ( d ) of rule 70. Rule 73 Privileged communications and information Without prejudice to article 67 , paragraph 1 ( b ) , communications made in the context of the professional relationship between a person and his or her legal counsel shall be regarded as privileged , and consequently not subject to disclosure , unless : ( a ) The person consents in writing to such disclosure ; or ( b ) The person voluntarily disclosed the content of the communication to a third party , and that third party then gives evidence of that disclosure . Having regard to rule 63 , sub-rule 5 , communications made in the context of a class of professional or other confidential relationships shall be regarded as privileged , and consequently not subject to disclosure , under the same terms as in sub-rules 1 ( a ) and 1 ( b ) if a Chamber decides in respect of that class that : ( a ) Communications occurring within that class of relationship are made in the course of a confidential relationship producing a reasonable expectation of privacy and non-disclosure ; ( b ) Confidentiality is essential to the nature and type of relationship between the person and the confidant ; and ( c ) Recognition of the privilege would further the objectives of the Statute and the Rules . In making a decision under sub-rule 2 , the Court shall give particular regard to recognizing as privileged those communications made in the context of the professional relationship between a person and his or her medical doctor , psychiatrist , psychologist or counsellor , in particular those related to or involving victims , or between a person and a member of a religious clergy ; and in the latter case , the Court shall recognize as privileged those communications made in the context of a sacred confession where it is an integral part of the practice of that religion . The Court shall regard as privileged , and consequently not subject to disclosure , including by way of testimony of any present or past official or employee of the International Committee of the Red Cross ( ICRC ) , any information , documents or other evidence which it came into the possession of in the course , or as a consequence , of the performance by ICRC of its functions under the Statutes of the International Red Cross and Red Crescent Movement , unless : ( a ) After consultations undertaken pursuant to sub-rule 6 , ICRC does not object in writing to such disclosure , or otherwise has waived this privilege ; or ( b ) Such information , documents or other evidence is contained in public statements and documents of ICRC . Nothing in sub-rule 4 shall affect the admissibility of the same evidence obtained from a source other than ICRC and its officials or employees when such evidence has also been acquired by this source independently of ICRC and its officials or employees . If the Court determines that ICRC information , documents or other evidence are of great importance for a particular case , consultations shall be held between the Court and ICRC in order to seek to resolve the matter by cooperative means , bearing in mind the circumstances of the case , the relevance of the evidence sought , whether the evidence could be obtained from a source other than ICRC , the interests of justice and of victims , and the performance of the Court 's and ICRC 's functions . Rule 74 Self-incrimination by a witness Unless a witness has been notified pursuant to rule 190 , the Chamber shall notify a witness of the provisions of this rule before his or her testimony . Where the Court determines that an assurance with respect to self-incrimination should be provided to a particular witness , it shall provide the assurances under sub-rule 3 , paragraph ( c ) , before the witness attends , directly or pursuant to a request under article 93 , paragraph ( 1 ) ( e ) . ( a ) A witness may object to making any statement that might tend to incriminate him or her . ( b ) Where the witness has attended after receiving an assurance under sub-rule 2 , the Court may require the witness to answer the question or questions . ( c ) In the case of other witnesses , the Chamber may require the witness to answer the question or questions , after assuring the witness that the evidence provided in response to the questions : ( i ) Will be kept confidential and will not be disclosed to the public or any State ; and ( ii ) Will not be used either directly or indirectly against that person in any subsequent prosecution by the Court , except under articles 70 and 71. Before giving such an assurance , the Chamber shall seek the views of the Prosecutor , ex parte , to determine if the assurance should be given to this particular witness . In determining whether to require the witness to answer , the Chamber shall consider : ( a ) The importance of the anticipated evidence ; ( b ) Whether the witness would be providing unique evidence ; ( c ) The nature of the possible incrimination , if known ; and ( d ) The sufficiency of the protections for the witness , in the particular circumstances . If the Chamber determines that it would not be appropriate to provide an assurance to this witness , it shall not require the witness to answer the question . If the Chamber determines not to require the witness to answer , it may still continue the questioning of the witness on other matters . In order to give effect to the assurance , the Chamber shall : ( a ) Order that the evidence of the witness be given in camera ; ( b ) Order that the identity of the witness and the content of the evidence given shall not be disclosed , in any manner , and provide that the breach of any such order will be subject to sanction under article 71 ; ( c ) Specifically advise the Prosecutor , the accused , the defence counsel , the legal representative of the victim and any Court staff present of the consequences of a breach of the order under subparagraph ( b ) ; ( d ) Order the sealing of any record of the proceedings ; and ( e ) Use protective measures with respect to any decision of the Court to ensure that the identity of the witness and the content of the evidence given are not disclosed . Where the Prosecutor is aware that the testimony of any witness may raise issues with respect to self-incrimination , he or she shall request an in camera hearing and advise the Chamber of this , in advance of the testimony of the witness . The Chamber may impose the measures outlined in sub-rule 7 for all or a part of the testimony of that witness . The accused , the defence counsel or the witness may advise the Prosecutor or the Chamber that the testimony of a witness will raise issues of self-incrimination before the witness testifies and the Chamber may take the measures outlined in sub-rule 7. If an issue of self-incrimination arises in the course of the proceedings , the Chamber shall suspend the taking of the testimony and provide the witness with an opportunity to obtain legal advice if he or she so requests for the purpose of the application of the rule . Rule 75 Incrimination by family members A witness appearing before the Court , who is a spouse , child or parent of an accused person , shall not be required by a Chamber to make any statement that might tend to incriminate that accused person . However , the witness may choose to make such a statement . In evaluating the testimony of a witness , a Chamber may take into account that the witness , referred to in sub-rule 1 , objected to reply to a question which was intended to contradict a previous statement made by the witness , or the witness was selective in choosing which questions to answer . Section II Disclosure Rule 76 Pre-trial disclosure relating to prosecution witnesses The Prosecutor shall provide the defence with the names of witnesses whom the Prosecutor intends to call to testify and copies of any prior statements made by those witnesses . This shall be done sufficiently in advance to enable the adequate preparation of the defence . The Prosecutor shall subsequently advise the defence of the names of any additional prosecution witnesses and provide copies of their statements when the decision is made to call those witnesses . The statements of prosecution witnesses shall be made available in original and in a language which the accused fully understands and speaks . This rule is subject to the protection and privacy of victims and witnesses and the protection of confidential information as provided for in the Statute and rules 81 and 82. Rule 77 Inspection of material in possession or control of the Prosecutor The Prosecutor shall , subject to the restrictions on disclosure as provided for in the Statute and in rules 81 and 82 , permit the defence to inspect any books , documents , photographs and other tangible objects in the possession or control of the Prosecutor , which are material to the preparation of the defence or are intended for use by the Prosecutor as evidence for the purposes of the confirmation hearing or at trial , as the case may be , or were obtained from or belonged to the person . Rule 78 Inspection of material in possession or control of the defence The defence shall permit the Prosecutor to inspect any books , documents , photographs and other tangible objects in the possession or control of the defence , which are intended for use by the defence as evidence for the purposes of the confirmation hearing or at trial . Rule 79 Disclosure by the defence The defence shall notify the Prosecutor of its intent to : ( a ) Raise the existence of an alibi , in which case the notification shall specify the place or places at which the accused claims to have been present at the time of the alleged crime and the names of witnesses and any other evidence upon which the accused intends to rely to establish the alibi ; or ( b ) Raise a ground for excluding criminal responsibility provided for in article 31 , paragraph 1 , in which case the notification shall specify the names of witnesses and any other evidence upon which the accused intends to rely to establish the ground . With due regard to time limits set forth in other rules , notification under sub-rule 1 shall be given sufficiently in advance to enable the Prosecutor to prepare adequately and to respond . The Chamber dealing with the matter may grant the Prosecutor an adjournment to address the issue raised by the defence . Failure of the defence to provide notice under this rule shall not limit its right to raise matters dealt with in sub-rule 1 and to present evidence . This rule does not prevent a Chamber from ordering disclosure of any other evidence . Rule 80 Procedures for raising a ground for excluding criminal responsibility under article 31 , paragraph 3 The defence shall give notice to both the Trial Chamber and the Prosecutor if it intends to raise a ground for excluding criminal responsibility under article 31 , paragraph 3. This shall be done sufficiently in advance of the commencement of the trial to enable the Prosecutor to prepare adequately for trial . Following notice given under sub-rule 1 , the Trial Chamber shall hear both the Prosecutor and the defence before deciding whether the defence can raise a ground for excluding criminal responsibility . If the defence is permitted to raise the ground , the Trial Chamber may grant the Prosecutor an adjournment to address that ground . Rule 81 Restrictions on disclosure Reports , memoranda or other internal documents prepared by a party , its assistants or representatives in connection with the investigation or preparation of the case are not subject to disclosure . Where material or information is in the possession or control of the Prosecutor which must be disclosed in accordance with the Statute , but disclosure may prejudice further or ongoing investigations , the Prosecutor may apply to the Chamber dealing with the matter for a ruling as to whether the material or information must be disclosed to the defence . The matter shall be heard on an ex parte basis by the Chamber . However , the Prosecutor may not introduce such material or information into evidence during the confirmation hearing or the trial without adequate prior disclosure to the accused . Where steps have been taken to ensure the confidentiality of information , in accordance with articles 54 , 57 , 64 , 72 and 93 , and , in accordance with article 68 , to protect the safety of witnesses and victims and members of their families , such information shall not be disclosed , except in accordance with those articles . When the disclosure of such information may create a risk to the safety of the witness , the Court shall take measures to inform the witness in advance . The Chamber dealing with the matter shall , on its own motion or at the request of the Prosecutor , the accused or any State , take the necessary steps to ensure the confidentiality of information , in accordance with articles 54 , 72 and 93 , and , in accordance with article 68 , to protect the safety of witnesses and victims and members of their families , including by authorizing the non-disclosure of their identity prior to the commencement of the trial . Where material or information is in the possession or control of the Prosecutor which is withheld under article 68 , paragraph 5 , such material and information may not be subsequently introduced into evidence during the confirmation hearing or the trial without adequate prior disclosure to the accused . Where material or information is in the possession or control of the defence which is subject to disclosure , it may be withheld in circumstances similar to those which would allow the Prosecutor to rely on article 68 , paragraph 5 , and a summary thereof submitted instead . Such material and information may not be subsequently introduced into evidence during the confirmation hearing or the trial without adequate prior disclosure to the Prosecutor . Rule 82 Restrictions on disclosure of material and information protected under article 54 , paragraph 3 ( e ) Where material or information is in the possession or control of the Prosecutor which is protected under article 54 , paragraph 3 ( e ) , the Prosecutor may not subsequently introduce such material or information into evidence without the prior consent of the provider of the material or information and adequate prior disclosure to the accused . If the Prosecutor introduces material or information protected under article 54 , paragraph 3 ( e ) , into evidence , a Chamber may not order the production of additional evidence received from the provider of the initial material or information , nor may a Chamber for the purpose of obtaining such additional evidence itself summon the provider or a representative of the provider as a witness or order their attendance . If the Prosecutor calls a witness to introduce in evidence any material or information which has been protected under article 54 , paragraph 3 ( e ) , a Chamber may not compel that witness to answer any question relating to the material or information or its origin , if the witness declines to answer on grounds of confidentiality . The right of the accused to challenge evidence which has been protected under article 54 , paragraph 3 ( e ) , shall remain unaffected subject only to the limitations contained in sub-rules 2 and 3. A Chamber dealing with the matter may order , upon application by the defence , that , in the interests of justice , material or information in the possession of the accused , which has been provided to the accused under the same conditions as set forth in article 54 , paragraph 3 ( e ) , and which is to be introduced into evidence , shall be subject mutatis mutandis to sub-rules 1 , 2 and 3. Rule 83 Ruling on exculpatory evidence under article 67 , paragraph 2 The Prosecutor may request as soon as practicable a hearing on an ex parte basis before the Chamber dealing with the matter for the purpose of obtaining a ruling under article 67 , paragraph 2. Rule 84 Disclosure and additional evidence for trial In order to enable the parties to prepare for trial and to facilitate the fair and expeditious conduct of the proceedings , the Trial Chamber shall , in accordance with article 64 , paragraphs 3 ( c ) and 6 ( d ) , and article 67 , paragraph ( 2 ) , and subject to article 68 , paragraph 5 , make any necessary orders for the disclosure of documents or information not previously disclosed and for the production of additional evidence . To avoid delay and to ensure that the trial commences on the set date , any such orders shall include strict time limits which shall be kept under review by the Trial Chamber . Section III Victims and witnesses Subsection 1 Definition and general principle relating to victims Rule 85 Definition of victims For the purposes of the Statute and the Rules of Procedure and Evidence : ( a ) “ Victims ” means natural persons who have suffered harm as a result of the commission of any crime within the jurisdiction of the Court ; ( b ) Victims may include organizations or institutions that have sustained direct harm to any of their property which is dedicated to religion , education , art or science or charitable purposes , and to their historic monuments , hospitals and other places and objects for humanitarian purposes . Rule 86 General principle A Chamber in making any direction or order , and other organs of the Court in performing their functions under the Statute or the Rules , shall take into account the needs of all victims and witnesses in accordance with article 68 , in particular , children , elderly persons , persons with disabilities and victims of sexual or gender violence . Subsection 2 Protection of victims and witnesses Rule 87 Protective measures Upon the motion of the Prosecutor or the defence or upon the request of a witness or a victim or his or her legal representative , if any , or on its own motion , and after having consulted with the Victims and Witnesses Unit , as appropriate , a Chamber may order measures to protect a victim , a witness or another person at risk on account of testimony given by a witness pursuant to article 68 , paragraphs 1 and 2. The Chamber shall seek to obtain , whenever possible , the consent of the person in respect of whom the protective measure is sought prior to ordering the protective measure . A motion or request under sub-rule 1 shall be governed by rule 134 , provided that : ( a ) Such a motion or request shall not be submitted ex parte ; ( b ) A request by a witness or by a victim or his or her legal representative , if any , shall be served on both the Prosecutor and the defence , each of whom shall have the opportunity to respond ; ( c ) A motion or request affecting a particular witness or a particular victim shall be served on that witness or victim or his or her legal representative , if any , in addition to the other party , each of whom shall have the opportunity to respond ; ( d ) When the Chamber proceeds on its own motion , notice and opportunity to respond shall be given to the Prosecutor and the defence , and to any witness or any victim or his or her legal representative , if any , who would be affected by such protective measure ; and ( e ) A motion or request may be filed under seal , and , if so filed , shall remain sealed until otherwise ordered by a Chamber . Responses to motions or requests filed under seal shall also be filed under seal . A Chamber may , on a motion or request under sub-rule 1 , hold a hearing , which shall be conducted in camera , to determine whether to order measures to prevent the release to the public or press and information agencies , of the identity or the location of a victim , a witness or other person at risk on account of testimony given by a witness by ordering , inter alia : ( a ) That the name of the victim , witness or other person at risk on account of testimony given by a witness or any information which could lead to his or her identification , be expunged from the public records of the Chamber ; ( b ) That the Prosecutor , the defence or any other participant in the proceedings be prohibited from disclosing such information to a third party ; ( c ) That testimony be presented by electronic or other special means , including the use of technical means enabling the alteration of pictures or voice , the use of audio-visual technology , in particular videoconferencing and closed-circuit television , and the exclusive use of the sound media ; ( d ) That a pseudonym be used for a victim , a witness or other person at risk on account of testimony given by a witness ; or ( e ) That a Chamber conduct part of its proceedings in camera . Rule 88 Special measures Upon the motion of the Prosecutor or the defence , or upon the request of a witness or a victim or his or her legal representative , if any , or on its own motion , and after having consulted with the Victims and Witnesses Unit , as appropriate , a Chamber may , taking into account the views of the victim or witness , order special measures such as , but not limited to , measures to facilitate the testimony of a traumatized victim or witness , a child , an elderly person or a victim of sexual violence , pursuant to article 68 , paragraphs 1 and 2. The Chamber shall seek to obtain , whenever possible , the consent of the person in respect of whom the special measure is sought prior to ordering that measure . A Chamber may hold a hearing on a motion or a request under sub-rule 1 , if necessary in camera or ex parte , to determine whether to order any such special measure , including but not limited to an order that a counsel , a legal representative , a psychologist or a family member be permitted to attend during the testimony of the victim or the witness . For inter partes motions or requests filed under this rule , the provisions of rule 87 , sub-rules 2 ( b ) to ( d ) , shall apply mutatis mutandis . A motion or request filed under this rule may be filed under seal , and if so filed shall remain sealed until otherwise ordered by a Chamber . Any responses to inter partes motions or requests filed under seal shall also be filed under seal . Taking into consideration that violations of the privacy of a witness or victim may create risk to his or her security , a Chamber shall be vigilant in controlling the manner of questioning a witness or victim so as to avoid any harassment or intimidation , paying particular attention to attacks on victims of crimes of sexual violence . Subsection 3 Participation of victims in the proceedings Rule 89 Application for participation of victims in the proceedings In order to present their views and concerns , victims shall make written application to the Registrar , who shall transmit the application to the relevant Chamber . Subject to the provisions of the Statute , in particular article 68 , paragraph 1 , the Registrar shall provide a copy of the application to the Prosecutor and the defence , who shall be entitled to reply within a time limit to be set by the Chamber . Subject to the provisions of sub-rule 2 , the Chamber shall then specify the proceedings and manner in which participation is considered appropriate , which may include making opening and closing statements . The Chamber , on its own initiative or on the application of the Prosecutor or the defence , may reject the application if it considers that the person is not a victim or that the criteria set forth in article 68 , paragraph 3 , are not otherwise fulfilled . A victim whose application has been rejected may file a new application later in the proceedings . An application referred to in this rule may also be made by a person acting with the consent of the victim , or a person acting on behalf of a victim , in the case of a victim who is a child or , when necessary , a victim who is disabled . Where there are a number of applications , the Chamber may consider the applications in such a manner as to ensure the effectiveness of the proceedings and may issue one decision . Rule 90 Legal representatives of victims A victim shall be free to choose a legal representative . Where there are a number of victims , the Chamber may , for the purposes of ensuring the effectiveness of the proceedings , request the victims or particular groups of victims , if necessary with the assistance of the Registry , to choose a common legal representative or representatives . In facilitating the coordination of victim representation , the Registry may provide assistance , inter alia , by referring the victims to a list of counsel , maintained by the Registry , or suggesting one or more common legal representatives . If the victims are unable to choose a common legal representative or representatives within a time limit that the Chamber may decide , the Chamber may request the Registrar to choose one or more common legal representatives . The Chamber and the Registry shall take all reasonable steps to ensure that in the selection of common legal representatives , the distinct interests of the victims , particularly as provided in article 68 , paragraph 1 , are represented and that any conflict of interest is avoided . A victim or group of victims who lack the necessary means to pay for a common legal representative chosen by the Court may receive assistance from the Registry , including , as appropriate , financial assistance . A legal representative of a victim or victims shall have the qualifications set forth in rule 22 , sub-rule 1. Rule 91 Participation of legal representatives in the proceedings A Chamber may modify a previous ruling under rule 89. A legal representative of a victim shall be entitled to attend and participate in the proceedings in accordance with the terms of the ruling of the Chamber and any modification thereof given under rules 89 and 90. This shall include participation in hearings unless , in the circumstances of the case , the Chamber concerned is of the view that the representative 's intervention should be confined to written observations or submissions . The Prosecutor and the defence shall be allowed to reply to any oral or written observation by the legal representative for victims . ( a ) When a legal representative attends and participates in accordance with this rule , and wishes to question a witness , including questioning under rules 67 and 68 , an expert or the accused , the legal representative must make application to the Chamber . The Chamber may require the legal representative to provide a written note of the questions and in that case the questions shall be communicated to the Prosecutor and , if appropriate , the defence , who shall be allowed to make observations within a time limit set by the Chamber . ( b ) The Chamber shall then issue a ruling on the request , taking into account the stage of the proceedings , the rights of the accused , the interests of witnesses , the need for a fair , impartial and expeditious trial and in order to give effect to article 68 , paragraph 3. The ruling may include directions on the manner and order of the questions and the production of documents in accordance with the powers of the Chamber under article 64. The Chamber may , if it considers it appropriate , put the question to the witness , expert or accused on behalf of the victim 's legal representative . For a hearing limited to reparations under article 75 , the restrictions on questioning by the legal representative set forth in sub-rule 2 shall not apply . In that case , the legal representative may , with the permission of the Chamber concerned , question witnesses , experts and the person concerned . Rule 92 Notification to victims and their legal representatives This rule on notification to victims and their legal representatives shall apply to all proceedings before the Court , except in proceedings provided for in Part 2. In order to allow victims to apply for participation in the proceedings in accordance with rule 89 , the Court shall notify victims concerning the decision of the Prosecutor not to initiate an investigation or not to prosecute pursuant to article 53. Such a notification shall be given to victims or their legal representatives who have already participated in the proceedings or , as far as possible , to those who have communicated with the Court in respect of the situation or case in question . The Chamber may order the measures outlined in sub-rule 8 if it considers it appropriate in the particular circumstances . In order to allow victims to apply for participation in the proceedings in accordance with rule 89 , the Court shall notify victims regarding its decision to hold a hearing to confirm charges pursuant to article 61. Such a notification shall be given to victims or their legal representatives who have already participated in the proceedings or , as far as possible , to those who have communicated with the Court in respect of the case in question . When a notification for participation as provided for in sub-rules 2 and 3 has been given , any subsequent notification as referred to in sub-rules 5 and 6 shall only be provided to victims or their legal representatives who may participate in the proceedings in accordance with a ruling of the Chamber pursuant to rule 89 and any modification thereof . In a manner consistent with the ruling made under rules 89 to 91 , victims or their legal representatives participating in proceedings shall , in respect of those proceedings , be notified by the Registrar in a timely manner of : ( a ) Proceedings before the Court , including the date of hearings and any postponements thereof , and the date of delivery of the decision ; ( b ) Requests , submissions , motions and other documents relating to such requests , submissions or motions . Where victims or their legal representatives have participated in a certain stage of the proceedings , the Registrar shall notify them as soon as possible of the decisions of the Court in those proceedings . Notifications as referred to in sub-rules 5 and 6 shall be in writing or , where written notification is not possible , in any other form as appropriate . The Registry shall keep a record of all notifications . Where necessary , the Registrar may seek the cooperation of States Parties in accordance with article 93 , paragraph 1 ( d ) and ( l ) . For notification as referred to in sub-rule 3 and otherwise at the request of a Chamber , the Registrar shall take necessary measures to give adequate publicity to the proceedings . In doing so , the Registrar may seek , in accordance with Part 9 , the cooperation of relevant States Parties , and seek the assistance of intergovernmental organizations . Rule 93 Views of victims or their legal representatives A Chamber may seek the views of victims or their legal representatives participating pursuant to rules 89 to 91 on any issue , inter alia , in relation to issues referred to in rules 107 , 109 , 125 , 128 , 136 , 139 and 191. In addition , a Chamber may seek the views of other victims , as appropriate . Subsection 4 Reparations to victims Rule 94 Procedure upon request A victim 's request for reparations under article 75 shall be made in writing and filed with the Registrar . It shall contain the following particulars : ( a ) The identity and address of the claimant ; ( b ) A description of the injury , loss or harm ; ( c ) The location and date of the incident and , to the extent possible , the identity of the person or persons the victim believes to be responsible for the injury , loss or harm ; ( d ) Where restitution of assets , property or other tangible items is sought , a description of them ; ( e ) Claims for compensation ; ( f ) Claims for rehabilitation and other forms of remedy ; ( g ) To the extent possible , any relevant supporting documentation , including names and addresses of witnesses . At commencement of the trial and subject to any protective measures , the Court shall ask the Registrar to provide notification of the request to the person or persons named in the request or identified in the charges and , to the extent possible , to any interested persons or any interested States . Those notified shall file with the Registry any representation made under article 75 , paragraph 3. Rule 95 Procedure on the motion of the Court In cases where the Court intends to proceed on its own motion pursuant to article 75 , paragraph 1 , it shall ask the Registrar to provide notification of its intention to the person or persons against whom the Court is considering making a determination , and , to the extent possible , to victims , interested persons and interested States . Those notified shall file with the Registry any representation made under article 75 , paragraph 3. If , as a result of notification under sub-rule 1 : ( a ) A victim makes a request for reparations , that request will be determined as if it had been brought under rule 94 ; ( b ) A victim requests that the Court does not make an order for reparations , the Court shall not proceed to make an individual order in respect of that victim . Rule 96 Publication of reparation proceedings Without prejudice to any other rules on notification of proceedings , the Registrar shall , insofar as practicable , notify the victims or their legal representatives and the person or persons concerned . The Registrar shall also , having regard to any information provided by the Prosecutor , take all the necessary measures to give adequate publicity of the reparation proceedings before the Court , to the extent possible , to other victims , interested persons and interested States . In taking the measures described in sub-rule 1 , the Court may seek , in accordance with Part 9 , the cooperation of relevant States Parties , and seek the assistance of intergovernmental organizations in order to give publicity , as widely as possible and by all possible means , to the reparation proceedings before the Court . Rule 97 Assessment of reparations Taking into account the scope and extent of any damage , loss or injury , the Court may award reparations on an individualized basis or , where it deems it appropriate , on a collective basis or both . At the request of victims or their legal representatives , or at the request of the convicted person , or on its own motion , the Court may appoint appropriate experts to assist it in determining the scope , extent of any damage , loss and injury to , or in respect of victims and to suggest various options concerning the appropriate types and modalities of reparations . The Court shall invite , as appropriate , victims or their legal representatives , the convicted person as well as interested persons and interested States to make observations on the reports of the experts . In all cases , the Court shall respect the rights of victims and the convicted person . Rule 98 Trust Fund Individual awards for reparations shall be made directly against a convicted person . The Court may order that an award for reparations against a convicted person be deposited with the Trust Fund where at the time of making the order it is impossible or impracticable to make individual awards directly to each victim . The award for reparations thus deposited in the Trust Fund shall be separated from other resources of the Trust Fund and shall be forwarded to each victim as soon as possible . The Court may order that an award for reparations against a convicted person be made through the Trust Fund where the number of the victims and the scope , forms and modalities of reparations makes a collective award more appropriate . Following consultations with interested States and the Trust Fund , the Court may order that an award for reparations be made through the Trust Fund to an intergovernmental , international or national organization approved by the Trust Fund . Other resources of the Trust Fund may be used for the benefit of victims subject to the provisions of article 79. Rule 99 Cooperation and protective measures for the purpose of forfeiture under articles 57 , paragraph 3 ( e ) , and 75 , paragraph 4 The Pre-Trial Chamber , pursuant to article 57 , paragraph 3 ( e ) , or the Trial Chamber , pursuant to article 75 , paragraph 4 , may , on its own motion or on the application of the Prosecutor or at the request of the victims or their legal representatives who have made a request for reparations or who have given a written undertaking to do so , determine whether measures should be requested . Notice is not required unless the Court determines , in the particular circumstances of the case , that notification could not jeopardize the effectiveness of the measures requested . In the latter case , the Registrar shall provide notification of the proceedings to the person against whom a request is made and so far as is possible to any interested persons or interested States . If an order is made without prior notification , the relevant Chamber shall request the Registrar , as soon as is consistent with the effectiveness of the measures requested , to notify those against whom a request is made and , to the extent possible , to any interested persons or any interested States and invite them to make observations as to whether the order should be revoked or otherwise modified . The Court may make orders as to the timing and conduct of any proceedings necessary to determine these issues . Section IV Miscellaneous provisions Rule 100 Place of the proceedings In a particular case , where the Court considers that it would be in the interests of justice , it may decide to sit in a State other than the host State . An application or recommendation changing the place where the Court sits may be filed at any time after the initiation of an investigation , either by the Prosecutor , the defence or by a majority of the judges of the Court . Such an application or recommendation shall be addressed to the Presidency . It shall be made in writing and specify in which State the Court would sit . The Presidency shall satisfy itself of the views of the relevant Chamber . The Presidency shall consult the State where the Court intends to sit . If that State agrees that the Court can sit in that State , then the decision to sit in a State other than the host State shall be taken by the judges , in plenary session , by a two-thirds majority . Rule 101 Time limits In making any order setting time limits regarding the conduct of any proceedings , the Court shall have regard to the need to facilitate fair and expeditious proceedings , bearing in mind in particular the rights of the defence and the victims . Taking into account the rights of the accused , in particular under article 67 , paragraph ( 1 ) ( c ) , all those participating in the proceedings to whom any order is directed shall endeavour to act as expeditiously as possible , within the time limit ordered by the Court . Rule 102 Communications other than in writing Where a person is unable , due to a disability or illiteracy , to make a written request , application , observation or other communication to the Court , the person may make such request , application , observation or communication in audio , video or other electronic form . Rule 103 Amicus curiae and other forms of submission At any stage of the proceedings , a Chamber may , if it considers it desirable for the proper determination of the case , invite or grant leave to a State , organization or person to submit , in writing or orally , any observation on any issue that the Chamber deems appropriate . The Prosecutor and the defence shall have the opportunity to respond to the observations submitted under sub-rule 1. A written observation submitted under sub-rule 1 shall be filed with the Registrar , who shall provide copies to the Prosecutor and the defence . The Chamber shall determine what time limits shall apply to the filing of such observations . Chapter 5 Investigation and prosecution Section I Decision of the Prosecutor regarding the initiation of an investigation under article 53 , paragraphs 1 and 2 Rule 104 Evaluation of information by the Prosecutor In acting pursuant to article 53 , paragraph 1 , the Prosecutor shall , in evaluating the information made available to him or her , analyse the seriousness of the information received . For the purposes of sub-rule 1 , the Prosecutor may seek additional information from States , organs of the United Nations , intergovernmental and non-governmental organizations , or other reliable sources that he or she deems appropriate , and may receive written or oral testimony at the seat of the Court . The procedure set out in rule 47 shall apply to the receiving of such testimony . Rule 105 Notification of a decision by the Prosecutor not to initiate an investigation When the Prosecutor decides not to initiate an investigation under article 53 , paragraph 1 , he or she shall promptly inform in writing the State or States that referred a situation under article 14 , or the Security Council in respect of a situation covered by article 13 , paragraph ( b ) . When the Prosecutor decides not to submit to the Pre-Trial Chamber a request for authorization of an investigation , rule 49 shall apply . The notification referred to in sub-rule 1 shall contain the conclusion of the Prosecutor and , having regard to article 68 , paragraph 1 , the reasons for the conclusion . In case the Prosecutor decides not to investigate solely on the basis of article 53 , paragraph 1 ( c ) , he or she shall inform in writing the Pre-Trial Chamber promptly after making that decision . The notification shall contain the conclusion of the Prosecutor and the reasons for the conclusion . Rule 106 Notification of a decision by the Prosecutor not to prosecute When the Prosecutor decides that there is not a sufficient basis for prosecution under article 53 , paragraph 2 , he or she shall promptly inform in writing the Pre-Trial Chamber , together with the State or States that referred a situation under article 14 , or the Security Council in respect of a situation covered by article 13 , paragraph ( b ) . The notifications referred to in sub-rule 1 shall contain the conclusion of the Prosecutor and , having regard to article 68 , paragraph 1 , the reasons for the conclusion . Section II Procedure under article 53 , paragraph 3 Rule 107 Request for review under article 53 , paragraph 3 ( a ) A request under article 53 , paragraph 3 , for a review of a decision by the Prosecutor not to initiate an investigation or not to prosecute shall be made in writing , and be supported with reasons , within 90 days following the notification given under rule 105 or 106. The Pre-Trial Chamber may request the Prosecutor to transmit the information or documents in his or her possession , or summaries thereof , that the Chamber considers necessary for the conduct of the review . The Pre-Trial Chamber shall take such measures as are necessary under articles 54 , 72 and 93 to protect the information and documents referred to in sub-rule 2 and , under article 68 , paragraph 5 , to protect the safety of witnesses and victims and members of their families . When a State or the Security Council makes a request referred to in sub-rule 1 , the Pre-Trial Chamber may seek further observations from them . Where an issue of jurisdiction or admissibility of the case is raised , rule 59 shall apply . Rule 108 Decision of the Pre-Trial Chamber under article 53 , paragraph 3 ( a ) A decision of the Pre-Trial Chamber under article 53 , paragraph 3 ( a ) , must be concurred in by a majority of its judges and shall contain reasons . It shall be communicated to all those who participated in the review . Where the Pre-Trial Chamber requests the Prosecutor to review , in whole or in part , his or her decision not to initiate an investigation or not to prosecute , the Prosecutor shall reconsider that decision as soon as possible . Once the Prosecutor has taken a final decision , he or she shall notify the Pre-Trial Chamber in writing . This notification shall contain the conclusion of the Prosecutor and the reasons for the conclusion . It shall be communicated to all those who participated in the review . Rule 109 Review by the Pre-Trial Chamber under article 53 , paragraph 3 ( b ) Within 180 days following a notification given under rule 105 or 106 , the Pre-Trial Chamber may on its own initiative decide to review a decision of the Prosecutor taken solely under article 53 , paragraph 1 ( c ) or 2 ( c ) . The Pre-Trial Chamber shall inform the Prosecutor of its intention to review his or her decision and shall establish a time limit within which the Prosecutor may submit observations and other material . In cases where a request has been submitted to the Pre-Trial Chamber by a State or by the Security Council , they shall also be informed and may submit observations in accordance with rule 107. Rule 110 Decision by the Pre-Trial Chamber under article 53 , paragraph 3 ( b ) A decision by the Pre-Trial Chamber to confirm or not to confirm a decision taken by the Prosecutor solely under article 53 , paragraph 1 ( c ) or 2 ( c ) , must be concurred in by a majority of its judges and shall contain reasons . It shall be communicated to all those who participated in the review . When the Pre-Trial Chamber does not confirm the decision by the Prosecutor referred to in sub-rule 1 , he or she shall proceed with the investigation or prosecution . Section III Collection of evidence Rule 111 Record of questioning in general A record shall be made of formal statements made by any person who is questioned in connection with an investigation or with proceedings . The record shall be signed by the person who records and conducts the questioning and by the person who is questioned and his or her counsel , if present , and , where applicable , the Prosecutor or the judge who is present . The record shall note the date , time and place of , and all persons present during the questioning . It shall also be noted when someone has not signed the record as well as the reasons therefor . When the Prosecutor or national authorities question a person , due regard shall be given to article 55. When a person is informed of his or her rights under article 55 , paragraph 2 , the fact that this information has been provided shall be noted in the record . Rule 112 Recording of questioning in particular cases Whenever the Prosecutor questions a person to whom article 55 , paragraph 2 , applies , or for whom a warrant of arrest or a summons to appear has been issued under article 58 , paragraph 7 , the questioning shall be audio- or video-recorded , in accordance with the following procedure : ( a ) The person questioned shall be informed , in a language he or she fully understands and speaks , that the questioning is to be audio- or video-recorded , and that the person concerned may object if he or she so wishes . The fact that this information has been provided and the response given by the person concerned shall be noted in the record . The person may , before replying , speak in private with his or her counsel , if present . If the person questioned refuses to be audio- or video-recorded , the procedure in rule 111 shall be followed ; ( b ) A waiver of the right to be questioned in the presence of counsel shall be recorded in writing and , if possible , be audio- or video-recorded ; ( c ) In the event of an interruption in the course of questioning , the fact and the time of the interruption shall be recorded before the audio- or video-recording ends as well as the time of resumption of the questioning ; ( d ) At the conclusion of the questioning , the person questioned shall be offered the opportunity to clarify anything he or she has said and to add anything he or she may wish . The time of conclusion of the questioning shall be noted ; ( e ) The tape shall be transcribed as soon as practicable after the conclusion of the questioning and a copy of the transcript supplied to the person questioned together with a copy of the recorded tape or , if multiple recording apparatus was used , one of the original recorded tapes ; ( f ) The original tape or one of the original tapes shall be sealed in the presence of the person questioned and his or her counsel , if present , under the signature of the Prosecutor and the person questioned and the counsel , if present . The Prosecutor shall make every reasonable effort to record the questioning in accordance with sub-rule 1. As an exception , a person may be questioned without the questioning being audio- or video-recorded where the circumstances prevent such recording taking place . In this case , the reasons for not recording the questioning shall be stated in writing and the procedure in rule 111 shall be followed . When , pursuant to sub-rule 1 ( a ) or 2 , the questioning is not audio- or video-recorded , the person questioned shall be provided with a copy of his or her statement . The Prosecutor may choose to follow the procedure in this rule when questioning other persons than those mentioned in sub-rule 1 , in particular where the use of such procedures could assist in reducing any subsequent traumatization of a victim of sexual or gender violence , a child or a person with disabilities in providing their evidence . The Prosecutor may make an application to the relevant Chamber . The Pre-Trial Chamber may , in pursuance of article 56 , paragraph 2 , order that the procedure in this rule be applied to the questioning of any person . Rule 113 Collection of information regarding the state of health of the person concerned The Pre-Trial Chamber may , on its own initiative or at the request of the Prosecutor , the person concerned or his or her counsel , order that a person having the rights in article 55 , paragraph 2 , be given a medical , psychological or psychiatric examination . In making its determination , the Pre-Trial Chamber shall consider the nature and purpose of the examination and whether the person consents to the examination . The Pre-Trial Chamber shall appoint one or more experts from the list of experts approved by the Registrar , or an expert approved by the Pre-Trial Chamber at the request of a party . Rule 114 Unique investigative opportunity under article 56 Upon being advised by the Prosecutor in accordance with article 56 , paragraph 1 ( a ) , the Pre-Trial Chamber shall hold consultations without delay with the Prosecutor and , subject to the provisions of article 56 , paragraph 1 ( c ) , with the person who has been arrested or who has appeared before the Court pursuant to summons and his or her counsel , in order to determine the measures to be taken and the modalities of their implementation , which may include measures to ensure that the right to communicate under article 67 , paragraph 1 ( b ) , is protected . A decision of the Pre-Trial Chamber to take measures pursuant to article 56 , paragraph 3 , must be concurred in by a majority of its judges after consultations with the Prosecutor . During the consultations , the Prosecutor may advise the Pre-Trial Chamber that intended measures could jeopardize the proper conduct of the investigation . Rule 115 Collection of evidence in the territory of a State Party under article 57 , paragraph 3 ( d ) Where the Prosecutor considers that article 57 , paragraph 3 ( d ) , applies , the Prosecutor may submit a written request to the Pre-Trial Chamber for authorization to take certain measures in the territory of the State Party in question . After a submission of such a request , the Pre-Trial Chamber shall , whenever possible , inform and invite views from the State Party concerned . In arriving at its determination as to whether the request is well founded , the Pre-Trial Chamber shall take into account any views expressed by the State Party concerned . The Pre-Trial Chamber may , on its own initiative or at the request of the Prosecutor or the State Party concerned , decide to hold a hearing . An authorization under article 57 , paragraph 3 ( d ) , shall be issued in the form of an order and shall state the reasons , based on the criteria set forth in that paragraph . The order may specify procedures to be followed in carrying out such collection of evidence . Rule 116 Collection of evidence at the request of the defence under article 57 , paragraph 3 ( b ) The Pre-Trial Chamber shall issue an order or seek cooperation under article 57 , paragraph 3 ( b ) , where it is satisfied : ( a ) That such an order would facilitate the collection of evidence that may be material to the proper determination of the issues being adjudicated , or to the proper preparation of the person 's defence ; and ( b ) In a case of cooperation under Part 9 , that sufficient information to comply with article 96 , paragraph 2 , has been provided . Before taking a decision whether to issue an order or seek cooperation under article 57 , paragraph 3 ( b ) , the Pre-Trial Chamber may seek the views of the Prosecutor . Section IV Procedures in respect of restriction and deprivation of liberty Rule 117 Detention in the custodial State The Court shall take measures to ensure that it is informed of the arrest of a person in response to a request made by the Court under article 89 or 92. Once so informed , the Court shall ensure that the person receives a copy of the arrest warrant issued by the Pre-Trial Chamber under article 58 and any relevant provisions of the Statute . The documents shall be made available in a language that the person fully understands and speaks . At any time after arrest , the person may make a request to the Pre-Trial Chamber for the appointment of counsel to assist with proceedings before the Court and the Pre-Trial Chamber shall take a decision on such request . A challenge as to whether the warrant of arrest was properly issued in accordance with article 58 , paragraph 1 ( a ) and ( b ) , shall be made in writing to the Pre-Trial Chamber . The application shall set out the basis for the challenge . After having obtained the views of the Prosecutor , the Pre-Trial Chamber shall decide on the application without delay . When the competent authority of the custodial State notifies the Pre-Trial Chamber that a request for release has been made by the person arrested , in accordance with article 59 , paragraph 5 , the Pre-Trial Chamber shall provide its recommendations within any time limit set by the custodial State . When the Pre-Trial Chamber is informed that the person has been granted interim release by the competent authority of the custodial State , the Pre-Trial Chamber shall inform the custodial State how and when it would like to receive periodic reports on the status of the interim release . Rule 118 Pre-trial detention at the seat of the Court If the person surrendered to the Court makes an initial request for interim release pending trial , either upon first appearance in accordance with rule 121 or subsequently , the Pre-Trial Chamber shall decide upon the request without delay , after seeking the views of the Prosecutor . The Pre-Trial Chamber shall review its ruling on the release or detention of a person in accordance with article 60 , paragraph 3 , at least every 120 days and may do so at any time on the request of the person or the Prosecutor . After the first appearance , a request for interim release must be made in writing . The Prosecutor shall be given notice of such a request . The Pre-Trial Chamber shall decide after having received observations in writing of the Prosecutor and the detained person . The Pre-Trial Chamber may decide to hold a hearing , at the request of the Prosecutor or the detained person or on its own initiative . A hearing must be held at least once every year . Rule 119 Conditional release The Pre-Trial Chamber may set one or more conditions restricting liberty , including the following : ( a ) The person must not travel beyond territorial limits set by the Pre-Trial Chamber without the explicit agreement of the Chamber ; ( b ) The person must not go to certain places or associate with certain persons as specified by the Pre-Trial Chamber ; ( c ) The person must not contact directly or indirectly victims or witnesses ; ( d ) The person must not engage in certain professional activities ; ( e ) The person must reside at a particular address as specified by the Pre-Trial Chamber ; ( f ) The person must respond when summoned by an authority or qualified person designated by the Pre-Trial Chamber ; ( g ) The person must post bond or provide real or personal security or surety , for which the amount and the schedule and mode of payment shall be determined by the Pre-Trial Chamber ; ( h ) The person must supply the Registrar with all identity documents , particularly his or her passport . At the request of the person concerned or the Prosecutor or on its own initiative , the Pre-Trial Chamber may at any time decide to amend the conditions set pursuant to sub-rule 1. Before imposing or amending any conditions restricting liberty , the Pre-Trial Chamber shall seek the views of the Prosecutor , the person concerned , any relevant State and victims that have communicated with the Court in that case and whom the Chamber considers could be at risk as a result of a release or conditions imposed . If the Pre-Trial Chamber is convinced that the person concerned has failed to comply with one or more of the obligations imposed , it may , on such basis , at the request of the Prosecutor or on its own initiative , issue a warrant of arrest in respect of the person . When the Pre-Trial Chamber issues a summons to appear pursuant to article 58 , paragraph 7 , and intends to set conditions restricting liberty , it shall ascertain the relevant provisions of the national law of the State receiving the summons . In a manner that is in keeping with the national law of the State receiving the summons , the Pre-Trial Chamber shall proceed in accordance with sub-rules 1 , 2 and 3. If the Pre-Trial Chamber receives information that the person concerned has failed to comply with conditions imposed , it shall proceed in accordance with sub-rule 4. Rule 120 Instruments of restraint Personal instruments of restraint shall not be used except as a precaution against escape , for the protection of the person in the custody of the Court and others or for other security reasons , and shall be removed when the person appears before a Chamber . Section V Proceedings with regard to the confirmation of charges under article 61 Rule 121 Proceedings before the confirmation hearing A person subject to a warrant of arrest or a summons to appear under article 58 shall appear before the Pre-Trial Chamber , in the presence of the Prosecutor , promptly upon arriving at the Court . Subject to the provisions of articles 60 and 61 , the person shall enjoy the rights set forth in article 67. At this first appearance , the Pre-Trial Chamber shall set the date on which it intends to hold a hearing to confirm the charges . It shall ensure that this date , and any postponements under sub-rule 7 , are made public . In accordance with article 61 , paragraph 3 , the Pre-Trial Chamber shall take the necessary decisions regarding disclosure between the Prosecutor and the person in respect of whom a warrant of arrest or a summons to appear has been issued . During disclosure : ( a ) The person concerned may be assisted or represented by the counsel of his or her choice or by a counsel assigned to him or her ; ( b ) The Pre-Trial Chamber shall hold status conferences to ensure that disclosure takes place under satisfactory conditions . For each case , a judge of the Pre-Trial Chamber shall be appointed to organize such status conferences , on his or her own motion , or at the request of the Prosecutor or the person ; ( c ) All evidence disclosed between the Prosecutor and the person for the purposes of the confirmation hearing shall be communicated to the Pre-Trial Chamber . The Prosecutor shall provide to the Pre-Trial Chamber and the person , no later than 30 days before the date of the confirmation hearing , a detailed description of the charges together with a list of the evidence which he or she intends to present at the hearing . Where the Prosecutor intends to amend the charges pursuant to article 61 , paragraph 4 , he or she shall notify the Pre-Trial Chamber and the person no later than 15 days before the date of the hearing of the amended charges together with a list of evidence that the Prosecutor intends to bring in support of those charges at the hearing . Where the Prosecutor intends to present new evidence at the hearing , he or she shall provide the Pre-Trial Chamber and the person with a list of that evidence no later than 15 days before the date of the hearing . If the person intends to present evidence under article 61 , paragraph 6 , he or she shall provide a list of that evidence to the Pre-Trial Chamber no later than 15 days before the date of the hearing . The Pre-Trial Chamber shall transmit the list to the Prosecutor without delay . The person shall provide a list of evidence that he or she intends to present in response to any amended charges or a new list of evidence provided by the Prosecutor . The Prosecutor or the person may ask the Pre-Trial Chamber to postpone the date of the confirmation hearing . The Pre-Trial Chamber may also , on its own motion , decide to postpone the hearing . The Pre-Trial Chamber shall not take into consideration charges and evidence presented after the time limit , or any extension thereof , has expired . The Prosecutor and the person may lodge written submissions with the Pre-Trial Chamber , on points of fact and on law , including grounds for excluding criminal responsibility set forth in article 31 , paragraph 1 , no later than three days before the date of the hearing . A copy of these submissions shall be transmitted immediately to the Prosecutor or the person , as the case may be . The Registry shall create and maintain a full and accurate record of all proceedings before the Pre-Trial Chamber , including all documents transmitted to the Chamber pursuant to this rule . Subject to any restrictions concerning confidentiality and the protection of national security information , the record may be consulted by the Prosecutor , the person and victims or their legal representatives participating in the proceedings pursuant to rules 89 to 91. Rule 122 Proceedings at the confirmation hearing in the presence of the person charged The Presiding Judge of the Pre-Trial Chamber shall ask the officer of the Registry assisting the Chamber to read out the charges as presented by the Prosecutor . The Presiding Judge shall determine how the hearing is to be conducted and , in particular , may establish the order and the conditions under which he or she intends the evidence contained in the record of the proceedings to be presented . If a question or challenge concerning jurisdiction or admissibility arises , rule 58 applies . Before hearing the matter on the merits , the Presiding Judge of the Pre-Trial Chamber shall ask the Prosecutor and the person whether they intend to raise objections or make observations concerning an issue related to the proper conduct of the proceedings prior to the confirmation hearing . At no subsequent point may the objections and observations made under sub-rule 3 be raised or made again in the confirmation or trial proceedings . If objections or observations referred to in sub-rule 3 are presented , the Presiding Judge of the Pre-Trial Chamber shall invite those referred to in sub-rule 3 to present their arguments , in the order which he or she shall establish . The person shall have the right to reply . If the objections raised or observations made are those referred to in sub-rule 3 , the Pre-Trial Chamber shall decide whether to join the issue raised with the examination of the charges and the evidence , or to separate them , in which case it shall adjourn the confirmation hearing and render a decision on the issues raised . During the hearing on the merits , the Prosecutor and the person shall present their arguments in accordance with article 61 , paragraphs 5 and 6. The Pre-Trial Chamber shall permit the Prosecutor and the person , in that order , to make final observations . Subject to the provisions of article 61 , article 69 shall apply mutatis mutandis at the confirmation hearing . Rule 123 Measures to ensure the presence of the person concerned at the confirmation hearing When a warrant of arrest or summons to appear in accordance with article 58 , paragraph 7 , has been issued for a person by the Pre-Trial Chamber and the person is arrested or served with the summons , the Pre-Trial Chamber shall ensure that the person is notified of the provisions of article 61 , paragraph 2. The Pre-Trial Chamber may hold consultations with the Prosecutor , at the request of the latter or on its own initiative , in order to determine whether there is cause to hold a hearing on confirmation of charges under the conditions set forth in article 61 , paragraph 2 ( b ) . When the person concerned has a counsel known to the Court , the consultations shall be held in the presence of the counsel unless the Pre-Trial Chamber decides otherwise . The Pre-Trial Chamber shall ensure that a warrant of arrest for the person concerned has been issued and , if the warrant of arrest has not been executed within a reasonable period of time after the issuance of the warrant , that all reasonable measures have been taken to locate and arrest the person . Rule 124 Waiver of the right to be present at the confirmation hearing If the person concerned is available to the Court but wishes to waive the right to be present at the hearing on confirmation of charges , he or she shall submit a written request to the Pre-Trial Chamber , which may then hold consultations with the Prosecutor and the person concerned , assisted or represented by his or her counsel . A confirmation hearing pursuant to article 61 , paragraph 2 ( a ) , shall only be held when the Pre-Trial Chamber is satisfied that the person concerned understands the right to be present at the hearing and the consequences of waiving this right . The Pre-Trial Chamber may authorize and make provision for the person to observe the hearing from outside the courtroom through the use of communications technology , if required . The waiving of the right to be present at the hearing does not prevent the Pre-Trial Chamber from receiving written observations on issues before the Chamber from the person concerned . Rule 125 Decision to hold the confirmation hearing in the absence of the person concerned After holding consultations under rules 123 and 124 , the Pre-Trial Chamber shall decide whether there is cause to hold a hearing on confirmation of charges in the absence of the person concerned , and in that case , whether the person may be represented by counsel . The Pre-Trial Chamber shall , when appropriate , set a date for the hearing and make the date public . The decision of the Pre-Trial Chamber shall be notified to the Prosecutor and , if possible , to the person concerned or his or her counsel . If the Pre-Trial Chamber decides not to hold a hearing on confirmation of charges in the absence of the person concerned , and the person is not available to the Court , the confirmation of charges may not take place until the person is available to the Court . The Pre-Trial Chamber may review its decision at any time , at the request of the Prosecutor or on its own initiative . If the Pre-Trial Chamber decides not to hold a hearing on confirmation of charges in the absence of the person concerned , and the person is available to the Court , it shall order the person to appear . Rule 126 Confirmation hearing in the absence of the person concerned The provisions of rules 121 and 122 shall apply mutatis mutandis to the preparation for and holding of a hearing on confirmation of charges in the absence of the person concerned . If the Pre-Trial Chamber has determined that the person concerned shall be represented by counsel , the counsel shall have the opportunity to exercise the rights of that person . When the person who has fled is subsequently arrested and the Court has confirmed the charges upon which the Prosecutor intends to pursue the trial , the person charged shall be committed to the Trial Chamber established under article 61 , paragraph 11. The person charged may request in writing that the Trial Chamber refer issues to the Pre-Trial Chamber that are necessary for the Chamber 's effective and fair functioning in accordance with article 64 , paragraph 4. Section VI Closure of the pre-trial phase Rule 127 Procedure in the event of different decisions on multiple charges If the Pre-Trial Chamber is ready to confirm some of the charges but adjourns the hearing on other charges under article 61 , paragraph 7 ( c ) , it may decide that the committal of the person concerned to the Trial Chamber on the charges that it is ready to confirm shall be deferred pending the continuation of the hearing . The Pre-Trial Chamber may then establish a time limit within which the Prosecutor may proceed in accordance with article 61 , paragraph 7 ( c ) ( i ) or ( ii ) . Rule 128 Amendment of the charges If the Prosecutor seeks to amend charges already confirmed before the trial has begun , in accordance with article 61 , the Prosecutor shall make a written request to the Pre-Trial Chamber , and that Chamber shall so notify the accused . Before deciding whether to authorize the amendment , the Pre-Trial Chamber may request the accused and the Prosecutor to submit written observations on certain issues of fact or law . If the Pre-Trial Chamber determines that the amendments proposed by the Prosecutor constitute additional or more serious charges , it shall proceed , as appropriate , in accordance with rules 121 and 122 or rules 123 to 126. Rule 129 Notification of the decision on the confirmation of charges The decision of the Pre-Trial Chamber on the confirmation of charges and the committal of the accused to the Trial Chamber shall be notified , if possible , to the Prosecutor , the person concerned and his or her counsel . Such decision and the record of the proceedings of the Pre-Trial Chamber shall be transmitted to the Presidency . Rule 130 Constitution of the Trial Chamber When the Presidency constitutes a Trial Chamber and refers the case to it , the Presidency shall transmit the decision of the Pre-Trial Chamber and the record of the proceedings to the Trial Chamber . The Presidency may also refer the case to a previously constituted Trial Chamber . Chapter 6 Trial procedure Rule 131 Record of the proceedings transmitted by the Pre-Trial Chamber The Registrar shall maintain the record of the proceedings transmitted by the Pre-Trial Chamber , pursuant to rule 121 , sub-rule 10. Subject to any restrictions concerning confidentiality and the protection of national security information , the record may be consulted by the Prosecutor , the defence , the representatives of States when they participate in the proceedings , and the victims or their legal representatives participating in the proceedings pursuant to rules 89 to 91. Rule 132 Status conferences Promptly after it is constituted , the Trial Chamber shall hold a status conference in order to set the date of the trial . The Trial Chamber , on its own motion , or at the request of the Prosecutor or the defence , may postpone the date of the trial . The Trial Chamber shall notify the trial date to all those participating in the proceedings . The Trial Chamber shall ensure that this date and any postponements are made public . In order to facilitate the fair and expeditious conduct of the proceedings , the Trial Chamber may confer with the parties by holding status conferences as necessary . Rule 133 Motions challenging admissibility or jurisdiction Challenges to the jurisdiction of the Court or the admissibility of the case at the commencement of the trial , or subsequently with the leave of the Court , shall be dealt with by the Presiding Judge and the Trial Chamber in accordance with rule 58. Rule 134 Motions relating to the trial proceedings Prior to the commencement of the trial , the Trial Chamber on its own motion , or at the request of the Prosecutor or the defence , may rule on any issue concerning the conduct of the proceedings . Any request from the Prosecutor or the defence shall be in writing and , unless the request is for an ex parte procedure , served on the other party . For all requests other than those submitted for an ex parte procedure , the other party shall have the opportunity to file a response . At the commencement of the trial , the Trial Chamber shall ask the Prosecutor and the defence whether they have any objections or observations concerning the conduct of the proceedings which have arisen since the confirmation hearings . Such objections or observations may not be raised or made again on a subsequent occasion in the trial proceedings , without leave of the Trial Chamber in this proceeding . After the commencement of the trial , the Trial Chamber , on its own motion , or at the request of the Prosecutor or the defence , may rule on issues that arise during the course of the trial . Rule 135 Medical examination of the accused The Trial Chamber may , for the purpose of discharging its obligations under article 64 , paragraph 8 ( a ) , or for any other reasons , or at the request of a party , order a medical , psychiatric or psychological examination of the accused , under the conditions set forth in rule 113. The Trial Chamber shall place its reasons for any such order on the record . The Trial Chamber shall appoint one or more experts from the list of experts approved by the Registrar , or an expert approved by the Trial Chamber at the request of a party . Where the Trial Chamber is satisfied that the accused is unfit to stand trial , it shall order that the trial be adjourned . The Trial Chamber may , on its own motion or at the request of the prosecution or the defence , review the case of the accused . In any event , the case shall be reviewed every 120 days unless there are reasons to do otherwise . If necessary , the Trial Chamber may order further examinations of the accused . When the Trial Chamber is satisfied that the accused has become fit to stand trial , it shall proceed in accordance with rule 132. Rule 136 Joint and separate trials Persons accused jointly shall be tried together unless the Trial Chamber , on its own motion or at the request of the Prosecutor or the defence , orders that separate trials are necessary , in order to avoid serious prejudice to the accused , to protect the interests of justice or because a person jointly accused has made an admission of guilt and can be proceeded against in accordance with article 65 , paragraph 2. In joint trials , each accused shall be accorded the same rights as if such accused were being tried separately . Rule 137 Record of the trial proceedings In accordance with article 64 , paragraph 10 , the Registrar shall take measures to make , and preserve , a full and accurate record of all proceedings , including transcripts , audio- and video-recordings and other means of capturing sound or image . A Trial Chamber may order the disclosure of all or part of the record of closed proceedings when the reasons for ordering its non-disclosure no longer exist . The Trial Chamber may authorize persons other than the Registrar to take photographs , audio- and video-recordings and other means of capturing the sound or image of the trial . Rule 138 Custody of evidence The Registrar shall retain and preserve , as necessary , all the evidence and other materials offered during the hearing , subject to any order of the Trial Chamber . Rule 139 Decision on admission of guilt After having proceeded in accordance with article 65 , paragraph 1 , the Trial Chamber , in order to decide whether to proceed in accordance with article 65 , paragraph 4 , may invite the views of the Prosecutor and the defence . The Trial Chamber shall then make its decision on the admission of guilt and shall give reasons for this decision , which shall be placed on the record . Rule 140 Directions for the conduct of the proceedings and testimony If the Presiding Judge does not give directions under article 64 , paragraph 8 , the Prosecutor and the defence shall agree on the order and manner in which the evidence shall be submitted to the Trial Chamber . If no agreement can be reached , the Presiding Judge shall issue directions . In all cases , subject to article 64 , paragraphs 8 ( b ) and 9 , article 69 , paragraph 4 , and rule 88 , sub-rule 5 , a witness may be questioned as follows : ( a ) A party that submits evidence in accordance with article 69 , paragraph 3 , by way of a witness , has the right to question that witness ; ( b ) The prosecution and the defence have the right to question that witness about relevant matters related to the witness 's testimony and its reliability , the credibility of the witness and other relevant matters ; ( c ) The Trial Chamber has the right to question a witness before or after a witness is questioned by a participant referred to in sub-rules 2 ( a ) or ( b ) ; ( d ) The defence shall have the right to be the last to examine a witness . Unless otherwise ordered by the Trial Chamber , a witness other than an expert , or an investigator if he or she has not yet testified , shall not be present when the testimony of another witness is given . However , a witness who has heard the testimony of another witness shall not for that reason alone be disqualified from testifying . When a witness testifies after hearing the testimony of others , this fact shall be noted in the record and considered by the Trial Chamber when evaluating the evidence . Rule 141 Closure of evidence and closing statements The Presiding Judge shall declare when the submission of evidence is closed . The Presiding Judge shall invite the Prosecutor and the defence to make their closing statements . The defence shall always have the opportunity to speak last . Rule 142 Deliberations After the closing statements , the Trial Chamber shall retire to deliberate , in camera . The Trial Chamber shall inform all those who participated in the proceedings of the date on which the Trial Chamber will pronounce its decision . The pronouncement shall be made within a reasonable period of time after the Trial Chamber has retired to deliberate . When there is more than one charge , the Trial Chamber shall decide separately on each charge . When there is more than one accused , the Trial Chamber shall decide separately on the charges against each accused . Rule 143 Additional hearings on matters related to sentence or reparations Pursuant to article 76 , paragraphs 2 and 3 , for the purpose of holding a further hearing on matters related to sentence and , if applicable , reparations , the Presiding Judge shall set the date of the further hearing . This hearing can be postponed , in exceptional circumstances , by the Trial Chamber , on its own motion or at the request of the Prosecutor , the defence or the legal representatives of the victims participating in the proceedings pursuant to rules 89 to 91 and , in respect of reparations hearings , those victims who have made a request under rule 94. Rule 144 Delivery of the decisions of the Trial Chamber Decisions of the Trial Chamber concerning admissibility of a case , the jurisdiction of the Court , criminal responsibility of the accused , sentence and reparations shall be pronounced in public and , wherever possible , in the presence of the accused , the Prosecutor , the victims or the legal representatives of the victims participating in the proceedings pursuant to rules 89 to 91 , and the representatives of the States which have participated in the proceedings . Copies of all the above-mentioned decisions shall be provided as soon as possible to : ( a ) All those who participated in the proceedings , in a working language of the Court ; ( b ) The accused , in a language he or she fully understands or speaks , if necessary to meet the requirements of fairness under article 67 , paragraph 1 ( f ) . Chapter 7 Penalties Rule 145 Determination of sentence In its determination of the sentence pursuant to article 78 , paragraph 1 , the Court shall : ( a ) Bear in mind that the totality of any sentence of imprisonment and fine , as the case may be , imposed under article 77 must reflect the culpability of the convicted person ; ( b ) Balance all the relevant factors , including any mitigating and aggravating factors and consider the circumstances both of the convicted person and of the crime ; ( c ) In addition to the factors mentioned in article 78 , paragraph 1 , give consideration , inter alia , to the extent of the damage caused , in particular the harm caused to the victims and their families , the nature of the unlawful behaviour and the means employed to execute the crime ; the degree of participation of the convicted person ; the degree of intent ; the circumstances of manner , time and location ; and the age , education , social and economic condition of the convicted person . In addition to the factors mentioned above , the Court shall take into account , as appropriate : ( a ) Mitigating circumstances such as : ( i ) The circumstances falling short of constituting grounds for exclusion of criminal responsibility , such as substantially diminished mental capacity or duress ; ( ii ) The convicted person 's conduct after the act , including any efforts by the person to compensate the victims and any cooperation with the Court ; ( b ) As aggravating circumstances : ( i ) Any relevant prior criminal convictions for crimes under the jurisdiction of the Court or of a similar nature ; ( ii ) Abuse of power or official capacity ; ( iii ) Commission of the crime where the victim is particularly defenceless ; ( iv ) Commission of the crime with particular cruelty or where there were multiple victims ; ( v ) Commission of the crime for any motive involving discrimination on any of the grounds referred to in article 21 , paragraph 3 ; ( vi ) Other circumstances which , although not enumerated above , by virtue of their nature are similar to those mentioned . Life imprisonment may be imposed when justified by the extreme gravity of the crime and the individual circumstances of the convicted person , as evidenced by the existence of one or more aggravating circumstances . Rule 146 Imposition of fines under article 77 In determining whether to order a fine under article 77 , paragraph 2 ( a ) , and in fixing the amount of the fine , the Court shall determine whether imprisonment is a sufficient penalty . The Court shall give due consideration to the financial capacity of the convicted person , including any orders for forfeiture in accordance with article 77 , paragraph 2 ( b ) , and , as appropriate , any orders for reparation in accordance with article 75. The Court shall take into account , in addition to the factors referred to in rule 145 , whether and to what degree the crime was motivated by personal financial gain . A fine imposed under article 77 , paragraph 2 ( a ) , shall be set at an appropriate level . To this end , the Court shall , in addition to the factors referred to above , in particular take into consideration the damage and injuries caused as well as the proportionate gains derived from the crime by the perpetrator . Under no circumstances may the total amount exceed 75 per cent of the value of the convicted person 's identifiable assets , liquid or realizable , and property , after deduction of an appropriate amount that would satisfy the financial needs of the convicted person and his or her dependants . In imposing a fine , the Court shall allow the convicted person a reasonable period in which to pay the fine . The Court may provide for payment of a lump sum or by way of instalments during that period . In imposing a fine , the Court may , as an option , calculate it according to a system of daily fines . In such cases , the minimum duration shall be 30 days and the maximum duration five years . The Court shall decide the total amount in accordance with sub-rules 1 and 2. It shall determine the amount of daily payment in the light of the individual circumstances of the convicted person , including the financial needs of his or her dependants . If the convicted person does not pay the fine imposed in accordance with the conditions set above , appropriate measures may be taken by the Court pursuant to rules 217 to 222 and in accordance with article 109. Where , in cases of continued wilful non-payment , the Presidency , on its own motion or at the request of the Prosecutor , is satisfied that all available enforcement measures have been exhausted , it may as a last resort extend the term of imprisonment for a period not to exceed a quarter of such term or five years , whichever is less . In the determination of such period of extension , the Presidency shall take into account the amount of the fine , imposed and paid . Any such extension shall not apply in the case of life imprisonment . The extension may not lead to a total period of imprisonment in excess of 30 years . In order to determine whether to order an extension and the period involved , the Presidency shall sit in camera for the purpose of obtaining the views of the sentenced person and the Prosecutor . The sentenced person shall have the right to be assisted by counsel . In imposing a fine , the Court shall warn the convicted person that failure to pay the fine in accordance with the conditions set out above may result in an extension of the period of imprisonment as described in this rule . Rule 147 Orders of forfeiture In accordance with article 76 , paragraphs 2 and 3 , and rules 63 , sub-rule 1 , and 143 , at any hearing to consider an order of forfeiture , Chamber shall hear evidence as to the identification and location of specific proceeds , property or assets which have been derived directly or indirectly from the crime . If before or during the hearing , a Chamber becomes aware of any bona fide third party who appears to have an interest in relevant proceeds , property or assets , it shall give notice to that third party . The Prosecutor , the convicted person and any bona fide third party with an interest in the relevant proceeds , property or assets may submit evidence relevant to the issue . After considering any evidence submitted , a Chamber may issue an order of forfeiture in relation to specific proceeds , property or assets if it is satisfied that these have been derived directly or indirectly from the crime . Rule 148 Orders to transfer fines or forfeitures to the Trust Fund Before making an order pursuant to article 79 , paragraph 2 , a Chamber may request the representatives of the Fund to submit written or oral observations to it . Chapter 8 Appeal and revision Section I General provisions Rule 149 Rules governing proceedings in the Appeals Chamber Parts 5 and 6 and rules governing proceedings and the submission of evidence in the Pre-Trial and Trial Chambers shall apply mutatis mutandis to proceedings in the Appeals Chamber . Section II Appeals against convictions , acquittals , sentences and reparation orders Rule 150 Appeal Subject to sub-rule 2 , an appeal against a decision of conviction or acquittal under article 74 , a sentence under article 76 or a reparation order under article 75 may be filed not later than 30 days from the date on which the party filing the appeal is notified of the decision , the sentence or the reparation order . The Appeals Chamber may extend the time limit set out in sub-rule 1 , for good cause , upon the application of the party seeking to file the appeal . The appeal shall be filed with the Registrar . If an appeal is not filed as set out in sub-rules 1 to 3 , the decision , the sentence or the reparation order of the Trial Chamber shall become final . Rule 151 Procedure for the appeal Upon the filing of an appeal under rule 150 , the Registrar shall transmit the trial record to the Appeals Chamber . The Registrar shall notify all parties who participated in the proceedings before the Trial Chamber that an appeal has been filed . Rule 152 Discontinuance of the appeal Any party who has filed an appeal may discontinue the appeal at any time before judgement has been delivered . In such case , the party shall file with the Registrar a written notice of discontinuance of appeal . The Registrar shall inform the other parties that such a notice has been filed . If the Prosecutor has filed an appeal on behalf of a convicted person in accordance with article 81 , paragraph 1 ( b ) , before filing any notice of discontinuance , the Prosecutor shall inform the convicted person that he or she intends to discontinue the appeal in order to give him or her the opportunity to continue the appeal proceedings . Rule 153 Judgement on appeals against reparation orders The Appeals Chamber may confirm , reverse or amend a reparation order made under article 75. The judgement of the Appeals Chamber shall be delivered in accordance with article 83 , paragraphs 4 and 5. Section III Appeals against other decisions Rule 154 Appeals that do not require the leave of the Court An appeal may be filed under article 81 , paragraph 3 ( c ) ( ii ) , or article 82 , paragraph 1 ( a ) or ( b ) , not later than five days from the date upon which the party filing the appeal is notified of the decision . An appeal may be filed under article 82 , paragraph 1 ( c ) , not later than two days from the date upon which the party filing the appeal is notified of the decision . Rule 150 , sub-rules 3 and 4 , shall apply to appeals filed under sub-rules 1 and 2 of this rule . Rule 155 Appeals that require leave of the Court When a party wishes to appeal a decision under article 82 , paragraph 1 ( d ) , or article 82 , paragraph 2 , that party shall , within five days of being notified of that decision , make a written application to the Chamber that gave the decision , setting out the reasons for the request for leave to appeal . The Chamber shall render a decision and shall notify all parties who participated in the proceedings that gave rise to the decision referred to in sub-rule 1. Rule 156 Procedure for the appeal As soon as an appeal has been filed under rule 154 or as soon as leave to appeal has been granted under rule 155 , the Registrar shall transmit to the Appeals Chamber the record of the proceedings of the Chamber that made the decision that is the subject of the appeal . The Registrar shall give notice of the appeal to all parties who participated in the proceedings before the Chamber that gave the decision that is the subject of the appeal , unless they have already been notified by the Chamber under rule 155 , sub-rule 2. The appeal proceedings shall be in writing unless the Appeals Chamber decides to convene a hearing . The appeal shall be heard as expeditiously as possible . When filing the appeal , the party appealing may request that the appeal have suspensive effect in accordance with article 82 , paragraph 3. Rule 157 Discontinuance of the appeal Any party who has filed an appeal under rule 154 or who has obtained the leave of a Chamber to appeal a decision under rule 155 may discontinue the appeal at any time before judgement has been delivered . In such case , the party shall file with the Registrar a written notice of discontinuance of appeal . The Registrar shall inform the other parties that such a notice has been filed . Rule 158 Judgement on the appeal An Appeals Chamber which considers an appeal referred to in this section may confirm , reverse or amend the decision appealed . The judgement of the Appeals Chamber shall be delivered in accordance with article 83 , paragraph 4. Section IV Revision of conviction or sentence Rule 159 Application for revision An application for revision provided for in article 84 , paragraph 1 , shall be in writing and shall set out the grounds on which the revision is sought . It shall as far as possible be accompanied by supporting material . The determination on whether the application is meritorious shall be taken by a majority of the judges of the Appeals Chamber and shall be supported by reasons in writing . Notification of the decision shall be sent to the applicant and , as far as possible , to all the parties who participated in the proceedings related to the initial decision . Rule 160 Transfer for the purpose of revision For the conduct of the hearing provided for in rule 161 , the relevant Chamber shall issue its order sufficiently in advance to enable the transfer of the sentenced person to the seat of the Court , as appropriate . The determination of the Court shall be communicated without delay to the State of enforcement . The provisions of rule 206 , sub-rule 3 , shall be applicable . Rule 161 Determination on revision On a date which it shall determine and shall communicate to the applicant and to all those having received notification under rule 159 , sub-rule 3 , the relevant Chamber shall hold a hearing to determine whether the conviction or sentence should be revised . For the conduct of the hearing , the relevant Chamber shall exercise , mutatis mutandis , all the powers of the Trial Chamber pursuant to Part 6 and the rules governing proceedings and the submission of evidence in the Pre-Trial and Trial Chambers . The determination on revision shall be governed by the applicable provisions of article 83 , paragraph 4. Chapter 9 Offences and misconduct against the Court Section I Offences against the administration of justice under article 70 Rule 162 Exercise of jurisdiction Before deciding whether to exercise jurisdiction , the Court may consult with States Parties that may have jurisdiction over the offence . In making a decision whether or not to exercise jurisdiction , the Court may consider , in particular : ( a ) The availability and effectiveness of prosecution in a State Party ; ( b ) The seriousness of an offence ; ( c ) The possible joinder of charges under article 70 with charges under articles 5 to 8 ; ( d ) The need to expedite proceedings ; ( e ) Links with an ongoing investigation or a trial before the Court ; and ( f ) Evidentiary considerations . The Court shall give favourable consideration to a request from the host State for a waiver of the power of the Court to exercise jurisdiction in cases where the host State considers such a waiver to be of particular importance . If the Court decides not to exercise its jurisdiction , it may request a State Party to exercise jurisdiction pursuant to article 70 , paragraph 4. Rule 163 Application of the Statute and the Rules Unless otherwise provided in sub-rules 2 and 3 , rule 162 and rules 164 to 169 , the Statute and the Rules shall apply mutatis mutandis to the Court 's investigation , prosecution and punishment of offences defined in article 70. The provisions of Part 2 , and any rules thereunder , shall not apply , with the exception of article 21. The provisions of Part 10 , and any rules thereunder , shall not apply , with the exception of articles 103 , 107 , 109 and 111. Rule 164 Periods of limitation If the Court exercises jurisdiction in accordance with rule 162 , it shall apply the periods of limitation set forth in this rule . Offences defined in article 70 shall be subject to a period of limitation of five years from the date on which the offence was committed , provided that during this period no investigation or prosecution has been initiated . The period of limitation shall be interrupted if an investigation or prosecution has been initiated during this period , either before the Court or by a State Party with jurisdiction over the case pursuant to article 70 , paragraph 4 ( a ) . Enforcement of sanctions imposed with respect to offences defined in article 70 shall be subject to a period of limitation of 10 years from the date on which the sanction has become final . The period of limitation shall be interrupted with the detention of the convicted person or while the person concerned is outside the territory of the States Parties . Rule 165 Investigation , prosecution and trial The Prosecutor may initiate and conduct investigations with respect to the offences defined in article 70 on his or her own initiative , on the basis of information communicated by a Chamber or any reliable source . Articles 53 and 59 , and any rules thereunder , shall not apply . For purposes of article 61 , the Pre-Trial Chamber may make any of the determinations set forth in that article on the basis of written submissions , without a hearing , unless the interests of justice otherwise require . A Trial Chamber may , as appropriate and taking into account the rights of the defence , direct that there be joinder of charges under article 70 with charges under articles 5 to 8. Rule 166 Sanctions under article 70 If the Court imposes sanctions with respect to article 70 , this rule shall apply . Article 77 , and any rules thereunder , shall not apply , with the exception of an order of forfeiture under article 77 , paragraph 2 ( b ) , which may be ordered in addition to imprisonment or a fine or both . Each offence may be separately fined and those fines may be cumulative . Under no circumstances may the total amount exceed 50 per cent of the value of the convicted person 's identifiable assets , liquid or realizable , and property , after deduction of an appropriate amount that would satisfy the financial needs of the convicted person and his or her dependants . In imposing a fine the Court shall allow the convicted person a reasonable period in which to pay the fine . The Court may provide for payment of a lump sum or by way of instalments during that period . If the convicted person does not pay a fine imposed in accordance with the conditions set forth in sub-rule 4 , appropriate measures may be taken by the Court pursuant to rules 217 to 222 and in accordance with article 109. Where , in cases of continued wilful non-payment , the Court , on its own motion or at the request of the Prosecutor , is satisfied that all available enforcement measures have been exhausted , it may as a last resort impose a term of imprisonment in accordance with article 70 , paragraph 3. In the determination of such term of imprisonment , the Court shall take into account the amount of fine paid . Rule 167 International cooperation and judicial assistance With regard to offences under article 70 , the Court may request a State to provide any form of international cooperation or judicial assistance corresponding to those forms set forth in Part 9. In any such request , the Court shall indicate that the basis for the request is an investigation or prosecution of offences under article 70. The conditions for providing international cooperation or judicial assistance to the Court with respect to offences under article 70 shall be those set forth in article 70 , paragraph 2. Rule 168 Ne bis in idem In respect of offences under article 70 , no person shall be tried before the Court with respect to conduct which formed the basis of an offence for which the person has already been convicted or acquitted by the Court or another court . Rule 169 Immediate arrest In the case of an alleged offence under article 70 committed in the presence of a Chamber , the Prosecutor may orally request that Chamber to order the immediate arrest of the person concerned . Section II Misconduct before the Court under article 71 Rule 170 Disruption of proceedings Having regard to article 63 , paragraph 2 , the Presiding Judge of the Chamber dealing with the matter may , after giving a warning : ( a ) Order a person disrupting the proceedings of the Court to leave or be removed from the courtroom ; or , ( b ) In case of repeated misconduct , order the interdiction of that person from attending the proceedings . Rule 171 Refusal to comply with a direction by the Court When the misconduct consists of deliberate refusal to comply with an oral or written direction by the Court , not covered by rule 170 , and that direction is accompanied by a warning of sanctions in case of breach , the Presiding Judge of the Chamber dealing with the matter may order the interdiction of that person from the proceedings for a period not exceeding 30 days or , if the misconduct is of a more serious nature , impose a fine . If the person committing misconduct as described in sub-rule 1 is an official of the Court , or a defence counsel , or a legal representative of victims , the Presiding Judge of the Chamber dealing with the matter may also order the interdiction of that person from exercising his or her functions before the Court for a period not exceeding 30 days. If the Presiding Judge in cases under sub-rules 1 and 2 considers that a longer period of interdiction is appropriate , the Presiding Judge shall refer the matter to the Presidency , which may hold a hearing to determine whether to order a longer or permanent period of interdiction . A fine imposed under sub-rule 1 shall not exceed 2,000 euros , or the equivalent amount in any currency , provided that in cases of continuing misconduct , a new fine may be imposed on each day that the misconduct continues , and such fines shall be cumulative . The person concerned shall be given an opportunity to be heard before a sanction for misconduct , as described in this rule , is imposed . Rule 172 Conduct covered by both articles 70 and 71 If conduct covered by article 71 also constitutes one of the offences defined in article 70 , the Court shall proceed in accordance with article 70 and rules 162 to 169. Chapter 10 Compensation to an arrested or convicted person Rule 173 Request for compensation Anyone seeking compensation on any of the grounds indicated in article 85 shall submit a request , in writing , to the Presidency , which shall designate a Chamber composed of three judges to consider the request . These judges shall not have participated in any earlier judgement of the Court regarding the person making the request . The request for compensation shall be submitted not later than six months from the date the person making the request was notified of the decision of the Court concerning : ( a ) The unlawfulness of the arrest or detention under article 85 , paragraph 1 ; ( b ) The reversal of the conviction under article 85 , paragraph 2 ; ( c ) The existence of a grave and manifest miscarriage of justice under article 85 , paragraph 3. The request shall contain the grounds and the amount of compensation requested . The person requesting compensation shall be entitled to legal assistance . Rule 174 Procedure for seeking compensation A request for compensation and any other written observation by the person filing the request shall be transmitted to the Prosecutor , who shall have an opportunity to respond in writing . Any observations by the Prosecutor shall be notified to the person filing the request . The Chamber designated under rule 173 , sub-rule 1 , may either hold a hearing or determine the matter on the basis of the request and any written observations by the Prosecutor and the person filing the request . A hearing shall be held if the Prosecutor or the person seeking compensation so requests . The decision shall be taken by the majority of the judges . The decision shall be notified to the Prosecutor and to the person filing the request . Rule 175 Amount of compensation In establishing the amount of any compensation in conformity with article 85 , paragraph 3 , the Chamber designated under rule 173 , sub-rule 1 , shall take into consideration the consequences of the grave and manifest miscarriage of justice on the personal , family , social and professional situation of the person filing the request . Chapter 11 International cooperation and judicial assistance Section I Requests for cooperation under article 87 Rule 176 Organs of the Court responsible for the transmission and receipt of any communications relating to international cooperation and judicial assistance Upon and subsequent to the establishment of the Court , the Registrar shall obtain from the Secretary-General of the United Nations any communication made by States pursuant to article 87 , paragraphs 1 ( a ) and 2. The Registrar shall transmit the requests for cooperation made by the Chambers and shall receive the responses , information and documents from requested States . The Office of the Prosecutor shall transmit the requests for cooperation made by the Prosecutor and shall receive the responses , information and documents from requested States . The Registrar shall be the recipient of any communication from States concerning subsequent changes in the designation of the national channels charged with receiving requests for cooperation , as well as of any change in the language in which requests for cooperation should be made , and shall , upon request , make such information available to States Parties as may be appropriate . The provisions of sub-rule 2 are applicable mutatis mutandis where the Court requests information , documents or other forms of cooperation and assistance from an intergovernmental organization . The Registrar shall transmit any communications referred to in sub-rules 1 and 3 and rule 177 , sub-rule 2 , as appropriate , to the Presidency or the Office of the Prosecutor , or both . Rule 177 Channels of communication Communications concerning the national authority charged with receiving requests for cooperation made upon ratification , acceptance , approval or accession shall provide all relevant information about such authorities . When an intergovernmental organization is asked to assist the Court under article 87 , paragraph 6 , the Registrar shall , when necessary , ascertain its designated channel of communication and obtain all relevant information relating thereto . Rule 178 Language chosen by States Parties under article 87 , paragraph 2 When a requested State Party has more than one official language , it may indicate upon ratification , acceptance , approval or accession that requests for cooperation and any supporting documents can be drafted in any one of its official languages . When the requested State Party has not chosen a language for communication with the Court upon ratification , acceptance , accession or approval , the request for cooperation shall either be in or be accompanied by a translation into one of the working languages of the Court pursuant to article 87 , paragraph 2. Rule 179 Language of requests directed to States not party to the Statute When a State not party to the Statute has agreed to provide assistance to the Court under article 87 , paragraph 5 , and has not made a choice of language for such requests , the requests for cooperation shall either be in or be accompanied by a translation into one of the working languages of the Court . Rule 180 Changes in the channels of communication or the languages of requests for cooperation Changes concerning the channel of communication or the language a State has chosen under article 87 , paragraph 2 , shall be communicated in writing to the Registrar at the earliest opportunity . Such changes shall take effect in respect of requests for cooperation made by the Court at a time agreed between the Court and the State or , in the absence of such an agreement , 45 days after the Court has received the communication and , in all cases , without prejudice to current requests or requests in progress . Section II Surrender , transit and competing requests under articles 89 and 90 Rule 181 Challenge to admissibility of a case before a national court When a situation described in article 89 , paragraph 2 , arises , and without prejudice to the provisions of article 19 and of rules 58 to 62 on procedures applicable to challenges to the jurisdiction of the Court or the admissibility of a case , the Chamber dealing with the case , if the admissibility ruling is still pending , shall take steps to obtain from the requested State all the relevant information about the ne bis in idem challenge brought by the person . Rule 182 Request for transit under article 89 , paragraph 3 ( e ) In situations described in article 89 , paragraph 3 ( e ) , the Court may transmit the request for transit by any medium capable of delivering a written record . When the time limit provided for in article 89 , paragraph 3 ( e ) , has expired and the person concerned has been released , such a release is without prejudice to a subsequent arrest of the person in accordance with the provisions of article 89 or article 92. Rule 183 Possible temporary surrender Following the consultations referred to in article 89 , paragraph 4 , the requested State may temporarily surrender the person sought in accordance with conditions determined between the requested State and the Court . In such case the person shall be kept in custody during his or her presence before the Court and shall be transferred to the requested State once his or her presence before the Court is no longer required , at the latest when the proceedings have been completed . Rule 184 Arrangements for surrender The requested State shall immediately inform the Registrar when the person sought by the Court is available for surrender . The person shall be surrendered to the Court by the date and in the manner agreed upon between the authorities of the requested State and the Registrar . If circumstances prevent the surrender of the person by the date agreed , the authorities of the requested State and the Registrar shall agree upon a new date and manner by which the person shall be surrendered . The Registrar shall maintain contact with the authorities of the host State in relation to the arrangements for the surrender of the person to the Court . Rule 185 Release of a person from the custody of the Court other than upon completion of sentence Subject to sub-rule 2 , where a person surrendered to the Court is released from the custody of the Court because the Court does not have jurisdiction , the case is inadmissible under article 17 , paragraph 1 ( b ) , ( c ) or ( d ) , the charges have not been confirmed under article 61 , the person has been acquitted at trial or on appeal , or for any other reason , the Court shall , as soon as possible , make such arrangements as it considers appropriate for the transfer of the person , taking into account the views of the person , to a State which is obliged to receive him or her , to another State which agrees to receive him or her , or to a State which has requested his or her extradition with the consent of the original surrendering State . In this case , the host State shall facilitate the transfer in accordance with the agreement referred to in article 3 , paragraph 2 , and the related arrangements . Where the Court has determined that the case is inadmissible under article 17 , paragraph 1 ( a ) , the Court shall make arrangements , as appropriate , for the transfer of the person to a State whose investigation or prosecution has formed the basis of the successful challenge to admissibility , unless the State that originally surrendered the person requests his or her return . Rule 186 Competing requests in the context of a challenge to the admissibility of the case In situations described in article 90 , paragraph 8 , the requested State shall provide the notification of its decision to the Prosecutor in order to enable him or her to act in accordance with article 19 , paragraph 10. Section III Documents for arrest and surrender under articles 91 and 92 Rule 187 Translation of documents accompanying request for surrender For the purposes of article 67 , paragraph 1 ( a ) , and in accordance with rule 117 , sub-rule 1 , the request under article 91 shall be accompanied , as appropriate , by a translation of the warrant of arrest or of the judgement of conviction and by a translation of the text of any relevant provisions of the Statute , in a language that the person fully understands and speaks . Rule 188 Time limit for submission of documents after provisional arrest For the purposes of article 92 , paragraph 3 , the time limit for receipt by the requested State of the request for surrender and the documents supporting the request shall be 60 days from the date of the provisional arrest . Rule 189 Transmission of documents supporting the request When a person has consented to surrender in accordance with the provisions of article 92 , paragraph 3 , and the requested State proceeds to surrender the person to the Court , the Court shall not be required to provide the documents described in article 91 unless the requested State indicates otherwise . Section IV Cooperation under article 93 Rule 190 Instruction on self-incrimination accompanying request for witness When making a request under article 93 , paragraph 1 ( e ) , with respect to a witness , the Court shall annex an instruction , concerning rule 74 relating to self-incrimination , to be provided to the witness in question , in a language that the person fully understands and speaks . Rule 191 Assurance provided by the Court under article 93 , paragraph 2 The Chamber dealing with the case , on its own motion or at the request of the Prosecutor , defence or witness or expert concerned , may decide , after taking into account the views of the Prosecutor and the witness or expert concerned , to provide the assurance described in article 93 , paragraph 2. Rule 192 Transfer of a person in custody Transfer of a person in custody to the Court in accordance with article 93 , paragraph 7 , shall be arranged by the national authorities concerned in liaison with the Registrar and the authorities of the host State . The Registrar shall ensure the proper conduct of the transfer , including the supervision of the person while in the custody of the Court . The person in custody before the Court shall have the right to raise matters concerning the conditions of his or her detention with the relevant Chamber . In accordance with article 93 , paragraph 7 ( b ) , when the purposes of the transfer have been fulfilled , the Registrar shall arrange for the return of the person in custody to the requested State . Rule 193 Temporary transfer of the person from the State of enforcement The Chamber that is considering the case may order the temporary transfer from the State of enforcement to the seat of the Court of any person sentenced by the Court whose testimony or other assistance is necessary to the Court . The provisions of article 93 , paragraph 7 , shall not apply . The Registrar shall ensure the proper conduct of the transfer , in liaison with the authorities of the State of enforcement and the authorities of the host State . When the purposes of the transfer have been fulfilled , the Court shall return the sentenced person to the State of enforcement . The person shall be kept in custody during his or her presence before the Court . The entire period of detention spent at the seat of the Court shall be deducted from the sentence remaining to be served . Rule 194 Cooperation requested from the Court In accordance with article 93 , paragraph 10 , and consistent with article 96 , mutatis mutandis , a State may transmit to the Court a request for cooperation or assistance to the Court , either in or accompanied by a translation into one of the working languages of the Court . Requests described in sub-rule 1 are to be sent to the Registrar , which shall transmit them , as appropriate , either to the Prosecutor or to the Chamber concerned . If protective measures within the meaning of article 68 have been adopted , the Prosecutor or Chamber , as appropriate , shall consider the views of the Chamber which ordered the measures as well as those of the relevant victim or witness , before deciding on the request . If the request relates to documents or evidence as described in article 93 , paragraph 10 ( b ) ( ii ) , the Prosecutor or Chamber , as appropriate , shall obtain the written consent of the relevant State before proceeding with the request . When the Court decides to grant the request for cooperation or assistance from a State , the request shall be executed , insofar as possible , following any procedure outlined therein by the requesting State and permitting persons specified in the request to be present . Section V Cooperation under article 98 Rule 195 Provision of information When a requested State notifies the Court that a request for surrender or assistance raises a problem of execution in respect of article 98 , the requested State shall provide any information relevant to assist the Court in the application of article 98. Any concerned third State or sending State may provide additional information to assist the Court . The Court may not proceed with a request for the surrender of a person without the consent of a sending State if , under article 98 , paragraph 2 , such a request would be inconsistent with obligations under an international agreement pursuant to which the consent of a sending State is required prior to the surrender of a person of that State to the Court . Section VI Rule of speciality under article 101 Rule 196 Provision of views on article 101 , paragraph 1 A person surrendered to the Court may provide views on a perceived violation of the provisions of article 101 , paragraph 1. Rule 197 Extension of the surrender When the Court has requested a waiver of the requirements of article 101 , paragraph 1 , the requested State may ask the Court to obtain and provide the views of the person surrendered to the Court . Chapter 12 Enforcement Section I Role of States in enforcement of sentences of imprisonment and change in designation of State of enforcement under articles 103 and 104 Rule 198 Communications between the Court and States Unless the context otherwise requires , article 87 and rules 176 to 180 shall apply , as appropriate , to communications between the Court and a State on matters relating to enforcement of sentences . Rule 199 Organ responsible under Part 10 Unless provided otherwise in the Rules , the functions of the Court under Part 10 shall be exercised by the Presidency . Rule 200 List of States of enforcement A list of States that have indicated their willingness to accept sentenced persons shall be established and maintained by the Registrar . The Presidency shall not include a State on the list provided for in article 103 , paragraph 1 ( a ) , if it does not agree with the conditions that such a State attaches to its acceptance . The Presidency may request any additional information from that State prior to taking a decision . A State that has attached conditions of acceptance may at any time withdraw such conditions . Any amendments or additions to such conditions shall be subject to confirmation by the Presidency . A State may at any time inform the Registrar of its withdrawal from the list . Such withdrawal shall not affect the enforcement of the sentences in respect of persons that the State has already accepted . The Court may enter bilateral arrangements with States with a view to establishing a framework for the acceptance of prisoners sentenced by the Court . Such arrangements shall be consistent with the Statute . Rule 201 Principles of equitable distribution Principles of equitable distribution for purposes of article 103 , paragraph 3 , shall include : ( a ) The principle of equitable geographical distribution ; ( b ) The need to afford each State on the list an opportunity to receive sentenced persons ; ( c ) The number of sentenced persons already received by that State and other States of enforcement ; ( d ) Any other relevant factors . Rule 202 Timing of delivery of the sentenced person to the State of enforcement The delivery of a sentenced person from the Court to the designated State of enforcement shall not take place unless the decision on the conviction and the decision on the sentence have become final . Rule 203 Views of the sentenced person The Presidency shall give notice in writing to the sentenced person that it is addressing the designation of a State of enforcement . The sentenced person shall , within such time limit as the Presidency shall prescribe , submit in writing his or her views on the question to the Presidency . The Presidency may allow the sentenced person to make oral presentations . The Presidency shall allow the sentenced person : ( a ) To be assisted , as appropriate , by a competent interpreter and to benefit from any translation necessary for the presentation of his or her views ; ( b ) To be granted adequate time and facilities necessary to prepare for the presentation of his or her views . Rule 204 Information relating to designation When the Presidency notifies the designated State of its decision , it shall also transmit the following information and documents : ( a ) The name , nationality , date and place of birth of the sentenced person ; ( b ) A copy of the final judgement of conviction and of the sentence imposed ; ( c ) The length and commencement date of the sentence and the time remaining to be served ; ( d ) After having heard the views of the sentenced person , any necessary information concerning the state of his or her health , including any medical treatment that he or she is receiving . Rule 205 Rejection of designation in a particular case Where a State in a particular case rejects the designation by the Presidency , the Presidency may designate another State . Rule 206 Delivery of the sentenced person to the State of enforcement The Registrar shall inform the Prosecutor and the sentenced person of the State designated to enforce the sentence . The sentenced person shall be delivered to the State of enforcement as soon as possible after the designated State of enforcement accepts . The Registrar shall ensure the proper conduct of the delivery of the person in consultation with the authorities of the State of enforcement and the host State . Rule 207 Transit No authorization is required if the sentenced person is transported by air and no landing is scheduled on the territory of the transit State . If an unscheduled landing occurs on the territory of the transit State , that State shall , to the extent possible under the procedure of national law , detain the sentenced person in custody until a request for transit as provided in sub-rule 2 or a request under article 89 , paragraph 1 , or article 92 is received . To the extent possible under the procedure of national law , a State Party shall authorize the transit of a sentenced person through its territory and the provisions of article 89 , paragraph 3 ( b ) and ( c ) , and articles 105 and 108 and any rules relating thereto shall , as appropriate , apply . A copy of the final judgement of conviction and of the sentence imposed shall be attached to such request for transit . Rule 208 Costs The ordinary costs for the enforcement of the sentence in the territory of the State of enforcement shall be borne by that State . Other costs , including those for the transport of the sentenced person and those referred to in article 100 , paragraph 1 ( c ) , ( d ) and ( e ) , shall be borne by the Court . Rule 209 Change in designation of State of enforcement The Presidency , acting on its own motion or at the request of the sentenced person or the Prosecutor , may at any time act in accordance with article 104 , paragraph 1. The request of the sentenced person or of the Prosecutor shall be made in writing and shall set out the grounds upon which the transfer is sought . Rule 210 Procedure for change in the designation of a State of enforcement Before deciding to change the designation of a State of enforcement , the Presidency may : ( a ) Request views from the State of enforcement ; ( b ) Consider written or oral presentations of the sentenced person and the Prosecutor ; ( c ) Consider written or oral expert opinion concerning , inter alia , the sentenced person ; ( d ) Obtain any other relevant information from any reliable sources . The provisions of rule 203 , sub-rule 3 , shall apply , as appropriate . If the Presidency refuses to change the designation of the State of enforcement , it shall , as soon as possible , inform the sentenced person , the Prosecutor and the Registrar of its decision and of the reasons therefor . It shall also inform the State of enforcement . Section II Enforcement , supervision and transfer under articles 105 , 106 and 107 Rule 211 Supervision of enforcement of sentences and conditions of imprisonment In order to supervise the enforcement of sentences of imprisonment , the Presidency : ( a ) Shall , in consultation with the State of enforcement , ensure that in establishing appropriate arrangements for the exercise by any sentenced person of his or her right to communicate with the Court about the conditions of imprisonment , the provisions of article 106 , paragraph 3 , shall be respected ; ( b ) May , when necessary , request any information , report or expert opinion from the State of enforcement or from any reliable sources ; ( c ) May , where appropriate , delegate a judge of the Court or a member of the staff of the Court who will be responsible , after notifying the State of enforcement , for meeting the sentenced person and hearing his or her views , without the presence of national authorities ; ( d ) May , where appropriate , give the State of enforcement an opportunity to comment on the views expressed by the sentenced person under sub-rule 1 ( c ) . When a sentenced person is eligible for a prison programme or benefit available under the domestic law of the State of enforcement which may entail some activity outside the prison facility , the State of enforcement shall communicate that fact to the Presidency , together with any relevant information or observation , to enable the Court to exercise its supervisory function . Rule 212 Information on location of the person for enforcement of fines , forfeitures or reparation measures For the purpose of enforcement of fines and forfeiture measures and of reparation measures ordered by the Court , the Presidency may , at any time or at least 30 days before the scheduled completion of the sentence served by the sentenced person , request the State of enforcement to transmit to it the relevant information concerning the intention of that State to authorize the person to remain in its territory or the location where it intends to transfer the person . Rule 213 Procedure for article 107 , paragraph 3 With respect to article 107 , paragraph 3 , the procedure set out in rules 214 and 215 shall apply , as appropriate . Section III Limitation on the prosecution or punishment of other offences under article 108 Rule 214 Request to prosecute or enforce a sentence for prior conduct For the application of article 108 , when the State of enforcement wishes to prosecute or enforce a sentence against the sentenced person for any conduct engaged in prior to that person 's transfer , it shall notify its intention to the Presidency and transmit to it the following documents : ( a ) A statement of the facts of the case and their legal characterization ; ( b ) A copy of any applicable legal provisions , including those concerning the statute of limitation and the applicable penalties ; ( c ) A copy of any sentence , warrant of arrest or other document having the same force , or of any other legal writ which the State intends to enforce ; ( d ) A protocol containing views of the sentenced person obtained after the person has been informed sufficiently about the proceedings . In the event of a request for extradition made by another State , the State of enforcement shall transmit the entire request to the Presidency with a protocol containing the views of the sentenced person obtained after informing the person sufficiently about the extradition request . The Presidency may in all cases request any document or additional information from the State of enforcement or the State requesting extradition . If the person was surrendered to the Court by a State other than the State of enforcement or the State seeking extradition , the Presidency shall consult with the State that surrendered the person and take into account any views expressed by that State . Any information or documents transmitted to the Presidency under sub-rules 1 to 4 shall be transmitted to the Prosecutor , who may comment . The Presidency may decide to conduct a hearing . Rule 215 Decision on request to prosecute or enforce a sentence The Presidency shall make a determination as soon as possible . This determination shall be notified to all those who have participated in the proceedings . If the request submitted under sub-rules 1 or 2 of rule 214 concerns the enforcement of a sentence , the sentenced person may serve that sentence in the State designated by the Court to enforce the sentence pronounced by it or be extradited to a third State only after having served the full sentence pronounced by the Court , subject to the provisions of article 110. The Presidency may authorize the temporary extradition of the sentenced person to a third State for prosecution only if it has obtained assurances which it deems to be sufficient that the sentenced person will be kept in custody in the third State and transferred back to the State responsible for enforcement of the sentence pronounced by the Court , after the prosecution . Rule 216 Information on enforcement The Presidency shall request the State of enforcement to inform it of any important event concerning the sentenced person , and of any prosecution of that person for events subsequent to his or her transfer . Section IV Enforcement of fines , forfeiture measures and reparation orders Rule 217 Cooperation and measures for enforcement of fines , forfeiture or reparation orders For the enforcement of fines , forfeiture or reparation orders , the Presidency shall , as appropriate , seek cooperation and measures for enforcement in accordance with Part 9 , as well as transmit copies of relevant orders to any State with which the sentenced person appears to have direct connection by reason of either nationality , domicile or habitual residence or by virtue of the location of the sentenced person 's assets and property or with which the victim has such connection . The Presidency shall , as appropriate , inform the State of any third-party claims or of the fact that no claim was presented by a person who received notification of any proceedings conducted pursuant to article 75. Rule 218 Orders for forfeiture and reparations In order to enable States to give effect to an order for forfeiture , the order shall specify : ( a ) The identity of the person against whom the order has been issued ; ( b ) The proceeds , property and assets that have been ordered by the Court to be forfeited ; and ( c ) That if the State Party is unable to give effect to the order for forfeiture in relation to the specified proceeds , property or assets , it shall take measures to recover the value of the same . In the request for cooperation and measures for enforcement , the Court shall also provide available information as to the location of the proceeds , property and assets that are covered by the order for forfeiture . In order to enable States to give effect to an order for reparations , the order shall specify : ( a ) The identity of the person against whom the order has been issued ; ( b ) In respect of reparations of a financial nature , the identity of the victims to whom individual reparations have been granted , and , where the award for reparations shall be deposited with the Trust Fund , the particulars of the Trust Fund for the deposit of the award ; and ( c ) The scope and nature of the reparations ordered by the Court , including , where applicable , the property and assets for which restitution has been ordered . Where the Court awards reparations on an individual basis , a copy of the reparation order shall be transmitted to the victim concerned . Rule 219 Non-modification of orders for reparation The Presidency shall , when transmitting copies of orders for reparations to States Parties under rule 217 , inform them that , in giving effect to an order for reparations , the national authorities shall not modify the reparations specified by the Court , the scope or the extent of any damage , loss or injury determined by the Court or the principles stated in the order , and shall facilitate the enforcement of such order . Rule 220 Non-modification of judgements in which fines were imposed When transmitting copies of judgements in which fines were imposed to States Parties for the purpose of enforcement in accordance with article 109 and rule 217 , the Presidency shall inform them that in enforcing the fines imposed , national authorities shall not modify them . Rule 221 Decision on disposition or allocation of property or assets The Presidency shall , after having consulted , as appropriate , with the Prosecutor , the sentenced person , the victims or their legal representatives , the national authorities of the State of enforcement or any relevant third party , or representatives of the Trust Fund provided for in article 79 , decide on all matters related to the disposition or allocation of property or assets realized through enforcement of an order of the Court . In all cases , when the Presidency decides on the disposition or allocation of property or assets belonging to the sentenced person , it shall give priority to the enforcement of measures concerning reparations to victims . Rule 222 Assistance for service or any other measure The Presidency shall assist the State in the enforcement of fines , forfeiture or reparation orders , as requested , with the service of any relevant notification on the sentenced person or any other relevant persons , or the carrying out of any other measures necessary for the enforcement of the order under the procedure of the national law of the enforcement State . Section V Review concerning reduction of sentence under article 110 Rule 223 Criteria for review concerning reduction of sentence In reviewing the question of reduction of sentence pursuant to article 110 , paragraphs 3 and 5 , the three judges of the Appeals Chamber shall take into account the criteria listed in article 110 , paragraph 4 ( a ) and ( b ) , and the following criteria : ( a ) The conduct of the sentenced person while in detention , which shows a genuine dissociation from his or her crime ; ( b ) The prospect of the resocialization and successful resettlement of the sentenced person ; ( c ) Whether the early release of the sentenced person would give rise to significant social instability ; ( d ) Any significant action taken by the sentenced person for the benefit of the victims as well as any impact on the victims and their families as a result of the early release ; ( e ) Individual circumstances of the sentenced person , including a worsening state of physical or mental health or advanced age . Rule 224 Procedure for review concerning reduction of sentence For the application of article 110 , paragraph 3 , three judges of the Appeals Chamber appointed by that Chamber shall conduct a hearing , unless they decide otherwise in a particular case , for exceptional reasons . The hearing shall be conducted with the sentenced person , who may be assisted by his or her counsel , with interpretation , as may be required . Those three judges shall invite the Prosecutor , the State of enforcement of any penalty under article 77 or any reparation order pursuant to article 75 and , to the extent possible , the victims or their legal representatives who participated in the proceedings , to participate in the hearing or to submit written observations . Under exceptional circumstances , this hearing may be conducted by way of a videoconference or in the State of enforcement by a judge delegated by the Appeals Chamber . The same three judges shall communicate the decision and the reasons for it to all those who participated in the review proceedings as soon as possible . For the application of article 110 , paragraph 5 , three judges of the Appeals Chamber appointed by that Chamber shall review the question of reduction of sentence every three years , unless it establishes a shorter interval in its decision taken pursuant to article 110 , paragraph 3. In case of a significant change in circumstances , those three judges may permit the sentenced person to apply for a review within the three-year period or such shorter period as may have been set by the three judges . For any review under article 110 , paragraph 5 , three judges of the Appeals Chamber appointed by that Chamber shall invite written representations from the sentenced person or his or her counsel , the Prosecutor , the State of enforcement of any penalty under article 77 and any reparation order pursuant to article 75 and , to the extent possible , the victims or their legal representatives who participated in the proceedings . The three judges may also decide to hold a hearing . The decision and the reasons for it shall be communicated to all those who participated in the review proceedings as soon as possible . Section VI Escape Rule 225 Measures under article 111 in the event of escape If the sentenced person has escaped , the State of enforcement shall , as soon as possible , advise the Registrar by any medium capable of delivering a written record . The Presidency shall then proceed in accordance with Part 9. However , if the State in which the sentenced person is located agrees to surrender him or her to the State of enforcement , pursuant to either international agreements or its national legislation , the State of enforcement shall so advise the Registrar in writing . The person shall be surrendered to the State of enforcement as soon as possible , if necessary in consultation with the Registrar , who shall provide all necessary assistance , including , if necessary , the presentation of requests for transit to the States concerned , in accordance with rule 207. The costs associated with the surrender of the sentenced person shall be borne by the Court if no State assumes responsibility for them . If the sentenced person is surrendered to the Court pursuant to Part 9 , the Court shall transfer him or her to the State of enforcement . Nevertheless , the Presidency may , acting on its own motion or at the request of the Prosecutor or of the initial State of enforcement and in accordance with article 103 and rules 203 to 206 , designate another State , including the State to the territory of which the sentenced person has fled . In all cases , the entire period of detention in the territory of the State in which the sentenced person was in custody after his or her escape and , where sub-rule 3 is applicable , the period of detention at the seat of the Court following the surrender of the sentenced person from the State in which he or she was located shall be deducted from the sentence remaining to be served . </text>
<text id="un/PCNICC_2001_WGAPIC_L1">
Preparatory Commission for the International Criminal Court Working Group on an Agreement on the Privileges and Immunities of the International Criminal Court New York , 24 September-5 October 2001 Report of the Working Group Draft Agreement on the Privileges and Immunities of the International Criminal Court The States Parties to the present Agreement , Whereas the Rome Statute of the International Criminal Court adopted on 17 July 1998 by the United Nations Diplomatic Conference of Plenipotentiaries established the International Criminal Court with the power to exercise its jurisdiction over persons for the most serious crimes of international concern ; Whereas article 4 of the Rome Statute provides that the International Criminal Court shall have international legal personality and such legal capacity as may be necessary for the exercise of its functions and the fulfilment of its purposes ; Whereas article 48 of the Rome Statute provides that the International Criminal Court shall enjoy in the territory of each State Party to the Rome Statute such privileges and immunities as are necessary for the fulfilment of its purposes ; Have agreed as follows : Article 1 Use of terms For the purposes of the present Agreement : ( a ) “ The Statute ” means the Rome Statute of the International Criminal Court adopted on 17 July 1998 by the United Nations Diplomatic Conference of Plenipotentiaries on the Establishment of an International Criminal Court ; ( b ) “ The Court ” means the International Criminal Court established by the Statute ; ( c ) “ States Parties ” means States Parties to the present Agreement ; ( d ) “ Representatives of States Parties ” means all delegates , deputy delegates , advisers , technical experts and secretaries of delegations ; ( e ) “ Assembly ” means the Assembly of States Parties to the Statute ; ( f ) “ Judges ” means the judges of the Court ; ( g ) “ The Presidency ” means the organ composed of the President and the First and Second Vice-Presidents of the Court ; ( h ) “ Prosecutor ” means the Prosecutor elected by the Assembly in accordance with article 42 , paragraph 4 , of the Statute ; ( i ) “ Deputy Prosecutors ” means the Deputy Prosecutors elected by the Assembly in accordance with article 42 , paragraph 4 , of the Statute ; ( j ) “ Registrar ” means the Registrar elected by the Court in accordance with article 43 , paragraph 4 , of the Statute ; ( k ) “ Deputy Registrar ” means the Deputy Registrar elected by the Court in accordance with article 43 , paragraph 4 , of the Statute ; ( l ) “ Counsel ” means defence counsel and the legal representatives of victims ; ( m ) “ Secretary-General ” means the Secretary-General of the United Nations ; ( n ) “ Representatives of intergovernmental organizations ” means the executive heads of intergovernmental organizations , including any official acting on his or her behalf ; ( o ) “ Vienna Convention ” means the Vienna Convention on Diplomatic Relations of 18 April 1961 ; ( p ) “ Rules of Procedure and Evidence ” means the Rules of Procedure and Evidence adopted in accordance with article 51 of the Statute . Article 2 Legal status and juridical personality of the Court The Court shall have international legal personality and shall also have such legal capacity as may be necessary for the exercise of its functions and the fulfilment of its purposes . It shall , in particular , have the capacity to contract , to acquire and to dispose of immovable and movable property and to participate in legal proceedings . Article 3 General provisions on privileges and immunities of the Court The Court shall enjoy in the territory of each State Party such privileges and immunities as are necessary for the fulfilment of its purposes . Article 4 Inviolability of the premises of the Court The premises of the Court shall be inviolable . Article 5 Flag , emblem and markings The Court shall be entitled to display its flag , emblem and markings at its premises and on vehicles and other means of transportation used for official purposes . Article 6 Immunity of the Court , its property , funds and assets The Court , and its property , funds and assets , wherever located and by whomsoever held , shall be immune from every form of legal process , except insofar as in any particular case the Court has expressly waived its immunity . It is , however , understood that no waiver of immunity shall extend to any measure of execution . The property , funds and assets of the Court , wherever located and by whomsoever held , shall be immune from search , seizure , requisition , confiscation , expropriation and any other form of interference , whether by executive , administrative , judicial or legislative action . To the extent necessary to carry out the functions of the Court , the property , funds and assets of the Court , wherever located and by whomsoever held , shall be exempt from restrictions , regulations , controls or moratoria of any nature . Article 7 Inviolability of archives and documents The archives of the Court , and all papers and documents in whatever form , and materials being sent to or from the Court , held by the Court or belonging to it , wherever located and by whomsoever held , shall be inviolable . The termination or absence of such inviolability shall not affect protective measures that the Court may order pursuant to the Statute and the Rules of Procedure and Evidence with regard to documents and materials made available to or used by the Court . Article 8 Exemption from taxes , customs duties and import or export restrictions The Court , its assets , income and other property and its operations and transactions shall be exempt from all direct taxes , which include , inter alia , income tax , capital tax and corporation tax , as well as direct taxes levied by local and provincial authorities . It is understood , however , that the Court shall not claim exemption from taxes which are , in fact , no more than charges for public utility services provided at a fixed rate according to the amount of services rendered and which can be specifically identified , described and itemized . The Court shall be exempt from all customs duties , import turnover taxes and prohibitions and restrictions on imports and exports in respect of articles imported or exported by the Court for its official use and in respect of its publications . Goods imported or purchased under such an exemption shall not be sold or otherwise disposed of in the territory of a State Party , except under conditions agreed with the competent authorities of that State Party . Article 9 Reimbursement of duties and/or taxes The Court shall not , as a general rule , claim exemption from duties and/or taxes which are included in the price of movable and immovable property and taxes paid for services rendered . Nevertheless , when the Court for its official use makes major purchases of property and goods or services on which identifiable duties and/or taxes are charged or are chargeable , States Parties shall make appropriate administrative arrangements for the exemption of such charges or reimbursement of the amount of duty and/or tax paid . Goods purchased under such an exemption or reimbursement shall not be sold or otherwise disposed of , except in accordance with the conditions laid down by the State Party which granted the exemption or reimbursement . No exemption or reimbursement shall be accorded in respect of charges for public utility services provided to the Court . Article 10 Funds and freedom from currency restrictions Without being restricted by financial controls , regulations or financial moratoriums of any kind , while carrying out its activities : ( a ) The Court may hold funds , currency of any kind or gold and operate accounts in any currency ; ( b ) The Court shall be free to transfer its funds , gold or its currency from one country to another or within any country and to convert any currency held by it into any other currency ; ( c ) The Court may receive , hold , negotiate , transfer , convert or otherwise deal with bonds and other financial securities ; ( d ) The Court shall enjoy treatment not less favourable than that accorded by the State Party concerned to any intergovernmental organization or diplomatic mission in respect of rates of exchange for its financial transactions . In exercising its rights under paragraph 1 , the Court shall pay due regard to any representations made by any State Party insofar as it is considered that effect can be given to such representations without detriment to the interests of the Court . Article 11 Facilities in respect of communications The Court shall enjoy in the territory of each State Party for the purposes of its official communications and correspondence treatment not less favourable than that accorded by the State Party concerned to any intergovernmental organization or diplomatic mission in the matter of priorities , rates and taxes applicable to mail and the various forms of communication and correspondence . No censorship shall be applied to the official communications or correspondence of the Court . The Court may use all appropriate means of communication , including electronic means of communication , and shall have the right to use codes or cipher for its official communications and correspondence . The official communications and correspondence of the Court shall be inviolable . The Court shall have the right to dispatch and receive correspondence and other materials or communications by courier or in sealed bags , which shall have the same privileges , immunities and facilities as diplomatic couriers and bags . The Court shall have the right to operate radio and other telecommunication equipment on any frequencies allocated to it by the States Parties in accordance with their national procedures . The States Parties shall endeavour to allocate to the Court , to the extent possible , frequencies for which it has applied . Article 12 Exercise of the functions of the Court outside its headquarters In the event that the Court , pursuant to article 3 , paragraph 3 , of the Statute , considers it desirable to sit elsewhere than at its headquarters at The Hague in the Netherlands , the Court may conclude with the State concerned an arrangement concerning the provision of the appropriate facilities for the exercise of its functions . Article 13 Representatives of States participating in the Assembly and its subsidiary organs and representatives of intergovernmental organizations Representatives of States Parties to the Statute attending meetings of the Assembly and its subsidiary organs , representatives of other States that may be attending meetings of the Assembly and its subsidiary organs as observers in accordance with article 112 , paragraph 1 , of the Statute , and representatives of States and of intergovernmental organizations invited to meetings of the Assembly and its subsidiary organs shall , while exercising their official functions and during their journey to and from the place of meeting , enjoy the following privileges and immunities : ( a ) Immunity from personal arrest or detention ; ( b ) Immunity from legal process of every kind in respect of words spoken or written , and all acts performed by them in their official capacity ; such immunity shall continue to be accorded notwithstanding that the persons concerned may have ceased to exercise their functions as representatives ; ( c ) Inviolability of all papers and documents in whatever form ; ( d ) The right to use codes or cipher , to receive papers and documents or correspondence by courier or in sealed bags and to receive and send electronic communications ; ( e ) Exemption from immigration restrictions , alien registration requirements and national service obligations in the State Party they are visiting or through which they are passing in the exercise of their functions ; ( f ) The same privileges in respect of currency and exchange facilities as are accorded to representatives of foreign Governments on temporary official missions ; ( g ) The same immunities and facilities in respect of their personal baggage as are accorded to diplomatic envoys under the Vienna Convention ; ( h ) The same protection and repatriation facilities as are accorded to diplomatic agents in time of international crisis under the Vienna Convention ; ( i ) Such other privileges , immunities and facilities not inconsistent with the foregoing as diplomatic agents enjoy , except that they shall have no right to claim exemption from customs duties on goods imported ( otherwise as part of their personal baggage ) or from excise duties or sales taxes . Where the incidence of any form of taxation depends upon residence , periods during which the representatives described in paragraph 1 attending the meetings of the Assembly and its subsidiary organs are present in a State Party for the discharge of their duties shall not be considered as periods of residence . The provisions of paragraphs 1 and 2 of this article are not applicable as between a representative and the authorities of the State Party of which he or she is a national or of the State Party or intergovernmental organization of which he or she is or has been a representative . Article 14 Representatives of States participating in the proceedings of the Court Representatives of States participating in the proceedings of the Court shall , while exercising their official functions , and during their journey to and from the place of the proceedings , enjoy the privileges and immunities referred to in article 13. Article 15 Judges , Prosecutor , Deputy Prosecutors and Registrar The judges , the Prosecutor , the Deputy Prosecutors and the Registrar shall , when engaged on or with respect to the business of the Court , enjoy the same privileges and immunities as are accorded to heads of diplomatic missions and shall , after the expiry of their terms of office , continue to be accorded immunity from legal process of every kind in respect of words which had been spoken or written and acts which had been performed by them in their official capacity . The judges , the Prosecutor , the Deputy Prosecutors and the Registrar and members of their families forming part of their households shall be accorded every facility for leaving the country where they may happen to be and for entering and leaving the country where the Court is sitting . On journeys in connection with the exercise of their functions , the judges , the Prosecutor , the Deputy Prosecutors and the Registrar shall in all States Parties through which they may have to pass enjoy all the privileges , immunities and facilities granted by States Parties to diplomatic agents in similar circumstances under the Vienna Convention . If a judge , the Prosecutor , a Deputy Prosecutor or the Registrar , for the purpose of holding himself or herself at the disposal of the Court , resides in any State Party other than that of which he or she is a national or permanent resident , he or she shall , together with family members forming part of his or her household , be accorded diplomatic privileges , immunities and facilities during the period of residence . The judges , the Prosecutor , the Deputy Prosecutors and the Registrar and members of their families forming part of their households shall be accorded the same repatriation facilities in time of international crisis as are accorded to diplomatic agents under the Vienna Convention . Paragraphs 1 to 4 of this article shall apply to judges of the Court even after their term of office has expired if they continue to exercise their functions in accordance with article 36 , paragraph 10 , of the Statute . The salaries , emoluments and allowances paid to the judges , the Prosecutor , the Deputy Prosecutors and the Registrar by the Court shall be exempt from taxation . Where the incidence of any form of taxation depends upon residence , periods during which the judges , the Prosecutor , the Deputy Prosecutors and the Registrar are present in a State Party for the discharge of their functions shall not be considered as periods of residence for purposes of taxation . States Parties may take these salaries , emoluments and allowances into account for the purpose of assessing the amount of taxes to be applied to income from other sources . States Parties shall not be obliged to exempt from income tax pensions or annuities paid to former judges , Prosecutors and Registrars and their dependants . Article 16 Deputy Registrar , staff of the Office of the Prosecutor and staff of the Registry The Deputy Registrar , the staff of the Office of the Prosecutor and the staff of the Registry shall enjoy such privileges , immunities and facilities as are necessary for the independent performance of their functions . They shall be accorded : ( a ) Immunity from personal arrest or detention and from seizure of their personal baggage ; ( b ) Immunity from legal process of every kind in respect of words spoken or written and all acts performed by them in their official capacity , which immunity shall continue to be accorded even after termination of their employment with the Court ; ( c ) Inviolability for all official papers and documents in whatever form and materials ; ( d ) Exemption from taxation on the salaries , emoluments and allowances paid to them by the Court . States Parties may take these salaries , emoluments and allowances into account for the purpose of assessing the amount of taxes to be applied to income from other sources ; ( e ) Exemption from national service obligations ; ( f ) Together with members of their families forming part of their household , exemption from immigration restrictions or alien registration ; ( g ) Exemption from inspection of personal baggage , unless there are serious grounds for believing that the baggage contains articles the import or export of which is prohibited by the law or controlled by the quarantine regulations of the State Party concerned ; an inspection in such a case shall be conducted in the presence of the official concerned ; ( h ) The same privileges in respect of currency and exchange facilities as are accorded to the officials of comparable rank of diplomatic missions established in the State Party concerned ; ( i ) Together with members of their families forming part of their household , the same repatriation facilities in time of international crisis as are accorded to diplomatic agents under the Vienna Convention ; ( j ) The right to import free of duties and taxes , except payments for services , their furniture and effects at the time of first taking up post in the State Party in question and to re-export their furniture and effects free of duties and taxes to their country of permanent residence . States Parties shall not be obliged to exempt from income tax pensions or annuities paid to former Deputy Registrars , members of the staff of the Office of the Prosecutor , members of the staff of the Registry and their dependants . Article 17 Personnel recruited locally and not otherwise covered by the present Agreement Personnel recruited by the Court locally and not otherwise covered by the present Agreement shall be accorded immunity from legal process in respect of words spoken or written and all acts performed by them in their official capacity for the Court . Such immunity shall continue to be accorded after termination of employment with the Court for activities carried out on behalf of the Court . During their employment , they shall also be accorded such other facilities as may be necessary for the independent exercise of their functions for the Court . Article 18 Counsel and persons assisting defence counsel Counsel shall enjoy the following privileges , immunities and facilities to the extent necessary for the independent performance of his or her functions , including the time spent on journeys , in connection with the performance of his or her functions and subject to production of the certificate referred to in paragraph 2 of this article : ( a ) Immunity from personal arrest or detention and from seizure of his or her personal baggage ; ( b ) Immunity from legal process of every kind in respect of words spoken or written and all acts performed by him or her in their official capacity , which immunity shall continue to be accorded even after he or she has ceased to exercise his or her functions ; ( c ) Inviolability of papers and documents in whatever form and materials relating to the exercise of his or her functions ; ( d ) For the purposes of communications in pursuance of his or her functions as counsel , the right to receive and send papers and documents in whatever form ; ( e ) Exemption from immigration restrictions or alien registration ; ( f ) Exemption from inspection of personal baggage , unless there are serious grounds for believing that the baggage contains articles the import or export of which is prohibited by law or controlled by the quarantine regulations of the State Party concerned ; an inspection in such a case shall be conducted in the presence of the counsel concerned ; ( g ) The same privileges in respect of currency and exchange facilities as are accorded to representatives of foreign Governments on temporary official missions ; ( h ) The same repatriation facilities in time of international crisis as are accorded to diplomatic agents under the Vienna Convention . Upon appointment of counsel in accordance with the Statute , the Rules of Procedure and Evidence and the Regulations of the Court , counsel shall be provided with a certificate under the signature of the Registrar for the period required for the exercise of his or her functions . Such certificate shall be withdrawn if the power or mandate is terminated before the expiry of the certificate . Where the incidence of any form of taxation depends upon residence , periods during which counsel is present in a State Party for the discharge of his or her functions shall not be considered as periods of residence . The provisions of this article shall apply mutatis mutandis to persons assisting defence counsel in accordance with rule 22 of the Rules of Procedure and Evidence . Article 19 Witnesses Witnesses shall enjoy the following privileges , immunities and facilities to the extent necessary for their appearance before the Court for purposes of giving evidence , including the time spent on journeys in connection with their appearance before the Court , subject to the production of the document referred to in paragraph 2 of this article : ( a ) Immunity from personal arrest or detention ; ( b ) Without prejudice to subparagraph ( d ) below , immunity from seizure of their personal baggage unless there are serious grounds for believing that the baggage contains articles the import or export of which is prohibited by law or controlled by the quarantine regulations of the State Party concerned ; ( c ) Immunity from legal process of every kind in respect of words spoken or written and all acts performed by them in the course of their testimony , which immunity shall continue to be accorded even after their appearance and testimony before the Court ; ( d ) Inviolability of papers and documents in whatever form and materials relating to their testimony ; ( e ) For purposes of their communications with the Court and counsel in connection with their testimony , the right to receive and send papers and documents in whatever form ; ( f ) Exemption from immigration restrictions or alien registration when they travel for purposes of their testimony ; ( g ) The same repatriation facilities in time of international crisis as are accorded to diplomatic agents under the Vienna Convention . Witnesses who enjoy the privileges , immunities and facilities referred to in paragraph 1 of this article shall be provided by the Court with a document certifying that their appearance is required by the Court and specifying a time period during which such appearance is necessary . Article 20 Victims Victims participating in the proceedings in accordance with rules 89 to 91 of the Rules of Procedure and Evidence shall enjoy the following privileges , immunities and facilities to the extent necessary for their appearance before the Court , including the time spent on journeys in connection with their appearance before the Court , subject to the production of the document referred to in paragraph 2 of this article : ( a ) Immunity from personal arrest or detention ; ( b ) Immunity from seizure of their personal baggage unless there are serious grounds for believing that the baggage contains articles the import or export of which is prohibited by law or controlled by the quarantine regulations of the State Party concerned ; ( c ) Immunity from legal process of every kind in respect of words spoken or written and all acts performed by them in the course of their appearance before the Court , which immunity shall continue to be accorded even after their appearance before the Court ; ( d ) Exemption from immigration restrictions or alien registration when they travel to and from the Court for purposes of their appearance . Victims participating in the proceedings in accordance with rules 89 to 91 of the Rules of Procedure and Evidence who enjoy the privileges , immunities and facilities referred to in paragraph 1 of this article shall be provided by the Court with a document certifying their participation in the proceedings of the Court and specifying a time period for that participation . Article 21 Experts Experts performing functions for the Court shall be accorded the following privileges , immunities and facilities to the extent necessary for the independent exercise of their functions , including the time spent on journeys in connection with their functions , subject to production of the document referred to in paragraph 2 of this article : ( a ) Immunity from personal arrest or detention and from seizure of their personal baggage ; ( b ) Immunity from legal process of every kind in respect of words spoken or written and all acts performed by them in the course of the performance of their functions , which immunity shall continue to be accorded even after the termination of their functions ; ( c ) Inviolability of papers and documents in whatever form and materials relating to their functions ; ( d ) For the purposes of their communications with the Court , the right to receive and send papers and documents in whatever form and materials relating to their functions by courier or in sealed bags ; ( e ) Exemption from inspection of personal baggage , unless there are serious grounds for believing that the baggage contains articles the import or export of which is prohibited by law or controlled by the quarantine regulations of the State Party concerned ; an inspection in such a case shall be conducted in the presence of the expert concerned ; ( f ) The same privileges in respect of currency and exchange facilities as are accorded to representatives of foreign Governments on temporary official missions ; ( g ) The same repatriation facilities in time of international crisis as are accorded to diplomatic agents under the Vienna Convention ; ( h ) Exemption from immigration restrictions or alien registration in relation to their functions as specified in the document referred to in paragraph 2 of this article . Experts who enjoy the privileges , immunities and facilities referred to in paragraph 1 of this article shall be provided by the Court with a document certifying that they are performing functions for the Court and specifying a time period for which their functions will last . Article 22 Other persons required to be present at the seat of the Court Other persons required to be present at the seat of the Court shall , to the extent necessary for their presence at the seat of the Court , including the time spent on journeys in connection with their presence , be accorded the privileges , immunities and facilities provided for in article 20 , paragraph 1 , subparagraphs ( a ) to ( d ) , of the present Agreement , subject to production of the document referred to in paragraph 2 of this article . Other persons required to be present at the seat of the Court shall be provided by the Court with a document certifying that their presence is required at the seat of the Court and specifying a time period during which such presence is necessary . Article 23 Cooperation with the authorities of States Parties The Court shall cooperate at all times with the appropriate authorities of States Parties to facilitate the enforcement of their laws and to prevent the occurrence of any abuse in connection with the privileges , immunities and facilities referred to in the present Agreement . Without prejudice to their privileges and immunities , it is the duty of all persons enjoying privileges and immunities under the present Agreement to respect the laws and regulations of the State Party in whose territory they may be on the business of the Court or through whose territory they may pass on such business . They also have a duty not to interfere in the internal affairs of that State . Article 24 Waiver of privileges and immunities provided for in articles 13 and 14 Privileges and immunities provided for in articles 13 and 14 of the present Agreement are accorded to the representatives of States and intergovernmental organizations not for the personal benefit of the individuals themselves , but in order to safeguard the independent exercise of their functions in connection with the work of the Assembly , its subsidiary organs and the Court . Consequently , States Parties not only have the right but are under a duty to waive the privileges and immunities of their representatives in any case where , in the opinion of those States , they would impede the course of justice and can be waived without prejudice to the purpose for which the privileges and immunities are accorded . States not party to the present Agreement and intergovernmental organizations are granted the privileges and immunities provided for in articles 13 and 14 of the present Agreement on the understanding that they undertake the same duty regarding waiver . Article 25 Waiver of privileges and immunities provided for in articles 15 to 22 The privileges and immunities provided for in articles 15 to 22 of the present Agreement are granted in the interests of the good administration of justice and not for the personal benefit of the individuals themselves . Such privileges and immunities may be waived in accordance with article 48 , paragraph 5 , of the Statute and the provisions of this article and there is a duty to do so in any particular case where they would impede the course of justice and can be waived without prejudice to the purpose for which they are accorded . The privileges and immunities may be waived : ( a ) In the case of a judge or the Prosecutor , by an absolute majority of the judges ; ( b ) In the case of the Registrar , by the Presidency ; ( c ) In the case of the Deputy Prosecutors and the staff of the Office of the Prosecutor , by the Prosecutor ; ( d ) In the case of the Deputy Registrar and the staff of the Registry , by the Registrar ; ( e ) In the case of personnel referred to in article 17 , by the head of the organ of the Court employing such personnel ; ( f ) In the case of counsel and persons assisting defence counsel , by the Presidency ; ( g ) In the case of witnesses and victims , by the Presidency ; ( h ) In the case of experts , by the head of the organ of the Court appointing the expert ; ( i ) In the case of other persons required to be present at the seat of the Court , by the Presidency . Article 26 Social security From the date on which the Court establishes a social security scheme , the persons referred to in articles 15 , 16 and 17 shall , with respect to services rendered for the Court , be exempt from all compulsory contributions to national social security schemes . Article 27 Notification The Registrar shall communicate periodically to all States Parties the names of the judges , the Prosecutor , the Deputy Prosecutors , the Registrar , the Deputy Registrar , the staff of the Office of the Prosecutor , the staff of the Registry and counsel to whom the provisions of the present Agreement apply . The Registrar shall also communicate to all States Parties information on any change in the status of these persons . Article 28 Laissez-passer The States Parties shall recognize and accept the United Nations laissez-passer or the travel document issued by the Court to the judges , the Prosecutor , the Deputy Prosecutors , the Registrar , the Deputy Registrar , the staff of the Office of the Prosecutor and the staff of the Registry as valid travel documents . Article 29 Visas Applications for visas or entry/exit permits , where required , from all persons who are holders of the United Nations laissez-passer or of the travel document issued by the Court , and also from persons referred to in articles 18 to 22 of the present Agreement who have a certificate issued by the Court confirming that they are travelling on the business of the Court , shall be dealt with by the States Parties as speedily as possible and granted free of charge . Article 30 Settlement of disputes with third parties The Court shall , without prejudice to the powers and responsibilities of the Assembly under the Statute , make provisions for appropriate modes of settlement of : ( a ) Disputes arising out of contracts and other disputes of a private law character to which the Court is a party ; ( b ) Disputes involving any person referred to in the present Agreement who , by reason of his or her official position or function in connection with the Court , enjoys immunity , if such immunity has not been waived . Article 31 Settlement of differences on the interpretation or application of the present Agreement All differences arising out of the interpretation or application of the present Agreement between two or more States Parties or between the Court and a State Party shall be settled by consultation , negotiation or other agreed mode of settlement . If the difference is not settled in accordance with paragraph 1 of this article within three months following a written request by one of the parties to the difference , it shall , at the request of either party , be referred to an arbitral tribunal according to the procedure set forth in paragraphs 3 to 6 of this article . The arbitral tribunal shall be composed of three members : one to be chosen by each party to the difference and the third , who shall be the chairman of the tribunal , to be chosen by the other two members . If either party has failed to make its appointment of a member of the tribunal within two months of the appointment of a member by the other party , that other party may invite the President of the International Court of Justice to make such appointment . Should the first two members fail to agree upon the appointment of the chairman of the tribunal within two months following their appointment , either party may invite the President of the International Court of Justice to choose the chairman . Unless the parties to the difference otherwise agree , the arbitral tribunal shall determine its own procedure and the expenses shall be borne by the parties as assessed by the tribunal . The arbitral tribunal , which shall decide by a majority of votes , shall reach a decision on the difference on the basis of the provisions of the present Agreement and the applicable rules of international law . The decision of the arbitral tribunal shall be final and binding on the parties to the difference . The decision of the arbitral tribunal shall be communicated to the parties to the difference , to the Registrar and to the Secretary-General . Article 32 Applicability of the present Agreement The present Agreement is without prejudice to relevant rules of international law , including international humanitarian law . Article 33 Signature , ratification , acceptance , approval or accession The present Agreement shall be open for signature by all States until … at the seat of the Court in The Hague and thereafter until … at United Nations Headquarters in New York . The present Agreement is subject to ratification , acceptance or approval by signatory States . Instruments of ratification , acceptance or approval shall be deposited with the Secretary-General . The present Agreement shall remain open for accession by all States . The instruments of accession shall be deposited with the Secretary-General . Article 34 Entry into force The present Agreement shall enter into force thirty days after the date of deposit with the Secretary-General of the tenth instrument of ratification , acceptance , approval or accession . For each State ratifying , accepting , approving or acceding to the present Agreement after the deposit of the tenth instrument of ratification , acceptance , approval or accession , the Agreement shall enter into force on the thirtieth day following the deposit with the Secretary-General of its instrument of ratification , acceptance , approval or accession . Article 35 Amendments Any State Party may , by written communication addressed to the Secretary-General , propose amendments to the present Agreement . The Secretary-General shall circulate such communication to all States Parties and the Bureau of the Assembly with a request that States Parties notify the Secretary-General whether they favour a Review Conference of States Parties to discuss the proposal . If , within three months from the date of circulation by the Secretary-General , a majority of States Parties notify the Secretary-General that they favour a Review Conference , the Secretary-General shall request the Bureau of the Assembly to convene such a Conference in connection with the next regular or special session of the Assembly . The adoption of an amendment on which consensus cannot be reached shall require a two-thirds majority of States Parties present and voting , provided that a majority of States Parties is present . The Secretary-General shall circulate to all States Parties and signatory States any amendment adopted at a Review Conference . An amendment shall enter into force for States Parties which have ratified or accepted the amendment sixty days after two thirds of the States which were Parties at the date of adoption of the amendment have deposited instruments of ratification or acceptance with the Secretary-General . For each State Party ratifying or accepting an amendment after the deposit of the required number of instruments of ratification or acceptance , the amendment shall enter into force on the sixtieth day following the deposit of its instrument of ratification or acceptance . A State which becomes a Party to the present Agreement after the entry into force of an amendment in accordance with paragraph 5 shall , failing an expression of different intention by that State : ( a ) Be considered a Party to the present Agreement as so amended ; and ( b ) Be considered a Party to the unamended Agreement in relation to any State Party not bound by the amendment . Article 36 Denunciation A State Party may , by written notification addressed to the Secretary-General , denounce the present Agreement . The denunciation shall take effect one year after the date of receipt of the notification , unless the notification specifies a later date . The denunciation shall not in any way affect the duty of any State Party to fulfil any obligation embodied in the present Agreement to which it would be subject under international law independently of the present Agreement . Article 37 Depositary The Secretary-General shall be the depositary of the present Agreement . Article 38 Authentic texts The original of the present Agreement , of which the Arabic , Chinese , English , French , Russian and Spanish texts are equally authentic , shall be deposited with the Secretary-General . IN WITNESS THEREOF , the undersigned , being duly authorized thereto , have signed the present Agreement . </text>
<text id="un/S_2000_475">
Letter dated 23 May 2000 from the Permanent Representative of Iraq to the United Nations addressed to the Secretary-General On instructions from my Government , I have the honour to transmit to you herewith a letter dated 22 May 2000 from Mr. Tariq Aziz , Deputy Prime Minister and Acting Minister for Foreign Affairs of Iraq . The Minister calls attention to the large-scale military action launched by the Turkish armed forces against northern Iraq on 8 May 2000 , and he urges the United Nations to meet its responsibility , as stipulated in the Charter , to prevent aggression and intimidation of the kind to which Iraq is being subjected . I should be grateful if you would have the present letter and its annex circulated as a document of the Security Council . ( Signed ) Saeed H. Hasan Ambassador Permanent Representative Annex to the letter dated 23 May 2000 from the Permanent Representative of Iraq to the United Nations addressed to the Secretary-General Further to the letter dated 26 April 1999 addressed to you by the Minister for Foreign Affairs of Iraq ( S/2000/353 , annex ) , I should like to call your attention to the fact that on 8 May 2000 some 5,000 members of the Turkish armed forces supported by fighter aircraft and helicopters carried out a fresh military action in the Kani Masi sector in northern Iraq . This act of aggression resulted in serious losses , in terms of lives and property , to Iraqi citizens belonging to our Kurdish people in the area , to say nothing of the damage done to public property . This act of aggression by Turkey is the latest in a series of recurring attacks by its forces against Iraq 's territory , and it coincides with the hostile military actions being perpetrated against the country on a daily basis by the United States of America and the United Kingdom . The ongoing series of hostile operations and the flagrant violations of Iraq 's territory and airspace that are being committed by the Turkish armed forces only confirm Iraq 's repeated warnings against the consequences of the duplicitous policy being pursued by Turkey vis-à-vis the anomalous situation in northern Iraq and against its participation in perpetuating that situation for the implementation of the United States and British scheme to use its territory as a base from which to maintain the so-called no-flight zones in northern and southern Iraq and prevent the restoration of legitimate authority there . In condemning the renewed Turkish aggression against Iraqi territory in the strongest terms , the Government of Iraq calls upon the Turkish Government to withdraw its invading forces from Iraqi territory . It reserves in full its right to determine a time and a place to respond to this bellicose act , and it affirms the right of the Republic of Iraq , in accordance with the Charter of the United Nations and international law , to ensure that Turkey bears full international responsibility for the consequences of its recurring aggression , its violations of Iraq 's sovereignty and its exposure of Iraq 's security and territorial integrity to the gravest risks . As I express the hope that the United Nations will fulfil its responsibilities as stipulated in the Charter and will halt the constant intimidation and aggression to which my country is being subjected , I ask you to do your utmost to urge the Turkish Government to comply with the provisions of the Charter of the United Nations and the norms of international law by withdrawing its armed forces from Iraq 's territory forthwith . ( Signed ) Tariq Aziz Deputy Prime Minister Acting Minister for Foreign Affairs </text>
<text id="un/S_2000_817">
Letter dated 21 August 2000 from the Permanent Representative of the Democratic Republic of the Congo to the United Nations addressed to the President of the Security Council On instructions from my Government , I have the honour to inform you that troops from the regular Ugandan army are preparing a large-scale offensive in Equateur province . Those troops are being reinforced by Ugandan units formerly based in Kisangani , which were obliged to withdraw in order to permit administrative control of that city by the United Nations Mission in the Democratic Republic of the Congo . Ugandan arms and munitions from Kisangani are being transferred to Buta , from where they are being sent through a number of aerial rotations on to the Gbadolite , Gemena and Libenge fronts . Accordingly , munitions for heavy artillery were recently disembarked in Gemena . Likewise , Ugandan tanks have been positioned on the front line in the Mawiya region , 500 kilometres south of Gbadolite , and Ugandan troops are again being deployed to support Libenge . It is feared that all of this activity in Equateur province foreshadows a non-stop Ugandan military offensive against positions of the Congolese armed forces . My Government regrets this fresh violation of resolution 1304 ( 2000 ) , adopted by the Security Council on 16 June 2000. My Government requests the Council to implement fully the aforementioned resolution , which under Chapter VII of the Charter of the United Nations , inter alia : Demanded that Ugandan and Rwandan forces as well as forces of the Congolese armed opposition and other armed groups immediately and completely withdraw from Kisangani ; Also demanded that Uganda and Rwanda , which have violated the sovereignty and territorial integrity of the Democratic Republic of the Congo , withdraw all their forces from the territory of the Democratic Republic of the Congo without further delay ; Further demanded that all other foreign military presence and activity , direct and indirect , in the territory of the Democratic Republic of the Congo be brought to an end ; In this context , demanded that all parties abstain from any offensive action during the process of disengagement and of withdrawal of foreign forces . I should be grateful if you would have this letter circulated as a Security Council document . ( Signed ) André Mwamba Kapanga Ambassador Permanent Representative </text>
<text id="un/S_2001_1038-A_56_521">
Letter dated 29 October 2001 from the Permanent Representative of Cuba to the United Nations addressed to the Secretary-General I have the honour to transmit herewith a summary prepared by the National Assembly of People 's Power of the Republic of Cuba concerning the principal terrorist actions against Cuba during the period 1990-2000 ( see annex ) . I should be grateful if you would arrange for this letter and its annex to be circulated as a document of the General Assembly , under the item “ Measures to eliminate international terrorism ” , and of the Security Council . Accept , Sir , the assurances of my highest consideration . ( Signed ) Bruno Rodríguez Parrilla Ambassador Permanent Representative Annex to the letter dated 29 October 2001 from the Permanent Representative of Cuba to the United Nations addressed to the Secretary-General Summary of principal terrorist actions against Cuba ( 1990-2000 ) Since 1959 , counter-revolutionary groups established and run by the United States Central Intelligence Agency ( CIA ) have committed a number of terrorist acts , which have cost our country valuable lives and vast resources . In the early 1990s , encouraged by the collapse of the socialist camp , these groups acting from United States territory and other bases of operations in Central America intensified their violent actions against the people of Cuba and their leaders . Details are given below of some of the most important of these , about which information has been made public : 17 July 1990. After lobbying by the Florida Republican Congresswomen Ileana Ros and Connie Mack , the President of the United States , George Bush , released the known terrorist Orlando Bosch , who master-minded the attack which destroyed a Cuban civilian aircraft in mid-flight in October 1976 , killing all 73 persons on board . 14 October 1990. Armed infiltration via Santa Cruz del Norte organized from Miami of two terrorists with orders to commit acts of violence . Their weapons and forged documents issued in Miami were confiscated . They were carrying flyers inviting people to join the so-called “ Cuban Liberation Army ” led by Higinio Diaz Anne , who gave them money and leaflets before their departure . 15 May 1991. José Basulto , former Bay of Pigs mercenary , known terrorist and CIA agent , founded the so-called “ Brothers to the Rescue ” and for that purpose asked the United States President , George Bush , for three United States Air Force 0-2 aircraft , the military version of the Cessna , which had been used during the war in El Salvador . Congresswoman Ileana Ros campaigned publicly and lobbied for the three aircraft to be provided . On 19 July 1992 , the first photos appeared in the press of the aircraft provided to this counter-revolutionary group with the acronym USAF clearly visible , in an article by the publisher of The Miami Herald , who had flown in them . 17 September 1991. Infiltration of two counter-revolutionaries from Miami for the purpose of sabotaging shops frequented by tourists in order to spread terror among foreign tourists . Their weapons and a radio transmitter were confiscated . 29 December 1991. Infiltration of three terrorists from the so-called Comandos L from Miami , whose weapons and other military equipment were confiscated . These terrorists had received training at a camp on 168th Street in Miami , where about 50 or 60 other men were also trained . 8 May 1992. Cuba denounced the terrorist activities against its territory at the United Nations . At its request , an official Security Council document was issued containing a decision of the United States Department of Justice dated 23 June 1989 declaring that Orlando Bosch was excludable from United States territory because of extensive evidence of his past and present terrorist activities , including the bombing of a Cuban airliner in 1976. This person is now freely walking the streets of Miami , following a presidential pardon granted to him by President George Bush . 4 July 1992. A group of terrorists from the United States tried to attack economic targets along the Havana coastline . When detected by Cuban patrols , they moved to waters off Varadero , where the vessel broke down and was rescued by the United States Coast Guard . Although their weapons , maps and video cassettes made during the voyage were confiscated , the terrorists were released by the FBI . July 1992. Failure of an operation to infiltrate a terrorist from the United States , who was going to sabotage an economic target in the province of Villa Clara . He had the necessary weapons and explosives to carry out this plan and was being assisted by “ Brothers to the Rescue ” , who reported to him the position of the United States Coast Guard in order to make it easier for him to reach Cuban territory . 9 September 1992. A terrorist of Cuban origin detained by the FBI for illegal possession of firearms and violation of the Neutrality Act was released without charges . 7 October 1992. Armed attack on the Melia Varadero Hotel from a vessel manned by four terrorists from Miami , who were detained and questioned by the FBI and released . 19 October 1992. Infiltration of three counter-revolutionaries from the United States , from whom weapons and considerable amounts of military equipment were confiscated . At the same time , three other terrorists were detained in the territory of the Bahamas , from whom weapons and explosives apparently destined for Cuba were also confiscated . These counter-revolutionaries had left Miami on 17 October . January 1993. The United States Coast Guard detained five terrorists on board a gunboat with heavy machine guns and other weapons as they were approaching the Cuban coastline . They were released . 7 January 1993. Tony Bryant , leader of the terrorist group “ Comandos L ” , announced at a Miami press conference plans to carry out more attacks against targets in Cuba , especially hotels . He said “ from now on , we are at war with Cuba ” and warned foreign tourists to “ stay away from Cuba ” . 2 April 1993. About 7 miles north of Matanzas , the Cypriot-owned tanker Mikonos was fired on from a vessel manned by terrorists of Cuban origin from the United States . 18 May 1993. Violation of Cuban airspace by “ Brothers to the Rescue ” aircraft N8447 . 21 May 1993. The United States Customs arrested nine terrorists on board a vessel preparing to go to Cuba and attack it . Weapons and explosives were confiscated from them . On 21 August , Justice Lawrence King dismissed the charges against them . May 1993. “ Brothers to the Rescue ” planned to blow up a high-voltage pylon near San Nicolás de Bari in La Habana province . October 1993. “ Brothers to the Rescue ” publicly encouraged attempts on the life of President Fidel Castro and violence against Cuba , and confirmed their willingness to accept the “ resulting risks ” . Andrés Nazario Sargén , head of the Alpha 66 terrorist group , announced in the United States that his organization had recently completed five operations against Cuba . 18 October 1993. A terrorist residing in the United States was arrested upon arrival in Cuba ; he was planning acts of violence inside Cuba . 7 November 1993. Humberto Pérez , spokesman for Alpha 66 in Miami , announced at a press conference that its war against Cuba would shortly be extended to any tourist visiting the island . He stated “ those who stay in Cuban hotels are considered as enemies ” . A Cuban national was recruited in the United States and visited Cuba for a terrorist organization to carry out sabotage activities in Cuba in the tourism and agriculture sectors . For this action , he was provided with some of the equipment needed and was offered the sum of $20,000 . 11 March 1994. A terrorist group from Miami fired shots at the Guitart Cayo Coco Hotel . 17 April 1994. Aircraft owned by “ Brothers to the Rescue ” flew over Havana at low altitude and dropped smoke bombs . In the next few months of 1994 , there were at least seven other violations by the same group . 4 September 1994. Infiltration of two terrorists from the United States via the Caibarién district , Villa Clara , with the aim of performing sabotage in that province . Weapons and large amounts of ammunition were confiscated from them . 6 October 1994. Another armed group in a vessel coming from Florida fired automatic weapons against the Guitart Cayo Coco Hotel . 15 October 1994. A group of armed terrorists from the United States landed on the causeway to “ Cayo Santa Maria ” near Caibarién , Villa Clara , and assassinated comrade Arcelio Rodríguez García . October 1994. “ Brothers to the Rescue ” used one of its aircraft to train members of a counter-revolutionary organization from Florida to perform sabotage against the Cienfuegos oil refinery . In November that year , they also planned to make an attempt on the life of President Fidel Castro and other leaders of the Revolution and to smuggle weapons and explosives into the national territory . November 1994. The terrorist Luis Posada Carriles and five of his accomplices smuggled weapons into Cartagena , Colombia , during the Fourth Ibero-American Summit of Heads of State and Government for an attempt on the life of President Fidel Castro , but the security forces kept them at a distance preventing the attempt . Posada Carriles later informed The New York Times : “ I was standing behind some journalists and saw Castro 's friend , García Márquez , but I could only see Castro from a distance ” . 11 November 1994. Four terrorists were arrested in Varadero , Matanzas , after infiltrating the country . Weapons and ammunition were confiscated from them . 2 March 1995. Infiltration via the coastal region of Puerto Padre , Las Tunas , of two terrorists from the United States , who were carrying 51 pounds of C-4 explosives and other equipment . 4 April 1995. A light C-337 plane violated Cuban airspace north of Havana between Santa Fe and Playa de Guanabo . 20 May 1995. Terrorists on a fast launch originating in the United States launched another attack on the Guitart Cayo Coco Hotel . 12 July 1995. Three terrorists were arrested in the United States as they were getting ready to infiltrate Cuba , taking advantage of a provocative action off the Cuban coast . The United States authorities seized their weapons and explosives , but released them . 13 July 1995. 11 vessels , 6 light planes and 2 helicopters originating in the United States organized by “ Brothers to the Rescue ” entered Cuban territorial waters and airspace . One of the light planes flew over the centre of Havana and dropped propaganda materials . 16 December 1995. Two terrorists , who were planning to infiltrate through Pinar del Rio to carry out subversive actions , were arrested in the United States . The United States authorities seized their weapons and explosives , but released them . 9 January 1996. Two light planes originating in Opa Locka , Florida , violated Cuban airspace . 12 January 1996. A Cuban émigré , resident in the United States , was arrested while preparing to transfer explosives from Havana to Pinar del Rio . 13 January 1996. Several “ Brothers to the Rescue ” planes violated the airspace over Havana . The terrorist , Basulto , later said : “ They say that I flew over Cuban territory ; everyone knows that and I have never denied it . ” 23 January 1996. United States authorities intercepted a vessel carrying five armed terrorists in Cayo Maratón ; they were heading for Cuba . The FBI released them that same day . 11 February 1996. Cuban border guards seized a vessel with three terrorists on board that had originated in the United States , after shots were fired at the coastline . 24 February 1996. “ Brothers to the Rescue ” launched another foray . Three light planes violated Cuban airspace very close to the centre of Havana ; two of them were shot down . In the 20 months preceding that incident there had been at least 25 other violations of Cuban airspace . 26 June 1996. At a meeting of the Council of the International Civil Aviation Organization ( ICAO ) , the chairman of its commission of inquiry acknowledged that at least two of the “ Brothers to the Rescue ” aircraft in Opa Locka airport still bore markings of the United States Air Force : “ the F is a little pale , it looks as if it is beginning to fade , but you can still see it ” . 21 August 1996. A United States citizen was arrested after smuggling military equipment into the country ; he had been planning to carry out terrorist acts on Cuban soil . 16 September 1996. Ciego de Avila was arrested ; he had infiltrated via Punta Alegre on a vessel loaded with weapons and a large amount of ammunition . 21 October 1996. A light SS-RR type plane with the registration N3093M belonging to the United States State Department sprayed a substance containing the pest Thrip Palmi Karny while flying over the “ Giron ” international corridor some 25 to 30 kilometres south of Varadero . November 1996. Channel 23 in Miami , broadcast a live television interview with Luis Posada Carriles and Orlando Bosch . They said that they intended to continue their terrorist activities against Cuba . 12 April 1997. A bomb exploded in the Melia Cohiba Hotel , in Havana . 30 April 1997. An explosive device was found in the Melia Cohiba Hotel . 12 July 1997. Bombs exploded in the Capri and National hotels . 4 August 1997. Another bomb exploded in the Melia Cohiba Hotel . 11 August 1997. The Miami press published a statement by the Cuban American National Foundation ( CANF ) giving unconditional support to the terrorist bomb attacks on civilian and tourist targets in Cuba . The president of that organization stated : “ We do not consider these to be terrorist acts ” and added that any action against Cuba was legitimate . 22 August 1997. A bomb exploded in the Sol Palmeras Hotel in Varadero . 4 September 1997. Bombs exploded in the Tritón , Chateau Miramar and Copacabana hotels . The explosion in the latter killed Fabio Di Celmo , a young Italian tourist . That same day , another bomb went off in the El Bodeguita del Medio restaurant . 10 September 1997. The Cuban Government announced the arrest of Raúl Cruz León , a citizen of El Salvador and the person responsible for planting six of the bombs that went off in various hotels in the capital , including the one that killed the Italian tourist , Fabio Di Celmo . Cruz León admitted that he had been paid US$ 4,500 for each bomb . 19 October 1997. An explosive device was found on a tourist minibus . 27 October 1997. The United States Coast Guard stopped a vessel west of Puerto Rico and seized two 50-calibre precision rifles and their tripods , night vision equipment , military uniforms and communications equipment . These sophisticated weapons , strictly military in nature are designed for long-range attacks on vehicles and aircraft . One of the occupants of the launch stated that he planned to assassinate Fidel Castro when the President arrived at Isla Margarita , Venezuela , to attend the Ibero-American Summit on 7 November 1997. The United States authorities found that the launch was registered to a Florida company . The chief executive officer , director , secretary and treasurer of that company was José Antonio Llama , a CANF official and one of the mercenaries who took part in the Bay of Pigs invasion . One of the rifles was registered in the name of José Francisco “ Pepe ” Hernández , president of CANF . The other had been bought in 1994 by a member of Brigade 2506. The four crew members of the launch were identified as : a known CIA agent ; the captain of a CIA boat used by teams infiltrating into Cuba from Florida ; the chairman of a New Jersey counter-revolutionary group and a member of Alpha 66. Despite their own confessions and clear proof of illegal possession of weapons , false testimony and weapons smuggling , these terrorists were acquitted by a Federal Court in December 1999 , after a rigged trial . 30 October 1997. An explosive device was discovered in a service kiosk outside terminal 2 at Havana 's José Martí airport . Two citizens of Salvadoran origin and three Guatemalans with ties to the terrorist Luis Posada Carriles were later arrested and charged with criminal activities against tourist facilities . 16 November 1997. Following an investigation that lasted two months , a Florida newspaper reported that the bomb attacks in Havana had been directed and financed by anti-Cuban groups based in Miami and that Luis Posada Carriles , a fugitive from justice for having blown up the Cuban aircraft in 1976 , was the man pulling the strings . May 1998. Infiltration by two terrorists who came from the United States and entered Cuba through Santa Lucía , Pinar del Río , with numerous weapons and munitions . 16 June 1998. Following various exchanges in which the Government of Cuba gave the Federal Bureau of Investigation ( FBI ) and other agencies of the United States Government information on terrorist activities in the United States against Cuba , an official delegation that included two senior FBI officials came to Havana and was provided with specific information , including films , tapes and other material evidence on the activities of 40 terrorists operating from United States territory . 12 July 1998. The New York Times of that date reported statements by the Cuban-American Antonio Jorge Álvarez that the FBI had not investigated his reports of a planned attack against President Fidel Castro to be carried out at the Ibero-American Summit in Venezuela . Álvarez said that he had provided information the preceding year to the effect that Posada Carriles and a group that worked in his factory in Guatemala were planning such an attack and the bombings in Havana : “ I risked my life and my business , and they did nothing ” . 12 and 13 July 1998. In an interview with The New York Times , Luis Posada Carriles admitted that he had organized the bombing campaign against tourist sites in Cuba , that the leaders of the Cuban American National Foundation had financed his operations and that Jorge Mas Canosa , the Foundation 's President , had personally overseen the flow of money and logistical support : “ Jorge controlled everything . Whenever I needed money , he said to give me $5,000 , give me $10,000 , give me $15,000 , and they sent it to me ” . Posada also admitted that he had paid Raúl Cruz León to plant the bombs in Havana hotels . Referring to the Italian tourist killed by one of them , he told the Times : “ That Italian was sitting in the wrong place at the wrong time ” . To prepare these articles , the Times used Central Intelligence Agency ( CIA ) and FBI files , testimony from more than 100 people and more than 13 hours of taped interviews with Posada , and even documents which he himself had signed . 23 July 1998. The Miami press published an article entitled “ Anti-Castro plots seldom lead to jail in U. S. ” . The article cited a number of cases , such as the 1990 acquittal of six terrorists who had shipped a cannon and other weapons to Nicaragua to attack the Cuban President , and the 1994 cases of Rodolfo Frómeta and Fausto Marimón , who were charged with planning to use Stinger anti-aircraft missiles and other weapons for terrorist activities . The article also included statements by the well-known terrorist Tony Bryant to the effect that , in 1989 , the FBI had stopped him with a shipment of weapons and explosives in a boat , but had let him go . He added that two of his 14 missions against Cuba had been intercepted but that nothing had ever happened to him . 2 August 1998. Posada Carriles , in an interview for the programme Polos Opuestos on the television channel CBS Telenoticias , said that he intended to perpetrate further attacks against Cuban installations within or outside the island . August 1998. Following the announcement that President Fidel Castro would attend the Caribbean Forum summit meeting in the Dominican Republic , terrorist elements of Cuban origin planned to carry out an attack between 20 and 25 August . To that end , the terrorist Posada Carriles held a meeting at the Holiday Inn hotel in Guatemala City one month beforehand to plan how to bring weapons and explosives to Santo Domingo . 12 September 1998. Authorities in Miami arrested the five Cuban patriots who had done their duty to defend Cubans and Americans against the terrorist acts organized , prepared and launched against Cuba , with total impunity , from United States territory . 17 November 2000. Panamanian authorities arrested a group of terrorists headed by Posada Carriles , who had entered Panama with false documents to carry out an attack against President Fidel Castro during the tenth Ibero-American Summit of Heads of State and Government . Weapons , explosives and sketches of the Cuban President 's route and scheduled public appearances were seized . The Cuban American National Foundation financed the team of lawyers hired to defend the terrorists . 26 April 2001. Three terrorists belonging to the F-45 and Alpha 66 commando groups tried to enter Cuba from the north of Villa Clara province and were captured after they shot at Cuban border guards who detected them . Authorities seized four AKM rifles , one M-3 gun with a silencer , three handguns , a large supply of ammunition , night-vision weapon sights and means of communication , which were to be used to carry out acts of sabotage and terrorism in Cuba . In addition to the above-mentioned acts , the Cuban authorities have learned of 16 planned attacks against the President of Cuba , eight planned attacks against other leaders of the Revolution and 140 other terrorist plans between 1990 and 2001 , which were thwarted , discouraged or blocked by the work of Cuba 's security and intelligence agencies . </text>
<text id="un/S_2001_1039">
Letter dated 26 October 2001 from the Permanent Representative of Cuba to the United Nations addressed to the Secretary-General I have the honour to transmit herewith a background paper on an important case of terrorist activity against Cuba ( see annex ) . The authorities of my country have been following the developments in this case very closely . I should be grateful if you would have this letter and its annex circulated as a document of the Security Council . ( Signed ) Bruno Rodríguez Parrilla Ambassador Permanent Representative Annex to the letter dated 26 October 2001 from the Permanent Representative of Cuba to the United Nations addressed to the Secretary-General As is well known , on 17 November 2000 , a planned attack against President Fidel Castro was thwarted in Panama as a result of information received from Cuba . The plan was organized by the Miami-based Cuban American National Foundation through the notorious international terrorist Posada Carriles , who is currently in custody in Panama . Posada Carriles was responsible for the in-flight explosion , in 1976 , of a Cubana de Aviación passenger aircraft in Barbados , which resulted in the death of 73 people . He is also responsible for terrorist acts against 28 countries . Also being held in Panama are Pedro Remón Rodríguez , a Miami resident with a long history of terrorism , who murdered an official of the Cuban Mission to the United Nations ; Guillermo Novo Sampoll , a United States resident and one of the leaders of Omega 7 , who fired a bazooka at the United Nations in 1964 and was involved in the assassination of Chilean Minister for Foreign Affairs Orlando Letelier in 1976 ; and Miami resident Gaspar Jiménez Escobedo , a chief liaison with the Cuban American National Foundation who participated in the murder of a Cuban official in Mexico , and who was arrested in 1977 for violating the United States Neutrality Act through his terrorist acts against Cuba . He attempted to assassinate the Cuban Ambassador to the United Nations in 1980 , and he has been involved in many plans to attack the Cuban President . Authorities seized 20 kilograms of C-4 and 50 packages of Semtex , maps of the auditorium at the University of Panama and other evidence that the suspects were preparing to blow up the auditorium during an appearance by President Fidel Castro before thousands of students . They might also have attacked other events in connection with the Ibero-American Summit , seriously endangering the lives of the other Presidents . Posada Carriles was trained by the CIA and worked as a CIA officer to unify the most aggressive anti-Cuban mercenary groups . After the explosion of the aircraft in Barbados , he was allowed to escape from the Venezuelan prison to which he had been sentenced and reappeared , collecting salaries from the CIA and the State Department , as one of the leaders of the “ Contragate ” scheme under the direction of Oliver North . He later worked for two Central American Presidents , concocted dozens of terrorist acts against Cuba and attempted to assassinate President Fidel Castro at the Ibero-American Summit in Cartagena and during the President 's visits to the Dominican Republic and Venezuela . Posada Carriles went to the United States several times , and freely visited Miami in 1996. In 1997 , he organized the hotel bombing campaign in Havana and , from El Salvador , gave interviews to The New York Times and the Miami-based television channel Telenoticias . In June 1998 , The New York Times published information amply demonstrating that the Cuban American National Foundation had financed the hotel bombing campaign in Havana through Cuban-American New Jersey resident Chávez Abarca , using Posada Carriles and Central American mercenaries , some of whom were arrested and penalized in Cuba . The Cuban authorities initiated a request for the extradition of Posada Carriles and the other terrorists on 18 November , made a formal request on 29 November and , on 15 January , complied with the request of the Panamanian Ministry of Foreign Affairs to provide further information for the extradition case file within the prescribed time limit . Our country gave full guarantees that the terrorists would receive due process and that they would not be sentenced to death or to more than 20 years ' imprisonment , and proposed that they should be tried by a Latin American international tribunal in Havana . Cuba 's extradition request meets all the relevant requirements and is in full compliance with the Bustamante Code and the Panamanian Constitution and Penal Code . The United States Government has exerted great pressure on Panama to prevent the terrorist group 's extradition . This is not surprising , because successive United States Administrations have organized , financed and carried out many terrorist acts against Cuba over the past few decades , using mercenaries such as these ; because the United States policy of aggression , subversion and economic warfare against Cuba directly encourages terrorism against our country ; and because the United States knowingly allows the Cuban American National Foundation and other terrorist organizations that continually finance , organize , provide means for and carry out terrorist acts against Cuba to exist and operate openly and with impunity in United States territory . On 14 May 2001 , the Government of Panama formally denied Cuba 's extradition request . The Cuban authorities stated their position in this regard in an official note delivered to the Ministry of Foreign Affairs of Panama on 30 May by the Ministry of Foreign Affairs of the Republic of Cuba . Cuba does not seek vengeance , but only a fair trial and severe punishment for a group of terrorists who , for more than three decades , have committed countless crimes against our people . </text>
<text id="un/S_2001_1317">
Letter dated 27 December 2001 from the Chairman of the Security Council Committee established pursuant to resolution 1373 ( 2001 ) concerning counter-terrorism addressed to the President of the Security Council The Counter-Terrorism Committee has received the attached report from the Sudan , submitted pursuant to paragraph 6 of resolution 1373 ( 2001 ) ( see annex ) . I should be grateful if you would arrange for this letter and its annex to be circulated as a document of the Security Council . ( Signed ) Jeremy Greenstock Chairman Counter-Terrorism Committee Annex [ Original : English ] Letter dated 27 December 2001 from the Permanent Representative of the Sudan to the United Nations addressed to the Chairman of the Security Council Committee established pursuant to resolution 1373 ( 2001 ) concerning counter-terrorism On instructions from my Government , I have the honour of enclosing a report from the Sudan to the Counter-Terrorism Committee pursuant to paragraph 6 of Security Council resolution 1373 ( 2001 ) . My Government stands ready to provide the Committee with further reports or information , as necessary or if requested to do so by the Committee . I should be grateful if you would have the text of the present letter and the enclosed report circulated as a document of the Security Council . ( Signed ) Elfatih Erwa Permanent Representative Enclosure [ Original : Arabic ] Report of the Government of the Sudan submitted pursuant to paragraph 6 of Security Council resolution 1373 ( 2001 ) The Government of the Sudan , in its absolute belief that terrorism is one of the gravest crimes threatening the security of communities and societies , seeking to instil fear in peaceful persons , commit aggression against them and destroy property , and that it also threatens international relations and endangers the security of States ; itself having been the victim of terrorism directed against it during the past few years ; and convinced of the need to enlist every lawful means in accordance with the Charter of the United Nations , international conventions and the resolutions and declarations of the United Nations General Assembly relating to terrorist acts that pose a threat to international peace and security and to strengthen international cooperation for that purpose , promptly and unequivocally condemned the terrorist acts committed in New York , Washington , D. C. , and Pennsylvania on 11 September 2001 , expressing its condolences to the Government and people of the United States of America and the families of the victims of every nationality . This included the following : A message from the President of the Republic addressed to the President of the United States of America on 11 September , expressing the Sudan 's condemnation of the heinous crimes committed against innocent civilians in the United States of America as well as the destruction of property , transmitting the condolences of the Government and people of the Sudan to the Government and people of the United States and the families of the victims and affirming the desire to cooperate with the United States and the international community in combating every form of terrorism . The President of the Republic expressed the same sentiments in his statements made at Khartoum Airport on returning from a visit to Saudi Arabia on 12 September 2001 ; The statement of the Minister for Foreign Affairs on 11 September , in which he described the terrorist attacks on the World Trade Center and the American Department of Defense ( the Pentagon ) as criminal terrorist acts , expressing his heartfelt condolences and reaffirming the readiness of the Government of the Sudan to cooperate with the Government of the United States and the international community in combating all terrorist acts and bringing the perpetrators to justice ; On 12 September the Minister for Foreign Affairs also sent a message to American Secretary of State Colin Powell in which he condemned the terrorist acts and offered his condolences , reaffirming the willingness of the Sudan to cooperate fully with the United States ; On 12 September , the Ministry of Foreign Affairs issued a statement along the same lines , emphasizing the Sudan 's rejection of all forms of violence and expressing condolences to the families of the victims and the hope that the events would not lead to an escalation of violence ; Immediately after the events , the Government of the Sudan also stepped up security procedures in the country for the protection of the American diplomatic mission and American nationals in the country ; On 17 September 2001 , the Minister for Foreign Affairs presented condolences to the American Government on behalf of the Government of the Sudan and signed the register of condolences at the American embassy in Khartoum , stating to journalists that a year earlier the Sudan had received an American security team to engage in bilateral cooperation in the area of the fight against international terrorism and to make sure that the Sudan had no connection with international terrorism . Implementation of Security Council resolution 1373 ( 2001 ) Measures taken to prevent and suppress the financing of terrorist acts In the area of legislation , the Sudan was one of the first countries to sign the 1999 International Convention for the Suppression of the Financing of Terrorism , which it did on 29 February 2000. The formalities are currently being completed for its ratification by the legislative authorities , whereupon it will become enforceable domestic law . Regarding the successive resolutions of the United Nations General Assembly on measures aimed at the elimination of international terrorism and the declarations issued by that body in 1994 and 1996 , especially in respect of the prevention and suppression of the financing of terrorism , the Sudan actively participated in the drafting of the related paragraphs . In particular , the Sudan proposed the addition of the following paragraph to General Assembly resolution 51/210 , of 1996 : “ [ Reiterates its ] call upon States to refrain from financing , encouraging , providing training for or otherwise supporting terrorist activities ” . Since that time , this paragraph has become a constant feature of General Assembly resolutions . The Sudan has been in the forefront in terms of awareness of the dangers of the financing of terrorist acts and the threat posed by those acts to the stability , security and peace of States . Its efforts in that area have been consistent and constant : when , for example , the Government of India proposed a draft comprehensive convention on international terrorism , the Sudan welcomed and supported that initiative but insisted on the inclusion of an explicit article criminalizing the financing of terrorist acts by individuals , groups and States , as can be seen from the minutes of the working group involved in the drafting of the draft convention . The Sudan has also signed the international Convention against Transnational Organized Crime , which contains provisions on the drying-up of the resources of such crime and the organizations responsible for it with respect to money-laundering and other practices , and the legislative formalities for its ratification are currently being completed . The Sudan has acceded to the Arab Convention for the Suppression of Terrorism , article 3 of which provides for an undertaking by States not to finance terrorist acts and which is considered an enforceable internal law of the State . The Sudan has promulgated the Terrorism ( Combating ) Act , 2000 , chapter IV of which deals with general provisions on the seizure of property and equipment used in terrorist offences , including the confiscation of real estate and other property , equipment , arms , means of conveyance or other things proved to have been used in committing or attempting to commit , or in facilitating or assisting in the commission of , terrorist offences or in concealing those who plot , perpetrate , instigate or encourage such offences , etc. , in addition to any other penalty imposed by the competent court . It also deals with the seizure of terrorists ' assets and of any property , real estate , equipment or funds owned by them and their deprivation of any benefit or utilization of any other resources , funds or property , whether in the Sudan or abroad ( Act annexed ) . The 1991 Banking Regulation Act granted the power to examine clients ' accounts and transactions to the central bank and its governor and also , for judicial purposes , to the Minister of Justice or the judges . The law also granted the central bank the authority to inspect , supervise and monitor banks . The central bank has an officer trained in following sensitive banking operations and in ascertaining their domestic and foreign sources . It is also possible to determine their bank sources , if they involve bank financing or deposits , and the sources of such deposits . The Government of the Sudan therefore deems the existing legislation on banking activity adequate to enable the authorities to trace and prevent the financing of terrorist acts and to dry up any funds , provided that they are in banks operating in the Sudan . The problem , however , also involves dealing with practical dangers : in the context of the rapid transformation taking place in the country towards a free market economy and the encouragement of a flow of foreign investments into the country , Sudanese banks , like other banks throughout the world , are confronted with the rapid , easy transfer of deposits and assets in the Sudan via the banking map , both into and out of the country . This has gone hand in hand with an increase in financial flows and is expected to involve greater risks of money-laundering operations that face emerging markets in a number of developing countries . A further problem relates to the difficulty of tracing the primary sources of deposits and withdrawals if they are not bank-related . Such a situation requires the enhancement of technical capacities , the availability of up-to-date equipment , close control of communications and the flow of information to the central bank and other competent authorities so as to enable them to perform their tasks efficiently . This naturally necessitates international technical cooperation and the provision of the necessary support to achieve it and “ to intensifythe exchange of information on facts related to terrorism ” . The latter passage , whose inclusion was proposed by the Sudan in coordination with other States , is taken from General Assembly resolutions adopted since 1996 on measures aimed at eliminating international terrorism . Steps have also been taken since 1996 to dry up the sources of financing of suspected groups and individuals through the closing and liquidation of companies and related commercial activities , such as the Hijra Construction and Wadi Al-`Aqiq companies , partly or wholly owned by Osama Bin Laden , and the Injaz company , suspected of being controlled by an Egyptian Islamic group . Offences and penalties relating to terrorist activities Sudanese law criminalizes terrorist acts . Indeed , chapter II of the Terrorism ( Combating ) Act , 2000 , contains provisions relating to terrorist offences , the direction of terrorism organizations and the criminalization of acts such as the hijacking of aircraft and means of sea , river or land conveyance ; the detention of or causing of injury to persons ; and environmental offences . Under this Act , the following are considered terrorist offences subject to the application of the Act even if perpetrated for political motives : murder ; theft accompanied by coercion against individuals , authorities or means of conveyance or communication ; acts of sabotage against public property or property earmarked for public use , even if owned in the Sudan by another State ; the crimes of manufacture , smuggling or possession of arms , munitions , explosives or other materials prepared for the commission of terrorist offences . The Act provides a number of penalties for terrorist offences , including the seizure and confiscation of money , property and equipment used in terrorist offences ; termination of residence and deportation , in the case of aliens ; punishments including imprisonment for a term of as much as 20 years or life , depending on the magnitude of the offence committed , a fine , or both ; and in some cases , execution ( see the annexed Terrorism ( Combating ) Act ) . The National Security Act of 1999 , as amended in 2001 , provides the death penalty or life imprisonment for any member who intentionally commits or refrains from an act for the purpose of imperilling the internal or exterior security of the country ( article 44 ) , and a penalty of imprisonment for a term no greater than 10 years or a fine or both for unlawfully having at one 's disposal , or permitting another to have at his disposal , any weapons , munitions or matériel . The Penal Code of 1991 criminalizes terrorism and terrorist organizations , inasmuch as article 65 of the Code provides that anyone who establishes or directs an organization that plans to commit any crime or anyone who wilfully participates in or assists such an organization , whether operative in the Sudan or outside , shall be punished by imprisonment . If the crime planned by the organization is that of waging war or looting or is an offence punishable by death , or terrorism involving a threat to the public or the public authority , the penalty shall be imprisonment for a term not exceeding 10 years and may also be punished by a fine . In addition , article 144 of the Code provides as follows : ( i ) The perpetrator of the crime of terrorism is one who : Addresses to any person a threat to harm him or to harm any other person important to him for the purpose of intimidating him or inducing him to do what he need not do according to law or not to do what he is permitted to do by law ; b. Makes a movement or exhibits readiness to act , intending thereby to use unlawful force or knowing that he is thus likely to make any person present believe that he is about to use such force against him ; ( ii ) The crime of terrorism shall be punishable by imprisonment for a term not exceeding six months or a fine or both . C. Legislation and procedures in force for freezing accounts and assets at banks The 1991 Banking Regulation Act , as amended , grants the central bank , the Minister of Justice ( Attorney General ) and the judiciary the authority to examine accounts and article 10 grants the Bank of Sudan ( the central bank ) the right of inspection , of issuing orders for the purposes of inspection and of control . The Act also grants the Bank the power to freeze moneys and financial assets deposited with banks and to dry up their sources , provided that the matter relates to Sudanese banks . The Terrorism ( Combating ) Act , moreover , requires the competent court to confiscate all real estate and other property , equipment , arms , means of conveyance or other things proved to have been used in committing or attempting to commit , or in facilitating or assisting in the commission of , terrorist offences or in harbouring those who plot , perpetrate , instigate or encourage such offences or have been charged with so doing , whether by word , deed , publication , failure to act or consent to the perpetration thereof , with the knowledge of the owner of the property , whether he made use thereof personally or through any of his subordinates or persons working with him . The court also has the right to order the seizure of any real or other property , assets , equipment or funds owned by a suspect whose involvement in a terrorist act has been substantiated and to deprive him of any benefit or the utilization of any other resources , funds or property , whether in the Sudan or abroad ( article 18 of the Act ) ; As examples of steps taken , the central bank undertook an investigation of charges that Osama Bin Laden was a shareholder in Al-Shamal Islamic Bank , though nothing was found to substantiate those accusations ( see annex V ) . Moreover , the accounts of all companies and commercial firms suspected of involvement in one way or another in terrorist organizations and those of suspected individuals were frozen , and a review was conducted of all the registers of shareholders in Sudanese banks so as to ensure that there were no shares or financial or commercial activity of any suspected individuals or organizations . Measures taken to prevent terrorist activities The Government has taken a number of measures for the prevention of terrorist activities in the country , such as the adoption , in August 1995 , of a decision requiring any alien coming to the country to obtain an entry visa in advance , so as to make it possible to ascertain the identity of visitors and protect the country against the entry of any terrorist elements . The decision provided exceptions for certain nationalities under bilateral agreements . However , the Government followed that decision with a subsequent one in 1998 , requiring nationals of all countries to obtain entry visas to the Sudan , including nationals of those countries for which obtaining entry visas had not previously been required . In addition , amendments to the Passport and Migration Act of 1993 included the following : The Minister of the Interior has the right to deport any foreign person from the Sudan , the Minister 's decision being final and not subject to appeal before the courts of law ; b. Under article 32 of the same law , the legislator provides penalties for illegal entry into the Sudan and for facilitating such entry or providing accommodation or shelter to persons who have thus entered ; c. Under article 33 , authority is granted to the police to arrest persons who enter the Sudan without permission and to keep them under detention until they have been brought to trial . In the wake of the events of 11 September 2001 , the Ministry of the Interior issued standing order No. 33 of 2001 calling for new controls and procedures for the entry of aliens and immigration security procedures at land and sea entry points , including airports and seaports . These procedures were aimed primarily at barring the entry into the country of any person suspected of having any connection with terrorist acts and preventing such persons from obtaining entry visas . The decision was also aimed at control of the entry or exit of any persons reportedly having a connection with the events of 11 September 2001 , with a view to their apprehension in the event that they are found . Controls were also tightened in connection with aliens staying in hotels , inns and private homes , the registration of whom is required by law ; moreover , employment agents for domestic help are required to report any foreign residents to the Aliens Section of the Ministry of the Interior . Security measures have also been taken to prevent foreign diplomats and their families and foreign interests and investments from being exposed to any hostile acts . The Government has earnestly complied with requests directed to it by foreign Governments , including the Government of the United States of America , to provide them with any information it might have on suspected persons . The competent departments of the central bank have confirmed that the Sudanese banking system does not maintain any accounts or balances belonging to any entities placed on the terrorist lists , and this also applies to commercial banks , based on their responses to the central bank . The Bank of Sudan ( central bank ) declares its full readiness to collaborate and cooperate in the investigation of any account or balance , provided that it is furnished with the name of the holder , by virtue of the authority to undertake such tasks granted to the Bank by law . The measures taken by the authorities include , in particular , the following : A review of all records of aliens present in the country to ensure that they do not belong to any terrorist organizations or take part in any questionable activities , the examination being repeated periodically ; The creation of specialized counter-terrorist units and their preparation and training ; Enhancement and retraining of monitoring and control means and instruments at the country 's ports and other points of entry . Legislation in force in the country to prevent terrorist activities Enlistment for the purpose of carrying out terrorist acts : Terrorism ( Combating ) Act , 2000 ( articles 6-12 , 19 ) ; The Penal Code of 1991 ( article 65 ) . Supplying of arms to terrorists : Terrorism ( Combating ) Act , 2000 ; The National Security Act of 1999 , as amended in 2001 ; The 1986 Arms , Ammunition and Explosives Act ; The 1986 Customs Act ; The 1994 Narcotic Drugs and Psychotropic Substances Act . Measures against the above : ( i ) The State has undertaken and is carrying out campaigns to collect private weapons in the Western Sudan and has concluded agreements and memoranda of understanding with a number of neighbouring States in line with its objective of controlling exit/entry points with a view to preventing arms from being surreptitiously brought into the country via illegal channels . It has also issued a regulation on the possession of arms which permits such possession solely by permit and abolishes the right of ownership of more than one firearm per person . It should be pointed out that the Arms , Ammunition and Explosives Act prohibits the entry of arms , ammunition and explosives into the country without permission ; moreover , the entry into the Sudan of some weapons , such as missiles , portable detonators , etc. , is prohibited , and the Minister of the Interior has the power to add items . The act also regulates the registration of arms and prohibits trafficking in them or their manufacture outside of the State facilities . It defines how they are to be exported and imported and how arms in transit are to be dealt with , in addition to regulating explosives , their storage and their use and determining the penalties for violations of the Act ; ( ii ) Terrorist events , which have been on the increase throughout the world and which reached their acme in the United States of America on 11 September 2001 , have forced the Sudan to place on its list of priorities the question of bilateral cooperation with neighbouring countries with a view to the elimination of terrorism and the adoption of safety procedures for preventing the perpetration or planning of such events . An example of this is the counter-terrorist cooperation agreement signed between the Sudanese state of Kassala and the Gash-Barka zone of Eritrea in November 2001 ; ( iii ) In September 2001 the Intergovernmental Authority on Development ( IGAD ) , which includes Djibouti , Eritrea , Ethiopia , Kenya , Somalia , the Sudan and Uganda , met in the Ethiopian capital Addis Ababa and drafted a protocol on the establishment of a conflict early warning and response mechanism with a view to conflict prevention and resolution . The aim of the protocol is to establish , and to eliminate all kinds of threats to , peace , security and stability in the States members of the group . It is expected that the protocol will be adopted by the IGAD summit planned for January 2002. Steps taken to prevent terrorist acts and early warning mechanisms to allow exchange of relevant information with other States The State is committed to exchanging information with other States within the framework of the international and regional instruments to which it is a party , treaties on judicial assistance , treaties on the extradition of criminals and United Nations resolutions , in addition to numerous conventions and memoranda of understanding concluded by the Sudan with neighbouring States for that purpose . Mention might be made , for example , of the cooperation in the field of security that has taken place over the past two years with the United States of America as well as with other States ; The customs authorities are stepping up the control and inspection of goods entering the Sudan , having packages and mail checked by the customs laboratory and performing chemical and biological testing whenever doubt exists . The passport and immigration authorities and the Ministry of the Interior are now also taking a number of measures , including the designing of new passports and identity documents that are difficult to falsify ; the preparation of a civil registry of all persons resident in the country , including both nationals and aliens ; the promulgation of a related law ; the bolstering of cooperation between the Interpol office in Khartoum and its other offices throughout the world ; and the strengthening of controls relating to aliens staying in inns and hotels . Within the Ministry of the Interior there is a committee on aliens , made up of representatives of the various organs of the State , which looks into the status of aliens and questions relating to their residence and visas . C. Procedures and legislation to prevent the Sudan from being a safe haven for terrorists National legislation and international and regional instruments ratified or acceded to by the Sudan prevent the country from being a safe haven for terrorists . Specific mention of this question is found in the following national acts : The Terrorism ( Combating ) Act , which provides for its compulsory application to anyone who undertakes , instigates , attempts or facilitatesthe commission of a terrorist offence and provides penalties therefor , including the seizure of property and the death penalty . It also permits the expulsion and deportation of persons who commit such offences and their extradition to injured States . In addition , the Customs Act , the Sudanese Regulation of Asylum Act ( Asylum ( Control ) Act ) , the Arms , Ammunition and Explosives Act and the treaties on the extradition of criminals signed with certain States all regulate the movement of aliens within the country and the punishment of aliens who break the law , particularly with respect to terrorist offences . The harsh penalties imposed for terrorist offences constitute a suitable deterrent . The Passport and Migration Act of 1993 grants the Minister of the Interior the power to expel from the country any undesirable alien ; The measures taken have included the reinstatement of the requirement to obtain visas in order to enter the country , residence procedures , checking at exit/entry points and permission to acquire arms and ammunition only in accordance with the law and subject to strict controls ; The Sudan has in fact cooperated with a number of injured States in the extradition of persons suspected of having committed terrorist offences . It complied with a request by the Government of Ethiopia for the return of Ethiopians suspected of having committed the terrorist offence of hijacking an Ethiopian aircraft and forcing it to fly to Khartoum in 1995 , and in 1997 it turned over to the French Government the person known as “ Carlos ” , who was suspected of having committed terrorist offences , despite the absence of any convention on the mutual extradition of criminals between the two States . In 2001 the Sudan arrested Ethiopian terrorists who had hijacked an Ethiopian aircraft and diverted it to the Sudan : they were indicted and ordered to stand trial in the Sudan . The Sudan also tried the person named Al-Khalifi , an alien who committed a terrorist offence that involved the killing of a number persons praying in a Khartoum mosque . He was condemned to death and the sentence was executed ; International conventions on the elimination of international terrorism , all of which have been acceded to or ratified by the Sudan , contain exceptions for offences having a political character . However , the bilateral conventions on the extradition of criminals concluded by the Sudan with other States , such as the 1964 Treaty on the Extradition of Criminals concluded with Ethiopia , make those offences non-political , which means that the exception regarding them is abrogated . Consequently , the bilateral and regional legal instruments to which the Sudan is a party have strengthened the Sudan 's international commitment under the international conventions on the extradition , prosecution , and trial of terrorists . Legislation or procedures to prevent terrorists from acting from within the Sudan against other States The Sudan is a pioneer State in the fight against terrorism through legislation , having acceded to 11 of the 12 international conventions against international terrorism ( see annexed list ) . It is now in the process of completing the formalities for accession to the International Convention for the Suppression of the Financing of Terrorism , which has been signed , and for accession to other regional instruments ( the African Convention on the Prevention and Combating of Terrorism and the Convention of the Organization of the Islamic Conference on Combating International Terrorism ) . Under the Sudanese judicial system , the conventions acceded to have become enforceable as part of the country 's domestic law . Moreover , national acts , such as the Terrorism ( Combating ) Act , the National Security Act , the Penal Code , the Arms , Ammunition and Explosives Act , the Customs Act , the Regulation of Asylum Act , the Extradition Act and bilateral agreements on the extradition of criminals , prohibit and provide penalties for the organization , financing or commission of terrorist acts or participation in such acts in any manner whatsoever . The Terrorism ( Combating ) Act , moreover , specifically and categorically prohibits engaging in terrorism within Sudanese territory or directing , instigating , attempting , participating in or facilitating , by word , deed or publication , in any manner whatsoever , the direction of an organized network used for committing any terrorist offence or offences in such a way that its operation poses a threat to persons , property or the public tranquillity , irrespective of whether such network operates within or outside the Sudan . The law provides severe punishment for such terrorist offences , which may involve death by crucifixion , simple death , cross amputation ( amputation of the right hand and left foot ) , life imprisonment or ordinary imprisonment , for they are considered grave offences . The Sudan does in fact engage in cooperation with a number of States in the common fight against terrorism , including the exchange of information and even the taking of steps for the extradition of suspected terrorists ( such as the extradition of Carlos to France and the expulsion of Osama Bin Laden from the country ) , as well as the adoption of stricter procedures for the entry of aliens and their residence in the country . In addition , periodic reviews are performed to ensure that the country is rid of any activity or presence of any of the organizations of known involvement in international terrorism that are listed by the Security Council . The Terrorism ( Combating ) Act also provides that it is applicable to any person suspected of committing , attempting to commit or inciting a terrorist offence either within or outside the Sudan . It also applies to any person who commits , attempts to commit or abets the commission of a terrorist offenceagainst any alien in the Sudan or legally resident there and to any person suspected of committing , attempting to commit or inciting a terrorist offence , provided that the terrorist act is punishable under both Sudanese law and the law of the State in which it was committed and that State agrees to the application of the Terrorism ( Combating ) Act in the Sudan . The Act further makes it compulsory to deport any alien convicted of committing , attempting to commit , inciting or providing financing or technical assistance for a terrorist offence , who must be expelled from the country or extradited in accordance with the law to any country injured by the terrorist offence . It also gives the authorities the power to expel any alien concerning whom there is evidence that he entered the country for the purpose of committing a terrorist offence , within a period not exceeding two weeks . Article 51 , paragraph c , of the Sudanese Penal Code provides that anyone who , in the Sudan , without the permission of the State , raises an army and equips it to attack a foreign State or carries out against a foreign State an act of aggression that is likely to expose the country to the risk of war is to be considered as having committed the offence of causing war against the State and may be punished by death , life imprisonment or a fixed term of imprisonment and possible confiscation of all his property . Also , the resolutions of the Security Council and the lists produced by its committees are always transmitted to the competent authorities for implementation , including its resolution 1373 ( 2001 ) concerning Afghanistan . Cooperation also takes place , through the Interpol office , with the corresponding offices in other States . E. Steps taken to establish terrorist acts as serious criminal offences and to ensure that the punishment reflects the seriousness of the offence The Sudan deals with terrorist offences in earnest , considering them grave offences . For this reason it has acceded to international and regional instruments . It has in fact taken part in their drafting and is at present participating earnestly in the development of a comprehensive treaty against terrorism in the United Nations . As a culmination of that interest , and especially in view of the fact that during the latter half of the 1990s the country suffered considerably from a series of terrorist offences in most of which a foreign hand was visible , the Terrorism ( Combating ) Act , 2000 , was promulgated , considering terrorist offences as grave offences affecting the interests and the social and national security of the Sudan . The Act defined terrorism as meaning any act of violence or threat of violence , irrespective of its motive or objectives , carried out in execution of an individual or collective criminal scheme and aimed at instilling terror in people or the fear that they will be harmed ; jeopardizing their lives , freedom or security ; causing harm to the environment ; harming , occupying or seizing any public or private property or facility ; or endangering any national or strategic resource . The penalties are graduated under national law according to the seriousness and consequences of the act . The Penal Code , for example , makes the creation or direction of terrorist criminal organizations , whether operating in the Sudan or outside , punishable by imprisonment for up to five years or a fine or both . If , however , the offence plotted by the organization is a grave offence , such as war or looting , a crime punishable by death , or terrorism involving a threat to the general public or the public authority , the penalty of imprisonment becomes compulsory , though it must not exceed ten years , and the imposition of a fine is also permissible . This , of course , applies to plotting , but if the offence has been committed , the punishment , depending on penalty provided by law , may be as severe as death . The law also provides that a person who commits the offence of terrorism , which here means threatening harm in order to cause a person to do what he is not required to do by law or making a movement or exhibiting readiness to act , intending thereby to use unlawful force , shall be punished by imprisonment for a term not exceeding six months or a fine or both . It should be mentioned that steps are currently being taken by the Ministry of Justice to review those penalties in order to make them more severe in the Penal Code . Under the Terrorism ( Combating ) Act , a terrorist offence against the State , the security of its society , citizens or property is punishable by death or life imprisonment . The same applies to anyone who plots , instigates , attempts , facilitates or participates in the direction of an organized network planning to commit terrorist offences , whether the network operates in the Sudan or abroad . The penalty for the seizure of aircraft may be as high as 14 years or a fine or both , and if the act results in damage to or endangers the safety of the aircraft and those aboard it , the penalty may be life imprisonment or death . The Act also provides that any act causing physical damage to the environment or jeopardizing the lives of persons shall be deemed a terrorist act and shall be punishable , upon a verdict of guilty , by imprisonment for a term not exceeding 20 years and a fine . The following are some of the punishments that have actually been carried out : The case of Mohamed Abdul Rahman Al-Khalifi , a Libyan national who attacked persons praying in a mosque in the city of Omdurman on 24 February 1994 , killing 19 of them and wounding more than 20. He was sentenced to death and the sentence was executed ; The Kambo Ashara incident in Wad Madani ( 1 January 1997 ) , in which members of the group known as “ Al-Takfir wal-Hijra ” attacked the inhabitants of Kambo Ashara with firearms . The security authorities opposed them , killing eight of the assailants , and the rest were brought to trial and sentenced to imprisonment for various terms ; The Jarafa incident , in which the Sudanese national known as Abbas Al-Sharif Al-Baqir , a member of the extremist group known as “ Al-Takfir wal-Hijra ” , attacked persons praying in the Jarafa Mosque on 8 December 2000. The attack resulted in the death of 24 persons at prayer . He was countered by the police and killed in an exchange of fire with them . Trial of aliens : the past two years witnessed a number of trials of aliens who had entered the country illegally or violated national laws . The related sentences included expulsion from the country . Procedures and mechanisms in place to assist other States ( with examples ) The policy of the Government of the Sudan has been characterized by cooperation with other States in the field of counter-terrorism . This became apparent in Security Council resolution 1372 ( 2001 ) of 28 September 2001 , concerning the Sudan , which acknowledged the steps taken by the Government of the Sudan to comply with the provisions of Security Council resolutions 1044 ( 1996 ) , 1054 ( 1996 ) and 1070 ( 1996 ) and decided the immediate termination of the measures referred to in paragraphs 3 and 4 of the Council 's resolution 1054 ( 1996 ) and paragraph 3 of its resolution 1070 ( 1996 ) , relating to the Sudan . The Sudan 's policy regarding cooperation with other countries is also manifest in its accession to regional and bilateral legal cooperation treaties . Indeed , it is one of the States parties to the Riyadh Arab Convention on Technical , Legal and Judicial Cooperation and has concluded a Treaty on Judicial and Legal Cooperation and Extradition of Criminals with the Syrian Arab Republic and individual treaties on the extradition of criminals with Kenya , Uganda , Ethiopia and the Central African Republic . The Sudan is a party to the Arab Convention for the Suppression of Terrorism , which provides for cooperation in that area among the Arab States , and has concluded with neighbouring countries cooperation agreements that contain provisions on cooperation in the field of counter-terrorism . That cooperation is also provided for in the national legislation referred to above . As can be seen from the foregoing paragraphs , the Government of the Sudan has adopted measures to assist other States in the field of counter-terrorism , in connection , for example , with the extradition of persons suspected of involvement in terrorist offences to both Ethiopia and France , in addition to cooperating with many States in the exchange of information among competent bodies . Border controls and checking of identity papers As mentioned , the measures adopted include the imposing of conditions on the obtainment of an entry visa to the Sudan , pursuant to Ministry of the Interior decision 185 of 1998 , and tight control of entry and exit at the country 's entry/exit points . In addition , in the wake of the events of 11 September 2001 , the Ministry of the Interior issued standing order No. 33 of 2001 , which called for new controls and procedures for the entry of aliens and migration security procedures at airports , seaports and land exit/entry points . The basic purpose of those measures is to prohibit the entry of any person suspected of having connections with terrorist activities . The decision was also aimed at monitoring and at making sure that no persons listed as connected with the events of 11 September 2001 enter or leave , so that they might be apprehended if found . It must be pointed out that the Sudan shares long borders with nine countries and a seacoast extending along the Red Sea ; consequently , the task of fully controlling those borders is beset with practical difficulties and requires international technical cooperation and close cooperation between neighbouring States . With regard to identity papers , procedures are actually under way for the production of difficult-to-counterfeit documents . Steps taken to intensify and accelerate the exchange of information on movements of terrorist persons or networks , forged or falsified travel documents , traffic in arms or sensitive materials , the use of communications technologies and the possession of weapons of mass destruction The Government of the Sudan cooperates with a number of States in the area of information exchange and is developing national information networks to facilitate the flow of information and consequently the exchange of information with other States ; Steps taken in respect of cooperation on administrative and judicial matters The Government of the Sudan cooperates with other States under agreements on judicial and legal cooperation and within the framework of the Sudanese Extradition Act and the relevant bilateral agreements . There are many examples , as shown in the course of this report , and close cooperation in this area exists with a number of States , within the framework of which information is exchanged among competent bodies ; C. Bilateral and multilateral cooperation for the prevention of terrorist acts and expulsion procedures actually carried out The Government of the Sudan cooperates in that area and has announced at the highest levels ( that of the President of the Republic ) its strong desire for international cooperation in the area of counter-terrorism . Cooperation exists with many countries , such as the United States of America , European and Asian countries and neighbouring States . Moreover , the Government of the Sudan has expelled persons or extradited them to other States , as in the case of the expulsion , in 1996 , of Osama Bin Laden , who had entered the Sudan as an investor in the early 1990s , and a group of his collaborators ; the case of the extradition to France , in 1997 , of the person known as “ Carlos ” , who had entered the Sudan with a forged identity document ; and the case of the extradition of an Ethiopian group that had hijacked an Ethiopian aircraft in 1995. In addition , the Sudan expelled some 400 aliens resident in the Sudan following the attempted assassination of the Egyptian President in Addis Ababa in 1995. Signing of and accession to regional and international conventions The Sudan is one of the more advanced States with regard to the signing of or accession to the relevant international and regional instruments . It has become a party to 11 international conventions and is in the process of completing the formalities for the ratification of the twelfth , namely the 1999 International Convention for the Suppression of the Financing of Terrorism , which has been signed by the Sudan . It is also completing the formalities for accession to the African Convention on the Prevention and Combating of Terrorism and the Convention of the Organization of the Islamic Conference on Combating International Terrorism . Upon completing those formalities , the Sudan will be a party to all the international and regional instruments on combating international terrorism . The fact that the Sudan has become a party to all international conventions and protocols aimed at the elimination of international terrorism , concerning which the Secretary-General of the United Nations produces a yearly report that is examined by the Sixth Committee of the United Nations General Assembly , prompted the Assembly to include a paragraph in its report on measures to eliminate international terrorism , adopted in 2000 at its Millennium Assembly , the text of which we would like to cite here : Notes with appreciation and satisfaction that , during the fifty-fourth session of the General Assembly and the Millennium Assembly , a number of States became parties to the relevant conventions and protocols thereby realizing the objective of wider acceptance and implementation of those conventions ; The Sudan is thus in the forefront of the States Members of the United Nations that have complied with the appeals contained in the resolutions and declarations issued by the United Nations General Assembly and in Security Council resolution 1269 ( 1999 ) , which call upon and encourage States to become parties to all the international conventions on combating terrorism and to implement and apply them . E. Any relevant information on the implementation of conventions and protocols Upon the Sudan 's becoming a party to the international and regional instruments , those instruments became part of its domestic law applied by judicial organs . The instruments were forwarded to the official gazette for publication and communicated to the country 's judiciary in order to be implemented . Legislation , procedures and mechanisms in place for ensuring that asylum seekers have not been involved in terrorist activity before being granted refugee status , with examples The Sudan is a party to the 1951 Convention on the Status of Refugees and the related 1967 Protocol and is bound by their provisions . The 1974 Regulation of Asylum Act governs all matters relating to refugees : it makes it incumbent on the competent authority in the country to observe any convention or treaty governing such status to which the Sudan is a party and stipulates that , in the application of the Act , priority is to be accorded to such conventions or treaties ( see annex VII ) . Under the Act , refugees are subject to the general laws of the country . They are not permitted to engage in any political activity during their stay in the Sudan or to leave the place of residence assigned to them except subject to specific rules . Mention should be made of the Sudan 's reservation regarding article 26 of the 1951 Convention , which is intended to enable it to abide by its obligation under article 3 of the 1969 Organization of African Unity ( OAU ) Convention Governing the Specific Aspects of Refugee Problems in Africa , which provides that refugees must abstain from hostile activities against OAU member States . A refugee may also be deported for having committed a serious non-political crime outside the Sudan before being granted permission to enter as a refugee ( such as a terrorist offence , inasmuch as such offences are not considered political offences under Sudanese law , even if committed for political reasons ) . In such a case he may be extradited in accordance with the Sudanese Extradition Act of 1957 ( article 11 ( b ) ) . He may also be deported if he commits an act contrary to the purposes and principles of the United Nations or the Organization of African Unity ( article 11 ( d ) ) ; if he commits a serious non-political crime outside the Sudan after being granted asylum ( article 11 ( e ) ) ; or if his presence in the Sudan constitutes a danger to internal or external security ( article 11 ( f ) ) . The procedures followed include the examination of applicants for refugee status at points of entry by the office of the commissioner for refugees and the ascertainment that they meet the conditions for that status in accordance with the Convention on the Status of Refugees and the relevant international law and domestic law . Procedures in place to prevent the abuse of refugee status by terrorists The law prohibits refugees from engaging in political activities and from plotting , directing , undertaking or participating in terrorist acts against a foreign State . Refugees are restricted and required for the most part to remain in a single place such as a refugee camp , and their movements are controlled and monitored to ensure their compliance with the law . Moreover , the Terrorism ( Combating ) Act and the Regulation of Asylum Act prohibit the invocation of political motives to prevent the extradition of suspected terrorists , inasmuch as the Act does not take political motives into account in terrorist offences . H. Additional information or observations on the implementation of the resolution As we have mentioned , the Sudan has continued to be a State that is eager to cooperate in the fight against international terrorism in all its forms , a position that has been concretely reflected in its accession to international and regional instruments , not to mention its share in the drafting of those instruments through its participation in the forums that prepared them . It has also been reflected in the cooperation the Sudan has evinced for many years with injured States . Furthermore , the item “ international terrorism ” , which was one of the items of the Sudanese-European dialogue during its first year ( 1999 ) , was dropped in the second year of the dialogue as a result of satisfaction with the Sudan 's earnest compliance and its pioneering State policies on combating terrorism . The Government reaffirmed its anti-terrorist policies in a statement by the Minister for Foreign Affairs before the National Council ( Parliament ) on 25 April 2001 ( annexed hereto ) , in which he reaffirmed the Sudan 's absolute condemnation of all forms of terrorism and its constructive cooperation with the international community in countering it . He emphasized that such cooperation included the extradition of suspects , judicial cooperation and the exchange of information and that the Government of the Sudan would not provide any safe haven or permit any training or financing of or support for any individuals or groups involved in terrorist activities . It was those convictions that prompted the Sudan 's attitude of cooperation with the international community and condemnation of the recent terrorist events . The Sudan took the initiative to invite the African Dispute Settlement Mechanism to a meeting in New York during the fifty-sixth session of the General Assembly in order to discuss African cooperation in the field of terrorism , which resulted in the issuance of a statement by the Mechanism on that subject that was considered an official document of the General Assembly . The Sudan also calls for collective Arab efforts against terrorism in all its forms as well as efforts on the part of the Organization of the Islamic Conference and other regional organizations in which it participates , such as the Intergovernmental Authority on Development ( IGAD ) and the Sahelo-Saharan group . The Government of the Sudan is determined to conduct a general review of the relevant legislation with a view to revising it and to coping with the rapid changes taking place in the nature of international terrorism . The Sudan feels that the adoption by the international community of a comprehensive definition of terrorism will facilitate the identification of terrorist activity and provide a legal tool for its elimination . Areas in which the country requires technical assistance The Sudan needs material and technical assistance in order to develop its capacities for the fight against terrorism and for international cooperation and information exchange . Such help is needed in the following areas : Completion of the building of national and specialized information networks ; Support for the implementation of the civil registration project being carried out by the Ministry of the Interior ; Support in connection with the review of national legislation and the dissemination of international and regional instruments on the fight against terrorism ; Assistance in developing chemical and biological materials and weapons search technologies ; Development and strengthening of border control and early warning systems ; Strengthening and development of customs workshops and laboratories from the technical standpoint ; Training in the various areas of the fight against terrorism ; Support for the counter-terrorism unit of the Ministry of the Interior ( in the process of being established ) ; Strengthening and development of the technology of the central bank and the financial information network ; Support for the office for national liaison with the Counter-Terrorism Committee established pursuant to Security Council resolution 1373 ( 2001 ) . Appendices Letter from the President of the Republic to the President of the United States of America . Letter from the Minister for Foreign Affairs of the Republic of the Sudan to the Secretary of State of the United States of America . Statement delivered by the Minister for Foreign Affairs of the Sudan before the Parliament on the Sudan 's policy regarding the fight against terrorism , with an annexed list of international conventions on that subject that have been signed and ratified by the Sudan . Banking Regulation Act ( Amendment ) , 1993. Eight documents on Al-Shamal Islamic Bank . Extradition Act of 1957 ( in Arabic and English ) . Regulation of Asylum Act of 1974 ( in Arabic and English ) . Provisional decree : The Terrorism ( Combating ) Act , 2000 ( in Arabic and English ) . Appendix I [ Original : Arabic/English ] Letter from the President of the Republic to the President of the United States of America Appendix II [ Original : Arabic/English ] Letter from the Minister for Foreign Affairs of the Republic of the Sudan to the Secretary of State of the United States of America Appendix III [ Original : Arabic/English ] Statement delivered by the Minister for Foreign Affairs of the Sudan before the Parliament on the Sudan 's policy regarding the fight against terrorism , with an annexed list of international conventions on that subject that have been signed and ratified by the Sudan Appendix IV [ Original : Arabic ] Banking Regulation Act ( Amendment ) , 1993 Appendix V [ Original : Arabic/English ] Eight documents on Al-Shamal Islamic Bank Appendix VI [ Original : Arabic and English ] Extradition Act of 1957 ( in Arabic and English ) Appendix VII [ Original : Arabic and English ] Regulation of Asylum Act of 1974 ( in Arabic and English ) Appendix VIII [ Original : Arabic and English ] Provisional decree : The Terrorism ( Combating ) Act , 2000 ( in Arabic and English ) appendices I-VIII offset : pp 2,4,6-9,11-12,14-27,29-34,36-37,39-47 </text>
<text id="un/S_2001_70-A_55_740">
Agenda items 20 and 46 Strengthening of the coordination of humanitarian and disaster relief assistance of the United Nations , including special economic assistance The situation in Afghanistan and its implications for international peace and security Identical letters dated 23 January 2001 from the Permanent Representative of Afghanistan to the United Nations addressed to the Secretary-General and the President of the Security Council I have the honour to forward herewith the text of a letter dated 23 January 2001 from A. Abdullah , Acting Minister for Foreign Affairs of the Islamic State of Afghanistan , addressed to you ( see annex ) . I should be grateful if you would have the text of the present letter and its annex circulated as a document of the General Assembly and of the Security Council . ( Signed ) Dr. Ravan Farhâdi Ambassador Permanent Representative Annex to the identical letters dated 23 January 2001 from the Permanent Representative of Afghanistan to the United Nations addressed to the Secretary-General and the President of the Security Council Following the convening of the meeting in Akora Khattak , Pakistan , on 10 January 2001 of the Pakistan-based extremist groups , advocating maximized military support of Pakistan to the Taliban-Osama coalition , and defying the United Nations sanctions against the militia , the Pakistan military junta has brought in new military force in northern Afghanistan . Reports gathered recently by the security services of the Islamic State of Afghanistan indicate that since 12 January 2001 , a number of new commando and artillery units of the Pakistan Army have been deployed in northern Afghanistan , in preparation for foreseeable attacks on the government forces . According to the reports , in a sweeping move , preceding the deadline of the imposition of the new United Nations sanctions against the Taliban mercenaries , Pakistan army officers and units have recently been posted to Afghanistan as follows : General Qamar-u-Zaman of the Pakistan Army has been assigned as the new officer in charge of military operations in Afghanistan , replacing Pakistan 's General of the Army Saeed Zafar , who functioned in the same capacity in Afghanistan over the past year ; General Tariq Bashir , formerly commander of the Ninth Commando Division of the Pakistan Army ; Brigadier Momin of the Kohat Division of the Pakistan Army ; Colonel Sanaullah of the Kohat Division of the Pakistan Army ; Colonel Hamza of Pakistan 's military intelligence services ( ISI ) ; The 998 Brigade has been replaced by the 996 Brigade of Charat Commando Divisions , under Brigadier Amjad of Sayawali , Pakistan ; The 117 Brigade has been replaced by the 994 Brigade , under Faizan Khan of Laki Maroot , Pakistan ; The 625 Artillery Battalion has been newly deployed in the northern Kunduz province , under ranking officer Rafique of the Pakistan Army ; Brigadier Amjad has been assigned as the commanding officer of Pakistan attacking forces in the northern Takhar province . The Pakistan Army units operating under Brigadier Amjad are reported to have been especially equipped with infrastructure capability to cross the Kokcha River , where the government forces are entrenched ; The 998 Brigade has been withdrawn from the fronts , and designated as the Reserve Corps , to take over the ongoing routine military training in preparation for future deployments across Afghanistan ; The total additional number of armed Pakistan nationals , recently dispatched to northern Afghanistan , is estimated at about 1,500 . According to the reports , Pakistan forces have joined scores of heavily armed militants from the Osama bin Laden Al-Qaeda terrorist network and a sizeable number of Taliban mercenaries , already poised to attack territories across the Kokcha River on the border of Badakhshan province in the north-east . An attack by the Pakistan-Taliban-Osama forces on 12 January , targeting Khoja-Ghar , Dasht-e-Qala and Ay Khanum along the same area was beaten back fiercely by the government troops , with as many as 200 Taliban dead and heavy material losses . The convening of the Akora Khattak meeting in broad daylight by as many as 30 militant groups , protected by hundreds of heavily armed guards of their own , while martial law imposed by the military Government of Pakistan remains in effect throughout the country , among other things , serves as ample proof that the gathering was orchestrated by the Government of Pakistan aimed at intensifying and prolonging the war in Afghanistan and yet misleading the international community . The gathering , attended by top-ranking officers of the Pakistan ISI , such as General ( retired ) Hamid Gul , former Chief of military intelligence services and General Aslam Beg of the Pakistan Army , starkly unravels Pakistan 's un-Islamic exploitation of religion for its unholy military and political hegemonic purposes , while bringing to light the treacherous and bogus preaching of the Pakistan political and military establishment concerning the “ negative impacts of the United Nations sanctions on the civilian population of Afghanistan ” . The current surge in Pakistan military involvement in Afghanistan clearly manifests Pakistan 's belligerence against the Security Council resolution , that , inter alia , calls for an embargo on provision of arms and military aid to the Taliban , immediate withdrawal of foreign military personnel from Afghanistan and closure of all terrorist training camps inside Afghanistan . ( Signed ) Dr. Abdullah Acting Minister for Foreign Affairs of the Islamic State of Afghanistan </text>
<text id="un/S_2001_947">
Letter dated 7 October 2001 from the Chargé d'affaires a. i. of the Permanent Mission of the United Kingdom of Great Britain and Northern Ireland to the United Nations addressed to the President of the Security Council In accordance with Article 51 of the Charter of the United Nations , I wish on behalf of my Government to report that the United Kingdom of Great Britain and Northern Ireland has military assets engaged in operations against targets that we know to be involved in the operation of terror against the United States of America , the United Kingdom and other countries around the world , as part of a wider international effort . These forces have now been employed in exercise of the inherent right of individual and collective self-defence , recognized in Article 51 , following the terrorist outrage of 11 September , to avert the continuing threat of attacks from the same source . My Government presented information to the United Kingdom Parliament on 4 October which showed that Usama Bin Laden and his Al-Qaeda terrorist organization have the capability to execute major terrorist attacks , claimed credit for past attacks on United States targets , and have been engaged in a concerted campaign against the United States and its allies . One of their stated aims is the murder of United States citizens and attacks on the allies of the United States . This military action has been carefully planned , and is directed against Usama Bin Laden 's Al-Qaeda terrorist organization and the Taliban regime that is supporting it . Targets have been selected with extreme care to minimize the risk to civilians . It is important to underline that these operations are not directed against the Afghan population , or against Islam . The United Kingdom is proud to be a multicultural , multiracial country , and Prime Minister Blair has made clear the anger of the United Kingdom , and the anger of the vast majority of Muslims , to hear Usama Bin Laden and his associates described as “ Islamic ” terrorists . They are not : they are just ordinary terrorists . I ask that you circulate the text of the present letter as a document of the Security Council . ( Signed ) Stewart Eldon Chargé d'affaires a. i. </text>
<text id="un/S_2002_1141">
Report of the Secretary-General on the situation in Abkhazia , Georgia Introduction The present report is submitted pursuant to Security Council resolution 1427 ( 2002 ) of 29 July 2002 , by which the Council decided to extend the mandate of the United Nations Observer Mission in Georgia ( UNOMIG ) until 31 January 2003 and requested me to report three months from the date of the adoption of the resolution . It provides an update on developments since my report of 10 July 2002 ( S/2002/742 ) . Heidi Tagliavini continued to head UNOMIG as my Special Representative for Georgia , and Major General Kazi Ashfaq Ahmed ( Bangladesh ) continued to serve as the Chief Military Observer . The strength of UNOMIG on 1 October 2002 stood at 108 military observers ( see annex ) . Political process During the period under review , UNOMIG continued to search for ways to engage the Georgian and Abkhaz sides on the paper entitled “ Basic Principles for the Distribution of Competences between Tbilisi and Sukhumi ” and its transmittal letter , as a step towards holding substantial negotiations on the core issue of the conflict , namely , the future status of Abkhazia within the State of Georgia . In these efforts , it had the support of the Group of Friends of the Secretary-General . At the same time , UNOMIG devoted considerable energy to the situation in the Kodori Valley , which remained a major source of tension . The situation in the wider area remained tense in the context of which UNOMIG carries out its work . In addition to consulting with the leadership of the two sides , and in order to find ways to move the political process forward and overcome continuing Abkhaz refusal to even discuss the paper on competences , my Special Representative embarked on a round of consultations in the capitals of the Member States constituting the Group of Friends . In August and September , she visited Moscow , Washington and Berlin and she intends to visit London and Paris in the near future . She also conducted consultations at Headquarters in New York . The efforts to arrange a meeting in Sukhumi at which my Special Representative , together with the representatives of the Group of Friends , would familiarize the Abkhaz leadership with the substance of the paper on competences ( see S/2002/742 , para . 4 ) have not succeeded so far . In view of this , and in consultation with the Group of Friends and my Special Representative , the Russian Federation offered to facilitate a meeting in Moscow with the de facto Abkhaz Prime Minister , Anri Jergenia . It was envisaged that , at that meeting , Mr. Jergenia would be acquainted with the substance of the paper on competences and the rationale behind it , but that it would not be handed over ; Mr. Jergenia in turn would have the opportunity to explain his views on the settlement of the conflict . The meeting was scheduled for 5 October but it was not held because Mr. Jergenia rejected a discussion of the paper and the participation of my Special Representative . UNOMIG continued its efforts to bring the two sides together in the framework of the Coordinating Council . While it again proved to be impossible to arrange a meeting of the Council itself , the sides did meet on 20 July in Working Groups I ( on security matters ) and II ( on internally displaced persons and refugees ) of the Council . They also met several times , both in the presence of UNOMIG and bilaterally , to discuss the situation in and around the Kodori Valley . Operational activities The UNOMIG military observers continued to perform their mandated tasks through daily ground patrols in the Gali and Zugdidi sectors , as well as two- or three-day patrols in the Kodori Valley , the latter jointly with the Commonwealth of Independent States ( CIS ) peacekeeping force . On three occasions the patrols had to be cancelled because of the lack of security guarantees . Patrolling by helicopter remained suspended ; administrative flights were conducted following a flight path over the Black Sea . The investigation into the shooting down of a UNOMIG helicopter on 8 October 2001 is to be completed by the end of October 2002. Kodori Valley Following the gradual stabilization of the situation in and around the Kodori Valley in May and June ( see S/2002/742 , para . 10 ) , a joint UNOMIG/CIS patrol was conducted from 16 to 18 July . It assessed the situation as calm but unstable ; the mortars and ammunition observed in the Georgian-controlled upper valley by earlier patrols ( see S/2002/742 , para . 11 ) had , however , still not been removed . On 20 July , Working Group I of the Coordinating Council met under the chairmanship of the Chief Military Observer to discuss measures to further stabilize the situation in the Kodori Valley . The Georgian side stated that it had reduced the number of border guards and undertook again to remove the military equipment from the valley . Late in July , the situation took a turn for the worse . On 30 July , the Georgian authorities informed UNOMIG that Abkhaz troops had been spotted near the Marukhi Pass ( on the Russian-Georgian border ) which is connected to the upper Kodori Valley by the approximately 40-kilometre long Chkhalta Valley . On the same day , the Abkhaz side informed UNOMIG that several Georgian helicopters had landed troops close to the pass ; it threatened military action if the Georgian side did not withdraw immediately . On 31 July , a UNOMIG/CIS patrol was told by Georgian officials that a Russian helicopter carrying troops had landed south of the Marukhi Pass . Later in the day , the Georgian Defence Minister and the Chief of the National Guard arrived in the Kodori Valley and went to the Marukhi Pass . On their return , the two officials stated to the UNOMIG patrol that the Russian helicopter had flown into the area mistakenly and that the situation had been resolved . Also on 31 July , UNOMIG received a letter from the Abkhaz side , expressing strong concerns about Georgian landings in the Marukhi Pass area the day before and informing UNOMIG that several checkpoints would be established there to prevent infiltration by “ international terrorists ” and “ illegal actions ” by the Georgian side . As the tensions were mounting , UNOMIG worked with the two parties to prevent a resort to force . On 4 August , it arranged a meeting between the Georgian State Minister , Avtandil Jorbenadze , and Mr. Jergenia on the Inguri River bridge . At that meeting , and a follow-up meeting of the respective Chiefs of General Staff on 6 August , the parties agreed to withdraw their units from the Marukhi Pass area and jointly inspect it as soon as possible . That inspection has not so far been carried out . The parties also requested UNOMIG to participate in the inspection and consider establishing a permanent post in the upper Kodori Valley . During the following days , the tensions continued . The Georgian side accused the Abkhaz of moving their forces to Georgian-controlled territory near the Marukhi Pass and firing on a border guard helicopter . On 13 August , another high-level meeting between the two sides was convened . Soon after the talks started , however , the Georgian delegation received a report that fighting had broken out between the two sides near the Marukhi Pass . The meeting was suspended , and the Georgian delegation flew to the area to clarify the situation . It returned later that day and stated that Abkhaz armed units had moved forward from their positions into the Chkhalta Valley and that Georgian forces had opened fire . On 14 August , the Defence Ministers of the two sides met . They again agreed to withdraw their forces from the positions in the Marukhi Pass area , to remove jointly newly laid mines there , and to request UNOMIG and the CIS peacekeeping force to monitor the withdrawal and mine clearing . A joint UNOMIG/CIS patrol to the Kodori Valley planned for mid-August was cancelled because the Georgian authorities did not provide the necessary security guarantees . The planned joint mine clearance has not been carried out so far , because the sides at subsequent technical meetings , could not agree on the modalities for the operation . Despite this lack of tangible results of the various meetings , they succeeded in defusing the tensions for the time being and a joint UNOMIG/CIS patrol to the Kodori Valley was conducted from 31 August to 2 September . It found that the Abkhaz side was repairing the road in the lower part of the valley and that the CIS checkpoints there had increased their protective measures ; the Georgian mortars and ammunition in the upper valley had still not been removed . The next two patrols , however , planned to start on 12 and 25 September respectively , were cancelled , the first because the Georgian side had not cleared the mines at the entrance to the Georgian-controlled upper part of the valley ( as is the usual procedure ) , and the second because the Abkhaz side did not provide security clearance for the Abkhaz-controlled lower part , owing to the alleged presence of armed irregulars there . A patrol did go to the Kodori Valley from 3 to 8 October and observed the removal of the Georgian mortars and ammunition from the valley . Gali and Zugdidi sectors The general security situation in the Gali sector was calm , with the exception of the lower Gali area , where there were two particularly violent shooting incidents . The first was an exchange of fire between the Abkhaz militia and an unidentified armed group during the night of 31 August/1 September at Khumuskhuri ( about 15 kilometres south-west of Gali city ) ; three members of the armed group were killed . The second occurred on 25 September , when three Abkhaz officials were killed in an ambush in broad daylight near the main bridge across the Inguri River . There were also a number of shootings at Abkhaz and CIS positions , as well as two explosions ; none of these incidents led to fatalities . There was the usual upsurge in robberies during the hazelnut harvest , though the crime rate overall was lower than in previous years . Still , 14 robberies were reported , as well as a number of tit-for-tat abduction cases . The activities of local law enforcement agencies are seen as insufficient by the returnee population in the lower Gali area . In order to explore ways of strengthening the law enforcement agencies , my Special Representative continued consultations with the two sides . In this connection , a meeting of Working Group II of the Coordinating Council was convened on 20 July , chaired by the representative of the Office of the United Nations High Commissioner for Refugees ( UNHCR ) to Georgia . Working Group II had previously only met twice in 1998. The outcome included a request for UNOMIG to dispatch a security assessment team to the Gali and Zugdidi districts later this year , as a follow-up to the recommendations of the joint assessment mission undertaken in November 2000 ( see S/2001/59 , annex II ) . The assessment team will provide options and make recommendations to my Special Representative for improving the effectiveness of law enforcement personnel and agencies and their cooperation with the judiciary , with the aim of creating a safer and more secure environment for persons wishing to exercise their right of return or having already returned . Working Group II also agreed that the problems of the returnee population would become a topic for the weekly quadripartite meetings ( these meetings bring together the two parties , UNOMIG and the CIS peacekeeping force for a regular exchange on practical issues on the ground ) . The general security situation in the Zugdidi sector was calm . The law and order situation has improved to some extent ; there were only two robberies reported to UNOMIG during the reporting period . Criminal activities across the ceasefire line nevertheless remained a problem , and often perpetrators of crimes on one side flee to the other side to take refuge . Demonstrations by internally displaced persons , including a blockade of the main bridge over the Inguri River from 22 August to 5 September , reflected the desperation among the refugees 10 years after the start of the hostilities . They demanded the proper payment of their allowances , the withdrawal of the CIS peacekeeping force and the prompt return of refugees to their original homes . As a result of heavy rainfall at the end of June , a significant number of bridges and roads within the Zugdidi sector were either damaged or destroyed , which had a negative effect on UNOMIG patrols . Cooperation with the collective peacekeeping force of the Commonwealth of Independent States UNOMIG and the CIS peacekeeping force continued to work in close cooperation , in particular in conducting the joint patrols to the Kodori Valley , and maintained good relations at all levels . The staff of the two organizations held regular meetings , complementing the exchanges between the Chief Military Observer and the CIS Force Commander . The weekly quadripartite meetings and the activities of the Joint Fact-Finding Group also remained useful platforms for information sharing and coordination . Humanitarian situation and human rights International humanitarian agencies and non-governmental organizations continued their programmes , targeting the acute food and medical needs of the most vulnerable segments of the population in Abkhazia , and conducted mine-clearance , small-scale rehabilitation and community development activities . Their operations continued to be hampered by restrictions on border crossings at the Psou River . UNHCR continued its limited humanitarian operation in Abkhazia , against the background of recurrent concerns about security and criminality . In cooperation with local authorities and beneficiary communities , it pursued the basic rehabilitation of school buildings , as endorsed by the parties in Working Group III of the Coordinating Council . This year , the emphasis of this activity , which covers 49 schools , is in areas beyond the Gali district . The project has essentially been implemented , though some construction work remains to be completed by the local communities . A group of vulnerable elderly persons in Sukhumi continued to benefit from a small-scale UNHCR assistance programme through a local non-governmental implementing partner . Following the establishment of a sub-account for humanitarian quick-impact projects in the UNOMIG Trust Fund , efforts are under way to obtain funding for a number of projects that have been identified . The human rights situation in Abkhazia remained fragile , particularly in the security zone at the Gali side of the ceasefire line . The Mission 's Human Rights Office continued to promote human rights awareness through a specialized programme on a district television station and the publication of two United Nations human rights documents in the Abkhaz language , “ Guiding Principles on Internal Displacement ” and “ Minority Rights ” . It also started to participate in the weekly quadripartite meetings , following the decision by Working Group II that returnee issues would be discussed regularly in that forum . Support issues UNOMIG has now installed two more satellite communication stations , thereby providing full interconnectivity throughout the Mission area , including the two sectors . A further 14 microwave systems are being deployed in the Mission area . The VHF network has been expanded from 16 to 32 channels to make provision for operational , evacuation , security , air operations and medevac/search and rescue channels . Observations During the period reviewed in this report , the situation in the Georgian-Abkhaz conflict zone has , unfortunately , not improved . In the absence of a substantive negotiation process on the core issue of the conflict — the status of Abkhazia within the State of Georgia — upsurges of tension , including exchanges of gunfire , continued to occur with alarming frequency , while the population suffered from crime , partisan violence and the lack of economic development . To reduce these tensions , the Abkhaz side needs to reconsider its refusal even to discuss the paper “ Basic Principles of the Distribution of Competences between Tbilisi and Sukhumi ” and its transmittal letter , which is , after all , only the starting point for negotiations in which the legitimate interests of the multi-ethnic population of Abkhazia can be addressed . The Georgian side , for its part , needs to make more efforts to promote trust and confidence on the Abkhaz side . My Special Representative will continue her efforts , with the support of the Group of Friends , to encourage advancement in the political process , but the basic responsibility lies with the parties . The Kodori Valley has been a source of tension for more than a year . UNOMIG will continue its efforts to defuse tensions emanating from the area and bring the parties together to address the underlying problems . However , again it is up to the parties , who exercise control in this area , to do their part to prevent destabilization and create the security conditions in which UNOMIG can function . It is deplorable that there has been no progress on refugee returns , owing to the absence of the safe , secure and dignified conditions under which such returns are to be effected according to international law and the 1994 Quadripartite Agreement . The UNOMIG security assessment team will seek to identify ways in which the existing law enforcement personnel and institutions can improve their effectiveness in combating criminal activities and strengthening the rule of law . One year after the shooting down of a United Nations helicopter , as UNOMIG remembers its colleagues who lost their lives in the service of peace , the perpetrators of the crime are still at large , as are those responsible for taking UNOMIG personnel hostage in several incidents from 1998 to 2000. Every effort must be made to apprehend them and bring them to trial . In conclusion , I should like to express my appreciation for the steadfastness and dedication with which my Special Representative , Heidi Tagliavini , the Chief Military Observer , Major General Kazi Ashfaq Ahmed , and the men and women of UNOMIG have carried out their difficult and often dangerous duties . Annex Countries providing military observers ( as at 1 October 2002 ) Map on page 7 </text>
<text id="un/S_2002_1180">
Twelfth report of the Secretary-General on the United Nations Organization Mission in the Democratic Republic of the Congo Introduction The present report is submitted pursuant to Security Council resolution 1417 ( 2002 ) of 14 June 2002 , by which the Council decided to extend the mandate of the United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) until 30 June 2003 and to review progress every four months on the basis of reports of the Secretary-General . It describes developments until 11 October 2002 , since my report of 5 June ( S/2002/621 ) and the special report ( S/2002/1005 ) which I submitted to the Council on 10 September 2002 , following the agreements concluded recently in Pretoria and Luanda between the Government of the Democratic Republic of the Congo and the Governments of Rwanda and Uganda , respectively . Political developments The period under review witnessed a number of significant political and military developments , in particular the signing of the bilateral agreements in Pretoria and Luanda , and the troop withdrawals undertaken by Angola , Burundi , Rwanda , Uganda and Zimbabwe ( see paras . These developments occurred while consultations among the Congolese parties on the establishment of a transitional government continued . Inter-Congolese dialogue The initial round of consultations among the signatories of the agreement concluded at Sun City , on the sidelines of the inter-Congolese dialogue , commenced at Matadi , Democratic Republic of the Congo , in May . The talks , which ended on 6 July , highlighted serious differences between the Mouvement de libération du Congo ( MLC ) and the Government of the Democratic Republic of the Congo concerning , in particular , the power-sharing arrangements for the Supreme Council of Defence and the procedure for designating the Prime Minister . In August , however , the participants reached agreement on the 167 articles of the transitional constitution . At my request , my Special Envoy , Moustapha Niasse , undertook an exploratory mission to the region from 13 to 30 June 2002 to ascertain the possibility of helping the Congolese parties to reach an all-inclusive political agreement . The Special Envoy began his mission in Lusaka and Addis Ababa , where he met the Chairman and the Secretary-General of the Organization of African Unity . He then visited the Democratic Republic of the Congo for discussions with President Joseph Kabila , Jean-Pierre Bemba of MLC and the leadership of the Rassemblement congolais pour la démocratie ( RCD)-Goma . In Kinshasa , and later in Matadi , the Special Envoy met with political parties , representatives of civil society , and some armed groups . Subsequently , the Special Envoy visited Sir Ketumile Masire , the facilitator of the inter-Congolese dialogue , in Gaborone , as well as the Presidents of Gabon , Rwanda , South Africa and Zimbabwe , and the Foreign Minister of Angola , in their respective capitals . My Special Envoy 's interlocutors stressed the need to reach an all-inclusive agreement and expressed their readiness to continue informal discussions under his auspices , on the understanding that any agreement reached informally would then have to be endorsed by the inter-Congolese dialogue . During the second phase of his mission , from 9 July to 17 August , the Special Envoy discussed with his Congolese interlocutors their views pertaining to power-sharing during the transition and , in particular , the structure of the transitional institutions and the distribution of responsibilities among the various State organs . He asked them to base their proposals in this regard on the objectives and principles agreed upon at Sun City . On 3 September , my Special Envoy started the third phase of his mission . The Government and the RCD-Goma delegations , which have been meeting in Pretoria since mid-September , seem to have reached a common understanding on a government structure and power-sharing formula . MLC has clarified its position in this regard and has had bilateral consultations with the Government and other parties . On 2 October , some representatives of the political opposition and civil society held consultations in Pretoria under the auspices of the Government of South Africa . My Special Envoy believes that the Congolese parties are close to reaching a political settlement acceptable to all . Developments in the wake of the Pretoria and Luanda agreements My special report on MONUC provided information on the withdrawal of foreign forces from the Democratic Republic of the Congo . Since then , the Ugandan withdrawal has continued and all Uganda People 's Defence Forces personnel , numbering 2,287 , with the exception of a reinforced battalion stationed at Bunia and troops patrolling the western slopes of the Ruwenzori Mountains , have now withdrawn from the country . The Zimbabwe Defence Forces have also continued to withdraw . The total number of their repatriated forces as at 11 October was 3,477 . A small number of Angolan military forces withdrew at the same time . In addition , it was reported that , as at 11 October , 700 troops of the Forces armées burundaises had been withdrawn from the country . Most significant has been the withdrawal of the Rwandan Patriotic Army ( RPA ) , which commenced on 17 September . According to information verified by MONUC , as at 11 October , the total number of RPA forces withdrawn from the Democratic Republic of the Congo stood at 20,941 . The withdrawal , which began in Kindu/Kalima , was subsequently extended to the remainder of Maniema Province , as well as to Katanga and North and South Kivu . There were withdrawals from a total of 32 positions in the east . The troops transited through 21 assembly areas and reached entry points into Rwanda at Cyangugu , Bugarama , Gisenyi and Kanombe Airport , Kigali . MONUC observers were present at most of the 21 RPA assembly sites and at all exit points , where detailed certificates were prepared and signed by MONUC , as well as at entry points into Rwanda , where the numbers were again cross-checked . RPA has claimed that a total of 23,760 troops had been withdrawn . MONUC therefore asked for a formal explanation of the resulting discrepancy of 2,819 . MONUC has received some unconfirmed reports that RPA forces may have entered the territory of the Democratic Republic of the Congo , particularly around the Bukavu area , before the present withdrawal began , and that RPA may have left significant amounts of weaponry , as well as some of its personnel , with RCD-Goma . MONUC intends to verify these reports and to revisit those areas from which foreign forces have been withdrawn , in an effort to verify , together with the third-party verification mechanism , that all RPA troops in the Democratic Republic of the Congo have been repatriated . A thorough investigation may also require visiting the present locations of the withdrawn troops in the home countries . As mentioned in my special report , the third-party verification mechanism has successfully begun its activities . Its terms of reference were finalized and its procedures of work further developed . The mechanism has verified the departure of the declared RPA troops at various departure and arrival points . Prior to the withdrawal of those troops , the mechanism met with expert groups from the Governments of the Democratic Republic of the Congo and Rwanda , in Kinshasa and Kigali respectively , to discuss the implementation of the Pretoria Agreement . As the withdrawal of foreign forces proceeded , the Government of the Democratic Republic of the Congo on 24 September declared all political leaders of the Forces démocratiques de libération du Rwanda ( FDLR ) persona non grata , and ordered them to leave the country within 72 hours . FDLR had claimed leadership of many of the ex-FAR/Interahamwe elements in the Democratic Republic of the Congo , including those cantoned in Kamina . The Government of the Democratic Republic of the Congo was criticized by the Government of Rwanda and RCD-Goma for not handing over the FDLR leaders to the International Tribunal for Rwanda . The Prosecutor of the Tribunal announced , however , that none of the FDLR leaders were on the list of those indicted by the Tribunal . Eight members of FDLR left the Democratic Republic of the Congo on 2 October for Brazzaville , but they were arrested there by local authorities and deported back to Kinshasa the same day . They have since been held at the port of Kinshasa by the immigration authorities , pending further negotiations between the Governments of the Democratic Republic of the Congo and the Republic of the Congo . In another significant development , Tharcisse Renzaho , the former préfet of Kigali , who is on the list of those indicted by the Tribunal , was arrested on 29 September in Kinshasa and transferred to Arusha . Situation in the north-east During the last three months , the overall security conditions in the north-eastern town of Bunia and the entire Ituri region have continued to deteriorate . There have been recurrent ethnic clashes since June , when the Union des patriotes congolais ( UPC ) , a primarily Hema militia , was reinforced and resupplied . On 10 July 2002 , following intense fighting between UPC and RCD-ML troops in the centre of the city , the governor and RCD-ML authorities fled to Beni , leaving Bunia in the hands of the militia . In mid-August , UPC continued its offensive and succeeded in capturing some of the district 's important towns , such as Irumu , 80 km from Bunia on the road to Beni . The violence and the resulting displacement of the population have deepened the mistrust among the communities of Ituri , which is also related to the distribution of resources , as well as manipulation by both internal and external actors . After the signing on 18 April of the Sun City agreement , the Government sought to restore State authority in Ituri through cooperation with RCD-K/ML . The Government dispatched officials to Bunia and Kampala , in order to define the conditions for the extension of its administration and to discuss a timetable for the withdrawal of Ugandan troops . The reactions of the local factions varied , UPC , in particular , expressing its strong opposition to the proposed restoration of State administration . Subsequent events in the region , including the incident in which the Government 's Minister for Human Rights was taken hostage , were covered in my special report . Increased violence in the Isiro region ( Province Orientale ) has also been sparked by the advance of RCD-N towards , and its occupation of , Faradje , Watsa and Nia Nia in territory formerly controlled by RCD-K/ML . MLC has reportedly reinforced and supported RCD-N with equipment , ammunition and personnel . The armed elements of the two organizations share the same name , Armée de libération du Congo ( ALC ) . Their activities seem to be driven in part by a desire for territorial strength as negotiations towards an all-inclusive transitional government progress . At the same time , there are indications that the Government is providing material support to RCD-K/ML , and that RCD-N is forging links with UPC . Situation in the Hauts Plateaux and South Kivu In the Hauts Plateaux area , to the north-west of Lake Tanganyika , RPA and RCD-Goma operations continued against the Banyamulenge group of Patrick Masunzu , which broke away from RCD-Goma earlier in the year . Prior to the initiation of the RPA withdrawal , there were indications that the bulk of this fighting was being conducted by RPA . From mid-August to mid-September , RPA captured some key airstrips , in the east of the Democratic Republic of the Congo , which it alleged were being used by the Government to deliver supplies to armed groups fighting RPA . In reaction to the growing popularity of Commander Masunzu , RCD-Goma “ purged ” some of its members suspected of siding with the Banyamulenge rebellion , in an effort to halt popular support for the movement in South Kivu . On 7 June , during a meeting in Bukavu , the President of RCD-Goma , Adolphe Onusumba , called for the formation of a “ unified front ” against the military operations led by Commander Masunzu . Subsequently , the reinforcement of RPA troops in the Uvira sector indicated that Rwanda might continue to feel threatened by the military resistance of Commander Masunzu and his supporters . However , the situation in the area is now reported to have changed with the withdrawal of RPA forces . According to unconfirmed reports , troops led by Commander Masunzu have reassumed control of the Hauts Plateaux region . Kindu In July , the population in Kindu and in the adjacent village of Alunguli reported outbreaks of intense violence as a result of fighting between RCD-Goma and the Mayi-Mayi . Subsequently , RCD-Goma troops reinforced Kindu and the RCD-Goma Deputy Chief of Staff assumed control over the movement 's operations in the area . RCD-Goma subsequently launched an offensive from Kindu to drive Mayi-Mayi elements out of the region . Well-organized and equipped Mayi-Mayi launched limited but effective counter-attacks . Reports were received of indiscriminate killing of civilians in the course of the fighting , including at Kitongi where some 80 people , mostly women and children , were reportedly burned alive . In the wake of the RPA withdrawal from Kindu and Kalima , violence erupted on 19 September in Kindu town with a firefight between RCD-Goma and the Mayi-Mayi . While the violence subsided that same day with the mediation of MONUC , two Mayi-Mayi activists took refuge on MONUC premises in Kindu for a number of days. RCD-Goma , which made several public statements against MONUC , including specific threats by its President against United Nations personnel , remains in control of Kindu . On 21 September , RCD-Goma troops reportedly engaged in a number of targeted killings of suspected Mayi-Mayi supporters in the area . While the situation remains tense in Kindu , relations between MONUC and RCD-Goma have somewhat improved . Activities of the Mission and the United Nations in support of the peace process Military During the reporting period , MONUC continued to monitor and verify the new defensive positions of the parties , in accordance with its phase II mandate . It also continued to prepare for phase III activities . MONUC currently has some 90 military observer teams located at 50 sites ; 25 of these teams are mobile and available for deployment on a range of monitoring and verifying activities . In addition , 3,590 armed troops are protecting MONUC sector headquarters , logistic bases and coordination centres in the Democratic Republic of the Congo . MONUC therefore has a total of 4,258 military personnel , against a mandated ceiling of 5,537 ( see annex ) . The situation along the disengagement line remains generally stable . While a few positions continue to be occupied in contravention of the disengagement and redeployment plan , the Sun City agreement has had a positive effect on the status of the MLC/RCD-Goma and FAC separation line . The only major violation of the Lusaka Ceasefire Agreement during the reporting period occurred in Pweto in June . The village , occupied by RCD-Goma authorities in violation of the Lusaka Agreement , was taken over by a group of Mayi-Mayi . A subsequent meeting of the Joint Military Commission in Kinshasa concluded with a joint communiqué indicating that the location should be handed over to the Government . However , on 29 June , RCD-Goma recaptured Pweto and remains there now . In Kisangani , following an incident in June when the local RCD-Goma Brigade Commander assaulted MONUC military guards at the Onatra port facility , MONUC has worked actively with local authorities to reduce tension and has stepped up patrols by its military observers . On 8 October , however , MONUC personnel , caught in a demonstration against RCD-Goma , were slightly injured and their vehicles burned . MONUC troops assisting at the scene were compelled to shoot in the air to disperse demonstrators surrounding them . The demonstration was apparently triggered by an alleged robbery attempt and assault by RCD-Goma elements on a university professor . As planning for phase III develops , MONUC is identifying and progressively establishing additional observation sites in the east , in order to create the conditions for future disarmament , demobilization , repatriation , resettlement and reintegration operations and to monitor and verify the withdrawal of foreign forces from the country ( as noted in para . To this end , and subject to security conditions , MONUC plans to deploy military observer teams to Punia , Kalima , Shabunda , Walikale , Baraka , Bunyakiri , Kamituga and Lubutu in the eastern Democratic Republic of the Congo . At the same time , teams will be deployed to Lubumbashi and Kamina in Government-controlled territory , to verify reports of ex-FAR/Interahamwe presence in those areas and to monitor the airfields allegedly used to resupply armed groups in the east . In the meantime United Nations riverine operations continued , allowing MONUC to escort resupply and humanitarian relief barges . Consequently , the first commercial barge convoy in four years , accompanied by MONUC vessels , was dispatched from Kinshasa to Lisala and Bumba on 20 July ( see paras . 36 and 37 ) . Disarmament , demobilization , repatriation , resettlement and reintegration With the conclusion of the Pretoria Agreement on 30 July , the ongoing withdrawal of foreign forces and the easing of political obstacles to the process of disarmament , demobilization , repatriation , resettlement and reintegration , MONUC is refining its comprehensive strategy for this process , in cooperation with the United Nations agencies and international actors involved . This ongoing activity has been given further impetus by the increasing willingness of the Government to address the political obstacles underlying successful disarmament , demobilization , repatriation , resettlement and reintegration , as well as reports by MONUC that several small to medium-sized groups of ex-FAR/Interahamwe may be considering participating in the process . MONUC intends to continue to implement ad hoc disarmament , demobilization and repatriation operations , pending deployment of the two task forces to be based in Kindu and Kisangani , as recommended in the special report ( S/2002/1005 ) . In this connection , the French Ambassador in Kinshasa has recently announced his Government 's intention to make available 1 million euros for disarmament , demobilization and repatriation in the Democratic Republic of the Congo , for both Congolese and foreign armed groups . Since my eleventh report , MONUC has established a disarmament , demobilization , repatriation , resettlement and reintegration presence in Goma , Bukavu and Butembo . Plans are under way for a similar presence in Kamina , Lubumbashi and possibly Shabunda to implement the process in an ad hoc way in those areas . Despite existing security constraints and the difficulties in accessing the armed groups , MONUC will continue to explore the possibility of opening additional offices and sites for reception centres in the east of the country . On 30 September , a first group of 69 Rwandan ex-combatants and 10 civilians left Kamina , where they had been cantoned by the Government , on an exploratory visit to Rwanda . MONUC had earlier succeeded in completing an initial screening of 1,981 combatants at Kamina in December 2001 , but could not complete their demobilization because of their refusal to provide the necessary information concerning personal identification and military background . The exploratory visit has clearly been facilitated by the signature of the Pretoria Agreement and the banning of FDLR , which was opposed to attempts to repatriate the ex-combatants . The group , which was accompanied by MONUC personnel and by South African representatives of the Third Party Verification Mechanism , was flown to Rwanda on MONUC aircraft and spent some 10 days in Kigali and their home communes . MONUC is following up on this exploratory visit with a view to repatriating all the ex-combatants at Kamina . In July , a MONUC disarmament , demobilization , repatriation , resettlement and reintegration team in Beni demobilized Rwandan combatants among a small group of 46 persons , which included dependants and Congolese citizens , who had already been disarmed by the local RCD-K/ML authorities . Although the combatants agreed to be demobilized , they were reluctant to be repatriated . Accordingly , at the invitation of MONUC , the Government of Rwanda sent a team to persuade the ex-combatants to return home . Only eight have returned , however , although other members of the group now appear willing to consider repatriation . In July , MONUC held consultations with the Government of Uganda and the Ugandan Amnesty Commission , concerning a process of disarmament , demobilization , repatriation , resettlement and reintegration for 300 to 400 Allied Democratic Front ( ADF ) combatants present in the Democratic Republic of the Congo . Provided that the security situation around Bunia does not deteriorate , this operation is expected to commence soon . It is to be conducted under the overall supervision of the Ugandan Amnesty Commission and MONUC , in collaboration with the International Organization for Migration and a Ugandan non-governmental organization , with the support of UNICEF and WFP . The Donor Technical Group on Uganda , which consists of prominent international donors , has agreed to finance the operation , in which the role of MONUC will be limited to disarming and demobilizing the ADF combatants in the Democratic Republic of the Congo . In the meantime , MONUC has undertaken efforts to further mainstream disarmament , demobilization , repatriation , resettlement and reintegration within the Mission by intensifying internal consultation in the planning of future such operations during phase III . Such planning takes into account the recent political developments , such as the Pretoria Agreement , lessons learned from previous exercises of this kind conducted by other peacekeeping operations , and the Mission 's experience in Kamina and Beni . As indicated in my special report , MONUC has established a Joint Coordination Committee for disarmament , demobilization , repatriation , resettlement and reintegration and has continued its consultations with United Nations agencies , the World Bank and the diplomatic community , in order to refine the division of labour in respect of these operations and to transform the disarmament , demobilization , repatriation , resettlement and reintegration concept into a joint operational plan . In this context , the cooperation of MONUC with the World Bank is crucial . The World Bank has initiated activities under the Multi-Country Demobilization and Reintegration Programme for the Greater Great Lakes Region , which is designed to support the consolidation of peace in the region . The Programme was established to provide financial and technical assistance to national programmes , regional initiatives and special projects within the framework defined by the greater Great Lakes regional strategy for demobilization and reintegration endorsed by nine countries involved in , or affected by , conflicts in the region , as well as 30 partners from regional organizations , donor countries , international financial institutions and relevant United Nations agencies . Through the Multi-Country Programme , the World Bank and partners will be working closely with national Governments , as they are doing now with the Government of Rwanda , in preparation for reintegration programmes for returning ex-combatants from the Democratic Republic of the Congo . MONUC is collaborating closely with the World Bank to ensure that the process beginning with disarmament and demobilization of ex-combatants in the Democratic Republic of the Congo , for which MONUC will be responsible under the proposed assessed budget arrangements , continues seamlessly towards reintegration of the same groups in Rwanda , where the Rwanda Demobilization and Reintegration Programme , funded by the Multi-Country Programme , would assist former combatants in their transition to civilian life . Most recently , MONUC participated in a seminar conducted by the Bank in Nairobi from 17 to 21 September 2002 to facilitate dialogue between the Governments of the Democratic Republic of the Congo and Rwanda with regard to the technical aspects of the implementation of the Pretoria Agreement . The seminar identified in some detail the main activities to be performed during the disarmament , demobilization , repatriation , resettlement and reintegration operations , indicating where the responsibility for performing them lay . MONUC is mandated only to disarm , demobilize and repatriate the foreign armed groups listed in the Lusaka Agreement . However , circumstances might arise when Congolese groups or individuals might present themselves at a MONUC reception centre , to surrender their weapons in the hope of becoming eligible for some sort of national Congolese demobilization and reinsertion programme . Bearing in mind the responsibility it might be considered to have incurred in agreeing to disarm men in such circumstances , MONUC has also been consulting with specialized agencies and donors about steps it could take , within its mandate and resources , to facilitate their subsequent demobilization and reinsertion . A working arrangement on the ground with the participation of the Government of the Democratic Republic of the Congo , MONUC and UNDP is being considered , for example , to assist with the disarmament , demobilization and reinsertion of Congolese armed groups into society . Reopening of the Congo River There were hopes that significant progress could be achieved towards the reopening of the Congo River after the signature in May of an agreement between the three main parties under the auspices of MONUC . On 20 July , 12 barges set off from Kinshasa to Lisala and Bumba ( northern Equateur ) in the first attempt to resume commercial exchanges in nearly four years . A further commercial convoy of four barges left Kinshasa on 8 October . This will be joined en route by at least four additional barges . In Kisangani , the RCD-Goma authorities continue to insist on convening a tripartite committee meeting to discuss “ technical issues ” with the Government and MLC before lifting all restrictions on river traffic . This demand reflects a disagreement between RCD-Goma and the business community in Kisangani over taxes . MONUC is actively trying to bring the concerned parties together to settle their differences . In the meantime , the slow progress towards an agreement between the three main parties continues to pose a serious threat to the restoration of the freedom of movement of people and goods on the river . Civilian police MONUC is preparing a detailed plan in regard to possible expansion of civilian police activities to meet the rapidly changing circumstances on the ground , especially in the light of the Pretoria and Luanda agreements . There are currently 52 United Nations civilian police officers deployed in Kinshasa , Kisangani and Goma . In accordance with Security Council resolution 1376 ( 2001 ) , the civilian police component is in the process of implementing a pilot project for training the local police in Kisangani . The programme includes a refresher course for already existing police units , and specialized training for traffic and court police , as well as for criminal investigators . The latter comprises training for police cadets , and an advanced training course for police inspectors . As part of the programme , MONUC will proceed , as soon as possible , and in cooperation with bilateral donors , with the refurbishment of the police training centre in Kapalata , as well as the procurement of basic materials such as uniforms , vehicles and communication equipment , through the special trust fund established by the Mission for this purpose . The first session of the short-term “ train-the-trainers ” course in Kisangani was concluded on 31 August and a second session was completed on 15 October . A refresher course for judicial police is to begin on 21 October . Public information Public information deployment and activities have reinforced the visibility of MONUC in all sectors of the Democratic Republic of the Congo . Radio Okapi broadcasts news programmes in five languages from Kinshasa to eight locations : Kisangani , Goma , Kalemie , Kananga , Mbandaka , Gbadolite , Kindu and , as from 6 October , Bukavu . These eight regional FM stations have also commenced locally produced programming . Three short wave transmitters have been installed in Kinshasa and will be fully operational by the end of October , covering the entire country and the region . Radio Okapi has started an information campaign on disarmament , demobilization , repatriation , resettlement and reintegration with specific programmes in French , Swahili and Kinyarwanda targeting both the armed groups and the Congolese population . United Nations agencies have also increased their contributions to Radio Okapi programming . During the reporting period the publication information component of MONUC has produced 60,000 posters and 50,000 bumper stickers in five languages ; these are being disseminated throughout the sectors , by public information staff , military observers , non-governmental organizations and other cooperating partners . In addition , it produces and widely disseminates 5,000 copies of a monthly magazine in French to increase the public 's understanding of the Mission 's mandate and of new developments in the peace process . This component also issues a daily press review , which covers international media and press clippings , a weekly newsletter and a bi-weekly bulletin . At the same time the photography unit of the Mission has created an archiving system and makes regular contributions to MONUC publications , media requests , and the MONUC web site , www . monuc . org . The video unit has been reinforced and has produced an informational video on the Mission . It also produced a video on the disarmament , demobilization , repatriation , resettlement and reintegration operation in Beni and disseminated it to the sectors . Full video coverage of the disarmament , demobilization , repatriation , resettlement and reintegration operation in Kamina-Kigali was also produced and presented to the ex-combatants in the Kamina camp on 10 October before dissemination to all sectors , as part of the information campaign on that process . MONUC is also disseminating information to areas where armed groups are located . Radio Okapi and MONUC publications are increasingly being used to encourage combatants to disarm and repatriate . Three portable mobile radio facilities with FM transmission , to be used for this purpose , were recently procured and should be installed soon . There were several incidents in which local authorities harassed and intimidated Radio Okapi journalists . On 27 August , in Kindu , RCD-Goma military officers arrested and physically assaulted a Radio Okapi journalist . On 13 September , in Gbadolite , another Radio Okapi journalist was detained for eight days by MLC authorities for reporting on the condition of child combatants in the MLC forces . Human rights MONUC continues to receive regular information indicating that the human rights situation in the Democratic Republic of the Congo remains precarious . In recent months , in areas controlled by the Government , there have been several cases of prolonged detention of human rights defenders , a wave of arrests of journalists and the heavy sentencing of some for imputations dommageables , the arrest and detention of relatives and supporters of the leaders of an opposition political party , the Union pour la démocratie et le progrès social ( UDPS ) , and cases of prolonged detention without trial on the order of the Military Prosecutor General . Information received by MONUC includes allegations of arbitrary killings and rapes and excessive use of force by the security forces of all the parties . The situation is particularly worrying in the east . MONUC is especially concerned about consistent reports of violence against women by security and armed groups . On 20 June , the international non-governmental organization Human Rights Watch issued a report documenting the systematic use of rape and other forms of sexual violence against women and girls by armed groups operating in the east . The victims do not always report these incidents , primarily for fear of rejection by their communities and of reprisals . Consequently , there is no appropriate treatment immediately available to these women and girls . MONUC is following up on this report with a view to increasing the protection of women and girls against rape and other violations of human rights . Widespread and grave violations of human rights and international humanitarian law continue to be perpetrated by the armed opposition following several armed conflicts between RCD-Goma/RPA on the one hand , and the Mayi-Mayi and uncontrolled , foreign armed groups on the other , especially in South Kivu and Maniema Provinces . MONUC continues to gather information and report on the conditions of detainees in the Democratic Republic of the Congo , where another aspect of the human rights situation is the deplorable state of prisons and other detention centres . Throughout the country , people continue to be detained without due process . Detainees are treated in a degrading and inhumane manner . Detainees who are beneficiaries of presidential amnesties remain imprisoned . The past three months in Kindu have been marked by human rights violations that have far surpassed the predicted worst-case scenarios . The crisis erupted in August , shortly after RCD reinforced its eighth Brigade with a new commander and chief of staff , both of whom were allegedly involved in the massacres of 14 May in Kisangani . In retaliation for a failed offensive against the Mayi-Mayi , the RCD-Goma soldiers summarily executed 46 civilians , including a 15-year-old boy , and seven members of the same family . In Kindu itself the President of RCD-Goma , in a radio broadcast , accused MONUC of complicity with the Mayi-Mayi . This speech was followed by an outbreak of violence against suspected Mayi-Mayi sympathizers , which reportedly resulted in the killing of 25 people . Most recent reports involve the public execution , on 22 September , of three RCD-Goma soldiers who robbed a trader and , on 6 October , the summary execution by RCD-Goma of six fishermen suspected of being Mayi-Mayi . The number and scale of gross human rights violations is growing rapidly and the situation demands greater protection of civilians under imminent threat of physical violence . Report of the Commission on Human Rights on Kisangani At the request of the Security Council , the Office of the United Nations High Commissioner for Human Rights in cooperation with MONUC undertook an investigation of the events of mid-May in Kisangani , covered in the eleventh report on MONUC ( S/2002/621 ) . From 16 to 22 June , the Special Rapporteur on extrajudicial , summary or arbitrary executions of the Commission on Human Rights , Asma Jahangir , conducted a fact-finding mission to Kinshasa , Goma and Kisangani . On 16 July , the then High Commissioner for Human Rights , Mary Robinson , submitted a report on the Special Rapporteur 's findings and recommendations on the Kisangani situation to the Security Council . The Security Council condemned the actions of RCD-Goma in Kisangani and demanded that the rebel movement bring the perpetrators of the killings to justice . Child protection The reporting period was marked by a disturbing upsurge in the recruitment of child soldiers . MONUC verified the existence of a training camp run by RPA in the area of Luvungui north of Uvira . Of the estimated 500 Mayi-Mayi in training at that location , between 50 and 100 were children under the age of 18. The majority of the victims in the ongoing Hema-Lendu conflict in the area of Bunia are women and children . Among the hundreds of injured women and children admitted to hospitals in Bunia , 80 per cent suffer from wounds to the head , hands and extremities . The perpetrators used knives , cudgels , machetes and other sharp implements as their weapons . The fighting between UPC and RCD-K/ML forces in the north-east has led to a significant rise in the number of child soldiers being recruited by the forces in that area . In Bunia , the forces of Commander Thomas Lubanga have recruited large numbers of child soldiers . Although UNICEF , MONUC and non-governmental organizations continue to plan for and advocate child demobilization in rebel-held areas , rebel parties have not yet agreed to give the international community access to military sites . Discussions on the establishment of child demobilization subcommissions have not yet borne fruit . It is hoped that the latest UNICEF/RCD-Goma efforts will result in the establishment of a subcommission in Kisangani in the near future . Plans for the demobilization of child soldiers in the context of overall disarmament , demobilization , repatriation , resettlement and reintegration are well under way . This is being done in conjunction with other relevant partners , most notably UNICEF . With the Government of Norway 's financial contribution to support the peace process , the Child Protection Section has finalized a plan to augment the capacity of local non-governmental organizations to receive and aid possible child ex-combatants completing the disarmament , demobilization , repatriation , resettlement and reintegration exercise in the Beni-Butembo area . Child protection advisers work together with UNICEF , which is providing similar emergency expansion capacity to local child protection non-governmental organizations in Bukavu in anticipation of needs related to disarmament , demobilization , repatriation , resettlement and reintegration in the area . Gender issues Raising the gender awareness of MONUC personnel , agency partners and the population has been the focus of the work of the gender section . The medium- to long-term objective is to ensure the integration of a gender perspective into all aspects of the Mission 's work . On 23 July , the gender section convened a strategic planning meeting with the Mission 's military and civilian staff to create an action plan for integrating the concept of gender into all MONUC activities . The next step will be to form Mission-wide gender working groups to assess the gender dimensions of the Mission 's work and ensure that gender concerns are accounted for in all of its activities . Sessions on gender sensitivity also continue to be a regular part of the induction programmes offered to all incoming military , civilian and civilian police staff . This is in addition to the gender awareness training of trainers for the local police in Kisangani . Meetings with Congolese civil society organizations , media , and church organizations across the country to discuss their views on the peace process are still being held . The major outcome of such work is to harmonize the vision of women 's groups from the east and the west so that they can work out strategies to ensure their full participation in the implementation of the Nairobi Declaration adopted prior to the inter-Congolese dialogue . A plan of action to address the reports of violence against women in the east was also discussed by various stakeholders . Humanitarian activities Humanitarian conditions in the Democratic Republic of the Congo remain deeply disturbing . Civilians continue to bear the brunt of the crisis . Approximately 17 million people — almost a third of the country 's population of approximately 53 million — are in need of urgent food aid , while approximately 2.2 million people are displaced within the country . During the reporting period , significant new displacement was reported in Ituri and Maniema Provinces . Women , children and the elderly are the most affected by the conflict . A humanitarian assessment team comprising the United Nations Humanitarian Coordinator and representatives of MONUC travelled to Minembwe-Itombwe on 2 August , under the protection of RPA . The team was , however , denied access to other areas further west in the Hauts Plateaux , where there had been fighting between RCD-Goma/RPA and Commander Masunzu 's forces 48 hours before the mission . On 3 August , the team travelled to Fizi-Baraka , but a hostile crowd of civilians and soldiers prevented them from leaving the airport . The mission was successfully completed on 8 August , however . The Humanitarian Coordinator described the situation in the border region of Uvira , the Hauts Plateaux and Fizi-Baraka as a “ creeping disaster ” , with over 100 villages deserted and 20,000 newly displaced families , bringing the total number of internally displaced people in South Kivu to an estimated 400,000 . In the context of continuous military offensives against Masunzu 's stronghold , humanitarian assistance in the area remains limited to ad hoc interventions conducted by the International Committee of the Red Cross . Humanitarian affairs officers have witnessed an increase in recent months in the harassment of relief workers and the looting of their assets . Humanitarian staff in Bunia and Dungu experienced threats of physical violence and looting , which in Bunia resulted in the loss of nearly 14 tons of food destined for vulnerable populations . Several humanitarian teams were evacuated , most notably from Shabunda and Nyankunde . In many areas where there is widespread insecurity , health conditions are reported to have deteriorated alarmingly , and there is evidence of very high malnutrition rates among the populations . Access to war-affected areas remains critical for humanitarian partners . The deteriorating humanitarian situation against the backdrop of planned disarmament , demobilization , repatriation , resettlement and reintegration activities requires a reinvigorated humanitarian effort that expands coverage to more locations . Following consultations with the Office for the Coordination of Humanitarian Affairs and other United Nations and non-governmental partners , MONUC will shortly extend its humanitarian presence beyond its current locations in Kinshasa , Mbandaka , Bukavu , Kisangani , Gbadolite , Kalemie and Goma to under-served locations with significant humanitarian needs . MONUC logistical capabilities have been a great asset to the humanitarian community 's relief efforts in the country . From June to September , MONUC transported more than 95 tons of humanitarian cargo . MONUC also supported the 2002 National Polio Vaccination Campaign during those months ; the campaign achieved 85 to 90 per cent coverage . Mine action While less of a hazard than in other mission areas , mines and unexploded ordnance are still present in the Democratic Republic of the Congo . Most mines were planted in 1999 and 2000. In particular , the areas of Kisangani and Ikela are heavily mined . Reportedly , FAC , RCD , UPDF and RPA frequently used mines in the Mbuji-Mayi , Kabinda , Kabalo , Pweto , Beni , Buta and Tshopo areas . As a consequence of the conflict in Burundi , landmines were planted in Kivu in the Uvira region , close to the Burundi border . It is believed that Uvira , Baraka , Makobolo and the Ruzizi Valley are mined . Reportedly , UPC has also used mines in the recent fighting around Bunia . MONUC works in close collaboration with the Mine Action Coordination Centre , with offices in Kinshasa and Kisangani . MONUC and the Centre share a database on mines and unexploded ordnance and have well-defined standard operational procedures . Mine-clearing activities conducted in the Democratic Republic of the Congo are limited to the work of a Belgian non-governmental organization which works closely with the Mine Action Coordination Centre , local partners and MONUC military engineers . Demining activities in support of MONUC operations in Kindu are currently under contract negotiation , while the contract in Kisangani has been finalized . Quick-impact projects In enhancing its effectiveness , MONUC is endeavouring to engage actively with the local population as a means of winning the support necessary to carry out its mandate . The Mission has made extensive use of quick-impact projects , with a view to making a demonstrable , positive difference in the lives of the people where MONUC is deployed and to enhance its credibility with the local population . MONUC has focused on high visibility projects in the areas of restoration or enhancement of water services and water purification ; provision of public sanitation ; provision of basic medical equipment and medical supplies ; repairs to school buildings and provision of basic school furniture/materiel ; repairs to hospitals/medical facilities ; and repairs to basic community infrastructure . The Mission 's phase III activities , outlined in the special report , will imply deployment into new areas in the east , most of which have suffered from years of conflict . It will be essential for the success of the phase III activities to continue reaching out to the local population to ensure their acceptance of the Mission , and therefore to extend funding for quick-impact projects during phase III . Review and assessment mission The Department of Peacekeeping Operations sent a review and assessment mission to MONUC from 28 July to 8 August , led by former Assistant Secretary-General Manfred Eisele . The aim of the mission was to review the present capability of MONUC to implement its mandate and to meet future challenges , especially in the face of major changes in the peace process in the Democratic Republic of the Congo . The review team , which travelled all over the Mission area , examined various aspects of the MONUC operations and also met with members of the Governments of the Democratic Republic of the Congo and Rwanda as well as the diplomatic community in Kinshasa and Kigali . The review mission found MONUC staff members to be active and committed to fulfilling the Mission 's mandate . They were extremely frank with the review mission in expressing their views on how MONUC could improve its activities as it geared up for phase III activities . The mission found that the main areas in need of enhancement include the setting of overall strategic direction and communication of such direction throughout the Mission and beyond ; strengthening management of the Mission through the appointment of a second deputy Special Representative of the Secretary-General for operations and management , strengthening a number of key posts and ensuring that the Mission is properly staffed ; reviewing the delegation of authority and ensuring appropriate command and control arrangements throughout the Mission ; enhancing information flows and policy and analysis functions , as well as coordination of activities throughout all components of the Mission ; and ensuring that the disarmament , demobilization , repatriation , resettlement and reintegration programme is “ mainstreamed ” through the Mission and is provided with the full support of all components . The report of the assessment mission was presented to me on 1 October , and the members of the Security Council and troop-contributing countries were briefed on the main elements . Subsequent to my approval of the review mission 's wide-ranging recommendations , the Department of Peacekeeping Operations has initiated an action plan so that MONUC can more effectively implement its mandate . In due course , the Department will conduct a review of the implementation of these important recommendations . Logistical activities As MONUC continues its eastward deployment and intensifies the preparations for the launching of a full-scale disarmament , demobilization , repatriation , resettlement and reintegration operation , the daunting logistical support tasks that lie ahead become ever more apparent . Arrangements for the deployment of the two task forces and setting up of temporary reception centres would involve a carefully planned and coordinated engineering effort , requiring an integrated civilian and military approach to optimize the use of the limited engineering resources available in MONUC . Since many of the reception centres may be located in remote and scattered locations with poor or no road access , additional air assets will be required to deploy personnel and equipment to establish , operate and dismantle the centres and associated accommodation camps for ex-combatants and possibly their dependants . Consideration will also have to be given to modalities and funding arrangements for the transportation of the combatants and their families ( estimated at around 90,000 persons ) from the reception centres to their final destinations . Additional technical expertise for the upkeep of airfields associated with centres and camps and to support air operations in general will also need to be considered . The capacities of the logistic bases in Kinshasa and Kisangani will be increased and a new logistic base at Kigoma , United Republic of Tanzania , is being considered to optimize the delivery of equipment and stores . Since logistics operations involving the mobile disarmament and demobilization sites will be complex , the two task forces will have to be self-sustained , and it is expected that all major contingent-owned equipment will be provided under “ wet lease ” arrangements . The task forces will also need to have sufficient integral engineering and aviation assets to support MONUC operations in the specific areas of the establishment of disarmament , demobilization and reintegration reception centres and associated camps , water purification , maintenance of runways/landing grounds and local access road networks , airfield support services and operational demining tasks . Financial aspects The General Assembly , by its resolution 56/252 C of 27 June 2002 , appropriated an amount of $581.9 million for MONUC for the period from 1 July 2002 to 30 June 2003. Since its establishment in October 1999 , the Trust Fund to support the peace process in the Democratic Republic of the Congo has received voluntary contributions amounting to $1.1 million , with expenditures authorized to date in the full amount . As at 31 August 2002 , unpaid assessed contributions to the MONUC special account amounted to $322.9 million . The total outstanding assessed contributions for all peacekeeping operations at that date amounted to $1,781.1 million . Observations Since my last progress report to the Security Council , there have been significant developments in the peace process in the Democratic Republic of the Congo . The signing of the Pretoria and Luanda agreements , the consequent withdrawals of foreign forces from the country , the arrest of three persons indicted by the International Criminal Tribunal for Rwanda in Luanda , Brazzaville and Kinshasa , the banning of the FDLR leadership based in Kinshasa , the successful exploratory visit to Rwanda of a group of ex-combatants and their dependants from Kamina , and the increased contacts between the Governments of the Democratic Republic of the Congo and Rwanda and Uganda are all major steps which can have lasting , positive implications for the political and military situation in the Democratic Republic of the Congo . The parties should be congratulated for the political will they have demonstrated in moving the peace process forward . Nevertheless , there continue to be serious challenges . Heavy fighting continues in the north-eastern and eastern parts of the country . The fragile peace process in the Democratic Republic of the Congo and recent gains made in the implementation of the Pretoria Agreement are in serious danger of being reversed because of the most recent military offensive undertaken against Uvira and other key locations in the east . I urge all parties to put an end to all hostilities and take advantage of the positive atmosphere and opportunities created by recent developments in the country , and especially welcome the role of the Government of South Africa in its persistent effort to keep the peace process on track . The situation in the Ituri region remains worrying . My previous progress reports described the continuing violence and abuses in that area , which have worsened recently . All parties concerned should now work together to promote confidence . I commend the establishment in the Ituri region of the Joint Pacification Commission , under the terms of the Luanda Agreement , and hope that it will serve to restore peace and stability in this troubled region of the country . Equally , the human rights situation in the Democratic Republic of the Congo is a source of grave concern . The current culture of impunity that exists in many parts of the country must end , and those responsible for serious violations of human rights and international humanitarian law must be held accountable . The recent arrests of individuals indicted by the Tribunal and their transfer to Arusha is encouraging in this regard . I strongly condemn the threats and harassment against MONUC staff , including those working for Radio Okapi . The instigators of the latest incidents in Kisangani and elsewhere in the Democratic Republic of the Congo bear responsibility for such acts and must understand that , in order for peace and normalcy to return to the country , the safety and security of United Nations personnel must be guaranteed . There must also be a free flow of information ; the role of Radio Okapi is fundamental in this process . As the peace process in the Democratic Republic of the Congo moves forward , the disarmament , demobilization , repatriation , resettlement and reintegration of foreign armed groups will become a central part of MONUC operations . The Mission has been active in promoting the early implementation of this crucial programme . I am gratified by the close collaboration between MONUC and the different international partners , including the United Nations agencies and programmes , the World Bank , and other members of the donor community ; the United Nations is determined to strengthen this vital coordination . The progress achieved so far in the inter-Congolese dialogue is encouraging . The increasing willingness of the various political actors to engage and address their counterparts is a welcome sign . In this regard , I urge all parties to be guided by the interests of the Congolese people . I believe it is essential to look beyond the distribution of posts in the transitional administration leading towards a new political dispensation , and to begin addressing issues such as security sector reform and the extension of State authority throughout the country . Above all , the Congolese leadership must focus on the creation of a reformed and revitalized State that can meet the aspirations of its people . We must not allow the present opportunity to be lost . I also call on all parties to cooperate in the mediation efforts of my Special Envoy , Moustapha Niasse , and the Government of South Africa , with a view to reaching an early understanding on the transitional arrangements foreseen under the Lusaka Agreement . The United Nations will continue to do its utmost and work with the Congolese parties and people to achieve these aims . To do so , the full support of the international community is needed . In my special report , I have already referred to the need to give strong impetus to the peace process . I once again encourage the Security Council to take the necessary decisions in this regard . Finally , I wish to express my appreciation to my Special Representative , Amos Namanga Ngongi , to the Force Commander , Major General Mountaga Diallo , and to all the men and women of MONUC , military and civilian , for their untiring efforts under the very challenging circumstances still prevailing in the Democratic Republic of the Congo . Annex United Nations Organization Mission in the Democratic Republic of the Congo : military and civilian police strength ( as at 10 October 2002 ) Map to be attached in shop </text>
<text id="un/S_2002_238-A_56_858">
Letter dated 5 March 2002 from the Permanent Representative of Lebanon to the United Nations addressed to the Secretary-General On instructions from my Government and further to my letter dated 19 February 2002 refuting the allegations and fabrications contained in Israel 's letter of 17 January 2002 ( A/56/778-S/2002/79 ) , I have the honour to call your attention to the following : On 9 February 2002 Italy 's ambassador was asked about his country 's attitude to Israel 's media war against Lebanon . He replied : “ I believe it to be a succession of rumours that Israel is circulating about Lebanon . One of these rumours is clearly risible , namely the assertion that the Bekaa valley is serving as a base for extremists arriving from the al-Qa`idah organization , as also is Israel 's claim that the Bekaa contains camps and harbours fundamentalists coming from Afghanistan or other places . I say this is laughable , because the Bekaa is not like Baluchistan or Afghanistan . The Bekaa is a small place where everyone , including me , knows everything . I could act as a guide and take people into the Bekaa to see where members of al-Qa`idah could hide . It is impossible to hide in the Bekaa . It is actually funny to hear such things saidThere is a battle going on in the world . These are empty words that have been published in a few newspapers without people knowing what they are talking about . The situation in the Bekaa is perfectly clear . ” On 8 February 2002 the Washington correspondent of the Lebanese newspaper Al-Safir reported that United States government sources had denied that there was any truth to the claims of Israeli officials that elements of al-Qa`idah , which was founded by Usama bin Laden , had arrived in Lebanon from Afghanistan . They had also stated that the assertion of Israeli Minister for Foreign Affairs Shimon Peres that elements of the Iranian Revolutionary Guard had been deployed in Lebanese territory was groundless . Official sources have said that Israel 's allegations were made in the context of its political and media campaign to mobilize American and international support against Iran and Hizb Allah , a campaign that has benefited greatly from the political and moral momentum created by the charges made by President George W. Bush concerning what he termed the danger from the countries of the “ axis of evil ” consisting of Iran , Iraq and North Korea . Highly placed American sources have said that they do not exclude the possibility that there have been attempts by al-Qa`idah elements fleeing Afghanistan after the recent collapse of the Taliban regime to return to their countries of origin , especially those still in possession of legal documentation . They add : “ There have perhaps been Lebanese nationals among them , but we do not know that for sure . There can be no doubt , however , that there has been no appreciable organized return of al-Qa`idah elements to Lebanon ” . The same sources spoke with evident confidence of the absence of any elements of the Iranian Revolutionary Guard in Lebanon . They stated that there was absolutely no truth in the allegations made , and they hastened to say that it would be relatively easy to verify that fact . The American sources explained the reluctance of Secretary of State Colin L. Powell to deny the allegations directly by saying that he does not wish to create an open crisis with Israel , given that such a public denial would have the appearance of accusing the Israelis of lying . I should be grateful if you would have this letter circulated as a document of the General Assembly , under agenda item 42 , and of the Security Council . ( Signed ) Sélim Tadmoury Ambassador Permanent Representative </text>
<text id="un/S_2002_313-A_56_888">
Letter dated 26 March 2002 from the Permanent Representative of Pakistan to the United Nations addressed to the Secretary-General The joint statement issued by the Foreign Ministers of the Russian Federation and the Republic of India in New Delhi on 4 February 2002 was circulated as a document of the General Assembly and of the Security Council ( A/56/837-S/2002/200 ) on 27 February 2002. I regret to state that the joint statement misrepresents facts and reflects an attempt to cover up the ongoing Indian repression against the Kashmiri people in Indian-occupied Kashmir . The statement tries to mislead international opinion and malign the legitimate struggle of the Kashmiris for their right to determine their own future , pledged to them in the relevant Security Council resolutions , by linking it with international terrorism . The problem in Kashmir has persisted because of India 's refusal to implement the relevant United Nations resolutions . The Kashmiri freedom movement , which had remained peaceful for a decade , became an armed struggle in 1990 because of the increasing Indian oppression . For the last twelve years , to the denial of fundamental human rights in Indian-occupied Kashmir have been added unspeakable atrocities by the Indian occupation forces . Against this backdrop , any attempt to use the current international campaign against global terrorism to malign the legitimate Kashmiri struggle is both cynical and deplorable . The Government of Pakistan also rejects the baseless insinuation implicating Pakistan in terrorism and violence in India . Pakistan believes that instead of blaming others , India should address the causes of discontent and violence afflicting the Indian polity , in particular the rise of Hindu extremism and persistent discrimination against religious minorities . For the past two decades , Pakistan has been a victim of terrorism from across its borders . We condemn terrorism in all its forms and manifestations . Pakistan is playing a key role in the global fight against terrorism in the aftermath of the tragic events of 11 September 2001. The Government of Pakistan has also adopted far-reaching measures to rid our society of extremism as articulated in the President 's historic speech of 12 January 2002. Pakistan remains determined to take this fight to its logical conclusion . I should be grateful if the present letter were circulated as a document of the General Assembly and of the Security Council . ( Signed ) Shamshad Ahmad </text>
<text id="un/S_2002_573-A_56_960">
Letter dated 14 May 2002 from the Permanent Representative of Cuba to the United Nations addressed to the Secretary-General On 6 May 2002 the Under Secretary of State for Arms Control and International Security of the United States of America delivered a speech to the ultra-conservative Heritage Foundation in which he made odious accusations against Cuba , claiming that the country was involved in the development of biological weapons research and development programmes . These slanderous allegations by Mr. John Bolton were met with an adequate and timely response from the Government of the Republic of Cuba in a statement issued by President Fidel Castro Ruz on 10 May 2002 , a copy of which I have the honour to transmit herewith ( see annex ) . I should be grateful if you would arrange to have this letter and its annex circulated as a document of the General Assembly , under agenda items 81 and 166. ( Signed ) Bruno Rodríguez Parrilla Ambassador Permanent Representative Annex to the letter dated 14 May 2002 from the Permanent Representative of Cuba to the United Nations addressed to the Secretary-General [ Original : Spanish ] Reply dated 10 May 2002 from Commander-in-Chief Fidel Castro Ruz , First Secretary of the Central Committee of the Communist Party and President of the Republic of Cuba , to the statements made by the Government of the United States of America concerning biological weapons Barely three days ago , an individual all too familiar to us , Assistant Secretary of State Otto Reich , was caught out in an embarrassing lie when he said that four Cuban aircraft had landed in the Venezuelan capital on 12 April and that nobody knew “ what they were doing there , what they were carrying , we do n't know ” . Apparently , this was the beginning of an anti-Cuba campaign or an attempt at revenge for the stunning failure of the fascist coup he had set in motion , or both . On Tuesday , 7 May , when the Ministry of Foreign Affairs challenged him publicly , the State Department said that it had no confirmation whatsoever and that it did not wish to discuss the subject further . The idea of destroying Cuba , an obsession that has lasted for more than 43 years , has led and continues to lead United States policy down a torturous path strewn with lies , mistakes , failures and miscalculations . What the United States Government is telling the world today and what it is doing with Cuba is perhaps the most grievous and demoralizing contradiction in its foreign policy . Never has the great Power found itself in such a compromising position , and it has no alternative but to lie , lie and lie again . And to do this it has no shortage of unscrupulous characters in high public offices , or of press spokespersons caught up in the constant bitter need to correct mistakes and explain the unexplainable in their bosses ' statements . Even men like Colin Powell , a son of Jamaican immigrants who , despite his military training or maybe because of it , is not considered a hawk because he knows war and has seen men die , a man whom many Americans even came to look on as a potential candidate for president , has found himself implicated by such people in embarrassing intrigues that do little to enhance his standing . He , more than anyone else , knows how little experience and how little intellectual and political worth these people have . Who can be deceived by this new character who is waging a shady campaign against Cuba ? The man in question is John Bolton , the Under Secretary of State for Arms Control no less . What is the purpose of the attack launched by this official in an aggressive anti-Cuban speech delivered at the Heritage Foundation , which is famous for its ultra-right-wing stance ? This statement , ostensibly an analysis of the dangers of terrorism threatening the United States , began by saying : “ In addition to Libya and Syria , there is a threat coming from another BWC signatory , and one that lies just 90 miles from the U. S. mainland — namely , Cuba ” . Then , after the usual name-calling and hate-filled idiocies commonly associated with the arrogant and the misinformed , Mr. Bolton added his own personal touch : “ We know that Cuba is collaborating with other State sponsors of terror . “ Castro has repeatedly denounced the U. S. war on terrorism . He continues to view terror as a legitimate tactic to further revolutionary objectives . Last year , Castro visited Iran , Syria and Libya — all designees on the same list of terrorist-sponsoring States . At Tehran University these were his words : ` Iran and Cuba , in cooperation with each other , can bring America to its knees . The U. S. regime is very weak , and we are witnessing this weakness from close up ' . “ But Cuba 's threat to our security often has been underplayed . An official U. S. Government report in 1998 concluded that Cuba did not represent a significant military threat to the United States or the region . It went only so far as to say that ` Cuba has a limited capacity to engage in some military and intelligence activities which could pose a danger to U. S. citizens under some circumstances ' . ” Mr. Bolton immediately sought to cover up the suspicious fact that no United States official had ever thought to level such shameful accusations against Cuba . He blames this weakness on William Cohen , who was Secretary of Defence four years ago , when the report under attack was issued . Mr. Bolton made no mention at all of the fact that scarcely five months and two weeks earlier , on 19 November 2001 , he had not even mentioned Cuba in a statement he had delivered to the conference of the States parties to the Biological Weapons Convention in Geneva , in which he had cited many countries that worried him as potential producers of biological weapons . What was the reason for this sudden change ? Mr. Bolton 's piece of tabloid journalism of 6 May concludes : “ For decades Cuba has maintained a well-developed and sophisticated biomedical industry , supported until 1990 by the Soviet Union . This industry is one of the most advanced in Latin America , and leads in the production of pharmaceuticals and vaccines that are sold worldwide . Analysts and Cuban defectors have long cast suspicion on the activities conducted in these biomedical facilities . “ Here is what we now know : the United States believes that Cuba has at least a limited offensive biological warfare research and development effort . Cuba has provided dual-use biotechnology to other rogue States . We are concerned that such technology could support BW programmes in those States . We call on Cuba to cease all BW-applicable cooperation with rogue States and to fully comply with all of its obligations under the Biological Weapons Convention . ” The international press was quick to pick up Mr. Bolton 's string of Olympic-sized lies , which is exactly what he wanted : “ Washington , 6 May ( ANSA ) . Under Secretary of State John Bolton today accused Cuba of helping ` enemy Governments ' with biological weapons programmes . “ ` Cuba had at least an offensive biological weapons programme and could be transferring its results to other States hostile to the United States ' , Bolton said . “ The Under Secretary Bolton spoke to the Heritage Foundation , one of the ultra-conservative groups in Washington . ” “ Washington , 6 May ( DPA ) . The United States today accused Cuba of developing offensive biological weapons and of providing information about them to States hostile to the United States , and urged President Fidel Castro 's Government to cease this cooperation . ” “ Washington , 6 May ( REUTERS ) . On Monday , the United States accused three countries — Cuba , Libya and Syria — of trying to develop weapons of mass destruction and warned that it would take steps to prevent them from supplying these arms to terrorist groups . “ ` States that sponsor terror and pursue weapons of mass destruction must stop . States that renounce terror and abandon WMD can become part of our effort . But those who do not can expect to become our targets . ' ” “ Washington , 6 May ( EFE ) . The United States today added Cuba to Syria and Libya on the list of countries who are part of the ` axis of evil ' dedicated to manufacturing weapons of mass destruction , and warned that it would take steps to prevent them from supplying such weapons to terrorist organizations . ” “ Washington , 6 May ( NOTIMEX ) . The United States today included Cuba in the so-called ` axis of evil ' because it thinks it has the capacity to develop biological weapons which are a threat to United States security , a greater threat than that from Iraq , Iran and North Korea . ” “ Washington , 6 May ( AFP ) . On Monday , the United States warned Cuba against any proliferation of biological weapons , urging the Havana Government to cease providing any kind of biotechnological equipment to countries that Washington considers dangerous , such as Iraq and Libya . ” The list and the extent of articles and reports on the subject could go on forever . And so the job has been done ! The entire world , especially the American public , which is constantly being bombarded with perfidious lies , has been told and is ready to believe that Cuba is a biological Power , that it has a programme for producing such weapons and that it poses a danger to the United States . And since John Bolton , the very distinguished Under Secretary of State for Arms Control and International Security , has said it , we must believe it . An outworn ploy and a ridiculous argument However , as the old saying goes , “ lies have short legs ” . Even in the United States there are people who are astounded and who are beginning to read between the lines . “ Washington , 6 May ( NOTIMEX ) . The United States today refused to produce the evidence it had claimed to have to back up the accusations made against Cuba . “ Both , the White House and State Department spokesmen said that the accusation against Cuba is not based on assumptions but on confidential information about the biological and chemical potential of the Cuban pharmaceutical industry . “ This accusation took not only the international community by surprise but also members of the United States Congress . According to the same dispatch , “ political analysts pointed out that the accusation against Cuba made by President George W. Bush 's administration could be part of a White House strategy to find a justification for tightening its isolationist policy on Cuba . “ The statement that Cuba could pose a terrorist threat to the security of the United States was made at a time when several proposals to relax Washington 's Cuba policy are being analysed on Capital Hill . “ Nevertheless , political analysts maintain that in view of this and bearing in mind that his brother Jeb will be seeking re-election as Governor of Florida this year , President Bush wants to ingratiate himself with the Cuban exile community . “ Given the fact that more than four decades of economic blockade against Cuba have not removed Fidel Castro from power in Havana , the only people who want this isolationist policy to remain in effect and harder are the vast majority of the Cuban exile community in the United States . “ The possibility of including Cuba as a member of the so-called ` axis of evil ' with Iraq , Iran and North Korea at the head would make it easier for Bush to obtain Congressional backing for increasing instead of reducing the economic stranglehold on the Island . ” “ Washington , 6 May ( AP ) . ` I think that it will delay us taking new steps towards a trade opening ' , said Graham , chairman of the Senate Select Committee on Intelligence . ` Unilateral steps will be most affected ' . “ Graham , however , did not hide his amazement at Bolton 's accusation . He said that in March the Committee he chairs held a secret hearing on security related issues and the administration made no mention of biological weapons . ” On 7 May , when a journalist asked White House spokesman Ari Fleischer , “ Is there any proof of this , or is this an assumption of the United States ? ” , Fleischer replied , “ No , it 's not an assumption . I assure you that Secretary Bolton would not have said it if he did not have good cause , reason and fact to say it . That was based on sound analysis , and on information that is studied and available to the United States Government . ” This reply is typical of someone who is launching an absolutely baseless and groundless accusation . The only thing that has been carefully thought out is the lies and deceit . It is indeed a sad role that this spokesman has . Furthermore , why should we believe Mr. Bolton ? No one who remembers the 15 incredible pretexts , familiar today from declassified official documents , that were devised late in 1961 by senior United States officials in order to launch a direct military attack against Cuba in 1962 , will be surprised by such a sinister lie . We demand proof . Let them produce even the smallest shred of evidence ! They have no proof , and they cannot because such proof simply does not and cannot exist . Let them not hide behind the alleged sensitivity of their sources when there is not even one atom of truth in what they are saying . This outworn ploy and ridiculous argument only serve to demonstrate their lack of consideration for and low opinion of the American people , whose intelligence deserves more respect . I will also say this : if a Cuban scientist from any of our biotechnology institutes had been cooperating with any country in the development of biological weapons , or if he or she had tried to create such weapons on his or her own initiative , that scientist would have been brought before a court of justice immediately and charged with treason against the country . Article 10 of the Law against Terrorist Acts passed by the National Assembly of Cuba stipulates : “ Any person who manufactures , facilitates , sells , transports , sends , introduces into the country or keeps in his or her possession , in any form or place chemical or biological agents or any other substance from which any product can be derived through research , design or a combination thereof that meets this description ” is liable to penalties of 10 to 30 years ' imprisonment , life imprisonment or the death penalty . This is truly an out and out lie , a treacherous blow against the sale of food to Cuba that was authorized by a law enacted in 2000 which was subsequently amended several times by staunch advocates of the blockade so that it became virtually impossible to apply the law even though it had been passed . This is also an attempt to mislead and discourage the growing number of Americans who are increasingly upset by this cruel and inhuman measure applied against the Cuban people , a measure which flies in the face of the idealism of a nation that has in fact been deceived for decades where Cuba is concerned . The only truth in Bolton 's lie is that Cuba is situated 90 miles from the continental territory of the United States . A slanderous invention , born of lies and deceit It is a false and twisted assertion that Cuba has repeatedly denounced the United States war on terrorism . I have said , and I stand by this , that the solution to this scourge is to be found not through war , which would only serve to breed hatred and fanaticism , but rather through sincere and determined cooperation among all countries of the world and the creation of a truly universal culture and awareness of combating terrorism . We were the first to propose such cooperation on the very day the tragedy occurred in New York . It is a slanderous invention , born of lies and deceit , to say that Castro believes terrorism to be a legitimate tactic for furthering revolutionary objects , as everyone knows that our revolutionary movement never applied methods that were inconsistent with our doctrine , our principles and our concept of armed struggle . Mr. Bolton , you had better get your facts straight ; do n't let yourself be misled by the fantastic stories told by your dear friends at the Foundation . Never were the civilian population or innocent people the victims of our actions . Our tactic was always to fight against heavily equipped enemy units . Right now , you want to call any armed resistance terrorism , regardless of the legitimate causes that might justify it . Following this logic , one could apply such a definition to the struggle of the American colonists who rebelled and fought against English domination . George Washington and those who won the independence of the United States of America after long years of war and enormous sacrifices were not terrorists . Someone steered you wrong , Mr. Bolton , when they told you about my speech at the University of Tehran . It was not one speech but two , at two universities , and a few remarks made at the end of my visit to the mausoleum that houses the remains of Imam Khomeini . I have gone over both of them carefully . In my remarks to the students in Tehran , there is not one single paragraph that resembles the one you dishonestly included in your speech to the Heritage Foundation on 6 May . I never said that “ Iran and Cuba , in cooperation with each other , can bring America to its knees ” . I did say , in one of the three speeches I gave during that visit , that imperialism was bereft of ideas , that ideas were more powerful than weapons and that one day , imperialism would crumble . I also said that the Shah “ was overthrown by the people through heroism , without a single weapon , which demonstrates the power of ideas and that there is no one in the world so powerful that they cannot be overthrown by ideas . That is our hope ” . Lastly , I added : “ There is a super-Power with thousands of nuclear weapons , aircraft , armoured vessels , aircraft carriers , smart missiles no matter how many weapons or how much wealth it has , it will not be able to overcome human beings ” . I made not the slightest mention of the use of weapons in that struggle . In fact , I said just the opposite . This is what I think , that is how I saw it then and that is what I said . I am not in the habit of hiding my thoughts or manipulating my words . My speeches in the Iranian capital were broadcast on Cuban radio and television . Thus Mr. Bolton did not discover anything , and I do not renounce my ideas . I said some other things about doctrine and political principles . I have all the unedited tapes and transcripts of speeches , and I can prove what I said . I should add that when I visited Iran , I had the honour to learn about a great country with a culture that goes back thousands of years , a country with deep religious beliefs and great spiritual strength , a country that seeks to eradicate poverty , combat drug trafficking and other such plagues and is determined to bring education , health , employment and well-being to more than 65 million people . Not one of the many leaders I talked to said anything to me about biological weapons or any other kind of weapon . What a vast difference I perceived between that culture and customs and those of the West . But I did not only visit that country , I also visited Algeria , Malaysia , Qatar , Syria and Libya , where they showed me how Qaddafi 's family home had been destroyed and told of the loss of human life , including a little girl , caused by the brutal F-16 air raid . Thousands of years of history are accumulated in those parts of the world , which must not be destroyed nor their people annihilated . Billions of people around the world have watched the televised images of the terrible events in Palestine with deep indignation . Apparently , when Mr. Bolton alluded to my speech in Iran , he irresponsibly and dishonestly mixed excerpts of what I had said with fragments and statements of what other people had said to foreign press agencies , information from other sources obtained from wire-service cables or words of his own invention . The tangle he wove with these materials is incomprehensible even to him . My clear , precise and transparent statements can be found in the speeches I have mentioned and in the press communiqué issued on 10 May 2001 by both sides , in which , incidentally , the Cuban position against terrorism is set out in paragraph 6 of the agreed document , which reads : “ While condemning the phenomenon of terrorism in all its forms , especially State terrorism , the two parties agreed to cooperate closely at the bilateral and international levels to combat and eliminate this terrible phenomenon , to cooperate in the fight against international organized crime and drug trafficking , being always mindful of the cardinal principles of international law , and particularly those of sovereignty and non-interference in the internal affairs of States ” . This statement was issued 127 days before 11 September . I should like to thank Mr. Bolton for his praise of our pharmaceutical industry , “ one of the most advanced in Latin America , [ which ] leads in the production of pharmaceuticals and vaccines that are sold worldwide ” to use his own words . We only wish it were more advanced . Even his country could benefit from some of its discoveries , but they would not allow it . Yet , he lies shamelessly when he tells America and the world that the United States believes that Cuba is engaged in at least a limited offensive biological warfare research and development effort , a statement that is as false as it is serious . Our researchers and doctors are educated to hold an elevated concept of solidarity and ethics , as billions of people around the world can testify . They work for the well-being and health of human beings . For 40 years , 34,307 Cuban medical doctors and health workers have provided services free of charge in a large number of poor countries , saving the lives and safeguarding the health of millions . No one in the world displays greater dedication or willingness to make sacrifices . At this very moment , 2,671 of them are working in isolated and inhospitable places in Latin America , the Caribbean and Africa . It would be very difficult to persuade these men and women to produce viruses and bacteria to kill children , women , the elderly or citizens of any country . The pride and high moral standards of our people , which has enabled it to withstand 43 years of aggression and embargoes , have their basis in the rationality of a policy that does not contradict their ethics or principles . Some 39,800 young people from more than 120 third world countries have obtained degrees in 33 university and technical fields in Cuba . Even under the conditions obtaining during the special period , as a result of a cruel economic blockade , 8,053 young people from Latin America , the Caribbean and Africa are studying medicine in our country free of charge , studies that would cost more than $200,000 in the United States . Despite Bolton 's lies and those of many others like him , Cuba enjoys great prestige because of the health services it has provided to mankind . This is a true fight against terror in a form that many choose to ignore : the diseases that kill more than 11 million children every year , children whose lives could be saved were it not for the selfish attitude of the industrialized world . An incalculable number of people have survived or recovered their health thanks to the selfless work of the doctors who come from a poor small country and treat them with vaccines and preventive methods or therapies developed by Cuba . We should like to know if the United States Government is doing something similar , or if it would be prepared to cooperate in such programmes for the benefit of those it euphemistically describes as emerging countries , as we have not excluded any economically developed nations from our programmes . We have even offered hundreds of scholarships to American young people who lack the money to study medicine in their own country so that they might study at the Latin American School of Medical Sciences . Cuban children are vaccinated against 13 diseases and enjoy wonderful health . The infant mortality rate per 1,000 live births is lower than that of the United States itself . Medical care is guaranteed to 100 per cent of the population absolutely free of charge . Unfortunately , in the United States , which has a population of over 280 million , 16 per cent do not have medical insurance , and that includes more than 10 million children . In such an immensely rich and scientifically advanced country , where hundreds of thousands of people die every year for these reasons , who is to blame ? Who kills these people , and who denounces such facts ? How can they invent , with what moral right can they make pronouncements from there , and who is going to believe the heinous slander that we Cubans are developing biological warfare programmes ? On the other hand , never once during the 40 years of the Cuban Revolution has anyone launched or taken part in a terrorist act against the United States from our territory . Not one drop of United States blood has been shed , nor has any United States company lost so much as a single screw as a result of terrorist acts originating in Cuba . Those in the United States who accuse our country of terrorism or of supporting or sponsoring terrorism cannot say this . Thousands of our compatriots have died , and tens of thousands of acts of sabotage have been recorded in the context of terrorist acts or aggression perpetrated by the United States against Cuba . How can their spokespersons deny these facts ? I am not referring to the American people ; I am referring to their Governments . The overriding question of the powers given to United States government officials to carry extrajudicial executions and kill people anywhere in the world has yet to be clarified . I myself have often been the target of such sinister plans . This is how they operated in the past . Have they or have they not reverted to such revolting methods ? Why does n't Mr. Bolton tell us a little bit about this ? Cuba 's policy on weapons of mass destruction is irreproachable Cuba 's policy on weapons of mass destruction has been irreproachable . No one has ever produced a single piece of evidence that any programme for the development of nuclear , chemical or biological weapons has been set up in our country . Those who lack a sense of ethics or fail to understand that the actions of the Cuban Government are governed by truth and transparency might at least understand that doing otherwise would have been incredibly foolish . Any such programme would bring the economy of any small country to bankruptcy . Cuba would never have been able to transport such weapons , and it would be a mistake to use them in battle against an enemy that had a thousand times more and that would be only too happy to find an excuse to use them . From a political standpoint , we are living in an era in which there are and will be weapons much more powerful than any produced through technology — namely , the weapons of morality , reason and ideas . Without these , no country is weak , but without them , no nation is powerful . Adherence to this maxim requires exceptionally strong convictions , nerves of steel and talent . It should be known by now that , as far as the Cuban people is concerned , the values that inspire freedom , dignity , love of one 's homeland , its identity , culture , and justice in the strictest sense a man can imagine are more valuable than anything on earth . These are not weapons of mass destruction but weapons of mass moral defence , and we are willing to fight and die for them . I understand that for a man like Mr. Bolton , intoxicated with the military , economic and technological might of the super-Power on whose behalf he speaks , it might not be easy to understand such things . However , it would be a good idea if he tried . Cuba has absolutely nothing to hide . On the contrary , it is proud of its development in the biomedical research field . I shall offer a brief historical summary : • 1979 : the Genetic Engineering Group was set up in the National Centre for Scientific Research ; • 1981 : the first biotechnology scientific-productive institution devoted to producing alpha and beta interferon was founded ; • The medical-pharmaceutical and biotechnology industry programme : this came into being as a result of the scientific , economic and social development the country had achieved ; • Cuba met the standards for inspection and certification by international agencies and by the national regulatory agencies of those countries with which it was to have trade relations ; • The bulk of the investment programme is developed between 1990 and 1997 , comprising 40 facilities ; • A completely humanitarian industry is developed to research and produce medicines for preventing disease and saving lives , as well as to increase food production ; • The purchase of technological equipment used worldwide from commercial companies with an international reputation ; • Under agreements concluded by Cuba pursuant to the Biological Weapons Convention , the Cuban biotechnology industry , health system and civil defence organizations submit an annual report to the United Nations on confidence-building measures ; • Many regulatory agencies from various countries have visited Cuban productive biotechnology facilities as a prerequisite for marketing our products in their countries ; • In the next few years , 50 new products will come on the market , including biopharmaceuticals , vaccines and diagnosis kits ; • Our country already has a stock of intellectual property consisting of more than 150 inventions and over 500 patents registered abroad . The results of scientific research are published in the most important international journals ; • 1990 : Cuban products began to be exported , and exports have increased every year since then ; • 1992 : Cuba signed the Convention on Biological Diversity , ratifying it in 1994 ; • 1995 : Landmark forms of marketing are introduced : technology transfers , at-risk development contracts with foreign companies , and production-commercial partnerships ; • Today , products and technology of the Cuban biotechnology industry are available in more than 40 countries . Agreements for technology transfers or negotiations are currently under way with 14 countries : India : 4 transfers , 4 products . China : 2 transfers , 4 products . Brazil : 2 transfers , 2 products . Egypt : 4 transfers , 1 product under negotiation . Malaysia : 6 transfers . Iran : 4 transfers , 4 products . Russia : 1 transfer , 1 product . South Africa : 1 transfer , 1 product . Tunisia : 1 transfer , 1 product . Algeria : 1 transfer , 3 products . Great Britain-Belgium : 1 transfer , 1 product . Venezuela : 1 transfer , 2 products under negotiation . Mexico : 1 transfer , 1 product . New trade and production negotiations are under way with 10 countries : Malaysia , Netherlands , Spain , Brazil , Venezuela , Viet Nam , Mexico , Ukraine , Germany and the United States of America ( in this case negotiations over the use of the Cuban anti-meningitis vaccine and the first contacts for possible clinical trials with the EGF vaccine for lung cancer ) . Cuban biotechnology centres have already registered : 24 products , both biopharmaceuticals and vaccines 49 cutting-edge generic medicines 5 products for treating AIDS 15 new medical equipment 24 diagnosis systems . Building on these results , scientific research is now focusing on 60 projects . Among the most significant new products that scientific researchers are trying to obtain are the following : 29 new vaccines including 8 cancer vaccines , 4 of which are in the clinical trial stage not only in Cuba but also in Canada , Argentina and England ; 21 innovative products for treating cancer plus the 28 cytostatics already known , which a new plant will begin producing . Cuban technology centres have filed for patents for 150 inventions , bringing our total number of patents registered to 505. Four of these patents have been awarded the Medal of the World Intellectual Property Organization . Countless politicians , scientists and business persons have visited Cuban technology institutes . In 2000 , 1,520 people visited just one of the most important centres ; 484 of them came from the United States . The doors of our research centres are open to any international institution . In an official public note , Cuba has proposed three important draft agreements to the United States which are more beneficial for the United States than they are for Cuba , given the extent of the problems in each of the two countries : a draft agreement on immigration issues ; a draft cooperation agreement to fight illegal trafficking in narcotic drugs and psychotropic substances ; and a draft bilateral programme on cooperation to fight terrorism . To date we have received no reply whatsoever . Perhaps their reply is to accuse us of manufacturing biological weapons ? Who do they think they can intimidate with that ? We are urged to stop any kind of cooperation applicable to biological weapons with “ rogue ” States and to meet all our obligations under the Biological Weapons Convention . What international organization decides whether a country is or is not a rogue State ? What rule of the Biological Weapons Convention has Cuba violated ? Is it perhaps that , on top of the criminal blockade , they are now trying to prevent us from marketing our medicines and using our most wholesome and noblest products , the fruit of the talent of our scientists , to place them at the service of any person 's health anywhere in the world ? Could it be that the United States Government wants to have a bilateral agreement in addition to those Cuba has proposed , namely , cooperation in the struggle against the production of biological weapons ? It should say so , then . We would be willing to include such an agreement on our list of products pending a reply . We are sorry , Mr. Bolton . After the lies , slanders , tales and insults you launched in your speech of 6 May , we are sorry to tell you that you lack any moral standing to preach to Cuba on this subject and even less to make any demand at all using a threatening tone and language . Neither can you pretend to teach Cuba any lesson in politics or ethics . In any event , you and your Government might draw inspiration from Cuba 's decent and honourable behaviour . I can assure you that we will charge absolutely nothing for this technology transfer . </text>
<text id="un/S_2003_326-A_ES-10_222">
Identical letters dated 17 March 2003 from the Permanent Observer of Palestine to the United Nations addressed to the Secretary-General and the President of the Security Council The vicious military campaign being carried out by Israel , the occupying Power , against the Palestinian people in the Occupied Palestinian Territory , including East Jerusalem , continues to widen and intensify , claiming even more human lives in its wake . Palestinian cities , towns , villages and refugee camps continue to be targeted by the Israeli occupying forces , which routinely launch raids and attacks , using excessive and indiscriminate force against the defenceless Palestinian civilian population . Every day that passes witnesses more death , more destruction and the ongoing devastation of Palestinian society in all its aspects as the occupying Power continues to pursue this campaign of war crimes , State terrorism and systematic human rights violations against the Palestinian people . In the 10 days since our last letter , the Israeli occupying forces have killed at least 41 Palestinians , including children , and killed one foreign national ( American ) . Many other Palestinians have been wounded , several of them critically , during recent attacks by the occupying forces . In addition to the extrajudicial executions being regularly committed by the Israeli occupying forces against targeted Palestinians , the occupying forces continue to wilfully kill civilians through the use of excessive and indiscriminate force against the Palestinian population under occupation . An extreme illustration of such excessive and indiscriminate use of force and the occupying forces ' shoot-to-kill policy occurred this past week , on Thursday , 13 March , when Israeli troops unleashed a barrage of machine gun and helicopter fire on two men on a road near Hebron , riddling their car with bullets and killing both of them . The two men killed were in fact Israeli soldiers , whom the occupying forces stated they had “ mistaken ” for Palestinians . Indeed , without provocation , without reason , without questions , the occupying forces shot at the men , intending to kill them and proving once again how lax the occupying Power 's firing regulations are and how instituted the policy of wilful killing of Palestinians has become among the Israeli occupying forces . During this same period , dozens of Palestinian homes have been deliberately demolished by the occupying forces , leaving hundreds of Palestinians homeless , and dozens of other Palestinian homes and shelters have been damaged , many severely , by the occupying forces during their assaults . Moreover , the occupying forces continue to carry out raids and searches of homes and round-ups , while at the same time abducting , arresting and detaining Palestinians throughout the Occupied Palestinian Territory . In less than two weeks , more than 100 Palestinians , including many from the Jenin , Nablus , Al-Khalil and Gaza City areas , have been detained by the Israeli occupying forces . These people are now being held illegally by the occupying Power , in addition to the more than 5,000 Palestinians being held in Israeli jails and detention centres , including nearly 65 Palestinian women . With regard to the recent killings committed , just today , 17 March , the Israeli occupying forces , in two different assaults in the Gaza Strip , killed 10 Palestinians , among them a two-year-old girl , Hanan Ziyad Al-Asar , and two other Palestinian children , and killed 2 Palestinians in the Tulkarem area . In Gaza , early in the morning ( Palestine time ) , Israeli tanks and armoured vehicles , backed by helicopter gunships , raided the densely populated Nusseirat refugee camp , killing at least seven people and wounding several others . A number of Palestinian homes were also blown up by the occupying forces during this assault . Later on the same day , the Israeli occupying forces raided the town of Beit Lahiya , firing indiscriminately in the area as children were going to school and killing three Palestinians . In addition , the occupying forces rounded up hundreds of residents of Beit Lahiya for questioning . These brutal , wilful killings come on the heels of recent attacks launched by the occupying forces in the same area as well as in other areas that have killed many Palestinians . In this regard , last week , in less than 24 hours , the Israeli occupying forces killed 11 Palestinians in the Jenin area . On Thursday , 13 March , the occupying forces attacked the village of Tamoun near the city of Jenin , killing 5 Palestinians . The following day , the occupying forces launched yet another raid in the Jenin refugee camp , killing 6 Palestinians and causing extensive damage . Further , in an attack committed earlier in the week , Israeli occupying forces killed another Palestinian during a home demolition in Gaza . Indeed , the occupying Power 's illegal practice of home demolitions has not only left thousands homeless but has also been a lethal practice that has claimed the lives of many . As such , the immense bulldozers being used by the Israeli occupying forces to raze and destroy Palestinian homes , lands and infrastructure represent yet another deadly weapon in Israel 's vast military arsenal . Regrettably , it is not only the Palestinian people that have suffered grave loss under the treads and plows of Israel 's mighty bulldozers . Yesterday , 16 March , in a horrific act of wilful killing , an Israeli bulldozer ran over and killed a 23-year-old American woman , Rachel Corrie , during a home demolition in Rafah in the Gaza Strip . Ms. Corrie was among a group of activists with the International Solidarity Movement ( ISM ) , who were protesting the home demolitions being carried out by the occupying forces . The ISM activists have repeatedly and voluntarily participated in such protests and non-violent demonstrations throughout the Occupied Palestinian Territory , trying to provide assistance and protection to the Palestinian civilian population facing Israel 's relentless military onslaught . Ms. Corrie 's tragic death provides even further proof of the excessive and indiscriminate force being used by the occupying Power against civilians . In this regard , Israeli claims that the driver of the bulldozer did not see Ms. Corrie have been refuted by several witnesses , who stated that not only was she visible in a bright orange jacket , but that , using a megaphone , she had been speaking to the driver for several minutes prior to him running her over with the bulldozer 's huge plow and treads . Ms. Corrie 's killing by the Israeli occupying forces should be firmly condemned by the international community . Failure to do so will only further sanction the impunity with which Israel , the occupying Power , has been feverishly carrying out its bloody and brutal campaign throughout the Occupied Palestinian Territory , including East Jerusalem . Indeed , such wilful killing of a civilian is a war crime , and the perpetrators of this crime must be held accountable and brought to justice . This letter is in follow-up to our previous 161 letters to you regarding the ongoing crisis in the Occupied Palestinian Territory , including East Jerusalem , since 28 September 2000. These letters , dated from 29 September 2000 ( A/55/432-S/2001/921 ) to 7 March 2003 ( A/ES-10/221-S/2003/287 ) , constitute a basic record of the crimes committed by the Israeli occupying forces against the Palestinian people since September 2000. For all these war crimes , State terrorism and systematic human rights violations committed against the Palestinian people , Israel , the occupying Power , must be held accountable and the perpetrators must be brought to justice . Accordingly , in follow-up to the above-mentioned letters , it is my deep regret to inform you that , since our last letter to you , the Israeli occupying forces have killed at least 41 Palestinians , including children , raising the total number of martyrs to 2,265 Palestinians . ( The names of the martyrs that have been identified thus far are contained in the annex to the present letter . I would be grateful if you would arrange to have the present letter and its annex distributed as a document of the tenth emergency special session of the General Assembly , under agenda item 5 , and of the Security Council . ( Signed ) Nasser Al-Kidwa Ambassador Permanent Observer of Palestine to the United Nations Annex to the identical letters dated 17 March 2003 from the Permanent Observer of Palestine to the United Nations addressed to the Secretary-General and the President of the Security Council Names of martyrs killed by the Israeli occupying forces in the Occupied Palestinian Territory , including East Jerusalem* * The total number of Palestinians killed by the Israeli occupying forces since 28 September 2000 is 2,265 martyrs . ( Saturday , 8 March to Monday , 17 March 2003 ) Saturday , 8 March 2003 Ibrahim Ahmed Khaled Al-Makadmeh Ala'a Odeh Al-Shukri Khaled Hassan Juma'a Abdelrahman Zuhair Al-Amoudi Mahmoud Hassan Al-Zinati Mufeed Saed Al-Daefi Sunday , 9 March 2003 Ribhi Mahmoud Abdelraziq Obeid Tuesday , 11 March 2003 Imad Hussein Abu Gharkoud Mohammed Ismail Ayash Nidal Ibrahim Abu Saqr Hafez Najmy Al-Rajbi Jabr Jaber Joubran Wednesday , 12 March 2003 Rami Taleb Saed Al-Ashqar Thursday , 13 March 2003 Samir Saleh Mahra ( from wounds sustained earlier ) Baker Nayef Attiyeh Bani Odeh Imad Nayef Attiyeh Bani Odeh Sami Fathi Mustafa Basharat Amin Ali Sa'ad Basharat ( 18 years old ) Mohammed Ghazi Abu Murad Mahajneh Friday , 14 March 2003 Yussef Ahmed Hassan Musharqeh Wathiq Ahmed Al-Bish Ighbaryeh Rabea ' Farah Hasan Sharkawi Osama Ribhi Saed Abu Khalil ( 15 years old ) Ibrahim Khalil Minizil Saleh Adeeb Bu'atewi ( from wounds sustained earlier ) Jihad Samir Abu Rabea ' ( 17 years old ) Mohammed Nizar Ibrahim Selim ( 17 years old ) Sunday , 16 March 2003 Ahmed Mahmoud Al-Najjar Mohammed Issa Abdelhady Monday , 17 March 2003 Hanan Ziyad Al-Asar ( 2 years old ) Omar Hassan Darwish ( 13 years old ) Omar Tawfiq Abu Yussef ( 16 years old ) Iyad Bashir Azreeq Ibrahim Yussef Al-Othmani Saed Hosni Al-Taweel Mohammed Rajeb Al-Safeen Ramzi Al-Sudoodi Shadi Kharees Ala'a Al-Kahlousa Muaed Ahmed Al-Ashqar Samer Riyad Mohammed Al-Ashqar </text>
<text id="un/S_2006_490">
Letter dated 5 July 2006 from the Permanent Representative of the Sudan to the United Nations addressed to the President of the Security Council Upon instructions from my Government , I have the honour to transmit herewith a cable message dated 4 July 2006 from Lam Akol Ajawin , Minister for Foreign Affairs , to the President of the Security Council concerning the aggressions by the so called National Redemption Front ( see annex ) , NRF , carried out against the town of Hamrat al-Sheikh in North Kordofan State , in an attempt to impede the implementation of the Darfur Peace Agreement . I would highly appreciate if you could have the present letter and its annex circulated as a document of the Security Council . ( Signed ) Omar B. Manis Chargé d'affaires a. i. Annex to the letter dated 5 July 2006 from the Permanent Representative of the Sudan to the United Nations addressed to the President of the Security Council [ Original : Arabic ] At a time when the Government of National Unity and its partners from the Sudan Liberation Movement ( SLM ) are intent on implementing the Darfur Peace Agreement , we regret to inform you of a treacherous act of aggression perpetrated with the aim of wrecking the Darfur Peace Agreement in its early stages and extinguishing the glimmer of hope for the restoration of peace and stability in the Darfur region . This act constitutes a blatant challenge to the will for peace and to the will of the international community , in particular the Security Council . It is hardly surprising that such an act of aggression should have been perpetrated at this time by a group that openly refused to sign the Agreement and publicly declared its resolve to torpedo it . On 3 June , a group calling itself the National Redemption Front ( NRF ) carried out a full military attack on the town of Hamrat al-Sheikh , located in Northern Kordafan . Targeted at the town 's public amenities , the attack caused loss of life and property , in addition to which there was widespread looting of both public and private property . It should be noted that the NRF , which was formed on 30 June 2006 in the Eritrean capital , Asmara , is an alliance composed of groups that refused to sign the Darfur Peace Agreement . Its founding declaration was signed by Mr. Khalil Ibrahim , Chairman of the Justice and Equality Movement ( JEM ) , Mr. Ahmed Ibrahim Diraig and Mr. Sharif Harir for the Sudanese Federal Democratic Alliance ( SFDA ) , and Mr. Khamis Abdalla Abakr , SLM dissident . The group responsible for the attack unhesitatingly declared that it would be pursuing its acts of sabotage in order to undermine the Peace Agreement . Moreover , as indicated in the communiqué annexed hereto , it affirmed that , as far as it was concerned , the Darfur Peace Agreement was simply a lie . In bringing this regrettable incident to your attention , it is our assertion that the group would never have dared to take such action unless it had been fully confident that it would not be held to account . We therefore emphasize that the credibility of the Security Council is now being directly tested , the question being whether it is able to deter saboteurs and put a stop to those who have set about destroying the Darfur Peace Agreement . This treacherous aggression constitutes an immediate threat to the Peace Agreement , takes the war beyond Darfur and is a flagrant violation of the cease-fire agreements , as well as a blatant defiance of all Security Council resolutions on Darfur , in particular resolution 1591 ( 2005 ) . The Government of the Sudan calls on the Security Council to shoulder its full responsibilities under the Charter of the United Nations for the purpose of protecting the Darfur Peace Agreement and to take decisive and comprehensive measures against this treacherous group as a deterrent to anyone planning to destroy the Agreement . ( Signed ) Lam Akol Ajawin Minister for Foreign Affairs President of the Security Council United Nations New York Enclosure : Text of the communiqué issued by the group which carried out the attack Military communiqué No. 1/Sudanese National Redemption Front Today , 3 July 2006 , the forces of the National Redemption Front ( NRF ) seized the strategic town of Hamrat al-Sheikh , which is situated 200 kilometres north-west of the capital , Khartoum , in the Kordofan region . Our forces succeeded in destroying two brigades of government forces deployed as an advance force to protect the capital , Khartoum . The NRF forces also eliminated the security and police forces stationed in the region , in addition to which they seized all ammunition , weapons and equipped military vehicles belonging to the government forces . Our forces also captured a large number of the defeated forces . The NRF forces are heading towards the capital , Khartoum . The NRF offers this victory in the service of all the marginalized and oppressed people of Darfur and refutes the lie that peace and stability have been restored to the country . The NRF forces affirm that the struggle will continue until the fall of the genocidal regime in Khartoum . “ The unjust will soon know how terrible their end will be . ” Commander Abdullah Bandah Abakr Commander Adam Bakhit Liberated territories - Hamrat al-Sheikh 3 July 2006 </text>
<text id="un/S_2009_208-A_63_820">
Letter dated 1 April 2009 from the Chargé d'affaires a. i. of the Permanent Mission of the Russian Federation to the United Nations addressed to the Secretary-General I have the honour to transmit herewith the text of a decision of the State Duma of the Federal Assembly of the Russian Federation in connection with its statement “ On the tenth anniversary of the military operation launched by the North Atlantic Treaty Organization ( NATO ) against the Federal Republic of Yugoslavia ” ( see annex ) . I should be grateful if you would have the aforementioned decision and statement issued and circulated as a document of the General Assembly , under agenda items 12 and 68 , and of the Security Council . ( Signed ) Igor Shcherbak First Deputy Permanent Representative of the Russian Federation to the United Nations Annex to the letter dated 1 April 2009 from the Chargé d'affaires a. i. of the Permanent Mission of the Russian Federation to the United Nations addressed to the Secretary-General Statement of the State Duma of the Federal Assembly of the Russian Federation “ On the tenth anniversary of the military operation launched by the North Atlantic Treaty Organization ( NATO ) against the Federal Republic of Yugoslavia ” The State Duma of the Federal Assembly of the Russian Federation hereby decides : To adopt the statement of the State Duma of the Federal Assembly of the Russian Federation “ On the tenth anniversary of the military operation launched by the North Atlantic Treaty Organization ( NATO ) against the Federal Republic of Yugoslavia ” . To transmit this decision and the aforementioned statement to the President of the Russian Federation , Mr. D. A. Medvedev , the Government of the Russian Federation , the Public Chamber of the Russian Federation , the United Nations , the Inter-Parliamentary Union , the European Parliament , the Parliamentary Assembly of the Council of Europe , the Parliamentary Assembly of the Organization for Security and Cooperation in Europe , the Inter-Parliamentary Assembly of the States Members of the Commonwealth of Independent States , the Parliamentary Assembly of the North Atlantic Treaty Organization and the National Assembly of the Republic of Serbia . To transmit this decision and the aforementioned statement to the Parliamentary Gazette for official publication . This decision shall enter into force on the date of its adoption . ( Signed ) B. V. Gryzlov Chairman of the State Duma of the Federal Assembly of the Russian Federation Moscow , 20 March 2009 No. 1857-5 GD Enclosure On the tenth anniversary of the military operation launched by the North Atlantic Treaty Organization ( NATO ) against the Federal Republic of Yugoslavia In connection with the tenth anniversary of the military operation launched by the North Atlantic Treaty Organization ( NATO ) against the Federal Republic of Yugoslavia , the State Duma of the Federal Assembly of the Russian Federation declares that its assessment of this aggressive act against a sovereign State remains unchanged . In its statement of 27 March 1999 “ In connection with the aggression of the North Atlantic Treaty Organization against the Federal Republic of Yugoslavia ” , the State Duma strongly condemned the war against an independent State and the missile and bomb attacks on civilians , concluding that “ the military actions against Yugoslavia by NATO , undertaken without the authorization of the United Nations Security Council , undermine the entire system of international security based on the authority of the United Nations and discredit the role of the Organization for Security and Cooperation in Europe ( OSCE ) ” . Time has shown the correctness of that assessment , including the assertion that any actions taken to bypass the United Nations , in violation of international law , will never help to resolve complex conflicts or to stabilize the international situation . The military operation , justified in the West on humanitarian grounds , caused great harm to the people and economy of the Federal Republic of Yugoslavia . It inevitably gave rise to the new humanitarian challenges now facing hundreds of thousands of Serbian refugees and the small Serbian population still in Kosovo , and also had grave political implications for the situation in the Balkans and for security , peace and stability in Europe . The deputies of the State Duma are deeply convinced that the NATO military action against Yugoslavia in 1999 led to the unlawful unilateral declaration of Kosovo as an independent State in contravention of United Nations decisions , notably Security Council resolution 1244 ( 1999 ) . The premature recognition of a new entity by the States that were the main organizers of the military operation in March 1999 , their allies and the States dependent on them was not objectively determined by the readiness of the province to become a new subject of international law or by the genuine achievements of the interim administration in Kosovo in terms of nation-building or ensuring the rights and freedoms of the population in the province . Instead , this recognition was motivated by the desire of those States to justify and legitimize , if only partially , an illegal process that began with the NATO actions taken a decade ago . The deputies of the State Duma believe that every effort must be made to address the negative consequences arising from the events of a decade ago that , inter alia , led to clear distortions in the work of the International Tribunal for the Prosecution of Persons Responsible for Serious Violations of International Humanitarian Law Committed in the Territory of the Former Yugoslavia since 1991 ( International Criminal Tribunal for the Former Yugoslavia ) , which has been mainly concerned with prosecuting participants in the conflict on the Serbian side . To all intents and purposes , the perpetrators of crimes against the Serbs and their holy sites have gone unpunished . March 17 marked the fifth anniversary of the tragic events of 2004 , when hundreds of people fell victim to anti-Serb pogroms in Kosovo and dozens of churches and monasteries were destroyed and desecrated . The Kosovo precedent has helped to create many dangerous trends in international affairs by strengthening separatism and reducing the role of negotiations in the settlement of disputes , leading some States to seek to resolve their internal and external conflicts through military force . The deputies of the State Duma are convinced that the military action taken against the Federal Republic of Yugoslavia in 1999 was largely responsible for the decision of Georgia to carry out an armed attack on South Ossetia in August 2008 : in both cases NATO support provided unduly to one party to the conflicts helped that party to withdraw from the negotiation process taking place within the legal framework established by the international community and encouraged reliance on the use of military force in those conflicts . In the case of both the military operation of 1999 and the aggression of Georgia in August 2008 , a settlement agreeable to all parties to the conflicts has not been achieved and the foundations of international law , peace and stability were grossly violated by those who launched the military actions . The State Duma calls on the President of the Russian Federation , Mr. D. A. Medvedev , and the Government of the Russian Federation to make every effort to complete the work of the International Criminal Tribunal for the Former Yugoslavia and to resume negotiations on the status of Kosovo in strict compliance with Security Council resolution 1244 ( 1999 ) . The deputies of the State Duma support the policy adopted by the leadership of the Republic of Serbia in the search for an exclusively legal resolution to the conflict . This constructive approach has already received international support in the United Nations General Assembly , which , on 8 October 2008 , adopted resolution A/RES/63/3 submitted by the Republic of Serbia , entitled “ Request for an advisory opinion of the International Court of Justice on whether the unilateral declaration of independence of Kosovo is in accordance with international law ” . The State Duma reaffirms its long-standing position : the Autonomous Province of Kosovo and Metohija shall remain an integral part of the Republic of Serbia until a settlement satisfactory to both sides is reached and an appropriate legal decision has been adopted . Moscow 20 March 2009 </text>
<text id="un/SAICM_ICCM2_INF_18">
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 . </text>
<text id="un/S_PV4596">
Agenda The situation concerning the Democratic Republic of the Congo . The meeting was called to order at 10.45 a. m. Expression of thanks to the retiring President The President : As this is the first open meeting of the Security Council for the month of August , I should like to take the opportunity to pay tribute , on behalf of the Council , to His Excellency Sir Jeremy Greenstock , Permanent Representative of the United Kingdom to the United Nations , for his service as President of the Security Council for the month of July 2002. I am sure I speak for all members of the Council in expressing deep appreciation to Ambassador Greenstock for the great diplomatic skill with which he conducted the Council 's business last month . Adoption of the agenda The agenda was adopted . The situation concerning the Democratic Republic of the Congo The President : I should like to inform the Council that I have received letters from the representatives of the Democratic Republic of the Congo , Rwanda and South Africa , in which they request to be invited to participate in the discussion of the item on the Council 's agenda . In conformity with the usual practice , I propose , with the consent of the Council , to invite those representatives to participate in the discussion , without the right to vote , in accordance with the relevant provisions of the Charter and rule 37 of the Council 's provisional rules of procedure . There being no objection , it is so decided . On behalf of the Council , I extend a warm welcome to Her Excellency Ms. Nkosazana Dlamini Zuma , Minister for Foreign Affairs of South Africa . At the invitation of the President , Ms. Dlamini Zuma ( South Africa ) took a seat at the Council table . The President : On behalf of the Council , I extend a warm welcome to His Excellency Mr. Léonard She Okitundu , Minister for Foreign Affairs and International Cooperation of the Democratic Republic of the Congo . At the invitation of the President , Mr. She Okitundu ( Democratic Republic of the Congo ) took a seat at the Council table . The President : On behalf of the Council , I also extend a warm welcome to His Excellency Mr. Patrick Mazimpaka , Special Envoy of the President of Rwanda on the Great Lakes Region . At the invitation of the President , Mr. Mazimpaka ( Rwanda ) took a seat at the Council table . The President : The Security Council will now begin its consideration of the item on its agenda . The Council is meeting in accordance with the understanding reached in its prior consultations . I would like to extend a warm welcome to the Secretary-General , Mr. Kofi Annan , and to thank our special guests for having come so far at such short notice . They have shown great statesmanship by signing an Agreement that represents an important step towards ending a war that that has cost countless lives and produced immeasurable suffering . With the help of South African President Mbeki , the signatory heads of State have for the first time met to pledge to bring this difficult chapter in their history to a close . They should be applauded . The Agreement signed in Pretoria on 30 July provides a real opportunity for progress . Members of the Council want to understand fully the provisions of the Agreement and the intentions of the parties to ensure that all those who will play a role in making the Agreement work understand their responsibilities and obligations . Implementation will be a difficult and complicated task that will require unswerving commitment by the parties and by the international community . Having said that by way of introduction , I shall now give the floor to the Secretary-General . The Secretary-General : I shall be brief this morning . Let me say how happy I am to see the representatives of the Democratic Republic of the Congo and Rwanda here this morning , as well as , of course , Minister Dlamini Zuma , representing South Africa , which co-facilitated this agreement . I believe that the signing of the peace agreement between the Governments of the Democratic Republic of the Congo and Rwanda in Pretoria on 30 July represents an important political milestone which could help pave the way towards a lasting resolution of one of Africa 's most complex conflicts . The parties have indicated their determination to honour this agreement and to end the conflict . We , on our side , should do whatever we can to assist them in implementing the agreement . I applaud President Mbeki for his important contribution to the agreement in his capacity as Chairman of the African Union . The two presidents have committed themselves to achieving peace and , specifically , to working with each other to achieve it . That is very encouraging . We must now quickly approach the parties in a pragmatic manner and urge them to take the steps required to operationalize the agreement as soon as possible . I believe that the international community must provide all necessary support to ensure the success of this initiative . The momentum established must be maintained and built upon . I hope this meeting of the Council can contribute to that . I have instructed the United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) to determine which actions it can take within its current mandate and resources to assist the parties to carry out the agreement . However , the parties need to be perfectly clear on the tasks to be performed and to provide the necessary information in order for MONUC to define its specific role . The Secretariat is also looking forward to receiving a team of experts from South Africa — in fact , I think they have arrived today — to discuss together the support that the process requires and how we move forward from here . I therefore expect to revert to the Council in due course with specific recommendations for MONUC after the Secretariat undertakes intensive consultations with the parties concerned . The presence with us today of the South African Foreign Minister , as well as of Mr. She Okitundu of the Democratic Republic of the Congo and Mr. Mazimpaka of Rwanda is particularly valuable because it enables you to engage directly with the Council and enables the Council to engage you on issues that are directly concerned with the implementation of the agreement . Of course , I look forward to a very serious dialogue not only here in the Council but also with the various United Nations departments . I think that reflects the value of the new partnership between the African Union and the United Nations . I am now eager to listen to the Foreign Minister of South Africa and to the representatives of the parties so that we can gain a full and detailed understanding of this important agreement and this implementation as soon as possible . The President : I now give the floor to the Minister for Foreign Affairs of South Africa . Ms. Dlamini Zuma ( South Africa ) : Mr. President , allow me to congratulate you on your assumption of the presidency of the Security Council for the month of August . Let me also express our sincere gratitude for inviting us to address the Council on an important development in our continent . I would also like to pay tribute to the Secretary-General for his tireless efforts and contribution to bring about peace and stability throughout the African continent . The recent launch of the African Union has highlighted our commitment to peace and development in Africa . We believe that the United Nations can be an important partner as we rebuild our continent , especially using the principles enshrined in the New Partnership for Africa 's Development ( NEPAD ) . Last week , the Presidents of the Democratic Republic of Congo and the Rwandese Republic took an important step by signing a peace agreement on the withdrawal of the Rwandan troops from the territory of the Democratic Republic of Congo and the dismantling of the former Rwandan Army ( ex-FAR ) and Interahamwe forces in the Democratic Republic of the Congo . This peace agreement assumes greater significance in that it comes in the wake of the tremendous progress that was made by the Congolese people in the inter-Congolese dialogue , which was held in our country earlier this year . This agreement is very important , and it is at the centre of the peace process . It therefore gives a strong signal of political will on the sides of both Rwanda and the Democratic Republic of the Congo to expedite a peace process between themselves . It is very important that we all support and encourage the implementation of this agreement . We cannot be seen to be less than enthusiastic about it . To understand the agreement before us , we must go back to the Lusaka Ceasefire Agreement of 1999. In that agreement , there was a question on how to deal with the foreign forces that had come into the Democratic Republic of the Congo . Everyone acknowledged that the foreign troops would have to withdraw in order to allow the people of the country to decide on their future without any external interference . The problem remained of the presence in the Democratic Republic of the Congo of the armed military groups such as Interahamwe and ex-FAR , which were implicated in the Rwandese genocide . In the years since the signing of the Lusaka Agreement , it has become even more clear that the conflict in the Democratic Republic of the Congo could not be resolved until the matter of the armed groups was addressed . We are all aware that these armed groups operate freely within the territory of the Democratic Republic of the Congo and not only continue to pose a real threat to the people of Rwanda but can destabilize the Democratic Republic of the Congo itself . We welcome the declared wish of the Government of the Democratic Republic of the Congo not to have those armed groups utilize its territory for launching attacks against its neighbours . We also welcome the commitment of the Government of Rwanda to withdraw its forces from the Democratic Republic of the Congo as soon as those military groups cease to be a threat to the people of Rwanda . At the launch of the African Union , a crucial meeting was held when President Joseph Kabila of the Democratic Republic of the Congo and President Paul Kagame of Rwanda met for the first time . The meeting was held in the presence of President Mbeki and Secretary-General Kofi Annan , who was accompanied by senior leadership of United Nations Secretariat and of the United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) . Follow-up meetings were later held with ministers from the Democratic Republic of the Congo and Rwanda , together with MONUC . In this regard , we would like to pay tribute to MONUC for its role in supporting peace efforts in the Democratic Republic of the Congo . Despite its limited strength and the difficult conditions that prevail , MONUC has managed to carry out its duties . The Durban meeting laid the basis for the peace agreement . It was where both President Kagame and President Kabila asked President Mbeki and Secretary-General Annan to act jointly as a third party guaranteeing the agreement . From the outset we wish to make clear that the agreement signed between the two Governments is a reflection of their wishes and interests . Furthermore , it does not supplant the Lusaka Ceasefire Agreement of 1999 and subsequent agreements but , rather , complements all of them . The need for this Agreement stems from the recognition that progress in establishing lasting peace in the Democratic Republic of the Congo cannot be registered without resolving the conflict between the Democratic Republic of the Congo and Rwanda . There is no doubt that the developments of the last month have created a political momentum that must be seized and supported by all actors concerned , including the international community . That momentum , in turn , requires that every one of us do everything necessary to achieve the targets set out in the programme of implementation . This Agreement has given the rare gift of hope to the people of the Democratic Republic of the Congo and to all the countries of the Great Lakes region . We cannot , therefore , be seen to have contributed to the slowing down of the peace process in the Democratic Republic of the Congo , Rwanda and , indeed , in the rest of the Great Lakes region . We therefore look forward to the discussions this morning as a step forward towards taking the peace process in the Democratic Republic of the Congo and the Great Lakes region to higher levels . The President : I give the floor to the Minister for Foreign Affairs of the Democratic Republic of the Congo . Mr. She Okitundu ( Democratic Republic of the Congo ) ( spoke in French ) : Mr. President , we wish to associate ourselves with earlier speakers in offering you our warmest congratulations and in saying how gratified our delegation is to see you presiding over the Security Council in this month of August 2002. We believe that your intellectual skills and your diplomatic talents , together with your lengthy experience of international relations , will ensure the success of the work of the Council this month . We wish also to convey to your predecessor , Sir Jeremy Greenstock of the United Kingdom , our warm congratulations and our sincere thanks for having guided the work of the Security Council with a great deal of energy and skill last month . We also wish thank you , Sir , for having convened this important meeting of the Security Council on the situation in the Democratic Republic of the Congo , which certainly once again has the merit of helping us better to evaluate the peace process that is under way and to welcome the recent and very significant advances made to put an end to the war of aggression that has been waged against my country for more than four years now . We hope also that it will help to pave the way towards lasting peace for the Democratic Republic of the Congo and for all the countries of the region . The Security Council has just heard a comprehensive statement by Ms. Nkosazana Clarice Dlamini Zuma , the Minister for Foreign Affairs of South Africa . The Minister has clearly and eloquently described the Peace Agreement that was concluded at Pretoria on 30 July between our Government and that of the Republic of Rwanda , as well as the programme for implementation covering the withdrawal of Rwandese troops from the territory of the Democratic Republic of the Congo and the dismantling of the former Rwandan army ( ex-FAR ) and Interahamwe forces in the Democratic Republic of the Congo . The Minister has described what is at stake in the Peace Agreement and the prospects for success . We fully share her vision , and — as our head of State , Major-General Joseph Kabila , President of the Democratic Republic of the Congo , stated at the signing ceremony of the Agreement — the obligations and commitments undertaken by the Government of the Democratic Republic of the Congo pursuant to this peace agreement will be scrupulously complied with . Here we wish to extend our very sincere thanks to President Thabo Mbeki , his Government and the people of South Africa for their determination , and I would even say their obstinacy , which took us from Sun City to Pretoria by way of Durban , to ensure that peace prevails once again in the Great Lakes region . We wish also to pay tribute to our regional organization , the African Union , which , through the Secretary-General of the Organization of African Unity ( OAU ) , Mr. Salim Ahmed Salim , was the first to highlight the useless and senseless nature of this war of aggression . The efforts of the interim Chairman of its Commission , Mr. Amara Essy , has always been , and remains , decisive in the quest to restore peace and calm to our region . May I lastly thank Mr. Kofi Annan , Secretary-General of our universal Organization , for his important statement . We are very grateful to him for having lent his moral weight by endorsing the Pretoria Agreement . We wish in this connection to express our full appreciation for all of his endeavours , and especially for his commitment to tirelessly exploring all possibilities likely to bring about a successful and prompt conclusion of the peace process that began at Lusaka . In order to settle the question of the war of aggression once and for all , since last year our Government has been in direct contact with the leaders of countries whose forces are illegally occupying our country , pursuant to the relevant resolutions of the Security Council , which call for the holding of such meetings in order to establish the necessary relations of trust in order to promote the cause of peace . For his part , the Secretary-General , Mr. Kofi Annan , has tirelessly committed himself to this process , particularly in terms of organizing meetings with the Rwandese party , the most recent of which , at which he was present , took place in Durban , in parallel with the OAU/African Union Summit . The Pretoria Agreement , which is basically bilateral and guaranteed by the third party , falls — as the South African Minister said just now — within the framework of the Lusaka Ceasefire Agreement . In this regard , the Pretoria Agreement is likely greatly to facilitate and speed up the completion of the remaining phases provided for in the timetable for the implementation of the Lusaka Agreement . The Pretoria Agreement is also in conformity with the provisions of the relevant resolutions of the Security Council calling for the orderly withdrawal of all foreign troops and in particular resolution 1341 ( 2001 ) , whereby the Council , for the first time , called for , among other things , the elaboration of a plan and a precise timetable which would lead to the finalization of the total and orderly withdrawal of foreign troops , as well as for disarmament , demobilization , reintegration and repatriation or resettlement ( DDRRR ) programmes . With respect to the DDRRR process , the Democratic Republic of the Congo undertakes strictly to comply with its obligations under this Agreement , inter alia , by pursuing the process of the demobilization and disarmament of Rwandese combatants which began at Kamina and by extending it to other areas of the country under foreign occupation as the authority of the State is established there . Moreover , we would like to express to the international community as a whole our trust in the fact that we will receive support from it in the simultaneous process of the withdrawal of troops and repatriation , reintegration and resettlement of combatants in their countries of origin , in conformity with international law . With respect to the withdrawal of foreign troops , it should be noted that the majority of the parties to the conflict had already submitted their plans to the Joint Military Commission and have commenced their withdrawal . Among the countries that came to the assistance of the Democratic Republic of the Congo in defending its national sovereignty and its territorial integrity — countries that we wish once again to thank on behalf of the Republic for the sacrifice of their sons and daughters to the noble cause of truth , justice and dignity — Namibia has totally withdrawn , and Angola and Zimbabwe have repatriated a large number of their contingents . As to the uninvited forces , withdrawal movements have been observed only on the part of Uganda and Burundi . Rwanda , for its part , has considerably increased its forces and remains the only country to be engaged in large-scale military operations on Congolese soil . There will be tremendous rejoicing when the Congolese people , the third party and the international community are officially informed , in a few hours , of the withdrawal plan for Rwandese troops from the territory of the Democratic Republic of the Congo , pursuant to the programme of implementation of the Pretoria Agreement . Another promising sign will be the beginning of the demilitarization of the city of Kisangani , pursuant to resolution 1304 ( 2000 ) . This city , as we have stated before , must no longer be the symbol of the martyrdom of a whole nation . It must , rather , become the political and physical symbol of renewal and return to dignity for the whole of the Congolese people , the emblem of the hope for a better life for present and future generations in the Democratic Republic of the Congo . At the same time , all illegal activities to exploit the natural resources and other forms of wealth of the Democratic Republic of the Congo , which feed the continued war of aggression , must end . Our Government , which is fully cooperating with the group of experts set up for that purpose , will ensure that this is done . The Agreement is certainly the most serious opportunity for peace since the beginning of the war of aggression on 2 August 1998. It provides a response — which we hope is adequate — to Rwanda 's security concerns , although it is the Democratic Republic of the Congo that has been experiencing total insecurity for four years . The Agreement also envisages the restoration of the national sovereignty and territorial integrity of the Democratic Republic of the Congo , which was gravely imperilled by the Rwandan presence . Finally , the Agreement embodies the ingredients for a return to normality for the countries and the peoples of the Great Lakes region . We must succeed , but we must be helped to succeed . The international community , which welcomed the Pretoria Agreement , must invest in it tangibly and unstintingly , on either the bilateral or the multilateral level , to assist the two signatory parties and the third parties in their determination to end a conflict that has caused the deaths of more than 3 million people in four years . For its part , the United Nations can help immediately , especially by formulating for its Mission in the Democratic Republic of the Congo a new concept of operations that would effectively activate phase III of its deployment and would both support the verification mechanism and enable it to participate in the execution structure that the third party will put in place , within the framework of the Pretoria Agreement . Action is needed now . The situation — which continues to be fragile , as demonstrated by recent events in Kisangani and by the deadly skirmishes between the Rwandese Patriotic Army and Congolese combatants of Tutsi origin in the high plateaux of Kivu — may worsen . That would augur ill for the credibility of the United Nations as a whole . We must avoid that at all costs . The improvement in the prospects for peace in the Great Lakes region enables us to look with more serenity to the process of reconciliation and national concord in our country . The political agreement for consensual management of the transition in the Democratic Republic of the Congo , concluded at Sun City , has made possible the reunification of more than 70 per cent of the national territory . Talks are now under way , on the one hand , with the signatory parties to the Sun City agreement and , on the other , with the other armed component , its dissidents and the components of society and the unarmed opposition , in order to define the contours of an agreement that would be more consensual and inclusive . The essential here is that we must procrastinate no longer , but rather must decide to make headway on this issue . In that regard , we are convinced that the efforts of the Special Envoy of the Secretary-General , Mr. Moustapha Niasse , will meet with success . Those working to advance the transition will certainly be political leaders of all stripes , but also leaders representing religious faiths , the academic world , the media , private and public enterprise and civil society . Leaders dedicated to the moral values of governance , their greatest virtues remain disinterest and love of country . As Mrs. Mary Robinson , United Nations High Commissioner for Human Rights , noted in her report to the Council , impunity remains one of the principal causes of human rights violations in the Democratic Republic of the Congo . Putting an end to such impunity is a fundamental requirement for the return to a durable peace in the region . The choice of transition leaders should take that requirement into account . Such an approach is in conformity with the recommendations in the High Commissioner 's report , namely , strengthening the rule of law and the administration of justice , and the creation of mechanisms whereby all those responsible for human rights violations and for war crimes must answer for their acts . The creation of a truth and reconciliation commission on the South African model could provide an element of response . We must do justice for the millions of Congolese dead , formulating concrete measures with a view to putting an end to impunity , compensating victims and preventing the resurgence of such acts . The process of restoring peace and establishing and consolidating relations of trust must continue and be strengthened by increased credibility for the United Nations and the Security Council , for there is a risk of seeing crumble the whole edifice of the partnership that the Council has patiently built with the parties bound by the Lusaka Agreement . The United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) needs to review its operations , particularly with regard to the protection of civilians under imminent threat of physical violence , as the Council reaffirmed in resolution 1417 ( 2002 ) . The Council must redefine the concept of MONUC 's operations in order to enable it to properly carry out the mission conferred on it by the Pretoria Agreement . MONUC must be given the means to enable it to operate and have unhindered access to needy populations . For example , it is indispensable that the MONUC team be authorized without further delay to have access to the locality of Minembwe in the high plateaux . It is also imperative that the reopening of the river network for humanitarian assistance and commercial trade between Kinshasa and Kisangani become a reality and that the city of Kisangani be accessible once river traffic is opened to trade in the reunified zones , pursuant to the Sun City agreement . Here , I should like to pay tribute to our friends in MONUC , under the leadership of Mr. Amos Namanga Ngongi , Special Representative of the Secretary-General , for the quality of the work that they have done and for their total devotion to the cause of peace and the restoration of dignity to the Democratic Republic of the Congo . Their efforts deserve to be encouraged and supported . For their part , the States of the region must supplement their efforts . First , it is urgent that the Democratic Republic of the Congo conclude with the Governments of Uganda and Burundi agreements similar to the Pretoria Agreement . The Government of Burundi has , in a timely manner , informed us of its intention to do this . Contacts have already been made at the highest level . We must translate into concrete action the good will expressed on both sides . Then we must sit down together and discuss our region 's future . The international conference for peace , stability , security and development that we earnestly wish for should lay the basis for a new order . The international conference could help the region 's countries ensure the security of their States and of their populations so that no element can intervene to disrupt order and tranquillity , while at the same time conceiving , defining and fostering the creation and development of economic activities of common interest and , lastly , promoting and intensifying trade and the movement of persons and goods . A new order at the regional level presupposes a new order at the national level . Processes of democratic transition are under way in our country and in Burundi . We remain certain that they will succeed . Furthermore , we welcome the willingness expressed by the Rwandese authorities to hold elections in their country in the medium term . We ask the international community to assist that country 's efforts so that it can restore internal peace and national concord . In saying that , the Government of the Democratic Republic of the Congo wishes to assure all its partners — in particular our brothers in neighbouring countries — f our fervent desire to live in perfect harmony with the whole world , in a spirit of tolerance , solidarity and frank cooperation . The Pretoria Agreement is the very foundation for restoring the trust that has been lost , on the basis of which we can together renew the bonds of friendship and good-neighbourliness that should govern our future relations . The Democratic Republic of the Congo will never serve as a channel to sow discord and desolation in any country , in particular our neighbours . That is a sacred principle of our diplomacy , which we have always wished to be constructive and not subversive . The Democratic Republic of the Congo looks forward to the advent of a region where peace , security , justice and prosperity prevail . The President : I now give the floor to the Special Envoy of the President of Rwanda on the Great Lakes Region . Mr. Mazimpaka ( Rwanda ) : It is my honour to congratulate you , Sir , as others who have spoken before me have done , on your assumption of the presidency of the Security Council for the month of August . In addition , allow me , through you , to extend our recognition to your predecessor , the Permanent Representative of the United Kingdom , for the way in which he conducted the affairs of the Council last month . We have come to the Council today , at its invitation , to present what we believe is an unprecedented step towards the resolution of the conflict that has afflicted Rwanda and the Democratic Republic of the Congo , in the main , and the Great Lakes Region as a whole , since the signing of the Lusaka Agreement for a ceasefire in the Democratic Republic of the Congo , in 1999. The Pretoria Agreement provides solutions for what up to now have been intractable problems in the implementation of the Lusaka Agreement . The problem of the forces that carried out genocide and then relocated to bases in Zaire , later the Democratic Republic of the Congo , has preoccupied the Council and the signatories for a long time , without their having found a clear solution . Throughout , the Council continued to urge Rwanda and the Democratic Republic of the Congo to work together to resolve the root causes of the conflict , that is , to find how to dissuade the former Rwandan Army ( ex-FAR ) and Interahamwe forces from carrying out attacks on Rwanda from bases in the Democratic Republic of the Congo . Today we firmly believe that our plan , worked out with the help of the President of the Republic of South Africa and with the encouragement and support of the Secretary-General , has a chance to succeed . We appeal to the Council to do its utmost to assist us along this path . At the signing ceremony in Pretoria , South Africa , of what is now known as the Pretoria Agreement or the Peace Agreement between the Governments of the Democratic Republic of the Congo and the Republic of Rwanda , President Paul Kagame characterized the Agreement as very important . He said that because the Agreement addresses two core issues that underlie the conflict : first , how to resolve the problem of the ex-FAR and Interahamwe and , secondly , the withdrawal of all former forces from the territory of the Democratic Republic of the Congo . By addressing those two issues , the Agreement paves the way for peace and stability , which have eluded our respective countries for a long time . Those familiar with the Lusaka Ceasefire Agreement , including the Council , know that we have been painfully aware of the poor record of our performance in the area of the disarmament , demobilization and repatriation of the armed groups . As crucial as that part of the Lusaka Agreement may be , the parties have so far failed to make any headway in effecting any meaningful disarmament and , hence , in reducing the security threat to affected countries , principally Rwanda . What the Pretoria Agreement brings to the process is a solemn commitment by the Government of the Democratic Republic of the Congo to track , assemble and disarm ex-FAR and Interahamwe , in collaboration with the United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) , the Joint Military Commission ( JMC ) and the third party . Rwanda , in turn , undertook to withdraw its troops from the Democratic Republic of the Congo as soon as this process gets under way and is judged to be irreversible . Let me recall here that Rwanda 's commitment to the repatriation and reintegration of combatants has withstood the test of time , numbers and adverse conditions . Since 1994 , a large number of members of the former Armed Forces of Rwanda have rejoined the military service in our country or been demobilized like any members of the national forces . The militias who accompanied these forces in the wars in the Congo have also come home in large numbers and have been resettled into normal civilian life . The now-well-documented 2,000 captives of the 2001 war in the north-west of Rwanda have by now been settled , and some of them have actually formed a group to carry out sensitization work among those who are still in Congo , using the themes of national unity and reconciliation , which they have witnessed in the country . Recently , this group accompanied MONUC to Benin to help in confidence-building among the small group of combatants who had indicated that they wanted to go home . Unfortunately , for that particular operation , the heavy presence of detractors of this process made it impossible for the group to go home , although they had been waiting for two months to be repatriated . We hope that in the future such groups will not be exposed to so-called political leaders and other agents who interfere with their wish to return home . Through the work of MONUC and the JMC we are all aware , or will have an idea , about where the ex-Far and Interahamwe are operating from in the Democratic Republic of the Congo and how they are organized . Indeed , it is on that basis that assembly areas were planned . Those plans were approved by the signatories to the Lusaka Agreement . We need MONUC 's assistance to make the assembly areas operational and secure . The repatriation exercise will require more resources , particularly for transport and resettlement . The Government of Rwanda will continue to do its part in ensuring that this process is successful . Rwanda is grateful for all the assistance the United Nations has provided in our trying times . We hope that the Council will see the resolution of the conflict in the region as a shared challenge . Rwanda is grateful to President Thabo Mbeki and the rest of the leadership of the Republic of South Africa for their commitment to peace in our region . Equally , we warmly welcome the commitment of President Mbeki as Chairman of the African Union ( AU ) , as well as that of the Secretaries-General of the AU and of the United Nations , to see the Agreement implemented as signed . We appeal for continued support for all the parties involved in the conflict , as this effort alone cannot resolve all the outstanding problems — such as the need to work out an all-inclusive agreement and to achieve the withdrawal of all other foreign forces . On this occasion , Rwanda fully recognizes the problems caused by the presence and activities of our nationals in the Democratic Republic of the Congo . That is why we salute and welcome the decision of the Government of the Democratic Republic of the Congo to negotiate this Agreement , as well as the leadership demonstrated by President Joseph Kabila in signing the Pretoria Agreement . In this spirit , we believe that all the other outstanding issues should find solutions through a sincere and pragmatic exchange among the countries of our region . Allow me to conclude my remarks by reiterating the commitment President Paul Kagame made on behalf of the people of Rwanda on the occasion of the signing of the Peace Agreement in Pretoria at the end of last month . “ Rwanda is ready to fulfil its part of the obligations as agreed in this Memorandum of Understanding . We are going to sign . We stand ready to work with you , our African brothers and sisters , and to work with the rest of the international community so as to bring about peace and security , which are very important to the people to Rwanda , the people of the Democratic Republic of the Congo and the whole people of Africa . ” The President : There are no further speakers inscribed on my list for this portion of the meeting this morning . The Security Council will continue the consideration of this item on its agenda following the adjournment of the open meeting , whereupon we will enter into a private meeting . But before adjourning this portion of the meeting , I would like to thank the Secretary-General for his presence in having joined us this morning . The meeting rose at 11.35 a. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-178 . </text>
<text id="un/S_PV4646">
Agenda The situation in Timor-Leste Report of the Secretary-General on the United Nations Mission of Support in East Timor ( S/2002/1223 ) . The meeting was called to order at 10.20 a. m. Adoption of the agenda The agenda was adopted . The situation in Timor-Leste Report of the Secretary-General on the United Nations Mission of Support in East Timor ( S/2002/1223 ) The President ( spoke in Chinese ) : I should like to inform the Council that I have received letters from the representatives of Australia , Chile , Denmark , Fiji , India , Indonesia , Japan , New Zealand , Portugal , the Republic of Korea , Thailand , Timor-Leste and Ukraine in which they request to be invited to participate in the discussion of the item on the Council 's agenda . In conformity with the usual practice , I propose , with the consent of the Council , to invite those representatives to participate in the discussion , without the right to vote , in accordance with the relevant provisions of the Charter and rule 37 of the Council 's provisional rules of procedure . There being no objection , it is so decided . At the invitation of the President , Mr. Guterres ( Timor-Leste ) took a seat at the Council table ; Mr. Dauth ( Australia ) , Mr. Valdés ( Chile ) , Ms. Løj ( Denmark ) , Mr. Naidu ( Fiji ) , Mr. Nambiar ( India ) , Mr. Hidayat ( Indonesia ) , Mr. Haneda ( Japan ) , Mr. MacKay ( New Zealand ) , Mr. Macieira ( Portugal ) , Mr. Sun ( Republic of Korea ) , Mr. Kasemsarn ( Thailand ) and Mr. Kuchinsky ( Ukraine ) took the seats reserved for them at the side of the Council Chamber . The President ( spoke in Chinese ) : In accordance with the understanding reached in the Council 's prior consultations and in the absence of objection , I shall take it that the Security Council agrees to extend an invitation , under rule 39 of its provisional rules of procedure , to Mr. Kamalesh Sharma , Special Representative of the Secretary-General for Timor-Leste . There being no objection , it is so decided . I invite Mr. Sharma to take a seat at the Council table . The Security Council will now begin its consideration of the item on its agenda . The Security Council is meeting in accordance with the understanding reached in its prior consultations . Members of the Council have before them document S/2002/1223 , which contains the report of the Secretary-General on the United Nations Mission of Support in Timor-Leste . I now call on Mr. Kamalesh Sharma , Special Representative of the Secretary-General for Timor-Leste , to introduce the report . Mr. Sharma : It is a pleasure to appear before the Security Council , particularly as I feel I am among old friends . In the Secretary-General 's first report to the Council on Timor-Leste ( S/2002/1223 ) , which is before members , we look to the prospects of the new State with positive expectation and optimism . The report is divided into six sections , highlighting , following an introductory section , the activities of the national authorities since independence ; the contributions of the United Nations Mission of Support in East Timor ( UNMISET ) in the three major programme areas set out in the report contained in document S/2002/432 ; the role being played by the wider United Nations system and other partners ; and financial aspects . In conclusion , the report makes some observations and recommendations . I trust that the report will provide a useful basis for the deliberations of the Council on this issue . Timor-Leste has many favourable features which should assist in securing its future . It is a compact country of 15,000 square kilometres , with considerable ethnic and social cohesion , which has been further intensified by the common experience of history , both distant and recent , which has sharpened that identity . That compactness is both geographical and demographic . It has a population of about 820,000 . Put another way , assuming an average size of a family of five , it is a country of about 165,000 families . That culturally cohesive population is endowed with significant resources to safeguard its economic future . Two gas and oil fields , ready for exploitation , have enormous potential for revenue , and there is evidence of on-shore hydrocarbon potential as well . A study has indicated the presence of six metallic ores in commercial quantities , which is remarkable in relation to the size of the country . The coastline of more than 700 kilometres , large in relation to the size of the country , is commercially exploitable for fisheries . While the terrain is generally hilly , the soil offers considerable agricultural potential in a variety of crops through modernized inputs and techniques . There are interesting prospects particularly for eco-tourism and adventure tourism . The country is , therefore , considerably well endowed in its resource base . There is also the factor of a favourable locational advantage . Although one of the least developed countries — indeed , according to current human development indicators , it is now among the poorest group of countries in the world — Timor-Leste is not part of a depressed , but rather of a prosperous , neighbourhood . In this , it does not have the disadvantage of many others among the group of least developed countries . Countries to the east and west of Timor-Leste are either developed or represent a very dynamic economic region . Timor-Leste can , therefore , be buoyed by that region , rich in both human and trading resources , by pursuing the right policies . Another significant asset is the leadership of Timor-Leste , which enjoys international goodwill and recognition to an exceptional degree . President Xanana Gusmão , Prime Minister Mari Alkatiri and Senior Minister and Minister for Foreign Affairs Jose Ramos-Horta enjoy respect and esteem in world capitals , which has assisted in the creation of a prominent international profile for the country and has prepared favourable ground for a wide network of international cooperation , from which the nascent State can derive benefit in a variety of ways . It is true that expectations from the leadership , which faces expressions of impatience and expectation in a variety of areas , run high within the population . In a new democracy , that in itself is a healthy phenomenon , given the fact that Timor-Leste has committed itself to the highest expected standards of a responsive and participative democratic polity and to the independence of various fundamental organs of the State and has made a commitment to unfettered standards of human rights , core freedoms and a free press . The population of Timor-Leste shows itself to be zealous in protecting those rights , and the growth of opposition voices is a natural fruition of the democratic political process . A key ingredient in the country 's political and economic environment is its evolving relationship with Indonesia . That has been among the most positive lines , with political commitment and goodwill demonstrated at the highest political levels on both sides . The first meeting of the Joint Ministerial Commission for Bilateral Cooperation established between Timor-Leste and Indonesia has provided the impulse for the growth of the relationship along a wide front , and cooperation between the two countries on the question of the return of refugees from West Timor has been exemplary . The success of that collaboration in the repatriation of what constituted nearly a quarter of the population of Timor-Leste , with the assistance of the Office of the United Nations High Commissioner for Refugees , is an accomplishment that has perhaps not received as much public attention as it merits . Lastly , Timor-Leste enjoys exceptional engagement and participation by the world community in offering partnership to this new entrant to the comity of nations as it builds its future . The nature of the involvement of the United Nations has been unique and long-standing , both through the missions established by the Council and through the active presence of United Nations agencies , funds and programmes . The participation and constructive engagement of international financial institutions , development banks , the multilateral and bilateral donor community , neighbouring countries and civil society generate confidence that the third successive United Nations mission can anticipate the successful termination of its mandate in mid-2004 confident that , thereafter , Timor-Leste will advance securely on its own towards an increasingly prosperous and stable future . The balance of accomplishment and challenge is reflected in the report of the Secretary-General presented to the Council . I would like to indicate briefly what I consider are the principal challenges before the State , in a perspective that is largely shared by the Government of Timor-Leste . Effective policies to demonstrate and secure the rule of law , particularly in the context of the country 's historical experience , is a core challenge . As President Xanana Gusmão observed in his address after 100 days of independence : “ If justice in Timor is going badly , then everything else will go less well ” . Together with the rule of law , I consider expansion of employment opportunity , particularly for the youth , of which 90 per cent are reportedly unemployed , as the principal independence dividend for the people of Timor-Leste , to advance which a variety of channels should be created . The goal should be to assist the society in becoming one of job creators , and not merely job seekers . Particular stress needs to be placed on the mental and professional orientation of young people and on helping expose them to the contemporary knowledge industry and services . The idea of an interactive science park is being pursued through the United Nations Educational , Scientific and Cultural Organization . Prospects of a livelihood and technology resource centre , professional and financial assistance and basic business education are also being explored . Regarding development , the National Development Plan , with external partnership , needs to show consistent gains in the social agenda of nutrition , health , literacy and gender equality , hand in hand with infrastructure rehabilitation and income growth . Regarding democratic culture in depth , participative and transparent democratic processes need to be strengthened at decentralized levels ; this is receiving attention . This would also contribute to bridging the rural-urban divide , which is another significant challenge . With regard to institution building , the quality of all institutions being built and their public-spiritedness , professionalism , neutrality and transparency will be the key to the quality of governance provided by the State . The subservience of military and police authorities to civilian democratic control must be safeguarded . Certain incidents that have occurred are being dealt with firmly and in a decisive manner in this spirit . Concerning aid absorption , Timor-Leste has been a beneficiary of significant international assistance . While this needs to be continued and enhanced in specific sectors , the absorptive capacity must also be strengthened so that the impact of the assistance available is maximized . Members may be wondering when I will make a reference to the specific mandate from the Council . I have deliberately stressed the nation-building aspect of the mandate across a broad front as UNMISET plays the role of both enabler and facilitator of meeting larger political , social and economic goals and implements the precise mandate in external and internal security and support to various branches of public administration . The goal of UNMISET at the end of its mission , and of the larger body of well-wishers to Timor-Leste , is to enable Timor-Leste to emerge as a State in full possession of the all attributes of sovereignty — a State that is stable and increasingly prosperous and that is making steady advances in continuing partnership with external institutions , friendly Governments and civil society . The specific aspects of UNMISET 's mandate have received , and will continue to be accorded , our concentrated attention . In a situation where capacity in public administration has to be built across the board from the ground up , the situation will remain challenging for a long time to come . However , I believe that a satisfactory start has been made , with 86 of the 100 stability positions filled and the rest in the pipeline . Earlier this month , a special interactive seminar was arranged in which the Prime Minister and a large number of ministers participated to review and strengthen the contribution to self-reliance of those stability posts . However , the filling of the 228 “ development ” posts , which is being coordinated by the United Nations Development Programme ( UNDP ) remains to be accelerated , as only about a quarter have been filled . We appeal to partner countries for a renewed support effort . The policy of having the Deputy Special Representative of the Secretary-General act as UNDP Resident Coordinator has been successful , as Mr. Hasegawa , who brings long experience to his task , is playing a central role in supporting the governance and development agenda of Timor-Leste . In the area of internal security , 4 out of 13 districts have already been handed over to the Timor-Leste Police Service , and the schedule to hand over complete territorial responsibility by January 2004 , and thereafter headquarters functions by the end of the UNMISET mandate , is on course . I have confidence in the motivation and dedication of the 2,830-strong police force , of which all but about 300 have been recruited and nearly 80 per cent , or 2,285 , have been trained . It is worth noting that about 20 per cent of the force will be comprised of women , which is an exceptionally high number and represents an important factor in gender sensitivity in the police force , which is an important requirement in Timor-Leste . It will be necessary to maintain the integrity and pride of these forces , which will be a pillar of the State . On handing over external security responsibility to the defence forces of Timor Leste , we also expect to maintain the drawdown schedule and complete the transfer by the middle of 2004. The eastern-most district of Lautem has already been handed over . With the bilateral decisions recently taken by Timor-Leste and Indonesia at the Joint Commission meeting in October 2002 and the timetable established by the two sides to agree on a line that constitutes the land border — in accordance with which the land border can be demarcated unequivocally — together with processes under way for bilaterally establishing a cooperative border regime in its trading , customs , immigration and security aspects , the groundwork for a stable and friendly external environment has been well prepared . In that connection , I would like to express my appreciation for the services of Ambassador Lakhan Mehrotra , Director of the UNMISET Office in Jakarta , whose term with UNMISET is drawing to a close . Both the Government of Timor-Leste and the Government of Indonesia have lavishly acknowledged his exceptional contribution . A new shadow has fallen over the region that adds to the security challenge . That shadow is terrorism , which constitutes more than a passing threat . The terrorist outrage in Bali , and audio tapes made by terrorists , further point towards the need for the enhanced vigilance and improved capacities of Timor-Leste to effectively deal with this emerging challenge . There is also a need to put in place protective and institutional measures to reduce vulnerability , without causing public alarm or insecurity . In that regard , the assistance of external expertise should be made available , if requested . I value this opportunity for an interchange with members of the Council , and look forward to receiving their guidance . Mr. Tafrov ( Bulgaria ) ( spoke in French ) : I would like to thank the Secretary-General for his thorough and in-depth report on Timor-Leste . I also want to say how pleased I am to see Kamalesh Sharma , Special Representative of the Secretary-General and Head of the United Nations Mission of Support in East Timor ( UNMISET ) , at the Council table . He is a very experienced diplomat and it is truly encouraging to see the Secretary-General represented in Timor-Leste by someone of his calibre . I wish to thank him for his very interesting presentation on the report of the Secretary-General . As a country associated with the European Union , Bulgaria aligns itself with the statement to be made by Denmark on behalf of the Union . I would therefore like to make some comments in my national capacity . I would like to say that my delegation welcomes the fact that in the first five months since Timor-Leste 's declaration of independence there has been tangible and lasting progress in the establishment and strengthening of nascent State institutions . The security situation is improving , good-neighbourly relations are continuing to be developed , in particular with Indonesia , and the new State is becoming increasingly integrated into the international community and regional organizations . Such success would not have been possible had it not been for both the efforts of the new Government and the indispensable assistance of concerned States and non-governmental organizations ( NGOs ) . We should recognize the remarkable progress made in the transfer of functions from UNMISET to the new Timorese Administration , including the police . We support UNMISET 's efforts to implement its mandate under Security Council resolution 1410 ( 2002 ) within the established time frame . Bulgaria welcomes the effort to optimize the international presence in Timor-Leste by downsizing administrative personnel and better coordinating the international assistance received by the country . Good-neighbourly relations are at the very heart of the stability and economic development of Timor-Leste and of its becoming a part of the international community . We have already welcomed the creation by Timor-Leste and Indonesia of the Joint Ministerial Commission for Bilateral Cooperation to take up remaining problems between the two countries , inter alia , delimitation and demarcation of the border and the return of Timorese refugees . We welcome the decision to maintain the Joint Border Committee , and we call upon the parties to continue their efforts to reach agreement on delimitation and demarcation of the border as soon as possible . My country also welcomes the decision by the Timor-Leste Government to sign a communiqué identifying 11 human rights goals . This is a clear commitment by political leaders to shoulder their responsibilities in defending human rights and developing democracy in the young country . The progress in the country 's management is without question a good beginning for Timor-Leste , but serious , unresolved problems remain : there is a shortage of administrative capacity , particularly affecting the judiciary system ; a truly modern infrastructure is lacking ; and social stability remains fragile and the country faces the problem of the reintegration of ex-combatants and the return of refugees . My country highly appreciates the active role and personal commitment of the Secretary-General in the effective coordination of activities of the United Nations system in Timor-Leste . I would like to conclude by once again paying tribute to Ambassador Sharma and his team for the work they have done . I thank them all for their excellent work . I convey my deep sympathy to the families of peacekeepers who were victims of the terrorist attack perpetrated in Bali . Mr. Tidjani ( Cameroon ) ( spoke in French ) : It is with real pleasure that my delegation welcomes Ambassador Kamalesh Sharma to this public meeting on the occasion of his presentation of the first six-monthly report of the Secretary-General ( S/2002/1223 ) on the United Nations Mission of Support in East Timor ( UNMISET ) . Cameroon wishes to tell the Special Representative of the Secretary-General how very much we appreciate the exceptional work accomplished in such a brief period of time . I would like at the same time to thank the Secretary-General for the high calibre of this full , precise and most informative report . Since 20 May 2002 , the Democratic Republic of Timor-Leste has given evidence of extraordinary dynamism both at the domestic level and in terms of foreign policy . In the national sphere , the new authorities of Timor-Leste are , above all , working to assume their functions . This obviously entails developing national capacities , in particular , in the important justice , police and defence sectors . The strengthening of human and institutional capacities in Timor-Leste also relates to areas that are particularly decisive for development , such as education and training , health and agricultural development . With the support of UNMISET and bilateral donors , substantial progress has been made since 20 May 2002 in capacity-building in all areas . Cameroon is particularly pleased to be participating in this UNMISET success story , be it through coordination or capacity-building in the legal , health , agricultural development or communications fields . My delegation shares the concerns expressed in the report regarding the establishment of a competent and independent judiciary in Timor-Leste , and we endorse the relevant suggestions made in the report in this regard . The other topic that I would like to raise is that of the police and defence . Cameroon notes with pleasure that the new Timor-Leste Police Service is already responsible for four out of the 13 districts . This leads us to hope that by January 2004 , as scheduled , the maintenance of law and order will be fully in the hands of the Timorese police . In the meantime , we welcome the remarkable work being done on a daily basis by UNMISET 's civilian police component which is both maintaining law and order and successfully fulfilling its important role in advising and training the local police . Still on the questions of security , I would like to emphasize the positive development regarding the external security and the territorial integrity of Timor-Leste . This , of course , is primarily the result of the work done by the Timorese Government , but the results also are to the credit of the military component of UNMISET and of the Indonesian armed forces . The triangular cooperation among these three structures has undoubtedly made it possible to improve and to ensure a climate of stability and security with West Timor . It is clear that if this progress is further strengthened as time goes by , the Security Council 's goal of gradually reducing the United Nations military presence within a reasonable time period can be successful . I would like , in conclusion , to refer to two aspects that I believe are decisive to the future and to the economic and social progress of the Democratic Republic of Timor-Leste . In the international sphere , four major initiatives should be emphasized in view of their present and future impact on the political and legal shape of Timor and on Timor 's development . These are , first , the admission of Timor-Leste to the United Nations on 27 September 2002 — a symbolic event but , above all , a major diplomatic act . My country supported it , and we are preparing to establish our own diplomatic relations with that country in the coming weeks . There is also the fact that Timor-Leste participated in last July 's Fiji Summit of the African , Caribbean and Pacific Group of States . This is a prelude to Timor-Leste 's joining the Cotonou Agreement with the European Union . We should also emphasize the political judgement and insight of the Timorese authorities that led them very quickly to normalize their relations with their two neighbours which cannot be ignored , Australia and Indonesia . Those two countries and their Governments also deserve , together with the Dili authorities , to be commended and encouraged in the steps that they have taken to maintain economic relations , friendship and cooperation with Timor-Leste based on constructive dialogue , trust and mutual benefit . It is , indeed , indispensable to turn the page and to start again on a new foundation . Last but not least , the action of the international community is essential to the promotion of Timor-Leste 's endogenous and sustained development . Therefore , I should like to reiterate a pressing appeal to the various donors — made explicitly by the Secretary-General in his report — not only that they maintain their support for this young nation , but also , and above all , that they substantially increase their support for Timor-Leste so that , very soon , the country will be able to fly , surely and with dignity , on its own wings . Mr. Konuzin ( Russian Federation ) ( spoke in Russian ) : We are grateful to the Secretary-General for his report ( S/2002/1223 ) , which provides a detailed account of the work carried out during the reporting period by the United Nations Mission of Support in East Timor ( UNMISET ) to implement Security Council resolution 1410 ( 2002 ) . It also gives an accurate account of the main problems facing the establishment of statehood in Timor-Leste . In Timor-Leste , the Organization has acquired truly unique experience , first in helping to prepare for independence and then in assisting with the formation of the young State . We must ensure that that experience — which has undoubtedly already gone down in history as a shining example of a successful effort by the United Nations — is further enriched . The new institutions of State administration in Timor-Leste are not yet firmly in place , and it is quite clear that , in order to strengthen them — particularly in the initial period after the proclamation of independence — the international community must continue to provide support for this youngest of all States . In that connection , we welcome UNMISET 's efforts to assist in the establishment of Timor-Leste 's statehood , and we would emphasize the need to strengthen support in the donor community for that process . The key problems being addressed by the Mission certainly include determining how to help to ensure external and internal security for the new State . Until full responsibility for security is transferred to the national army and police , Mission personnel must ensure that conditions are in place that will exclude any possibility of destabilization in the country , which could undermine independence . We welcome the broadening of the areas of responsibility for Timor-Leste 's army and police , which are now being trained . That will help to ensure the reduction and withdrawal of UNMISET 's military contingent on schedule and without any particularly serious complications . We think it important that the leadership of Timor-Leste continue to demonstrate unity and pursue its policy of establishing good-neighbourly relations with contiguous countries . Support for social and economic development in Timor-Leste by multilateral and bilateral donors is crucially important to long-term stability in the country . Therefore , we welcome UNMISET 's assistance to the Government as it seeks to attain the goals of the National Development Plan by working on priorities in the political , socio-economic and humanitarian fields . In conclusion , we wish every further success to Special Representative Kamalesh Sharma and to all other Mission personnel as they seek to consolidate the positive progress that has already been achieved in assisting the young State of Timor-Leste . Sir Jeremy Greenstock ( United Kingdom ) : My delegation fully associates itself with the statement to be made shortly on this subject by Denmark on behalf of the European Union . I should like to express a very warm welcome back to the Council to Ambassador Sharma and to commend him on the excellent start that he has made as Special Representative of the Secretary-General . We are very much pleased to see the Secretary-General 's report ( S/2002/1223 ) and are grateful for that and for the clear and informative briefing that we have had today . The United Kingdom is very much encouraged by the progress that has been achieved in Timor-Leste since independence , and we should like the Special Representative to convey the thanks of the Council to the whole UNMISET team for what they have achieved , both before and after independence . In addition , we express our sympathies for the families of the victims of the Bali bombing . The report and the briefing together set out an approach that the United Kingdom fully supports for Timor-Leste . We also welcome the continued commitment by the Government to achieving the objectives set out by the Security Council in resolution 1410 ( 2002 ) , but it is clear that there are many tough challenges still ahead . We are particularly aware that urgent action is needed to alleviate poverty , to improve employment and to strengthen the still-fragile institutions . I should like to go through a number of detailed points . We welcome the news that 86 of the 100 stability posts have now been filled , but we are still concerned that only a quarter of the 228 development posts have thus far been filled . We urge UNMISET to deal with those as quickly as possible — particularly the posts for which it has already secured funding — and if the Special Representative could give us some sense of a time frame for that , it would be useful . We hope that international experts working in Timor-Leste will focus on training their Timorese counterparts rather than on trying to do the job themselves . That is an important aspect of capacity-building . On the economic side , we understand from the International Monetary Fund — which is currently visiting Timor-Leste — that it estimates a shortfall of between $60 million and $80 million in the budget up to mid-2005 and that it is also expecting the economic situation to worsen in the second two years of this triennium , in 2004 and 2005 , which will clearly affect the social safety nets . So we would be grateful to learn a bit more about the assessment of the United Nations as to the current economic and budgetary situation and what needs to be done to address it . I note that the rule of law is the first of what the Special Representative considers the principal challenges that the new State faces . There are reminders of our experience in the Balkans echoing here . Respect for human rights and for the rule of law is crucial for Timor-Leste 's future . We therefore welcome the establishment of the Provedor office , but we are concerned at the suggestion that the Judicial Magistrates Statutes do not provide sufficiently for the independence of judges and lawyers . I would be grateful to know whether anything is being planned to remedy that . We look forward to the United Nations Development Programme ( UNDP ) assessment mission and to the provision of a suggested road map of assistance for the justice sector by the Portuguese justice sector expert on the World Bank monitoring mission . A review of all pre-trial detentions is clearly needed , and we are especially concerned about the 10 juveniles currently in detention . We welcome the recent indictments issued by the Serious Crimes Unit , especially for members of the Tentara Nasional Indonesia ( TNI ) suspected of murdering Dutch journalist Sander Thoenes . The poor performance in attracting forensic pathologists needs to be addressed . The mandate implementation plan of 10 priority cases needs to be completed quickly to increase the chances of successful reconciliation . I would like to ask whether the Special Representative has any suggestions for what can be done about serious crimes which fall outside the remit of the mandate implementation plan , because we believe these could undermine work on the plan . We look forward to the multi-donor mission to Timor-Leste next week to look at the needs of the national police . We are pleased that the transfer of responsibility to the national police is proceeding well ; it is important that the police should be fully capable of maintaining law and order when the time comes for UNMISET 's departure . Finally , we would be interested in knowing whether the United Nations has any plans to revise its phase-five security status for West Timor . I end by repeating our thanks to UNMISET for its work and giving , through Mr. Sharma , our best wishes to them and to the Government of Timor-Leste for the coming period . Mr. Williamson ( United States of America ) : We appreciate the progress achieved in the first six months of the mandate of the United Nations Mission of Support in East Timor ( UNMISET ) and the good work done by Ambassador Sharma and his staff . We welcome Ambassador Sharma 's assessment that the mission phase-out remains on target for June 2004. Over the next 18 months we hope that the relationship between Timor-Leste and Indonesia will continue to flourish . We encourage both sides to continue their cooperation to delineate their mutual border by June of next year . The United States agrees with the Secretary-General 's report that the functioning of the Timor-Leste justice system is of central importance for the stability and development of the State . Therefore , we are concerned about the shortcomings of the judicial system highlighted in the report : a lack of clarity regarding the separation of powers among the judiciary , the legislature and the executive ; the members of the Superior Counsel of the Judiciary have not been appointed , thereby delaying the filling of judicial and prosecutorial vacancies ; there is a need for capacity-building for the administrative staff of the Minister 's office ; there is a need to train prosecutors ; and so on . The report said the majority of the prison population is being held for prolonged periods without trial and that on 16 August during prison disturbances nearly 193 prisoners forced their way out of the prison . That is also troubling . We hope and expect that the Government of Timor-Leste , working with UNMISET , will seriously tackle these areas of concern in the judicial sector . We note that the downsizing of the military component is on track . The United States is pleased that the United Nations is committed to terminating the Mission in the summer of 2004 , provided that no significant challenges occur . Indonesia no longer presents a significant threat to Timor-Leste . There have been no recent United Nations military engagements with the militia , or even sightings of them in Timor-Leste . The United Nations has demonstrated its ability to adapt UNMISET 's downsizing plan to an unforeseen delay in the normalization of the border with West Timor . The evolving situation in Timor-Leste — continued reduction of the militia threat but delays in the border normalization — highlights the need for constant review and reassessment of United Nations downsizing plans for UNMISET . The United Nations reassessment of the changing situation in Timor-Leste can be a model for the United Nations to follow with the United Nations Mission in Sierra Leone ( UNAMSIL ) . In the case of UNMISET , the United Nations assessment found a solution that permitted a continuation of its original projected downsizing rate , whereas if additional challenges had been presented the United Nations might have been forced to recommend a decrease in the rate of withdrawal and perhaps to extend the projected mission termination date . The United States commends UNMISET and the Government of Timor-Leste for their agility and for this progress . The Security Council is united in its commitment to a Timor-Leste with both political independence and the infrastructure of a stable , just and efficiently governed State . The progress has been remarkable . While , as I have noted , there is more that needs to be accomplished , overall Timor-Leste is a great success story , and there are lessons to be learned from this progress . Therefore , six months into UNMISET , we think it is constructive to reflect on the factors behind the good news we have heard today . Why have the United Nations efforts in Timor been a success ? A number of reasons come to mind . First and foremost , the brave people of Timor-Leste deserve credit for their dedication and hard work , and for their commitment to achieving independence , to letting democracy take root and to building institutions in the economy necessary for a better future for themselves and their children . The Timor-Leste leaders should be acknowledged for their good work . Any sustainable progress must be constructed on the hopes of the people coupled to their dedication to translate those hopes into reality . Second , however , there was overwhelming consensus and support in the international community and among the Timorese for the initial intervention and the United Nations assumption of administrative powers . Third , both peacekeeping missions — the United Nations Transitional Administration in East Timor ( UNTAET ) and UMISET — have had a clear end game . For UNTAET it was political independence . For UNMISET it has been to provide the training wheels to help the Timorese build their own functioning administration , civil service , police and security force . Fourth , after the initial intervention there were no major armed groups for the peacekeepers to disarm . Fifth , the peacekeeping force was highly professional and operated under robust rules of engagement . There was no prospect of Blue Helmets becoming human shields . Sixth , the relatively small size of Timor-Leste , with a population of under 1 million and a land border with only one neighbour made the logistics of establishing security and administration more manageable . Compare this to a vast country like Afghanistan , with its 20 million people , and the point becomes clearer . Seventh , the local population always has had a strong cohesive sense of national identity less driven by ethnic and religious strife than elsewhere . And eighth , the lack of lust for revenge and reprisal among the Timorese has enabled a smooth return and reintegration of the vast majority of refugees who fled the violence in 1999. While the combination of those circumstances may be unique , collectively they set a standard of success that future United Nations operations should seek to follow . Over the next 18 months we look forward to UNMISET continuing to be a success , a success with lessons upon which we should draw and , most important , a success that will bring a better life to the people of Timor-Leste . Mr. Mekdad ( Syrian Arab Republic ) ( spoke in Arabic ) : Allow me at the outset to extend my profound thanks to Ambassador Kamalesh Sharma , Special Representative of the Secretary-General in Timor-Leste , for his comprehensive and useful briefing this morning and for the efforts he is exerting along with all the workers of the United Nations Mission of Support in East Timor ( UNMISET ) . We wish him all success in his performance and in the important mission he has been entrusted with . We wish to express our appreciation to the Secretary-General for his report on the United Nations Mission in East Timor , which is of particular importance because it is the first report that deals with the developments in the Democratic Republic of Timor-Leste in the wake of their independence on 20 May 2002 and the establishment of the Mission . We would like to express our satisfaction at the fact that Timor-Leste has joined the United Nations and other international and regional organizations , and that it has established diplomatic relations with all the States members of the Association of South-East Asian Nations . The report highlights a number of challenges , most of which relate to the lack of necessary resources , the importance of funding and the need for continued support by donors . We therefore appeal to all the donors to maintain their support for Timor-Leste 's current rebuilding and development programme and to assist the Government in its efforts to formulate and achieve the objectives of the national development plan . Syria therefore concurs with the report 's assertion that multilateral aid from donors aimed at achieving socio-economic prosperity in Timor-Leste is a vital prerequisite for the long-term stability of that country . We would like to express our concern about the slow rate of refugee return since the end of June , and we agree with the report that a resolution of that problem is necessary for the stability of the country . Syria welcomes the general improvements referred to in the report with regard to the state of external security and border monitoring and the need to ensure a stable and secure environment . This has been made possible by the intensive presence of the military components of the United Nations Mission of Support in East Timor ( UNMISET ) at the borders , as well as by consultation , cooperation and continued coordination with the Mission 's counterparts in the Indonesian force in West Timor . We continue to look forward to agreement on demarcation and the implementation of joint obligations , as declared by Timor-Leste and Indonesia , which would allow UNMISET to downsize its presence and , finally , to withdraw . Mr. Gokool ( Mauritius ) : My delegation , like others , also extends a warm welcome to the Special Representative of the Secretary-General , Ambassador Kamalesh Sharma , and thanks him for his informative briefing in introducing the report of the Secretary-General on the United Nations Mission of Support in East Timor ( UNMISET ) . We commend the Special Representative for the excellent manner in which he has steered the work of UNMISET since its inception , and we wish him and his team much success in the fulfilment of the Mission 's mandate and in addressing the principal challenges that confront the young island State and to which he has just referred . We are pleased to note that the Government of Timor-Leste and its national institutions have assumed responsibility for the management and conduct of its affairs . The report clearly highlights the developments in Timor-Leste after independence . We take note of the progress towards the promotion of a broad-based democracy in Timor-Leste through the establishment of legislative , executive and judicial structures . An effective and functioning democracy must have necessary safeguards for the protection of human rights and the promotion of the rule of law . We are particularly pleased to see that the protection of human rights in Timor-Leste is being institutionalized . We are confident that the office of the “ Provedor ” will carry out its activities in the most professional manner . It is heartening to learn that the Commission for Reception , Truth and Reconciliation , established to facilitate reconciliation with justice , has commenced its operational phase . A country that has suffered from so much trauma and been subjected to untold hardships cannot embark on nation-building without justice being seen to be done . Nation-building is never complete without a consolidated , united and peace-loving society . In this regard , Mauritius believes that more is required in order to encourage longer-term reconciliation among the Timorese . Importance must , therefore , be given to nation-building , capacity-building and institution-building . The strong commitment of the Security Council and the international community has been instrumental in the success achieved so far in Timor-Leste . As the report observes , it is important that the Security Council and the donor community remain engaged , so as to build upon the outstanding contribution that has been made to date . The Security Council should therefore continue to support the country in order to preserve and promote its political and economic independence . It is undeniable that without a strong and well-equipped public administration it would be difficult to implement the programmes of the Government . The challenges mentioned in paragraphs 11 , 12 and 13 must therefore be addressed as soon as possible in order to maintain the stability and move forward with the developmental process . We hope that the donor community will make additional efforts by providing the funding required to enable the commitments to materialize . We fully agree that the support of multilateral and bilateral donors in ensuring the economic and social well-being of Timor-Leste is vital for the long-term stability of the country . We welcome the progress made so far in the Timorization process in all sectors , particularly in the police and defence forces . It is encouraging to learn that a total of 2,285 Timor-Leste Police Service officers are now serving their country . We fully support this process and hope that the joint assessment mission , planned to take place this month with the involvement of the Government of Timor-Leste , the United Nations and donor countries , will come up will proposals that will address the needs of the Timor-Leste Police Service . We are happy to note that the first phase of the four-phase downsizing programme will be completed as planned by the end of November , and we hope that the national defence force will become fully operational by June 2004. The resolution of the refugee problem is , indeed , a matter of high priority . No effort should be spared to accelerate the voluntary return of refugees who remain in West Timor . The extremely low return rate registered in October is a matter of concern . We commend the initiative of President Gusmão to make a personal appeal to the refugees to return . The process of reconciliation and nation-building will be more effectively consolidated by the voluntary return of the refugees and by providing them with the necessary facilities for their full integration into society . My delegation is gratified at the pace at which Timor-Leste is forging its relationships abroad . We are pleased to note that it has established diplomatic relations with almost all States members of the Association of South-East Asian Nations , and has become a member of the World Bank , the Asian Development Bank and the Community of Portuguese-Speaking Countries . As a small island State , Timor-Leste needs the support of the international and regional communities in its economic reconstruction efforts and in building a solid , united and peaceful country . My delegation takes particular note of the constructive approach demonstrated by President Megawati Soekarnoputri of Indonesia . The creation of a Joint Ministerial Commission for Bilateral Cooperation to address issues of mutual concern in the maintenance of the Joint Border Committee is a real and significant step forward . This shows the genuine commitment of both countries to the success and prosperity of Timor-Leste . Finally , let me commend the people of Timor-Leste and its leaders for their undying spirit in rebuilding their country . Although their road to independence was long and difficult , the resilience and true dedication of the people of Timor-Leste for the well-being of their country will certainly make that small island State a prosperous and peaceful place to live . Mr. Duclos ( France ) ( spoke in French ) : I , too , would like to thank Mr. Sharma for his statement and for the excellent work that he has been doing . France fully associates itself with the statement to be made later by the representative of Denmark on behalf of the European Union , but I would like to add a few comments . First , I should like to reiterate our satisfaction with the work done by the United Nations Mission of Support in East Timor ( UNMISET ) . Three goals were set for the Mission , and , to a large extent , they have been attained . The first task involves the transfer of policing responsibility . The process is moving forward on schedule and should be completed by January 2004 , in keeping with the timetable . The second task is the establishment of a national defence force . We welcome the beginning of the process of the transfer of power and look forward to its completion by 2004. In that connection , we note that the question of refugees in West Timor no longer seems to pose a threat to stability in the region . The third task relates to the consolidation of the Administration . Here prospects are less clear , naturally , because this is a most important and sensitive issue . Institutions seem to be functioning well , and the relations between the President , the Government and the Parliament , elected in August 2000 , appear to be satisfactory . But there are still disturbing shortcomings in connection with the judiciary , and prison administration in particular , and solutions must be found as quickly as possible . In the short term , this will require further efforts to complete recruitment of Timorese civil servants . In more general terms , with respect to institutional matters , political pluralism must continue to be encouraged . Above and beyond the work of UNMISET , the future and long-term prosperity of Timor-Leste seems to us to depend , inter alia , on three factors . First , efforts towards rebuilding and economic development must be redoubled — a point that several members made earlier . International assistance and mobilization must therefore continue . In this connection , we reiterate the appeals made by others . The second factor relates to the judiciary . It is important that there be a certain consistency between the decisions taken with respect to serious crimes , whether such decisions are taken in Dili or in Jakarta . We are aware of the concerns expressed by the High Commissioner for Human Rights with respect to the ad hoc human rights tribunal in Jakarta . In the wake of the tragic events that took place in Timor-Leste , the judiciary system in both countries has a paramount role to play in ensuring full and lasting reconciliation . In this connection , I share the concerns that have already been expressed on this score . The third factor — the establishment of good relations between Timor-Leste and its neighbours , in particular Indonesia — is a positive factor , and we are pleased at how things are proceeding in this respect . The Joint Ministerial Commission , together with Indonesia , began work last month , and initially promising results have been achieved . I should like to ask a few questions of Mr. Sharma on this point . Could he tell us what is happening with respect to the important issues of compensation and the right to assets ? Has the Joint Commission addressed these issues ? Are people becoming more receptive to the zero option advocated by Mr. Sharma ? And lastly , could the Special Representative tell us more about the demarcation of the land and sea borders between the two countries ? I would now conclude my statement by simply reiterating our very positive assessment of the work being done by the United Nations in Timor-Leste . Mr. Traoré ( Guinea ) ( spoke in French ) : May I first of all thank the Secretary-General for his first report on Timor-Leste . On behalf of my delegation , I should like also to welcome to the Council Mr. Kamalesh Sharma , the Special Representative of the Secretary-General for East Timor , and to express our appreciation for the useful information he has just given us . We commend him for the excellent work that he and his team have done on the ground in such a short period . At the public meeting of the Security Council on 20 May 2002 , my delegation stated that , with Timor-Leste 's independence , a new era was opening up for the country . We noted the tremendous amount of work that lay ahead of the new authorities and stressed the need for the international community to remain engaged in supporting the efforts being made . Six months have elapsed now , and my delegation is pleased to see that a great deal of progress has been achieved thanks to the work done by the people there , the leaders of Timor-Leste and the international community . However , many challenges remain that must be dealt with to enable that young State to shoulder all of its responsibilities . The report under consideration tells us how the situation is evolving on the ground and discusses the responsibilities of the various players with respect to strengthening what has been achieved and developing Timor-Leste . My delegation welcomes the efforts made to ensure the proper functioning of national institutions and to promote a participatory democracy that reflects the concerns of the Timorese . It welcomes Timor-Leste 's joining the World Bank , the Asian Development Bank and the Community of Portuguese-speaking Countries . The elaboration of a regulatory and technical framework for the development of the natural resources of the country , in particular oil and gas , is a prerequisite for resolving the socio-economic problems of the country . We note also the contribution made by the United Nations Mission of Support in East Timor to the implementation of Security Council resolution 1410 ( 2002 ) . Programme I , on stability , democracy and justice , suffers from some technical shortcomings that require our attention . Programme II , on internal security and law enforcement , has resulted in a drop in crime , thanks to the unified chain of command of the United Nations police and the Timor-Leste Police Service . In this connection , we support the continuation of the training programme , so as to ensure the successful transfer of power from the United Nations police to the Timor-Leste Police Service . Programme III concerns external security and border control . In this respect , my delegation welcomes the joint efforts made by the Governments of Timor-Leste and of Indonesia , inter alia to put an end to crime and to maintain an atmosphere of stability . In that connection , we believe that settling the question of refugees is more necessary now than ever before . We also welcome the launching of the National Development Plan for Timor-Leste , and we urge the various partners to give it greater support in order to facilitate a smooth transition . Lastly , given the fragility of the institutions , my delegation is convinced of the urgent need to build capacity , to develop human resources and to pursue appropriate policies in order to strengthen the foundation for sustainable development in Timor-Leste . Mrs. Arce de Jeannet ( Mexico ) ( spoke in Spanish ) : Let me first thank the Special Representative of the Secretary-General for his presentation of the report on the United Nations Mission of Support in East Timor ( UNMISET ) . Let me also express my Government 's appreciation to Ambassador Kamalesh Sharma and his entire team for their work at the head of UNMISET . Mexico welcomes the progress made by UNMISET in the implementation of the mandate established by resolution 1410 ( 2002 ) . The work undertaken by the United Nations and the international community in Timor-Leste constitutes a foundation on which future missions can be developed , taking into account the particularities of each individual case . On 27 September 2002 , we welcomed Timor-Leste into the United Nations community as the 191st Member State . In a brief time , the Timor-Leste authorities have made considerable progress in consolidating their State , which is founded on a broad-based , participatory democracy . In this process , the establishment and consolidation of relations of friendship and good-neighbourliness have been of prime importance . It is encouraging to note that , thanks to cooperation with the Indonesian authorities , many of the problems along the border are being dealt with . In particular , I wish to express my Government 's satisfaction at the agreements reached in the Joint Ministerial Commission with Indonesia for the prompt delimitation of the border . States have a right to live within secure and internationally recognized borders . We appeal to the States concerned to accelerate the process of the delimitation of the land and maritime borders . As the Secretary-General rightly states in his report , resolving the problem of refugees remains a requirement for stability . The fact that this coming December Timorese refugees might lose their refugee status and be left in a state of vulnerability due to the lack of protection under the Statute is a source of concern to my Government . It is therefore urgent to continue to promote the assistance programmes being conducted by the United Nations High Commissioner for Refugees ( UNHCR ) for the repatriation of Timorese refugees , as well as the efforts to promote and to protect human rights . In that regard , we welcome the announcement made on 1 November that the UNHCR and the International Organization for Migration will join efforts to complete the return of refugees by the end of the year . Another welcome development is the progress made in the area of internal security , in particular in the training of , and gradual transfer of responsibility to , the Timor-Leste Police Service . A stable security situation will make it possible by the end of this month , as scheduled , to complete the first phase of the four-stage programme to reduce the presence of UNMISET . I wish to express Mexico 's support for the work being accomplished by the Serious Crimes Unit , as well as the work of the Commission for Reception , Truth and Reconciliation . I also wish to express Mexico 's appreciation of and support for the Timor-Leste Government 's joint signing with the United Nations High Commissioner for Human Rights of a communiqué establishing 11 goals in the area of human rights . The strengthening of a culture of human rights will contribute to the stability of the country . We should therefore take into consideration the Secretary-General 's statement that future progress will depend on maintaining stability in Timor-Leste and on the successful development of a national defence force and the Police Service , including the border service . The support of the international community is essential to those objectives . In this effort , it is crucial to support adequately the strengthening of the judicial system . It is a source of concern that the Timorese Administration is encountering difficulties in dealing with problems such as the reintegration of ex-combatants , the training and recruiting of civil servants , the indictment of those responsible for serious crimes committed in 1999 and the training of the Border Patrol Service . For that reason , we join the appeal to the international community that it continue to give its assistance in order to ensure the internal stability of the country . The National Development Plan places appropriate emphasis on the link that exists between the rehabilitation of infrastructure and national development . Mexico supports initiatives that are being undertaken to help the Government of Timor-Leste in its efforts to achieve its objectives and to facilitate the smooth transition of the United Nations role to traditional development assistance . In particular , we support those programmes aimed at poverty reduction , the promotion of good governance , the administration of expenditures , policy management and the development of the private sector and of the energy sector . The support of the international community , in particular the United Nations , has been fundamental to the success of UNMISET . For that reason , we support the appeal of the Secretary-General that this commitment be maintained so that the goals set can be met . Mr. Kolby ( Norway ) : I would also like to join in welcoming Special Representative Kamalesh Sharma and thank him for his presentation . We also welcome the report of the Secretary-General on the activities of the United Nations Mission of Support in East Timor ( UNMISET ) and the substantial progress that has been reported in Timor-Leste . It is clear that the Government , under President Xanana Gusmão , has taken office and is working hard to promote its goal of a broad-based democracy . We welcome in particular its willingness to seek dialogue with interest groups that have political views different from those of the Government . It is a position that shows maturity and true commitment to the principle of pluralism . Norway also welcomes the progress made in the bilateral relationship between Timor-Leste and Indonesia . The participation of the President of Indonesia in the independence celebrations in Timor-Leste and the subsequent visit of President Gusmão to Jakarta on 2 July 2002 showed their common commitment towards establishing strong bilateral bonds . The decision by the Joint Ministerial Commission for Bilateral Cooperation to maintain the Joint Border Committee equally signalled the wish to address issues of mutual concern . As indicated in the Secretary-General 's report , a durable solution to the refugee problem remains a prerequisite to ensure long-term stability in Timor-Leste . More than 35,000 refugees still remain in West Timor . It is indicated that this group will lose its refugee status by the end of the year , when the Office of the United Nations High Commissioner for Refugees closes down its operations in the area . We therefore hope that President Gusmão 's recent appeals to the refugees will encourage increased return to Timor-Leste . We have taken due note of the concerns voiced by the High Commissioner for Human Rights with regard to the verdicts delivered in August by the Indonesian ad hoc tribunal , and we urge Indonesia to address those issues carefully . In this context , we welcome , however , the continued assistance offered by UNMISET to the witnesses travelling to Jakarta — an undertaking deemed to be crucial to progress in the process aimed at bringing to justice those responsible for serious crimes in 1999. The Special Representative notes that insufficient technical and substantive capacity poses significant challenges within the public administration in Timor-Leste . This also relates to the justice system . The fact that the lack of resources results in detentions without legal basis is a matter of concern . Norway therefore supports and encourages the Government 's continued efforts towards the establishment of a well-functioning court system based fully on the principle of the rule of law . Allow me to end by expressing our satisfaction with the fact that UNMISET is progressing according to the schedule set out by this Council . Moreover , I would like to fully endorse the Secretary-General 's highlighting of the need to complement UNMISET 's implementation plan with sufficient bilateral assistance in a number of key areas crucial to the ongoing nation-building . In this regard , Timor-Leste can continue to count on the full support of the Norwegian Government . Mr. Mahbubani ( Singapore ) : I , too , would like to join our colleagues in welcoming an old friend , Ambassador Kamalesh Sharma , back here . One of his great assets is that he enjoys great confidence in the United Nations community here . I am sure that this confidence will prove to be an asset to him in the field . I also have one small suggestion to make to him . I am sure he is thinking a bit about writing his memoirs after he leaves Timor-Leste and I have found a title for him . The title should read “ From New Delhi to New Dili ” . Let me begin , first of all , by endorsing a point that I believe Ambassador Williamson made in his statement when he said that the United Nations success in Timor-Leste provides a textbook example of a success story in exit management that we could use in other areas where the United Nations is working . I think that is an important point because , frankly , if we look at the record of the United Nations in terms of its exit strategies , some of its past peacekeeping operations have been less than glorious . We hope that , this time around , the United Nations will get it right . The likelihood is that , of course , the United Nations will get it right partly for the reasons that Ambassador Sharma spelled out at the beginning of his statement , when he spelled out the various strengths of Timor-Leste as a new country . I think , too , if I remember correctly , Ambassador Williamson also spelled out a list of strengths that Timor-Leste enjoys . I think we should build on the strengths that Timor-Leste has . If I had to add one more point to that list of strengths — and I hope my new colleague from Timor-Leste will not mind if I make this point — it is that Timor-Leste is a relatively newly independent State that can actually learn from the mistakes of all of us who became independent 10 or 20 years ago . I think Timor-Leste can benefit from seeing what mistakes have been made by others . There seems to be a sort of consensus so far in the discussions that , if we are to continue to maintain this success story , we must have a clear and balanced understanding of the achievements made so far and the challenges that remain for Timor-Leste . It is clear that much has been achieved , but it is also clear that we still have a lot to do before the mandate is accomplished and before Timor-Leste can stand completely on its own . Even then , there will have to be continued United Nations development assistance for many more years to come . Clearly , the United Nations and Timor-Leste are at a very important stage of their relationship , a phase in which the United Nations Mission of Support in East Timor ( UNMISET ) is devolving more and more operational responsibilities to the Timor-Leste authorities . This has to be done very cautiously and gradually . It cannot be done so slowly that the Timor-Leste Government does not have the opportunity to take up the reins in the areas in which it is able to do so , but at the same time it cannot be too quick , without due regard for the actual situation on the ground . As we have said repeatedly , a hasty downsizing and withdrawal of UNMISET will unravel all the achievements that have been made by the United Nations in Timor-Leste . Therefore , a very fine balance has to be struck in this devolution . In some ways , Ambassador Sharma 's job is probably more difficult than that of his predecessor , because his predecessor functioned more or less like a chief executive officer , making all the decisions . I think Ambassador Sharma , if I may describe his job , serves more like a facilitator trying gradually to allow the emergence of a strong , newly independent State . Ironically , the best test for success for Ambassador Sharma is to make himself completely redundant in Timor-Leste by 2004. Having said that , it is also clear to me , listening to everybody , that there are many important challenges that remain . They have been spelled out by virtually everyone that has spoken here , and we just want to mention three or four . My first point is that , while Timor-Leste is consolidating its foundations , its emerging institutions remain fragile and its leaders will have to continue to deal with the dissatisfaction and protests of diverse interest groups , former combatants and veterans . Secondly , while Timor-Leste and Indonesia have taken concrete steps to enhance bilateral cooperation , including on border issues , we note the phrase in the report that says that “ earlier assumptions about progress towards demarcation have proven optimistic ” ( S/2002/1223 , para . Thirdly , despite the efforts of the UNMISET Civilian Support Group , insufficient technical and substantive capacity within the Timor-Leste public administration continues to pose significant challenges to stability . I believe Ambassador Greenstock raised some questions about the filling of the development posts that have been created . One important point that was also made is that it is important to ensure that the international experts , as someone said , are not seen to be doing their job . They must be seen to be preparing the people of Timor-Leste for the job . My fourth point — and again , this has been touched upon by several speakers — is that the development of the judicial system suffers from a lack of clarity regarding the separation of powers among the judiciary , legislature and executive . Of course , there is also a lack of crucial resources . The seriously limited national capacity may affect serious crimes investigations and proceedings , with possible implications for the reconciliation process . These are just a few of the challenges . Taking all this into account , it is clear that , as we move forward from here , there must be a clear understanding that the process of the devolution of UNMISET cannot move on the basis of an autopilot . It has to make constant judgements on the stage of progress we are making at each point in time . Here again , if my memory serves me correctly , I believe that Ambassador Williamson also indicated in his statement that we should constantly judge and see whether we are making progress along the lines in which we are expected to do so , and bear this in mind . This brings me to a point that we raised at the private meeting of the Security Council on Timor-Leste . That is whether we can come up with more specific benchmarks for Timor-Leste 's progress similar to those which Special Representative of the Secretary-General Michael Steiner has worked out for Kosovo . It is possible that we were not clear at that meeting , so maybe we should elaborate on what we meant by this . We recognized that milestones for UNMISET were included in the Secretary-General 's report of 17 April 2002 ( S/2002/432 ) , which recommended the establishment of the peacekeeping mission . We would like to suggest that UNMISET produce a document similar to that produced by United Nations Interim Administrative Mission in Kosovo ( UNMIK ) , which breaks down the milestones into detailed goals and benchmarks . In fact , UNMIK has moved on to develop a set of progress indicators , to systematically track what has been achieved and to identify areas where greater efforts need to be made . We found this document very helpful in assessing progress in Kosovo . We wonder whether the same could be done for UNMISET and for Timor-Leste . We would appreciate Ambassador Sharma 's comments . Someone once commented to me that the meetings on Timor-Leste had become very boring . I think that this is a good sign . It shows that we are basically on the right track on Timor-Leste . Paradoxically , the best ways to ensure that we keep the meetings on Timor-Leste boring in the months to come is to ensure that the international community remains engaged in this process . Mr. Corr ( Ireland ) : May I first express appreciation to Special Representative Sharma for his briefing on the United Nations Mission of Support in East Timor ( UNMISET ) and , as other colleagues have already done this morning , to thank Ambassador Sharma and the men and women of UNMISET for their work , which is being carried out in the highest traditions of the United Nations . I would also like to extend a warm welcome to the Permanent Representative of Timor-Leste , Ambassador Guterres , for the first time since his country joined the United Nations on 27 September . Membership of the United Nations is a recognition of nationhood and of having a place among the peoples of the world — a moment of arrival , as for any new Member State , for the people of Timor-Leste . Ireland associates itself fully with the statement that will be delivered shortly by the representative of Denmark , on behalf of the European Union . The report of the Secretary-General highlights that remarkable progress has been made in a number of important areas and that the benchmarks set out in the plan for UNMISET are being met . The work of nation-building is proceeding well . At the same time , the report also highlights the considerable challenges facing the new State and rightly points out that the continued engagement of the international community is essential to ensure that Timor-Leste has the chance it deserves to seize the opportunity history has given it . The Government and the people of Timor-Leste are to be congratulated for the way in which they have set about building their future . The Government 's National Development Plan , in our view , reflects a balanced course for the country 's medium-term economic and social needs . Ireland admires the judgement of the authorities in Timor-Leste for giving priority to the protection of human rights . The rejection of the death penalty is an admirable example of the direction in which the country intends to go . Timor-Leste is meeting , as Ambassador Sharma said , the highest standards expected of a democratic State . We applaud the manner in which President Gusmão and his Government are approaching foreign policy , particularly Timor-Leste 's crucial relationship with Indonesia . Ireland welcomes the establishment by the two countries of the Joint Ministerial Commission and the fact that they are jointly addressing issues such as border demarcation and access to Timor-Leste from Oecussi . The test of the Commission and , more broadly , of the resolve of the two countries will be in the implementation of equitable solutions to these issues . Additionally , a just outcome for those who committed serious crimes in 1999 will be important for the positive development of relations between the two countries . Such an outcome would also be good for both societies . It is right to focus on the many positive developments of the sort I have mentioned , but it is right for the Council not to ignore the very real challenges remaining in Timor-Leste in addressing which the Council can still play a role , through UNMISET . Timor-Leste is unquestionably a very poor country . The fact that only 23 per cent of its modest budgeted revenue is locally generated puts into stark focus the challenge Timor-Leste faces in creating a sustainable economic environment . As many have remarked this morning , it is clear the donor community will have an essential role to play well after the current phase of immediate post-independence engagement . It is no particular surprise that the justice sector is struggling . We cannot expect a country with a long colonial history , which suffered much violence before independence , to produce overnight a functioning justice sector . The justice sector is a highly important face of authority , however , and has a particularly critical role to play in maintaining the confidence of the people in their institutions . In view of the ongoing difficulties , Ireland would encourage the widest possible cooperation between the Government and the international community to address the most urgent needs . A situation in which a majority of the prison population is being held for long periods without trial because the court system does not function properly needs to be addressed with the utmost urgency . The significant progress in training and developing the Police Service is encouraging . So too is the news that an UNMISET-led mission is to assess the longer-term policing needs . This is the sort of work the Security Council should promote . The Secretary-General 's report also confirms that UNMISET is on target with the development of Timor-Leste 's defence forces , although it stresses that continued donor and bilateral support will be necessary for this progress to continue . It is natural that UNMISET has concentrated on the central institutions of government , as mandated in resolution 1410 ( 2002 ) . We all agree on the need to strengthen the capacity of the central Government , something essential to the functioning of the new State . At the same time , however , we should not overlook the fact that 80 per cent of the population is rural-based . This has implications for local institution-building and , by extension , for the consolidation of the legitimacy of authority . Those involved in the sub-national governing structure should receive support and guidance on operational matters . In this respect Ireland 's development cooperation programme , Ireland Aid , has undertaken to help the Government develop terms of reference for a study on decentralization options . Ireland is closely involved in a range of development cooperation programmes in Timor-Leste . We have been so since 1999 , and last year we opened a representative office in Dili . Our experience there has shown us that bilateral aid is crucial to the future development of Timor-Leste . That country had already been identified by Ireland 's Development Aid programme as a priority for reconstruction and rehabilitation activity . The work we are doing strongly supports and complements the priorities set by the Security Council in resolution 1410 ( 2002 ) and the work of UNMISET . The way in which the Council has handled the situation in Timor-Leste since the tragic and chaotic days of August 1999 has demonstrated that the United Nations , in this as in other areas , is fully capable of successfully handling very complex tasks . For more than three years , the Council and the international community have been adroit and generous in their handling of the situation . During that period , the situation in Timor-Leste has greatly improved . The United Nations mission there has evolved from peacekeeping to peace-building . The current mission shows that peace-building is very much part of the Council 's work , and not merely something to be contracted out to other parts of the United Nations system . Only a few years ago , it was very difficult to convince the United Nations membership that the Council should be engaging in peace-building work . Now , that debate appears to have been put to rest , to the benefit of Timor-Leste and the United Nations . It is now appropriate that in the period ahead the Council should maintain its vigorous involvement with Timor-Leste . Ireland strongly urges that it do just that . Mr. Valdivieso ( Colombia ) ( spoke in Spanish ) : I wish to welcome Ambassador Kamalesh Sharma and express our gratitude to him for his presentation of the report ( S/2002/1223 ) on the activities of the United Nations Mission of Support in East Timor ( UNMISET ) . Through him , I also wish to congratulate the members of his team ; the very important start of their activities and the success they are having will guarantee a very promising outcome for the Mission . It has been five months since the Democratic Republic of Timor-Leste declared its independence and less than two months since it was admitted as a full Member of our Organization . The new Government has been steadily consolidating itself , and has been promoting participative democracy , in keeping with the expectations of the international community . The dissatisfaction of certain sectors of the population , as noted in the report , highlights the difficulties and challenges the Government faces in achieving the development and well-being of the population . We welcome the Government 's efforts to establish good relations with the other States of the region and its participation in the Association of South-East Asian Nations ( ASEAN ) as an observer . I would like to make a few comments on the objectives set by the Security Council in resolution 1410 ( 2002 ) . Regarding the programme on stability , democracy and justice , we underscore the work being done by the Civilian Support Group in addressing gaps within the administration in key areas , including finance , the legal system and the management of administrative and governmental affairs . As already mentioned in this Chamber , the insufficient technical and substantive capacity of the public administration is a serious obstacle to stability . The justice system remains perhaps the weakest link in the new State . The Secretary-General 's report points out the need to strengthen the various components of that system . It is clear that an effective system for the administration of justice is not something that can be achieved in a short time . It is necessary to continue and to redouble efforts , since the proper functioning of the justice system impacts on the stability and the development of the State . The need to bring to trial those responsible for the grave crimes committed in 1999 has been raised on several occasions in the Security Council . We appreciate information on action that has been taken thus far by the Special Panels for Serious Crimes and the envisaged date of completion , 31 December 2002 , although the Panels will continue to assist prosecutors even after that date . We are concerned about the assertion in paragraph 22 of the report regarding the emergence of additional cases of serious crimes different from those provided for in the implementation plan . These might involve crimes against humanity and might go uninvestigated . The fact that the Commission for Reception , Truth and Reconciliation has begun its activities is also positive . My delegation has already underscored the importance of the work that needs to be done by that body , since , as is well known , there can be no reconciliation without justice . Regarding the internal security and law enforcement programme , while we note that the security situation is normal and the fact that the UNMISET civilian police have already transferred control of four of the 13 districts to the Timor-Leste Police Service , it would be important here to echo the appeal made by Ambassador Sharma at the end of his statement regarding terrorism . It seems that the region has been selected for terrorist action , at least according to a large number of reports and much information . Therefore , this is a warning that I would like to echo , because it is clearly reflected in the report . We have also taken note of the fact that the UNMISET police component has been reduced by one third , in keeping with the plan , and that training is proceeding satisfactorily . Nonetheless , we also attach importance to the joint assessment mission soon to take place , in which the Government , the United Nations and donor countries will participate , to assess the level of training and logistical support needed and to identify resource difficulties . Regarding the programme on external security and border control , although the report indicates that external security and border control have continued to improve — in particular , control of militia activities and criminal activities at the border — the risk of terrorism , to which we have already referred , is also a concern . We associate ourselves with all those who have expressed their solidarity with the families of the two officers of the peacekeeping component who were killed in the Bali attack . The return of refugees from West Timor , which continued following independence and which reached its highest level in June and July , has declined . It may be that this could be dealt with in the short term , as the Office of the United Nations High Commissioner for Refugees has indicated . The security situation is also very encouraging . As scheduled , by the end of November , the first phase of the programme for downsizing the military component of UNMISET will be complete . Future progress will depend on maintaining security in Timor-Leste and on the successful development , through sufficient donor and bilateral support , of the national defence force and the Border Patrol Service . Let me say in conclusion that capacity-building and empowering the local population in all areas — security , economy , justice and governance — continues to be the main work to be done . We are pleased that , to date , the situation is evolving within the envisaged parameters , including the plan to downsize UNMISET . The President ( spoke in Chinese ) : I should like to make a statement in my capacity as the representative of China . At the outset , I wish to thank the Secretary-General for his report ( S/2002/1223 ) and Ambassador Sharma for his detailed briefing . I would also like to extend a welcome to Ambassador Guterres as the first Permanent Representative of Timor-Leste to the United Nations . His presence has made today 's meeting more meaningful . Since the independence of Timor-Leste , encouraging changes have been taking place , one after another . Under the leadership of the new Government , and with the enormous support of the United Nations Mission of Support in East Timor ( UNMISET ) , the people of Timor-Leste are carrying out nation-building on all fronts in a gradual and orderly manner . It is also pointed out in the report that leaders of Timor-Leste are vigorously pursuing broadly based democratic participation on the domestic front . On the diplomatic front , they are actively building and developing friendly relations and cooperation with the international community , particularly with the countries of the region . China is pleased to note that both Timor-Leste and Indonesia are committed to good-neighbourliness . That is bound to contribute positively to the long-term stability of Timor-Leste and of the region as a whole . Under the leadership of Mr. Sharma , Special Representative of the Secretary-General , UNMISET is comprehensively carrying out the mandate given to it by resolution 1410 ( 2002 ) . In so doing , it has established good working relations with the Government of Timor-Leste and the various sectors of the country . We note that the Mission has done much to help Timor-Leste to improve its administrative capacity and to put in place a judicial system . It has also made progress in the areas of police training , the transfer of policing responsibilities and cooperation with the national defence force of Timor-Leste . In addition , the Mission 's military component has maintained an effective presence in the border areas and has established a mechanism for consultation and cooperation with the Government of Indonesia ; this has played a key role in improving the security environment in Timor-Leste . China appreciates the Mission 's achievements and will continue to support its work . We look forward to an even greater role for the Mission under the outstanding leadership of Ambassador Sharma . Of course , there are still many difficulties to be overcome in the work of the new Government and of the Mission . As the report of the Secretary-General repeatedly points out , the support of the international community is of crucial importance to the various aspects of capacity-building in Timor-Leste and to the transition from United Nations functions to traditional development assistance . It is therefore necessary that the international community increase its input in Timor-Leste and fully implement its commitments . In addition , an adequate solution to the issue of refugees will have an impact on the long-term stability and security of Timor-Leste . We hope that the Governments of Timor-Leste and Indonesia will continue to work to make progress in that regard . China long supported Timor-Leste in its quest for independence . We will continue to support the people of Timor-Lest in their efforts at building a nation . Within our capabilities , we will also continue to provide support . I now resume my functions as President of the Council . It is my pleasure to welcome the Permanent Representative of Timor-Leste , Mr. José Luis Guterres , who is taking the floor for the first time in this Chamber as the representative of a Member of the United Nations . I now give him the floor . Mr. Guterres ( Timor-Leste ) : It is both an honour and a privilege for me to address this body for the first time as the first representative of the Democratic Republic of Timor-Leste to the United Nations . Allow me , therefore , to take this opportunity to convey my Government 's deep appreciation for the unwavering support of the Council , and of the United Nations in general , throughout the years of Timor-Leste 's struggle for freedom and self-determination . I would also like to assure the Council of my country 's full support in its deliberations on the other important issues before it . My delegation sincerely congratulates you , Sir , on your assumption of the presidency . We have no doubt that your experience and dedication will guide the Council in its deliberations in times when difficult decisions are required . My Government would also like to commend the Secretary-General for his comprehensive and balanced report on the United Nations Mission of Support in East Timor ( UNMISET ) before the Council today . The report ( S/2002/1223 ) reflects the hard work of the Secretary-General 's Special Representative , Mr. Kamalesh Sharma , and his staff . His advice and leadership during the past six months underscore the continued commitment of the United Nations to Timor-Leste . The report indicates that much still needs to be done . We fully agree with that conclusion . The Government and the people of Timor-Leste stand ready to face the many challenges ahead of us . In doing so , we are committed to the principles promoted by the United Nations : democracy , transparency and respect for human rights and the rule of law . At the same time , however , I must ask for the Council 's understanding . Timor-Leste is still a young country ; its transition from decades of violence and deprivation to being a fully functioning member of the community of free States is not yet completed . The difficult task of building human and institutional capacities and an infrastructure needs time . Building a self-sufficient and prosperous nation will require the Council 's continued support and partnership , as well as that of the international community at large . In its first National Development Plan , the Government of the Democratic Republic of Timor-Leste has identified the key challenges that will confront the country in the years to come . Poverty reduction , education , health care , infrastructure and economic development and institutional capacity-building at all levels of Government remain top priorities . Therefore , funding the posts called for by the Secretary-General to support Timor-Leste 's efforts in the areas of development and poverty reduction is critical to the viability and long-term political stability of Timor-Leste . We need personnel that have the expertise and capacity to accomplish the goals set forth in the National Development Plan . That will help not only to foster the investments and progress already made in the country 's economic and social recovery , but also to achieving the goals contained in the Millennium Declaration . UNMISET 's mandate also calls for assistance in law enforcement and the justice sector . The development of an effective , independent and impartial legal system is an area of great concern to the Government of Timor-Leste . It is central to the security and stability of our nation , reconciliation among our people and the creation of an investor-friendly economic environment . We understand that our civil servants and lawyers still have things to learn . Training and capacity-building therefore remain key priorities . Creating a justice system from scratch cannot be done over night . It requires the sustained effort and commitment of all of us — Government , civil society and the international community . While reconstruction challenges remain paramount , I would like to highlight some of the positive political developments within Timor-Leste and outside it . Democratic culture and political participation are growing . The first laws have been passed , and the Parliament has become the proud sovereign of our young nation . The reconciliation and return of refugees has continued . Just recently , President Gusmão visited West Timor with a delegation of 100 citizens from Timor-Leste to encourage the return and resettlement of the remaining refugees . Reconciliation and healing between the Timorese will also further improve relations with Indonesia . Strengthening relations with Indonesia is a priority of my Government . As mentioned in the report , President Xanana Gusmão 's first State visit took him to Jakarta , where President Megawati Soekarnoputri warmly received him . In addition , a high-level meeting was recently held , which resulted in the creation of the Joint Ministerial Commission for Bilateral Cooperation between the two countries . In addressing issues of mutual concern , the Commission will further strengthen friendly and neighbourly relations . The negotiations with Australia on petroleum exploitation in the Timor Sea are well on track . On the international level , Timor-Leste has become a member of the African , Caribbean and Pacific Group of States ( ACP ) and a member of the Community of Portuguese-Speaking Countries ( CPLP ) , and we support the Indonesian initiative to establish the South-West Pacific Forum , comprised of Australia , Indonesia , New Zealand , Papua New Guinea , the Philippines and Timor-Leste . We have been invited to participate as an observer in meetings of the Association of South-East Asian Nations ( ASEAN ) and of the Pacific Island Forum . Timor-Leste has established diplomatic relations with several countries and has started to open its first diplomatic missions . We have ratified the Rome Statute for an International Criminal Court , and we have accelerated preparations for ratification of several international human rights instruments by 10 December 2002. Of course , Timor-Leste is fully committed to the global fight against terrorism . Cowardly attacks against innocent civilians are morally repugnant , and we intend to fully cooperate with the work of the Counter-Terrorism Committee established pursuant to Security Council resolution 1373 ( 2001 ) . However , since Timor-Leste 's law enforcement and security apparatus , including its defence and police force , is still in its nascent stage , we need the continued presence of the international police and peacekeeping force until we have the capacity to meet these and other goals on our own . Downsizing now would be premature and would jeopardize the achievements of recent years . I would urge Council members to adhere to the targets established by the Council in May 2002. In this context , I would like to convey my Government 's heartfelt sympathies and condolences to the families of the victims of the senseless terror attack in Bali . Among the lives lost were those of United Nations staff members serving in my country . We share your loss . Just yesterday , President Xanana Gusmão laid a wreath at the site of the tragedy . Let me conclude by expressing , once again , my Government 's deep appreciation for the continued support of the United Nations and the Secretary-General . Timor-Leste is on a good path . Although progress has been made , much work remains to be done . The President ( spoke in Chinese ) : I thank the representative of Timor-Leste for his kind words addressed to me . The next speaker inscribed on my list is the representative of Fiji . I invite him to take a seat at the Council table and to make his statement . Mr. Naidu ( Fiji ) : It is a pleasure for us to have Ambassador Kamalesh Sharma amidst us , and we thank him most sincerely for the very comprehensive report he has presented to the Council . In all previous meetings of the Security Council on East Timor , we had leaders from Dili , but it is now a great pleasure for us to see post-independence Timor-Leste represented by the Permanent Representative , Ambassador Guterres in the Council today . Mr. President , I requested the floor to contribute to this debate on behalf of the Pacific Islands Forum ( PIF ) members in New York : Australia , Republic of the Marshall Islands , Federated States of Micronesia , Nauru , New Zealand , Papua New Guinea , Samoa , Solomon Islands , Tonga , Tuvalu , Vanuatu and my own country , Fiji , as well as Kiribati and Palau . The subject of Timor-Leste is close to our members owing to its affinity and proximity to our region . We are aware of the fact that the future sustainability and stability of Timor-Leste has a significant bearing on our own subregional and wider regional good-neighbourly relations , security and stability . It is at least for those reasons that several PIF members have taken active roles in both the United Nations Transitional Administration in East Timor ( UNTAET ) and the United Nations Mission of Support in East Timor ( UNMISET ) . The Pacific Islands Forum group wishes to thank the Secretary-General and his Special Representative for a candid account of the UNMISET targets that have been met , some beyond projections , but some goals are still outstanding . We are pleased to see the Mission adhering closely to the agreed downsizing phases and timetable , neither faster nor slower , and we are very hopeful that goodwill from all parties will ensure a final withdrawal under phase 4 in June 2004. We welcome the positive developments that have taken place since the independence of , and transition of governance to , Timor-Leste . The fragility of the country 's nascent institutions in the sectors of justice , internal security and law enforcement , external security and border control and development constitutes an uphill challenge . As can be expected , its first Human Development Report shows poor indicators on poverty , literacy and life expectancy , and it confirms Timor-Leste as the poorest nation in Asia in terms of financial and human development . The Secretary-General 's report also serves as an opportunity for Timor-Leste to chart its own course of development away from poverty , and our Group endorses the Secretary-General 's recommendations for continued engagement towards this goal . For its part , the activities of the Timor-Leste Government in making laws and in building national institutions and international networks are significant achievements . They are also evidence of its growing integrity and deep commitment to working with the United Nations Support Mission . In addition to Timor-Leste 's participation in meetings of the Association of South-East Asian Nations ( ASEAN ) and the third Summit of the African , Caribbean and Pacific Group of States ( ACP ) , we also note Timor-Leste 's special observer status , with equivalent rights of an observer , in the 33rd Pacific Islands Forum , held also in Fiji this year , as reported in United Nations document A/57/331 . We urge United Nations entities system-wide , Bretton Woods institutions , civil society and organizations to build on that Government 's bilateral and multilateral efforts to promote sustainable development . We now want to highlight two areas in the Secretary-General 's report that require continued international assistance . We recognize that development of the public administration is significant for good governance . In this respect , we welcome the recruitment of stability and development advisors to act as mentors in the transfer of skills to the Government . We encourage UNMISET to maintain its focus on the development of a self-reliant civil service . Secondly , positive efforts in building on human rights institutions in Timor-Leste are generating international confidence in the Government 's work . We note progress made in the work of the Commission for Reception , Truth and Reconciliation , and in the parallel innovative concept of a community reconciliation process . The more stable security situation , the growing number of indictments issued by the Serious Crimes Unit , the non-violence training in police units and the awareness programmes on gender and HIV/AIDS are timely responses to the multiple vulnerabilities facing Timor-Leste . Despite some progress in meeting agreed targets , much remains to be achieved in the justice and police systems . The President ( spoke in Chinese ) : The next speaker inscribed on my list is the representative of Chile . I invite him to take a seat at the Council table and to make his statement . Mr. Valdés ( Chile ) ( spoke in Spanish ) : First of all , I should like to express to you , Sir , our congratulations on your wise leadership of the Security Council during this difficult period . The Chilean delegation also wishes to thank you for the convening of this open debate , an opportunity that enables us to express our own views on an important process to which we feel connected in a special way . In addition , I wish to express our appreciation for the valuable information given to us today by Ambassador Kamalesh Sharma , Special Representative of the Secretary-General for Timor-Leste , whom we sincerely congratulate on his constant efforts aimed at the development of that new nation . Since 1961 , Chile has been part of the Special Committee on the Situation with regard to the Implementation of the Declaration on the Granting of Independence to Colonial Countries and Peoples - a body in which we have worked hard to promote , inter alia , the principle of self-determination of the non-self-governing Territories included on the agenda of the United Nations . For that reason , we fully realize the importance of the significance for the inhabitants of Timor-Leste of having won the right to embark on the path of a viable and independent nation as of 20 May 2002. For Chile , it is a source of particular pride to have participated in the previous period , as a member of the United Nations Transitional Administration in East Timor ( UNTAET ) , in a United Nations effort to contribute to the process of that country 's independence and reconstruction . For that reason , my Government takes special interest in and is following closely the first steps of the Democratic Republic of Timor-Leste as an independent nation . We should like to emphasize , in that regard , the efforts of the Government headed by President Xanana Gusmão , and we welcome Timor-Leste 's admission to the United Nations on 27 September . As pointed out by the Secretary-General in his most recent report ( S/2002/1223 ) , my country agrees that , although the authorities and the people of Timor-Leste have continued to work to strengthen the foundations of their country during the first five months of its independence , its new institutions will remain fragile in the immediate future . In that regard , we value the commitments of the international community , especially the work being carried out by the United Nations Mission of Support in East Timor ( UNMISET ) , and the cooperation of donor countries . We note with interest the work being carried out in the areas of stability , democracy and justice , particularly progress achieved with regard to finances , the judicial system and the management of administrative and governmental resources . However , we recognize that there are many problems that must be resolved , and we believe that priority should be given to overcoming the many difficulties that persist in the judicial sector and in the prison system . We also attach great importance to the establishment of the Commission for Reception , Truth and Reconciliation and the work that it has begun in the country 's 13 districts . That is a very significant contribution with regard to human rights and an inescapable necessity for any democratic transition . Chile can attest to the fact that reconciliation is not stable and does not lead to effective peace unless it is accompanied by truth and justice with respect to human rights . We observe with great interest the work undertaken in the area of external security and border control , and we value the progress achieved . Nevertheless , we share concern at the risk of terrorism faced by the region , especially after the attack in Bali , Indonesia . In that regard , we consider it highly important that necessary measures continue to be implemented to guarantee the security of the people of Timor-Leste and of United Nations personnel . We also consider it necessary to continue to work for the return of refugees , as that is a prerequisite for stability . We emphasize the work accomplished in that regard by the Office of the United Nations High Commissioner for Refugees and by President Gusmão himself . We value the efforts and the rapprochement observed between the Government of Indonesia and the Government of Timor-Leste , which facilitates fulfilment of the commitments undertaken and which may help in meeting the timetable envisaged for UNMISET 's reduction and ultimate withdrawal . However , we know that there are still great challenges to be met and that the road ahead is not free of difficulties . Therefore , it is imperative that sufficient bilateral assistance continue to be provided in various fundamental sectors mentioned in the report . In that connection , it is extremely important that the donor community maintains the firm commitment of support that it has undertaken on behalf of Timor-Leste . The President ( spoke in Chinese ) : I thank the representative of Chile for the kind words that he addressed to me . The next speaker on my list is the representative of New Zealand . I invite him to take a seat at the Council table and to make his statement . Mr. MacKay ( New Zealand ) : At the outset , I should like to thank Ambassador Sharma for his introductory comments on the report ( S/2002/1223 ) and also to compliment Ambassador Guterres on his first statement before the Council . The Secretary-General 's report on the United Nations Mission of Support in East Timor ( UNMISET ) is comprehensive and forward-looking . It usefully covers the challenges of nation-building , including the formidable task of developing a sustainable economy . I should like to associate New Zealand with the statement made by Fiji on behalf of the Pacific Islands Forum , and I should like to make a few additional comments from a purely New Zealand perspective . Such stock-taking is timely and of special interest to New Zealand , particularly given this week 's withdrawal of the New Zealand battalion and aviation detachment , in line with the Council 's schedule for downsizing the United Nations presence in Timor-Leste . The New Zealand Defence Force battalion and aviation detachment have been part of the United Nations peacekeeping force since 1999. New Zealand 's experience of working in a coalition battalion group during the past three years has been overwhelmingly positive , and it has been enriching and rewarding for our military personnel . I should like to take this opportunity to thank the countries that have served alongside us for their cooperation and support . These include Fiji and Nepal , and two members of the Council , Ireland and Singapore . Although New Zealand 's military presence in Timor-Leste will greatly reduce this month , our involvement in Timor-Leste will certainly continue . New Zealand is committed to contributing further to Timor-Leste 's nation-building , and to maintaining a secure and stable environment in which this can take place . Up to 26 New Zealand Defence Force personnel will remain in the country as United Nations Military Observers , headquarters staff officers and bilateral training support to the Timor-Leste defence force . We will also continue to provide targeted development assistance , focussed primarily on community and natural resource development , basic education and governance and institution capacity-building . I would like briefly to comment on a few areas of the Secretary General 's report . Revenue should begin to flow from the country 's petroleum and gas reserves in the Timor Sea in the next 2 to 4 years , following the ratification and implementation of the Timor Sea Treaty . We welcome Timor-Leste 's efforts at promoting sound and transparent development planning and budgeting , and believe that this will serve the country well when the revenues become available for use . Timor-Leste 's future prosperity will depend much on the strength of its bilateral and regional relations . The bilateral relationship between Timor-Leste and Indonesia will be especially important and indeed Ambassador Guterres has highlighted this in his statement before the Council this morning . In this respect , we welcome the many positive developments that have occurred in this regard , particularly the formation of the Joint Commission for Bilateral Co-operation between Timor-Leste and Indonesia . At its first meeting last month , the Commission announced initiatives to resolve residual issues like the demarcation of a common land border . Having had troops deployed in a border area , New Zealand fully appreciates the importance of agreement on demarcation of the land border between Timor-Leste and West Timor for maintaining a sound security environment in the region as a whole . It is also encouraging that other regional countries have increased their engagement with Timor-Leste in various areas . This augurs well for Timor-Leste 's integration within the region . New Zealand shares other donors ' concerns about the current weaknesses of the justice sector in Timor-Leste , which lacks both physical and human resources . We have seen reports , for example , that people are being held for long periods in prison on remand , and in some cases without adequate warrant . We endorse the Secretary-General 's recommendation that international donors should focus on this sector . With regard to the corrections system , New Zealand has supported the establishment of the Timor-Leste Prison Service since early 2000. We will continue working with the Government , the United Nations and other donors to further strengthen and develop the capacity in corrections management , consistent with international best practice . We note the Secretary-General 's recommendations that the Timor-Leste Police Force needs more resources in order to carry out its mandate effectively , particularly in the outer districts . The rule of law is of utmost importance and , indeed , Ambassador Sharma highlighted that in his statement to the Council this morning . Clearly , people need to have faith in the ability of the police force and the justice system as a whole to provide a safe and protective environment and , again , the international community needs to assist in this respect as well . Timor-Leste 's security will also be underpinned by further progress in addressing the legacy of the violence committed in 1999. This includes the truth-telling process being carried out by the Commission for Reception , Truth and Reconciliation , as well as the effective prosecution of major human rights crimes by the Serious Crimes Panel in the Dili District Court . We fully support United Nations assistance to the Serious Crimes Unit . Equally important are the ad hoc tribunals currently under way in Jakarta . New Zealand was extremely disappointed at the first verdicts in those trials and has a number of concerns about that process , which to be credible , must be robust . We agree with the report 's assessment that progress has been steady , but that international support remains vital to strengthen the still fragile institutions of Timor-Leste . New Zealand remains committed to playing its part in this effort . Ms. Løj ( Denmark ) : I have the honour to speak on behalf of the European Union . The countries of Central and Eastern Europe associated with the European Union — Bulgaria , Czech Republic , Estonia , Hungary , Latvia , Lithuania , Poland , Romania , Slovakia , Slovenia — and the Associated Countries , Cyprus , Malta and Turkey , as well as the European Free Trade Association country of the European Economic Area , Iceland , align themselves with this statement . It is a pleasure to be able to start my intervention by thanking our former colleague Ambassador Kamalesh Sharma , the Secretary-General 's Special Representative , for his statement regarding the situation in Timor-Leste . Allow me also to commend you , in your capacity as President of the Security Council , for convening this open meeting on the United Nations Mission in East Timor 's ( UNMISET ) . The European Union welcomes this opportunity to congratulate the people and the elected representatives of Timor-Leste on the birth of their new nation , as well as Timor-Leste 's admission to the United Nations . In its efforts to build a nation , the people of Timor-Leste have shown great political maturity , choosing to support democracy and to establish sound and friendly relations with their neighbours as the only viable path to peace and progress . The European Union welcomes and supports the efforts of the new Government , under President Xanana Gusmão , to consolidate the fragile political institutions in Timor-Leste . Furthermore , the European Union supports the efforts to ensure and uphold democratic institutions and the rule of law while building the new nation . We support the Government 's commitment to respect human rights , including its firm rejection of the death penalty . We welcome the positive development in the neighbourly relations between Timor-Leste and Indonesia . The first decisions on border delineation have recently been taken . We hope the cooperation in this field will continue in the same friendly spirit and we believe that the present steps bode well for future cooperation between the two countries on a number of crucial issues . Cooperation is highly called for on bringing those responsible for serious crimes committed in 1999 to justice . Refugee issues are another area of importance . The European Union supports the efforts of the Government of Timor-Leste to welcome back the refugees still remaining in West Timor . In spite of the achievements of the past three years and in spite of continued progress , there are still major tasks to be accomplished in the coming months and years . As one of the poorest nations in South-East Asia , Timor-Leste faces a number of challenges . There is a critical need for the continued support of the international community . The United Nations continues to have an important role to play in the nation-building efforts of Timor-Leste . We note with satisfaction that UNMISET 's operations have generally progressed according to schedule . UNMISET should stay in Timor-Leste as long as it is deemed necessary for the fulfilment of its mandate . A strategy has already been set out , including deadlines for downsizing personnel . This strategy must be kept under review in order to make sure that it accurately takes into account developments in relation to both the internal and the external security situation . The European Union is concerned about the recent atrocious events in Bali , which constitute a worrying indicator of increased international terrorist risks in the region . The European Union commends the ongoing efforts by the Timorese authorities to ensure external security , in parallel with its efforts to maintain internal security , the rule of law and law enforcement . We nevertheless worry about the potential vulnerability of a country still in the process of building its security institutions . In this regard , we underline the importance of continued international cooperation in the fight against terrorism and of the adoption of adequate measures to prevent , combat and eliminate terrorism . Many European Union nationals have participated in the successive United Nations missions in Timor-Leste and will remain present in UNMISET . The European Union has made considerable efforts to support the new nation , and the European Union , as well as its member States , will continue its development cooperation with Timor-Leste . The President ( spoke in Chinese ) : I thank the representative of Denmark for her kind words addressed to me . There are eight speakers remaining on my list , and Mr. Sharma would also like to respond to the questions raised during the debate . However , as time is running out for this morning 's meeting , I will give the floor to one more speaker before suspending the meeting . The next speaker inscribed on my list is the representative of Indonesia . I invite him to take a seat at the Council table and to make his statement . Mr. Hidayat ( Indonesia ) : Allow me to express the gratitude of the delegation of Indonesia to you , Mr. President , and to the delegation of China , for convening this open meeting on the Situation in Timor-Leste . We acknowledge the presence in our midst today of the Special Representative of the Secretary-General and Head of the United Nations Mission of Support in East Timor , Ambassador Kamalesh Sharma . We welcome him back to New York ; my Government certainly has had the privilege of working closely with him . We thank him for his thoughtful statement to the Council , which he made earlier . My delegation is also grateful to the Secretary-General for his report . As is well known , Indonesia had , even before Timor-Leste became an independent State last May , developed a warm and special relationship with the one hundred and ninety-first Member of our Organization . It is in this connection that we are pleased to applaud the progress that Timor-Leste has made since its independence . As we declared in this Chamber last May , the Government of Indonesia has supported UNMISET in the execution of its mandate , and it will continue to do so . It is our firm belief that progress in Timor-Leste will require the cooperation of the members of the international community . The first meeting , in Jakarta last month , of the Joint Ministerial Commission for Bilateral Cooperation , set up by Indonesia and Timor-Leste in July 2002 to facilitate consultation and cooperation , marked a further step on the path towards improved bilateral relations between the Governments of Timor-Leste and of Indonesia . The Commission established five working groups to deal with border issues , trade and finance , legal matters , educational and cultural affairs and transport and communications . With particular reference to the complex border question , both sides agreed to adapt the former Joint Border Committee of Indonesia and the United Nations Transitional Administration in East Timor ( UNTAET ) . That body 's first meeting was originally scheduled for 18 and 19 November 2002 , but , because of Ramadan , it has been rescheduled for 18 and 19 December . The Committee has been charged with finalizing an agreement by 30 June 2003. In this connection , it may be recalled that in April and May 2002 , Indonesia and UNTAET undertook a joint reconnaissance survey aimed at working towards the delimitation of the land border between Indonesia and Timor-Leste , including the enclave . Both nations have also arranged to commence formal discussions on maritime border issues by the first half of 2003. At the regional level , it is also my pleasure to point out that early last month , Indonesia 's South-West Pacific Dialogue initiative was realized ; Timor-Leste is a founding participant in that process . Its attendance at Association of South-East Asian Nations meetings bodes well for the further integration of Timor-Leste into longer-term relationships with the region . Indonesia is proud of the modest strides made in its relationship with Timor-Leste , symbolized by the creation of the Joint Commission and the holding of the South-West Pacific Dialogue . To us , such meetings are a reflection of the mature cooperation between two sovereign States . I believe such cooperation deserves the wholehearted support of the Council and the international community . I should like now to touch on the issue of refugees , which has been on the table for some time . Indonesia expects a comprehensive solution by the end of this year . Towards that end , my Government will provide additional incentives for those who opt to return to Timor-Leste by the end of this year . President Xanana Gusmão 's visit to East Nusa Tenggara early this month is also part of the redoubled efforts being made by Indonesia and Timor-Leste to encourage the remaining refugees to return . We take note of the Secretary-General 's remarks concerning the low rate of returns in the past two months . One of the major impediments is the lack of the financial support envisaged when the Joint Appeal by Indonesia and the United Nations was launched last November . We therefore reiterate the need for the international community to contribute generously and fulfil its financial commitments to the Joint Appeal . Only through concerted efforts by Indonesia , Timor-Leste and the international community can this problem be solved expeditiously and comprehensively . In the area of external security and border control , we support the assertion in the report that the overall situation has continued to improve since the previous report of the Secretary-General was issued . Efforts by the Governments of Timor-Leste and of Indonesia in this regard are clearly having the desired effect , and Indonesia is determined to ensure that progress does not stop . To this end , the cooperation and consultation between the Indonesian military in West Timor and their counterparts in UNMISET will be maintained . In order to encourage progress on this vital issue , however , it is our view that in preparing the reports of the Secretary-General , efforts must be made to avoid using terminology or making references that do not reflect the situation in the field . If there are criminal elements in the border area , for instance , they should be characterized as such . Of course , criminal activities are common problems and need common efforts . While Indonesia pursues these avenues of bilateral and multilateral cooperation in support of the young State , there is tremendous room for the international community at large to support these efforts . In this connection , we draw attention to the appeal of the Secretary-General to the Security Council and the donor community to remain engaged in Timor-Leste , to build upon their outstanding contribution to date and to fully realize this promise . Not only will such a commitment enable UNMISET to adhere to the timetable that has been set , but it will enable the Government and the people of Timor-Leste to make the kind of steady progress that they badly need . Meanwhile , Indonesia will continue to stand by them and to provide its assistance and encouragement . Finally , we would like once again to reiterate that the relationship between the two countries has been flourishing extremely well at all levels , and therefore we urge the members of the international community , as well as the United Nations , to support this . The President ( spoke in Chinese ) : I thank the representative of Indonesia for the kind words he addressed to me . The meeting was suspended at 1.05 p. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-154A . </text>
<text id="un/S_PV4684RESUMPTION1">
Agenda Children and armed conflict Report of the Secretary-General on children and armed conflict ( S/2002/1299 ) The meeting resumed at 3.15 p. m. The President ( spoke in French ) : I should like to inform the Council that I have received a letter dated 14 January 2003 from the Permanent Observer of Palestine to the United Nations , which will be issued as document S/2003/45 , and which reads as follows . “ I have the honour to request that , in accordance with its previous practice , the Security Council invite the Permanent Observer of Palestine to the United Nations to participate in the meeting of the Security Council being held today , Tuesday , 14 January 2003 , on children and armed conflict . ” I propose , with the consent of the Council , to invite the Permanent Observer of Palestine to participate in the debate , in accordance with the Council 's provisional rules of procedure and with previous practice in this regard . There being no objection , it is so decided . I invite the Permanent Observer of Palestine to take the seat reserved for him at the side of the Council Chamber . The next speaker inscribed on my list is the representative of Greece . I invite him to take a seat at the Council table and to make his statement . Mr. Vassilakis ( Greece ) : As this is my first intervention before the Security Council this year , I would like to congratulate you , Sir , on your assumption of the presidency . I would like also to extend my warm congratulations to the representatives of the new members of the Council , namely Angola , Chile , Germany , Pakistan and Spain . I have the honour to speak on behalf of the European Union . The acceding States — Cyprus , the Czech Republic , Estonia , Hungary , Latvia , Lithuania , Malta , Poland , Slovakia and Slovenia — the countries of Central and Eastern Europe associated with the European Union — Bulgaria and Romania — as well as the European Free Trade Association country of the European Economic Area Iceland align themselves with this statement . It is a cruel fact that armed conflicts affect a large number of children in many parts of the world . Many of them are uprooted from their homes , maimed or killed . Others are orphaned , abused or exploited . Girls are especially at risk of being subjected to sexual violence during violent conflicts , including rape and enslavement . Children are recruited , trained and forced to kill . Malnutrition among children increases rapidly because of falling food production and displacement . Infant and child mortality rates rise dramatically . Access to schooling is seriously restricted . This means that the lives of generations of children growing up in conflict-affected areas are hampered in a multitude of ways that hinder their physical , social and emotional growth . We risk losing generations due to conflict . This is not only a human tragedy of immense proportions ; it is also a tragedy for the countries concerned . Those children are needed to ensure the continued development of their countries . We must face this challenge and ensure that we act as swiftly as possible . The European Union was satisfied that Security Council resolution 1379 ( 2001 ) clearly reflected the Secretary-General 's concise report on children and armed conflict ( S/2001/852 ) . The resolution is a valuable example of Council engagement in enhancing the rights of the child . The European Union calls on all parties to armed conflicts to respect international law relating to the rights and protection of children . Only by concerted international efforts can we ensure improved protection of the rights of the child . We also call on Member States to put an end to impunity for war crimes and other serious crimes perpetrated against children . Last February , the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict entered into force . The Optional Protocol constitutes a remarkable step forward in the international community 's efforts to put an end to the recruitment of children into armed conflict . The European Union urges States that have not yet done so to ratify and implement the Optional Protocol . Another important step was the inclusion of a provision in the Statute of the International Criminal Court classifying the enlistment of children as a war crime . That covers both the conscription and enlistment of children under the age of 15 years into any kind of armed force or group and making them participate actively in hostilities . We urge all States that have not yet done so to consider ratifying and fully implementing the Statute . At the General Assembly special session on children , children told us that they wanted us to implement the Convention on the Rights of the Child . They are impatient , and for good reason : an enormous gap exists between the good intentions of international treaties and the real-life conditions of poverty , neglect and involvement in armed conflict . Millions of children worldwide are exploited . In spite of progress in some areas , much remains to be done . The European Union will seek in all appropriate forums to reinforce international action against recruiting and using children in armed conflict . We will focus on early warning of violations of children 's rights , but we will also look at improving monitoring and rehabilitation activities of the United Nations at the regional , bilateral and local levels . Furthermore , we will insist on special protection for girls in armed conflict and on more effective measures to fight impunity . The European Union wishes to express its support for the work of the Office of the Special Representative for Children and Armed Conflict . The Office has done impressive work in raising worldwide awareness and mobilizing official and public support for the protection of children affected by armed conflict . We also recognize the importance of the work carried out by the United Nations Children 's Fund , the Office of the United Nations High Commissioner for Refugees and the Office of the United Nations High Commissioner for Human Rights . It is also worth mentioning the United Nations Development Fund for Women and its report entitled “ Women , War and Peace ” . It is essential that the endeavours of those organizations receive adequate support from Member States — although it still remains the responsibility of Member States to implement all obligations flowing from international treaties and instruments . When discussing last year 's resolution , the European Union welcomed the important tasks set out for the agencies , funds and programmes of the United Nations . We believe that the funds and programmes , as part of their assistance programmes , can contribute significantly to promoting the rights and the protection of children , as well as to ensuring the rehabilitation of children affected by armed conflict . The needs of children in conflict situations are many . At the same time , we should recognize the unimaginable resources that children and young people possess even in the most difficult of circumstances . Apart from being victims , they also have the potential to contribute to reconciliation and conflict resolution . The European Union wants to welcome the efforts of the Secretary-General , and of the Council itself , to integrate the protection of children into the mandates of United Nations peacekeeping and peace-building operations . Including child protection staff in peacekeeping and peace-building operations is a promising new element . We would welcome a comprehensive assessment of the scope and effectiveness of the response of the United Nations , including recommendations for strengthening , mainstreaming and sustaining activities related to protecting children in armed conflict . The promotion of peace is the overriding responsibility of all countries , as well as of the Council . But as long as armed conflicts are a reality , we have a duty to promote the protection , as well as to defend the rights , of their most vulnerable victims : the children . The United Nations system as a whole has a strong role to play in this regard , and we owe it to the children of the world to mobilize its full potential . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Bahrain . I invite him to take a seat at the Council table and to make his statement . Mr. Saleh ( Bahrain ) ( spoke in Arabic ) : First , allow me to congratulate you , Sir , on your assumption of the presidency of the Security Council for the month of January . I also congratulate your predecessor , the Permanent Representative of Colombia , on his presidency of the Council . I would further like to take this opportunity to express to all my best wishes for the new year and my hope that it will bring peace and security to all peoples . For several years , the Security Council has devoted part of its work to the consideration in public meetings of issues such as the protection of civilians in armed conflict , children and armed conflict and other questions . We welcome that trend in the Council , which allows non-members of the Council to take part in the discussions on such important issues . It enhances transparency in the Council and makes the Council more effective in dealing with international issues , especially those that might threaten international peace and security . There are two major reasons for focusing attention on children and emphasizing the need to protect them in armed conflict . The first is that children are part of civil society . Accordingly , they must be protected as stipulated by the provisions of the Fourth Geneva Convention of 1949 relative to the Protection of Civilian Persons in Time of War . The second reason is that children are the most vulnerable sector of society and are therefore the sector in greatest need of protection and attention . Since the beginning of the Council 's debate on children and armed conflict , in 1998 , the Council has adopted several resolutions and presidential statements on the protection of children in armed conflict , such as resolutions 1261 ( 1999 ) , 1314 ( 2000 ) and 1379 ( 2001 ) . The United Nations , through its various bodies and activities , has helped to strengthen the way in which certain international concerns on the issue of children in armed conflict are addressed , notably by making child protection a component of peacekeeping and post-conflict peace-building missions . Despite all this , we still need to try harder to ensure the effective implementation of , and full compliance with , resolutions and international instruments concerning the protection of children . In that connection , my country would like to express the following concerns . First , when considering humanitarian issues such as the impact of armed conflict on children , we should try to be objective and credible and should try to avoid using double standards . It is absolutely necessary that the Security Council deal with the status of Palestinian children affected by the Israeli occupation of their territories . Secondly , it might be necessary during future consideration of this item to invite competent bodies such as the United Nations Children 's Fund and the International Labour Organization to take part in the Council 's deliberations in order to take advantage of their practical experience in this area . In that context , we welcome the participation of Ms. Carol Bellamy and her important statement on the issue . Thirdly , the Council should consider following up the resolutions it adopts , especially those on the issue now being considered , by adopting methods and means acceptable to members of the Council . Fourthly , it is also necessary to increase coordination and cooperation among the Security Council , the General Assembly and the Economic and Social Council . Such coordination would increase the effectiveness of those organs when dealing with this issue of common interest . Coordination among them would prevent duplicating efforts and taking contradictory measures . The Security Council can play an essential role in the protection of children in armed conflict , especially through its peacekeeping missions . Likewise , the Economic and Social Council could play a primary role in post-conflict peace-building . As for the General Assembly , its principal role could be a legislative one , especially through the relevant international conventions and by making recommendations , in particular at its special sessions and other special events . Finally , we express our hope that the deliberations of the Security Council on children and armed conflict will evolve into a concrete , practical concern and that the Council resolutions will be applied on the ground with objectivity and without double standards . Recruitment of children , their sexual exploitation , the violation of their rights and the impact of foreign occupation on them are all considerations we should take into account in order to help them and to eliminate these phenomena . The Council plays an important role in this regard . The President ( spoke in French ) : The next speaker on my list is the representative of Switzerland . I invite him to take a seat at the Council table and to make his statement . Mr. Staehelin ( Switzerland ) ( spoke in French ) : May I begin by congratulating France on assuming once again the presidency of the Security Council and wishing you and the new members of the Security Council every success in carrying out the tasks awaiting you . Switzerland welcomes this annual Security Council debate on children and armed conflict , as it represents one of my country 's priorities in matters of human security . Switzerland takes note with satisfaction of the Secretary-General 's report ( S/2002/1299 ) and considers it to be a valuable reference document on action undertaken in the United Nations over the last year to respond to challenges with regard to the rights of the child in armed conflicts . I thank the Special Representative of the Secretary-General for Children and Armed Conflict and the Executive Director of the United Nations Children 's Fund for their respective presentations . Switzerland expresses with conviction its solidarity with the recommendations formulated by Austria on behalf of the Human Security Network and is convinced of the Security Council 's essential role in their implementation . Switzerland reiterates its support for the international community 's numerous current efforts to reinforce the protection of the civilian population in times of armed conflict . Children are particularly vulnerable , and the impact of conflict on their rights and well-being can be felt at many levels and in various ways : attacks on their rights to survival and development , attacks on their physical integrity , attacks on their rights to education and health , and the destruction of their family structures and of their social and community ties . Far too many of them also find themselves refugees or internally displaced , orphaned or unaccompanied . In the face of such situations , Switzerland particularly recalls the importance of respecting the 1949 Geneva Conventions and their two Additional Protocols of 1977 , in which specific provisions for the protection of and assistance to children are incorporated . As underlined in the Secretary-General 's report , 2002 saw the entry into force of two major international instruments : the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflicts , and the Statute of the International Criminal Court . Switzerland , which ratified the Optional Protocol last June , is committed to pursuing its efforts with a view to ensuring its universal ratification as soon as possible . It hopes that all States that have not yet done this will follow its example by depositing a declaration , as stipulated in paragraph 2 of article 3 , indicating 18 years as the age limit for voluntary recruitment . The entry into force of the Rome Statute represents a major step towards an end to impunity . Switzerland welcomes the steps taken by the Secretary-General 's Special Representative to ensure that the International Criminal Court , as well as the Special Tribunal for Sierra Leone , include particular considerations regarding juvenile law into their regulations and procedure . Switzerland shares the Secretary-General 's opinion that the current major challenge resides in the implementation of these international instruments , which , by the standards they set , propose new prospects for action . In this respect , it would have been desirable for the report to formulate suggestions for concrete actions to be taken by the Security Council itself as well as by the United Nations system as a whole , and by each of its Member States individually . Switzerland emphasizes the innovative and welcome contribution that resolution 1379 ( 2001 ) represents , particularly the establishment of a list of parties to armed conflicts that recruit or use children in violation of the international provisions meant to protect them . The political importance of this list is undeniable , and it should certainly be maintained . However , its true value will become apparent only when the Security Council has defined the actions it plans to undertake in this respect . In this regard , Switzerland invites the Security Council to consider the following recommendations . We suggest that this list be updated on a regular basis . Include in the list all countries and situations of armed conflict which involve the problem of recruitment and use of child soldiers and which appear on the Security Council 's agenda . Include on the list all other countries and conflict situations which the Council may deem necessary . Establish an ongoing dialogue with those Governments named in the list and promote the relevant instruments among the armed non-State actors . Identify other criteria , in addition to the recruitment and use of children , for developing the list , keeping in mind the magnitude of the impact of armed conflicts on children . At the conceptual level , the work accomplished by non-governmental organizations on this matter could constitute a particularly valuable contribution . To conclude , I wish to recall the commitments made by the international community in the document “ A world fit for children ” , adopted at the General Assembly 's special session on children ( resolution S-27/2 ) . In this regard , Switzerland supports the activities to create awareness and to integrate children 's rights in United Nations activities as a whole and encourages the Organization to pursue and intensify them at all levels . My country welcomes the implementation of guiding principles for conduct for all United Nations staff , which are essential to ensuring that the behaviour of humanitarian personnel vis-à-vis its beneficiaries is beyond reproach , and to prevent abuse . We further invite the Security Council to continue including child protection advisers in its peacekeeping operations . They play a key role in ensuring that the rights and specific needs of girls and boys be taken into account and respected . The President ( spoke in French ) : I thank the representative of Switzerland for the kind words addressed to my country . Mr. Laurin ( Canada ) ( spoke in French ) : First of all , I should like to thank you , Sir , for convening this open debate on children and armed conflict . ( spoke in English ) Given the present international context , and as we approach the one-year anniversary of the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict , we are reminded that this is highly relevant work for the Security Council . I wish to begin by expressing my appreciation to the Secretary-General for his substantive report ( S/2002/1299 ) . In particular , we were pleased to see specific conflict situations mentioned in the report as well as in the annex . What is clear is that , while progress has been made , the work of the Council is far from complete . Ongoing child abduction , conscription and the use of children in armed conflict make the work of the Security Council all the more urgent . We welcome the Security Council 's acting as a channel for Member States to receive information about the impact of conflict on children , and we would urge the Council in future to call for recommendations for effective solutions to prevent the recruitment and end the use of child soldiers . It is incumbent on us to move away from general statements to specific action and to build a system of accountability that cannot be ignored . Now that Governments and armed groups using children in armed conflict have been publicly named , the challenge to the Security Council is to make these parties accountable . This requires genuine political will and resources . I congratulate the Secretary-General for highlighting this reality in his report . I would like also to congratulate the Special Representative of the Secretary-General , Mr. Otunnu , as well as the United Nations Children 's Fund ( UNICEF ) , in partnership with non-governmental organizations ( NGOs ) and other United Nations agencies , for their efforts in developing mechanisms for integrating child protection into the peace and security agenda . I would like to pay special tribute to the critical work of civil society . We must continue to collaborate with those organizations that are on the front line of efforts to ensure effective monitoring and to meet the protection and assistance needs of war-affected children and their communities . In particular , Canada welcomed the report of the Watchlist on Children and Armed Conflict in November of last year , funded in part by the Canadian Human Security Programme . That report illustrates clearly how much work still needs to be done with respect to monitoring , reporting and follow-up action before , during and after armed conflict . It goes without saying that Canada associates itself fully with the statement that the representative of Austria will make on behalf of the Human Security Network . Canada made commitments at the Winnipeg Conference , and we fully intend to respect them . For example , the Canadian International Development Agency has committed $122 million to child protection programmes and $2 million to child protection research , including several projects on war-affected children . Through our Human Security Programme , we sponsor youth outreach and education initiatives through War Child Canada , an organization that provides humanitarian assistance to war-affected children . We believe that the efforts of Canada and of others have helped turn the corner on monitoring and reporting . Now we would like to see action taken when the evidence is persuasive , as it is in the Secretary-General 's report . To this end , Canada calls on the Security Council to undertake field missions in the specific conflict situations mentioned in the Secretary-General 's report and in particular closely to scrutinize the action of the parties identified in the list annexed to the report . Such field missions should include consultations with local NGOs , women 's organizations , youth groups and children . The Security Council should ask for a six-month interim report , evaluate progress made on these situations , and commit itself to follow up in one year 's time on the parties named in this year 's discussion . Ultimately , if there is no real progress , the Security Council must consider what actions it must take to give effect to its decisions , including targeted sanctions . At present , only countries on the Security Council 's agenda are mentioned in the Secretary-General 's report . This was a first step — one that should be followed by the inclusion of all conflicts in future reports . For the sake of the children who are the victims of such crimes , Canada believes this debate should be made an annual event . Recommendations from relevant resolutions , namely 1379 ( 2001 ) , 1261 ( 1999 ) and 1314 ( 2000 ) , should be assessed . In addition , Council accountability for specific actions to enhance protection and assistance for girls and boys affected by armed conflict and their communities could be reinforced . The issue of children and armed conflict is linked to the broader agenda item on protection of civilians recently debated by the Council . The Security Council and the broader United Nations system in its entirety must ensure that these agenda items remain linked . Although Council members agreed to consider the protection of civilians , including the rights and needs of children , in country-specific reports and resolutions , it would appear to us that this has not been done in every case . We call for renewed efforts towards this end . ( spoke in French ) Discussions on small arms , disarmament , demobilization and reintegration processes and access should address directly the implications for children and should pay special attention to the situation of the girl child . One promising outcome of the United Nations Conference on the Illicit Trade in Small Arms and Light Weapons in All Its Aspects was its recognition of the impact of small arms on children . While this represents progress , children continue to fall victim to the ravages caused by the proliferation and reckless use of small arms . We commend the Economic Community of West African States for having launched its child protection unit within its secretariat . That is a very important initiative that we hope will serve as a model for other regional organizations in the integration of child protection into their work . We encourage United Nations agencies to continue their efforts to improve training on children 's rights for United Nations staff and to evaluate lessons learned from incorporating child protection into peacekeeping operations . We believe that the six core principles of the Inter-Agency Standing Committee Task Force on Protection from Sexual Exploitation and Abuse in Humanitarian Crises should be incorporated into the mandate of all peacekeeping operations , including the prohibition of sexual activity with children . In addition , HIV/AIDS education and HIV testing and counselling services should be offered to all United Nations peacekeepers . Impunity , humanitarian access and physical protection , with specific consideration of sexual exploitation , all are urgent issues that remain unresolved , although they fall squarely within the Council 's purview and should be addressed . Canadian representatives were pleased that very serious crimes committed against children , including the use of child soldiers to participate actively in hostilities , were included in the Rome Statute of the International Criminal Court ( ICC ) . This was a significant development in international law to protect children from the devastating effects of armed conflict . The ICC is an important additional international mechanism to protect children 's rights . We call on those States that have not yet done so to ratify or to accede to the ICC Statute . All States should welcome the fact that the ICC will contribute to ending impunity for serious crimes against children . In the outcome document of the special session on children , held in May 2002 , States renewed their commitment to strengthening the protection of children affected by armed conflict . The Security Council has a key role to play in ensuring that that commitment is translated into action . Canada firmly believes that all our actions must be guided by the principles of the Convention on the Rights of the Child , which remains the principal instrument of reference and , indeed , the fundamental legislative basis for achieving children 's rights . The primacy of the Convention needs to be strongly reflected in our words and actions aimed at improving the lives of children . The three landmark Security Council resolutions on children and armed conflict — 1261 ( 1999 ) , 1314 ( 2000 ) and 1379 ( 2001 ) — have outlined steps to be taken , actors to be engaged and mechanisms required to increase the protection of the rights of war-affected children and their communities . Progress has been made , but much more needs to be done . The Security Council has a key role to play . War-affected children have the right to expect that the Council will do its part to the fullest extent possible . The President ( spoke in French ) : The next speaker on my list is the representative of the Philippines . I invite him to take a seat at the Council table and to make his statement . Mr. Manalo ( Philippines ) : At the outset , I wish to congratulate you , Sir , and your country on your chairmanship and leadership of the Council this month . I also wish to express my delegation 's appreciation for this opportunity to speak on this important topic and to thank the Secretary-General for his report on this very important issue . We join others today in underscoring the need for continued and concerted actions at both the national and international levels to protect children in armed conflict . We thank the Secretary-General , the Special Representative of the Secretary-General for Children and Armed Conflict and the Executive Director of the United Nations Children 's Fund ( UNICEF ) for their respective statements this morning . It is estimated that there are 300,000 child soldiers in the world , one fourth of whom are in the East Asia and Pacific region . Most of these children were forcibly recruited because of social and cultural pressures or were simply abducted outright . Poverty has also been a factor leading to child recruitment . Those not recruited or abducted have also been victims of displacement due to armed conflict . Instead of being in school , these children have served in the battleground , fighting , or as messengers and couriers , as cooks , spies or sex slaves . That these children have been and are involved in wars , growing up in an environment of destruction , denies the world a promising future . One of the most important milestones for protecting children from involvement in hostilities was set last February with the entry into force of the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict . It was indeed a positive step , a major step , and will hopefully end the use of children under 18 years old from serving as soldiers or directly participating in hostilities . The Philippines ratified the Optional Protocol last April , and it has also ratified the 1990 International Labour Organization Convention No. 182 concerning the elimination of the worst forms of child labour . We view these two international instruments as setting strict standards for preventing the recruitment of children as child soldiers . Children are also protected by the Philippines legal framework . Our Constitution provides that the State shall defend the rights of children and especially protect them from all forms of neglect , abuse and other conditions prejudicial to their development . In this regard , Philippines law provides that children shall not be recruited for fighting and that they should be given priority during evacuation as a result of armed conflict . In recognition of their special situation , children arrested for reasons related to armed conflict , whether as combatants , couriers , guides or spies , are entitled to release on recognizance within 24 hours to the custody of the Government or any responsible member of the community as determined by the courts . We welcome the fact that the Security Council has taken steps to address the matter of protection of and assistance to children in situations of armed conflict , particularly through resolutions 1261 ( 1999 ) , 1314 ( 2000 ) and 1379 ( 2001 ) . The Council must continue to be seized with this issue and take every opportunity to reaffirm its collective commitment to protect children and prevent their involvement in armed conflict by mainstreaming this concern in its relevant decisions . Post-conflict reconstruction programmes must also be tailored to assist children affected by armed conflict . In the case of girls and young women , who are often the targets of sexual abuse , abduction and forced recruitment , rehabilitation services are needed to deal with their experiences and assist them in reintegrating society . In the case of displaced children , aside from basic food , medical care and education , counselling and family reunification must be important components of their reintegration programme . For countries that have emerged from conflict , it is important that any disarmament , demobilization and reintegration programme include the demobilization and rehabilitation of former child soldiers . Such programmes must distinguish the post-conflict needs of girl soldiers from those of their male counterparts . This will ensure that the provisions for demobilization and reintegration needs are directly related to the specific ways that children have been abused or traumatized during a conflict . The healing and reintegration of children affected by armed conflict should be a priority of any reconstruction effort and , as such , must be backed by sufficient resources . This is especially due to the necessity of finding alternative peaceful ways for children to develop and have a more meaningful future . Children are our future . We must all help to create a world fit for them . At the very least , we must protect them from the horrors of armed conflict . The President ( spoke in French ) : The next speaker on my list is the representative of Monaco . I invite him to take a seat at the Council table and to make his statement . Mr. Boisson ( Monaco ) ( spoke in French ) : I am particularly pleased to see you , Sir , in the Security Council presidency this month , and to congratulate you . Once again , we come to the Security Council to plead a cause which affects the human being in his very nature , as well as in his future . The recruitment of children in armed conflicts is an intolerable and unacceptable violation of the rights of the child , a violation clearly condemned by the universal morality to which the States of our Organization adhere . Like many heads of delegation , the Chairman of the delegation of Monaco to the special session of the General Assembly on children , His Serene Highness Crown Prince Albert , last May referred to this painful issue , which , naturally and quite wisely , was fortunately taken into account in the very important final declaration adopted on that occasion . The Secretary-General 's report of 26 November 2002 ( S/2002/1299 ) had already alerted us to the difficulties which the Under-Secretary-General , Mr. Olara Otunnu , had encountered in carrying out his lofty mission , but also , we are pleased to see , to the undeniable progress achieved , which is extremely encouraging . This public meeting of the Security Council , in this first month of the year 2003 , under the French presidency , of which we appreciate both the initiative and quality , gives us the opportunity to express our unreserved support for the Secretary-General and his Special Representative , and the opportunity to encourage them to continue and strengthen their action in favour of this noble cause . As the principal organ under the United Nations Charter with responsibility for the maintenance of international peace and security , the Security Council indeed urges us to undertake some soul-searching that should lead us to take decisive decisions in order to put an end to the painful situation of child soldiers . These are tragic and pathetic situations that , beyond the emotions they give rise to , undermine the principles of humanity on which our cooperation is built and on which rest our hopes and our deepest convictions . Using children as a tool of war , of suffering and death , is intolerable . This idea revolts and disturbs us . As a crime against children , a crime of genocide , a war crime , a crime against humanity , the use of children in armed conflicts makes it incumbent on the international community and the Security Council , which is its authorized voice , to embark on a new stage . The report of the Secretary-General and his message today , and the message that his Special Representative has just given us , as well as that of Ms. Carol Bellamy , Executive Director of UNICEF , emphasize the urgency and need for action . The Principality of Monaco , on the initiative of both its highest sovereign authorities and its people , has consistently put the protection of childhood , physical as well as moral , at the forefront of its concerns and national and international commitments . The public authorities have devoted many efforts to this . Many non-governmental organizations , with the support of the royal family , the Government and the parliament , are also making unflagging efforts to contribute to the protection of children in danger and the improvement of their plight , particularly when it is affected by poverty , violence and a destructive lack of a future . An international law symposium , which will be followed by a public meeting with civil society , is now being prepared in Monaco on the initiative of the World Association of Friends of Children ( AMADE ) . Effectively headed by Crown Prince Albert , who since May 1993 has chaired the Monaco delegation at the General Assembly sessions , and by Her Royal Highness Princess Caroline of Hanover , this initiative should make possible a better grasp of the concepts and the legal contexts involved nationally and internationally in the protection of children , as well as the ways of facilitating legal proceedings and strengthening sanctions in the case of serious , flagrant and repeated violations of their basic rights and fundamental freedoms . The symposium should contribute to increasing awareness , which is needed now more than ever on the global level , of this serious issue , given that we now have today — with the entry into force of the Rome Statute of the International Criminal Court and the two Optional Protocols to the United Nations Convention on the Rights of the Child — indispensable specific instruments to combat this ultimate form of barbarism that affects children . The Convention on the Rights of the Child , as well as its Optional Protocol on children in armed conflict — which the Principality has signed and ratified — and the very valuable experience gained by the international criminal tribunals will indeed be the basis for this exercise in reflection , as will the role of the International Criminal Court , which is awaited with great hope . This will involve , without academic disputes , trying to determine , in a realistic way , the most efficient legal and judicial ways and means to allow for prosecuting , beyond time and space , the most serious crimes against children . The report of the Secretary-General on children and armed conflict will also be , of course , at the heart of the symposium and the meeting with civil society . The Monaco authorities , which have contributed to the special fund for children involved in armed conflict since its inception , pay due tribute to the activities of the Special Representative of the Secretary-General in this area . They greatly welcome the provisions that he advocates , given that they are without a doubt a decisive stage in the protection of children during armed conflict , internal as well as international , and regardless of the parties involved . In particular , we note with satisfaction the list of parties involved in conflicts contained in the report 's annex — parties against which there is proof that they continue to recruit and arm minors and use them without restraint or caution in situations of extremely brutal hostilities . The resolution to be adopted at the initiative of France at the end of this exchange of views should grant all the necessary legitimacy and authority to its provisions to follow up specifically on the previous Security Council resolutions , in particular resolutions 1261 ( 1999 ) , 1314 ( 2000 ) and 1379 ( 2001 ) . Defining as a war crime by the Statute of the International Criminal Court of forced recruitment of children under the age of 15 in hostilities , including in internal conflicts , as well as attacks on hospitals and schools , or serious , repeated sexual violent acts , should help us . This definition is decisive insofar as the Convention on the Non-Applicability of Statutory Limitations to War Crimes and Crimes against Humanity , of 26 November 1968 , explicitly stipulates in article I that war crimes and crimes against humanity are without statutory limitation , like genocide , which the Convention on the Prevention and Punishment of the Crime of Genocide , of 9 December 1948 , considers as a crime against the rights of nations , jus gentium , whether committed in time of peace or in time of war . I would recall furthermore that article VI of the Convention on genocide had already provided for an international penal tribunal as may have jurisdiction over such crimes , and article VII stipulated that such crimes would not be considered political for the purpose of extradition , which would also be agreed by the contracting parties in accordance with their laws and treaties in force . Article II ( c ) of this same instrument also considers — and this is noteworthy — that genocide also extends to an act of forced transfer of children from one national , ethnic , racial or religious group to another , committed with intent to destroy them . Today , as the Secretary-General stated in his report , the true challenge lies in the implementation and the effective application of existing international instruments and norms . However , it is undeniable and encouraging to note , undoubtedly for the first time in such a report , references to Governments , paramilitary organizations and armed groups that are guilty of kidnapping children and training them , despite their will , to become war criminals , murderers and torturers . We now know the perpetrators of these crimes , or at least some among them . We have the legal means to prosecute and punish them . Without a doubt , we must see to it that there is the political will to act and find the financial and law enforcement resources to intervene effectively . Undoubtedly also , we must strengthen the programmes for reinsertion of child soldiers and develop new ones , while seeing to it that these programmes become integral elements of any post-conflict reconstruction and development projects . The appointment of advisers in certain of the programmes under way seems to be bearing fruit and therefore is an interesting path to pursue and encourage . As the Secretary-General has also recalled , the creation during armed conflicts of protected zones in which women , children , the elderly , the wounded and the disarmed can find asylum and protection is one solution to impose . It is a solution that the highest authorities in Monaco have always wished to see encouraged and promoted by the United Nations . Such zones should benefit from secure access routes to allow for the intervention of humanitarian personnel . Ahmadou Kouroma , who has recounted his adventures as a child soldier in a very beautiful novel that received several literary prizes , clearly shows that reinsertion is always possible and often crowned with success . For , as this author wrote of his mother , “ after 30 years of suffering , smoke and tears , there was still something marvellous in the hollows of her face ” . The moving observation by this child , a criminal despite himself who found again his place in human society , should lead us to be optimistic and give us , with hope , the will to act that naturally follows from this . In that spirit of optimism and hope , we must have the courage of our convictions and take the necessary decisions in order to ensure that the recommendations of the Secretary-General are effectively followed up and his expectations fulfilled . The clear and unambiguous desire of the Government of the Principality is quite clear in this regard : justice must be done , and international law , which deals with this question extensively and in detail , must triumph so that the murderers of children are punished for their crime — the worst crime of all : turning children into criminals and transforming their innocence into barbarism . Here , we believe that there are three crucial elements . First , when internal judicial proceedings have been exhausted , or in cases where such proceedings have not been used , the competence of international bodies , in particular the International Criminal Court , should naturally come into play . Secondly , crimes and violations against girls and boys of less than 15 years of age should not be excluded from the criminal definitions contained in the Statute of the International Criminal Court as they relate to the crime of genocide , crimes against humanity and war crimes , under articles 6 , 7 and 8 of the Statute respectively . Thirdly , it should be possible to apply , without reservation , the principles of the Convention on the Non-Applicability of the Statute of Limitations to War Crimes and Crimes Against Humanity of 26 November 1968 , as well as , when justified , those of the Convention on the Prevention and Punishment of the Crime of Genocide of 9 December 1948. The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Rwanda . I invite him to take a seat at the Council table and to make his statement . Mr. Muvunyi ( Rwanda ) : We would like to congratulate you , Sir , on your assumption of the presidency of the Security Council for the month of January and to extend our congratulations to the representatives of the new members of the Security Council — Angola , Chile , Germany , Pakistan and Spain . My delegation also wishes all the members of the Security Council a happy and prosperous new year for 2003. The delegation of Rwanda welcomes this open debate on the sensitive issue of children and armed conflict . As a country emerging from genocide , Rwanda has a wide experience to share on this important topic of children and armed conflict . In Rwanda , children were killed by génocidaires , and survivors were traumatized by the violence , which left orphans in its wake . Rwanda believes that all children must go to school and that they must never again be involved in armed conflict . In the 1994 Rwanda genocide , children under 10 years old were used by génocidaires to hunt and to kill fellow children , adults and rape victims of the génocidaires . After the tragedy , children suspected of genocide were arrested , imprisoned in special prisons and re-educated . I would like to announce that this coming Friday , child suspects in prison will be released in accordance with the statement made by His Excellency President Paul Kagame of the Republic of Rwanda on the release of 40,000 suspects of genocide . Rwanda is totally committed to the protection of children and does not tolerate the abuse of children under any circumstances . The Rwandan delegation welcomes the report of the Secretary-General on children and armed conflict , document S/2002/1299 . Rwanda hopes that action will be taken . We fully agree with the statement made by the Secretary-General in the Security Council this morning . We believe that sufficient funds must be spent on the education of children for development , instead of diverting financial resources to the destruction of human beings . Children are the hope of tomorrow ; that is why special attention should be given to our young children . Let us lead children to school and not to armed conflict . Let us take them school and ensure that there is follow-up so that they acquire appropriate skills , knowledge , education and discipline as future leaders of the world . The recruitment of children in armed conflict must be halted at all costs as a matter of urgency . Children must be able to grow in an environment of peace , and should never be involved in any armed conflict . That is why the Rwandan delegation condemns armed groups which enlist children under 18 years of age . It is dangerous to indoctrinate children with the ideologies of hatred and genocide with the final objective using them in fighting useless wars without a cause . Why use children in conflicts ? As we know , children naturally obey orders , even negative ones , such as the order to kill innocent people . Children will carry out any order in good faith because they do not differentiate between evil and the best things . The irrational warlords must understand why young children should not be brainwashed and become hostages of conflict . It is totally unacceptable to abuse children , and the Security Council must take a firm decision to reverse the current situation prevailing in some States Members of the United Nations . We call upon the Security Council and the international community to condemn the armed groups of the former Rwandan Army ( ex-FAR ) forces and Interahamwe , the Parti pour la liberation du peuple hutu , the Front pour la défense de la démocratie , the Conseil national pour la défense de la démocratie , the Mai-Mai and others mentioned in the annex of the report of the Secretary-General as currently using child soldiers in the Great Lakes region . My statement would be incomplete if I did not condemn those who rape children — as well as those who rape adults . Rape is one of the weapons used in armed conflicts , and children committed rape and were raped during the Rwanda genocide of 1994. According to Rwandese law covering acts of genocide , adults who committed rape during the genocide are in the first category of génocidaires , who are given the death penalty . Infanticide must also be punished by the death penalty if we are to halt this crisis imposed on children . Let me emphasize that young children are the potential resources that can lift this world out of poverty and injustice and attain irreversible progress in accordance with the United Nations objective of achieving sustainable development . Children must therefore be freed from disease , hunger , slavery , corruption and conflict of all types . They must grow in an environment of love , peace and justice , with a thirst for appropriate knowledge and the skills to develop themselves . The whole world would thus harvest the fruits of such well-guided children . Those who are today involved in armed conflict must be demobilized without delay , and the United Nations Children 's Fund ( UNICEF ) must put in place strategies and procedures and must provide the means for their implementation . Let the Security Council join hands with UNICEF as the saviour of the children of States Members of the United Nations . Investing in the education of young souls is the priority of priorities . The authorities of the Republic of Rwanda are grateful to Ms. Carol Bellamy , Executive Director of UNICEF , and to Mr. Olara Otunnu , Special Representative of the Secretary-General for Children and Armed Conflict , for their assistance to Rwanda orphans and to the many children who after the genocide prematurely became leaders of families of other children . Rwanda has a clear vision : to invest in those children in order to achieve irreversible development . Finally , Rwanda requests and recommends that the President of the Security Council declare a universal ceasefire in favour of children in order to withdraw them from armed conflicts . This is not a favour , but a fundamental right for children who are caught up in armed conflict and who are held hostage in some areas of conflict . They must be handed over to UNICEF . Even liberation movements must transfer children to liberated areas or demilitarized zones . In the case of displaced persons , Governments , non-governmental organizations , the Red Cross and United Nations agencies must attach special importance to the welfare of children by providing them with appropriate feeding , vaccination , medicines and schooling . Demobilized children must go back to formal schooling and should be motivated by UNICEF , the United Nations Development Programme and international financial institutions . Failure to save the lives of children condemns the whole world to misery and long-term social injustice . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Ukraine . I invite him to take a seat at the Council table and to make his statement . Mr. Kuchinsky ( Ukraine ) : I would like to begin , Sir , by expressing appreciation for the manner in which you are presiding over the work of the Security Council and by taking this opportunity to welcome you as the Permanent Representative of France . I am confident that your profound experience and excellent diplomatic skills will contribute greatly to the Council 's activities and to the United Nations as a whole . Let me also thank you and the delegation of France for convening this important meeting . Ukraine believes that the practice of holding Security Council open debates on children and armed conflict is a clear manifestation of the great significance of this issue . Security Council resolutions 1261 ( 1999 ) , 1314 ( 2000 ) and 1379 ( 2001 ) became a strong basis for advocacy on behalf of war-affected children . Various references to this issue have been made in a large number of other Security Council resolutions , presidential statements , briefings and open debates . All this testifies to the Council 's involvement in this important matter and to the fact that the protection of children is a priority concern in the area of peace and security . We are pleased with the considerable progress made lately in the field of protection of children affected by armed conflict . The entry into force of two international instruments — the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict and the Rome Statue of the International Criminal Court ( ICC ) — which qualify crimes against children as war crimes , has become a milestone in strengthening and developing worldwide standards for the protection of children . I would like to express appreciation to the Secretary-General for his report on this issue ( S/2002/1299 ) . For the first time , the report contains a list of parties to conflicts that continue to recruit and use children . Some 300,000 boys and girls are currently being exploited as child soldiers around the world . In our view , the publication of this list is yet another important step forward in our efforts to put an end to the impunity of those who disregard the rights of war-affected children . But it may not be enough just to condemn or prohibit the recruitment of children . We need to ask ourselves : why do children join armies ? If we are to prevent children from participating in the fighting , we need to understand specifically the causes that force children to become soldiers . Ukraine welcomes the efforts of the Special Representative of the Secretary-General for Children and Armed Conflict , Mr. Otunnu , and his Office aimed at creating , in cooperation with the Secretariat and the United Nations Children 's Fund ( UNICEF ) , guidelines for United Nations peacekeeping personnel to ensure that children 's rights and needs are given proper attention and response during the peacemaking process . Peacekeeping missions have a crucial role to play in providing protection to children . In order to implement this particular dimension of their mandate , a child protection adviser should be responsible for coordinating activities to ensure the protection and welfare of children . We are especially appreciative of the fact that the first advisers of this kind have already been deployed in Sierra Leone , the Democratic Republic of the Congo and , recently , in Angola . Despite the progress achieved so far , much remains to be done to ensure the effective protection and rehabilitation of children in times of war . We should not forget the alarming fact that during the last decade of the past century the world lost some 2 million of its youngest lives as a direct result of armed conflicts . Another 6 million were injured , and over more than 10 million were traumatized . Today , more than 20 million children have been displaced within or outside their countries due to war . Every month , nearly 800 children are killed or crippled by landmines . There is no doubt that the effective monitoring of adherence to the provisions of international law and the consequent obligations , as well as to the commitments pledged by parties to conflict , are essential actions for ensuring the protection of children and their rights . In that regard , it is important to continue to include observations concerning the protection of children in reports to the Security Council on specific conflict situations . When designing peacekeeping operations , the Security Council , in our view , should make every effort to protect both children and their supportive environment : schools , hospitals , health centres and religious institutions . Ukraine strongly endorses the concept of children and their protective and nurturing institutions being considered as zones of peace . It is important also to focus on children in post-conflict reconciliation programmes . There is an urgent need for the international community to support programmes , including advocacy and social services , for the demobilization of child soldiers and their reintegration into the community . Such children should be offered new experiences that will change their identity from that of soldiers . Education and training remain fundamental to that end . In our view , more attention should also be given to greater involvement by women in peacekeeping missions . We believe that that would help to enhance the capacity of missions in terms of protecting girl children and dealing with gender-sensitive aspects . Finally , I wish to stress that the Secretary-General 's report sets out an important agenda and a basis for future work by the Council and by other United Nations bodies . Ukraine looks forward to further progress in that direction and is prepared to contribute specifically to the subsequent consideration of the issue of children and armed conflict . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Egypt . I invite him to take a seat at the Council table and to make his statement . Mr. Atta ( Egypt ) ( spoke in Arabic ) : At the outset , on behalf of the Egyptian delegation , I should like to tell you , Sir , how grateful we are to your friendly country and to congratulate you on your assumption of the presidency of the Security Council for this month . We should also like to thank the Secretary-General , Mr. Kofi Annan , and his Special Representative , Mr. Olara Otunnu , for their tireless efforts and valuable contributions aimed at enhancing and protecting the rights of children in armed conflict , and we reaffirm our total support for those efforts . During the past two years , the Security Council has devoted considerable attention to children in armed conflict , playing its role in that sphere by taking decisions related to peace-building and peacekeeping operations and by asking the parties to conflict to respect international law , in particular with regard to the protection of children . That is commendable , and complements the General Assembly 's primary responsibility for children 's issues . In that connection , I should like to express our gratitude to Mr. Olara Otunnu for his efforts and to draw attention to the importance of his field visits to raise awareness , to promote and to strengthen the protection , rights and well-being of children affected by armed conflict . In his report ( S/2002/1299 ) , the Secretary-General says that Mr. Otunnu 's visits had helped in the assessment of the situation of children in armed conflict , in making specific recommendations and in heightening the international community 's awareness of the problems faced by children . In that regard , we reiterate our demand that the Special Representative of the Secretary-General visit children living under Israeli occupation in the occupied Palestinian territories and prepare a report on effective measures to help protect those children in implementation of the relevant provisions of the outcome of the General Assembly 's May 2002 special session on children , as cited by the Assembly on 18 December 2002 in its resolution 57/190 . Palestinian children are not only suffering from occupation , with its devastating psychological consequences ; they are also deprived of their fundamental rights , including the right to live in security in a stable family environment . Not only are their families deprived of shelter and work ; their lives are threatened if they ask for their legitimate fundamental rights . The suffering of Palestinian children does not stop there : they are deprived of a future , because they are given no tools to improve their future . Palestinian schools have been closed , and Palestinian children cannot continue their studies because of the constraints that have been imposed on them . The Secretary-General has stated that the cordoning off of the territories , the curfews , the barriers and the checkpoints give rise to humanitarian problems , which result in the deterioration of education . The suffering of Palestinian children has exceeded all limits : unless the situation improves , there is no hope for the short-term future . Therefore , Egypt urges all countries to help Palestinian children by ensuring their humanitarian and other basic needs . We invite the Special Representative of the Secretary-General to undertake a field visit to the region in order to raise awareness of the situation on the ground and to enable the international community to adopt effective necessary measures aimed at relieving the suffering of Palestinian children and ensuring their protection . Egypt supports all national and international efforts in the area of protecting the rights of children and improving their situation . We are firmly convinced that the economic , social , political and cultural progress of any society depends on the overall physical , moral , mental and educational development of its children . Over the past decade , the international community has undertaken many commendable efforts and has made great achievements in that area . Despite the success of the World Summit on Children , held in 1990 , and the setting of ambitious goals to help children , the world still witnesses a number of factors that have had a negative impact on children , such as the economic effects of debt , illness and epidemics . Recent years have witnessed a prevalence of armed conflict , a lack of respect for international law — especially international humanitarian law — and various violations of the rights of civilians . Hence , the problem of children in armed conflict — despite efforts to prevent their recruitment and to ensure their demobilization and reunification with their families , their protection from systematic violence and their psychological reintegration into their homes and communities . The Secretary-General 's innovation in his report — the list of parties to conflict that are violating children 's rights — is a commendable initiative that should be studied with a view to taking the necessary actions to track down those who violate the rights of children and bring them to justice . Within the framework of our commitment to work with the international community on issues pertaining to children in armed conflict , we urge that children be enabled to live in security and stability . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Austria . I invite him to take a seat at the Council table and to make his statement . Mr. Pfanzelter ( Austria ) : I have the honour to speak in Austria 's capacity as current Chair of the Human Security Network , an interregional group of countries that also comprises Canada , Chile , Greece , Ireland , Jordan , Mali , the Netherlands , Norway , Slovenia , Switzerland and Thailand , and South Africa as an observer . Ever since the creation of the Human Security Network , in 1999 , the issue of children affected by armed conflict has been of critical importance to our agenda . The Network and its individual members have witnessed the origin of several important initiatives , such as the Agenda for War-Affected Children , adopted at the Winnipeg Conference in September 2000 ; the holding of workshops on the issue of ending the use of child soldiers in Jordan ; and the programmes of the Centre for Children Traumatized by Armed Conflicts in South-Eastern Europe , in Ljubljana , Slovenia , to name but a few . Austria made children and armed conflict one of the top priorities during its period in the chairmanship of the Network . At its next ministerial meeting in May this year in Graz , the Human Security Network is expected to adopt a common support strategy for children affected by armed conflict , identifying a set of operative principles as well as a training curriculum for child-rights monitors and rehabilitation experts . One of the results envisaged is that the Network will contribute to establishing a pool of child experts for eventual use in conflict areas . In November 2002 , the Human Security Network supported the holding here in New York of an international symposium on children affected by armed conflict . The event was organized by the Harvard Program on Humanitarian Policy and Conflict Research , in cooperation with the Coalition to Stop the Use of Child Soldiers , the Watchlist on Children and Armed Conflict , the United Nations Children 's Fund and the Office of the Special Representative of the Secretary-General . The symposium focused on the implementation of Security Council resolution 1379 ( 2001 ) and came up with a set of concrete recommendations , which have been communicated to the members of the Council . Let me now touch upon the politically significant report of the Secretary-General before us . We strongly support the general thrust of this report and I would like to highlight a few of its aspects . It is indeed astonishing how the normative framework for the protection of children in armed conflict has been strengthened during the recent past . In less than a month , we will celebrate the first anniversary of the entry into force of the Optional Protocol to the Convention on the Rights of the Child on children in armed conflict . While progress with regard to the normative framework for the protection of children in armed conflict is certainly remarkable , I would like to reinforce the call made by the Secretary-General and his Special Representative to focus now on application . There is an essential role for the United Nations system in ensuring better implementation of the relevant standards , in the first place through an enhanced operationalization of activities in the field . Austria and the Office of the Special Representative are currently working together on a compendium containing all relevant international standards , which will be published shortly and is supposed to improve the understanding and knowledge of those dealing with children in armed conflict . Let me now come to the much anticipated list requested by Security Council resolution 1379 ( 2001 ) . The Human Security Network welcomes the list annexed to the report , as well as the description in the report of further situations of concern , which could not be added to the list due to formal reasons . This list is without doubt a major and politically significant contribution to raising awareness about the plight of children affected by armed conflict around the world and to eventually ending the recruitment of child soldiers . It also clearly demonstrates that the international community is no longer willing to close its eyes before one of the biggest tragedies we are facing today . While the annexed list candidly names 23 parties to armed conflict that recruit or use child soldiers and meet the other criteria set out in resolution 1379 ( 2001 ) , it is , however , obvious that it excludes large numbers of children equally affected by armed conflict . We therefore believe that the list needs to be extended . It should encompass all other situations where children are recruited or used as soldiers or where their protection needs are severely threatened in other ways . As an example , I would like to direct members ' attention to one situation which is particularly alarming : the ongoing abduction of numerous boys and girls in northern Uganda . Based on reports from a variety of sources , we have reason to believe that large numbers of children are still being abducted and held by the Lord 's Resistance Army for use in combat or as sex slaves . The Human Security Network is currently evaluating possible action to shed more light on this situation and to put a halt to this abominable practice . At the same time , we feel that it is necessary also for the Security Council to be able to better assess such situations . The Human Security Network has concrete recommendations to present to the Council which , in our view , would significantly increase the ability of this forum to address the issue of children and armed conflict and will have an impact on the lives of war-affected children . The 10 recommendations can be summarized as follows . We should continue the consideration of the issue of children and armed conflict on a regular basis and adopt new resolutions adding value to the debate . We should create an effective evaluation mechanism for the list of parties to conflict recruiting or using child soldiers and the relevant steps taken by those on it . This could include field visits . The involvement of international agencies and non-governmental organizations in this process is crucial . The Secretary-General should be requested to regularly update this list and consider extending it by also including conflict situations not on the Council 's agenda , as well as other severe violations of relevant child-protection obligations , such as abductions or the use of landmines . We should enter into a dialogue with the Governments of countries on the list , ask them to report on the respective situations and urge them to put an immediate end to the recruitment or use of child soldiers , to reintegrate them into society and to stop all other severe violations of child-protection obligations . We must also raise awareness among all parties concerned , including non-State actors , of their obligations and responsibilities under international humanitarian , human rights , refugee and criminal law . We should ensure that the issue of children affected by armed conflict is also taken up under other agenda items of the Council , in particular when considering resolutions on specific conflict situations or when planning Security Council missions . According to a study by the Watchlist , only 9 out of 75 country-specific Security Council resolutions adopted between August 2000 and October 2002 included references to children and armed conflict . Attention must also be paid to the need for all peace processes ; all disarmament , demobilization and reintegration processes ; and all justice and reconciliation mechanisms to be child-conscious and for boys and girls to be fully involved in order to make sure that their voices are heard . The child-focused expertise in these processes should be increased and the training of peacekeeping , civilian police and humanitarian personnel on child protection standards promoted . Each peacekeeping operation should include at least one child protection expert . The establishment of rosters of qualified experts available should be encouraged . We should give higher priority to the issues of violence against , trafficking in and exploitation of children , in particular girls , and to the prevention of infectious and sexually transmitted diseases and HIV/AIDS , and request the provision of adequate assistance to the children affected . The Human Security Network also suggests that efforts be made to ensure safe and unhindered access to humanitarian assistance for children in emergencies , with emphasis on particularly vulnerable groups such as displaced and separated children . Finally , the Network suggests improving the exchange of information with non-members , international agencies and NGOs on the issue of children affected by armed conflict and the establishment a focal point for that purpose . In conclusion , let me assure the Council that the members of the Human Security Network remain fully committed to enhancing the protection of children in armed conflict . This is indeed an urgent matter pertaining to our common values and our conscience as human beings . The President ( spoke in French ) : I would like to inform the Council that there are 17 speakers remaining on my list . I intend , with the cooperation of the participants , to exhaust the entire list this afternoon . The next speaker is the representative of Nepal . I invite him to take a seat at the Council table and to make his statement . Mr. Sharma ( Nepal ) : I wish to begin by extending to you , Mr. President , and the other members of the Security Council warm , although belated , wishes for a happy new year . Let me also say how delighted my delegation is to see you so ably presiding over the Council . Children , the weakest sector of a population , suffer in many ways in situations of armed conflict . They lose their parents and other loved ones . They lose their homes and livelihoods . They lose basic services such as education and health . And they even lose their lives . Those who survive are often forced to live in camps and or in confinement as refugees or displaced persons and become susceptible to exploitation and temptations . The most horrendous crime that the parties to a deadly conflict commit is to use child soldiers . This robs children of their childhood and innocence and places them in a world of murder and mayhem . Traumatized and stigmatized , such children have difficulty coping with normal life and blossoming to their full potential . We have internationally agreed safeguards for the protection of children , but they remain ineffective in delivering results . The Convention on the Rights of the Child and its relevant Optional Protocol , Additional Protocol II to the Geneva Conventions and Convention No. 182 of the International Labour Organization ( ILO ) set basic international standards for the protection of children . They are complemented by a number of other compacts , conventions and resolutions . The International Criminal Court is certainly another potent instrument to protect children in armed conflict . Despite those provisions , children continue to face misery , exploitation and death in conflicts . The world community faces a daunting challenge : to stringently enforce those provisions . Part of the problem is due to the fact that world community has been incoherent in its response to conflict . Political considerations get in the way of devising a cogent and seamless set of actions . More often than not , funding has failed international compacts , whose vision loses focus along the trail of implementation . Critical is the imperative to ensure that the perpetrators of violence against children do not go unpunished . Crimes against children should not only be excluded from amnesty ; they should also carry heavier punishments . Special measures , including punishment , are essential to protect girl children . The nature of , and potential damage from , a conflict should determine the priority and extent of the international community 's response . Clearing landmines should be undertaken with a sense of urgency , and should receive adequate funding . Resolute political will must be demonstrated to ensure effective control of small arms , which maim and kill most children . Collective efforts should be strengthened to prevent fuelling conflicts with proceeds from the exploitation of natural resources , drug trafficking and other criminal activities . Juvenile justice should constitute an important part of domestic courts and of international tribunals and courts to try child soldiers who might have committed grave crimes . A comprehensive programme should be put in place to demobilize child soldiers , as well as to give them skills and to rehabilitate them and reintegrate them into their communities . While a tailor-made response is essential to resolve disputes and prevent conflicts , we must also look at the larger picture and remove the causes or aggravating factors of conflicts . This calls for eradicating poverty and promoting sustainable development , as well as advancing justice and human rights around the world . In 9 out of 10 cases , non-State actors have been committing the horrendous crime of recruiting and deploying children as combatants with impunity . Changing the culture of impunity demands a fresh outlook as well as strengthened mechanisms and measures from the world community . Let me share a glaring example from my own country . As the Secretary-General has mentioned in the report before the Council ( S/2002/1299 ) , children are being subjected to forced and involuntary recruitment by the Communist Party of Nepal ( Maoist ) . Indeed the Maoists , who are seeking to remove the constitutional monarchy and who are undermining democratic values and institutions , have turned children into sacrificial lambs in their brutal pursuit of political power . Yesterday , the Maoists reportedly abducted 80 children from a school . The other day they took 150 children from school at gunpoint . These children are forced to undergo combat training . They are often used as human shields in attacks . This is something the rebels have been doing on a regular basis . Young girls have become the principal targets of abduction by the Maoists , who are reportedly striving to induct more women into their guerrilla force . Families that do not consent to giving their children away face the direst consequences . This terror has set back the clock of progress in Nepal , a least developed country that was taking determined steps towards modernization . The Maoists are destroying schools and health posts , bridges and communication towers . They have also been killing teachers and political workers . Consequently , children are deprived of education and health services . The movement of people and trade have been impaired and tourism has dwindled . Villages have lost young men and women , as they flee their homes to escape Maoist atrocities and conscription . Development activities in rural areas have ground to a halt . Nepal has been trying its best to find a peaceful settlement to the problem . Only recently , His Majesty the King has appealed to all political forces to find a peaceful solution to the country 's political problems and to engage the country 's resources and energy in promoting development and prosperity for the common people . The Prime Minister has also called on the Maoists to come to the negotiating table and has promised to create the necessary environment for talks to begin . Given their trail of deception , their attitude towards negotiation — treating it as a tactical step to destroy the enemy rather than as a strategic framework for a peaceful resolution of conflict — and their confusing and often contradictory statements , the Maoists are yet to emerge as a credible partner for peace . Still , the Government is willing and eager to talk to stop the wanton bloodletting so that the nation can pursue the path of peace and progress with total dedication and commitment . Nepal is committed to protecting children in armed conflict . We have no child soldiers in our security forces . But we are profoundly distressed by the fact that the Maoists have been abusing our children , stifling their development and darkening their future . While bringing Maoists to justice for their crimes remains our obligation , we have instituted a programme to rehabilitate and reintegrate children who have escaped the Maoist trap . We will need the international community 's financial and technical support in our endeavour . Central to that is the United Nations , whose remarkable work we commend . Our appreciation goes to the front-line agencies of the United Nations , including the United Nations Children 's Fund , the United Nations Development Programme and others , for their work to protect children and promote their interests . We urge the Security Council to remain seized of situations under its consideration and to remain vigilant about others so that international peace and security are not jeopardized . The President ( spoke in French ) : I thank the Representative of Nepal for the kind words he addressed to my delegation . The next speaker inscribed on my list is the representative of Israel . I invite him to take a seat at the Council table and to make his statement . Mr. Mekel ( Israel ) : At the outset , I would like to extend my congratulations to you , Sir , on your assumption of the presidency for the month of January . Since this is my first statement before the Council , allow me to say that I look forward to a productive working relationship with you and with all the other members of the Council . Israel is pleased to be participating once again in the debate on this item . Of the wide range of issues on the Council 's agenda , those affecting the well-being of children are among the most heartbreaking . The images , reports and statistics documenting the plight of children in areas of armed conflict paint a truly horrific picture . And it is precisely that horror that compels us to take action . The most recent report of the Secretary-General on children and armed conflict ( S/2002/1299 ) contains a review of the progress made in implementing Security Council resolutions and other international instruments , as well as recommendations and observations aimed at achieving more widespread conformity with international norms . We welcome the report 's general focus on the horrific practice of using children as soldiers . Children should be kept safe in school , not in harm 's way on the battlefield . Instead , too many children are recruited to fight as soldiers in wars they did not start and are forced to give up their childhoods and often their lives in the perpetuation of destructive conflicts . These offences have long disturbed our moral sensibilities . Israel totally rejects the practice of using children as soldiers . We remain committed to eradicating this horrific practice and to improving more generally the situation of all children affected by armed conflict . Israel also supports efforts to increase awareness of the effects of armed conflict on children and to take children into greater consideration when addressing related issues , including terrorism and peacekeeping operations . Israel further welcomes the report 's specific focus on those parties to an armed conflict that have failed to live up to their obligations by recruiting or using child soldiers . Our ability to make genuine progress will depend not only on focusing on areas in which progress has been made but also on areas in which it has not . Obviously , the formal practice of the forced conscription of children is abhorrent and must be outlawed and condemned . But the participation of children in conflict is not limited to formal military service . Children have also been recruited for roving militias , armed gangs and terrorist groups . In our region , children have been recruited and used by terrorist organizations as human shields , for the placing of explosives , as gunmen and even as suicide bombers , and it is regrettable that the Secretary-General 's report does not mention this reprehensible tactic . Moreover , children have been educated to revere and emulate fighters and terrorists . In our region , we are faced with the disturbing phenomenon of children 's television programmes that encourage youngsters to abandon their studies and sacrifice their lives in acts of war and terrorism . The subtler but no less repugnant indoctrination of children to hatred and violence , through official media , educational and religious institutions and other means , must also be the focus of widespread condemnation . Hatred and violence are learned behaviours . No child is born wanting to hate or kill . If we are ever to achieve the state of global peace that is the central objective of the Organization , we must ensure that we are educating the next generation in the values of tolerance , coexistence and non-violence . In our region , children have suffered terribly from decades of conflict and from the constant threat of terrorism . The Middle East has endured more than its share of wars that have left scars on all people in the region , but particularly on children . Israel has therefore supported international initiatives aimed at protecting children from the devastation of armed conflict , including the landmark Convention on the Rights of the Child , as well as the Convention 's Optional Protocols , to which we became a signatory last year . Israel 's accession to the Convention was followed by the adoption of its Basic Law : Human Dignity and Liberty , a law that ensured that rights of the child were guaranteed constitutional protection . The adoption of that law sparked a flurry of judicial and legislative activity that broadened and extended Israeli society 's commitment to the principles of the Convention . Unfortunately , broad commitment to those principles , while reflected in the rhetoric of many delegations , is too often not matched in practice . There remain delegations that are quick to unite under the banner of protecting children from armed conflict , but whose actions betray their true political motives . Those delegations are far too willing to sacrifice genuine progress on these issues in favour of their political agenda . In its most recent session , the General Assembly adopted a resolution pertaining specifically to the situation facing Palestinian children . With the adoption of that resolution , the Assembly has brought to three the number of resolutions on the human rights of children : one regarding the rights of the child , one regarding girls and one regarding Palestinian children . The latter is the only resolution adopted with respect to one specific group of children . There is , for instance , no resolution adopted concerning the five specific problematic areas cited by the Secretary-General in his report . While Palestinian children are undoubtedly deserving of protection , one may ask whether the 106 Israeli children killed and the many Israeli children wounded by terrorism since September 2000 , or the children in Africa or in parts of the Arab world are any less deserving . Notwithstanding the questionable wisdom of adopting particularized resolutions on issues of universal concern , it is a grave shame that those who supported that one-sided resolution were unable to rise above narrow their political agenda and call for the protection of both Israeli and Palestinian children alike . We would urge responsible Member States not to indulge in such politicization of the work of the United Nations , especially with respect to an issue as important and urgent as our children . When we allow the issue of human rights to be used as a political weapon we cast doubt on our very commitment to human rights and we damage the credibility of this institution and its ability to work effectively on issues of common concern . Israel yearns for the day when peace is the prevailing global condition , and when there is no longer any need to deal with the specific impact of armed conflict on children . But until that day , the international community must continue to act with resolve in extending protection to those who are most vulnerable . Israel is a full partner in this endeavour and will act through all means to ensure that all the world 's children enjoy their fundamental right to grow up free from fear , free from suffering and free from the horrors of war and terrorism . The President ( spoke in French ) : The next speaker is the representative of Ethiopia . I invite him to take a seat at the Council table and to make his statement . Mr. Hussein ( Ethiopia ) : At the outset , Sir , let me congratulate you and your delegation on your assumption of the presidency of the Council . My congratulations go also to the new non-permanent members : Angola , Chile , Germany , Pakistan and Spain . Ethiopia is grateful for this opportunity to address the Council on the issue of children and armed conflict . My delegation would also like to thank the Secretary-General for his report on children and armed conflict ( S/2002/1299 ) as well as for his brief but important presentation this morning . I also join previous speakers in thanking Mr. Olara Otunnu and Ms. Carol Bellamy for the excellent presentations they made and for pointing out important issues we need to follow up on . I know that time is short and that there are many other speakers on the list , so I shall cite only some of the points I was going to make ; copies of my full statement have been made available . Today 's debate is the fifth open debate the Security Council has devoted to the protection of children in armed conflict . That indicates that it is very serious about this issue and gives it the importance that it deserves . We also welcome the continued efforts of the Secretary-General to put the protection of children in armed conflict on the peace and security agenda of the United Nations ; in that respect we strongly support his recommendation to integrate child protection in peacemaking , peacekeeping and peace-building operations of the United Nations . There are many who are involved in the work of making the lives of children more agreeable in all its aspects . But I will cite only two : the Office of the Special Representative of the Secretary-General for Children and Armed Conflict and the United Nations Children 's Fund . I commend them for their work and for their activities on behalf of children . One can list many things ; one can say many things . I think what needs to be said has been said by the Secretary-General and by all those who spoke before me . But I will say that there are two areas implied in the title of what we are discussing today : “ Children and armed conflict ” . Under the first , we have to take all the actions needed to stop those who violate the rights and the sanctity of the lives of children and take action against them . Secondly , when we talk of armed conflict , we have to look at the root causes of such conflict all over the world . I would conclude by saying that if the Council and the international community took a fraction of the time and resources they are now spending on one particular area of the world and spent it on this issue of stopping those who are attacking children , abducting children and recruiting children , then I am sure within a short period , even before the end of this year , that problem would have been dealt with . The President ( spoke in French ) : I thank the representative of Ethiopia for the kind words addressed to my delegation . The next speaker is the representative of Costa Rica . I invite him to take a seat at the Council table and to make his statement . Mr. Stagno ( Costa Rica ) ( spoke in Spanish ) : Over the past four years the Security Council has been holding periodic open debates on the situation of children in armed conflict . Unfortunately , the debates have had little practical impact . Mr. Olara Otunnu , Special Representative of the Secretary-General on Children and Armed Conflict , has reminded us that today more than 300,000 children under the age of 18 are involved in more than 30 armed conflicts . Millions of children have been the innocent victims of war : they have been killed , have become refugees or have been displaced . Hundreds of thousands more have been orphaned or left defenceless as a result of armed conflict . To be sure , in the past few years some progress has been made at the legal level . We welcome the entry into force of the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflicts , which bans compulsory recruitment and participation in hostilities for those under the age of 18. Unfortunately , the Protocol does not also prohibit voluntary recruitment of minors . We are also pleased at the entry into force of the Rome Statute of the International Criminal Court ( ICC ) , which classifies as a war crime the recruitment of children under the age of 15. But much remains to be done , and all States should now accede to the Optional Protocol and the Rome Statute . We were pleased to see the inclusion in the Secretary-General 's report of a list of parties to armed conflicts that recruit or use children as combatants , in violation of their international obligations under paragraph 16 of resolution 1379 ( 2001 ) . It is high time for the international community to shoulder its responsibilities vis-à-vis those who are committing such massive violations of the fundamental rights of children . The Security Council must act . The Council must now require of those entities and States on the list that they stop recruiting children and demobilize those already recruited . Where necessary , the Council should consider imposing sanctions on entities or Governments that use or recruit children in their armed forces . But we cannot fail to note that we do not agree with the rather restrictive interpretation offered by the Secretary-General of the mandate contained in paragraph 16 of resolution 1379 ( 2001 ) . In particular , we would question the Secretariat 's decision to include on the list only those situations currently on the Council 's agenda . We believe that the Secretariat would have done better by the children of the world had it adopted a broader approach to its mandate . We would like , therefore , to invite members of the Security Council to give detailed consideration to a parallel report that was prepared by a coalition of non-governmental organizations , the Coalition to Stop the Use of Child Soldiers . This parallel report includes a number of well-founded accusations against various governmental , paramilitary and revolutionary entities in 25 countries , as well as a list of specific recommendations to deal with each one of them . I would like , if I may , to mention a few of them . For example , on Afghanistan , the Coalition recommends that the Security Council monitor the new national army and existing factions so as to ensure that they are not recruiting children under the age of 18. On Somalia , they also recommend to all parties that they adopt a policy of non-recruitment of children under the age of 18. On Angola , Burundi , Guinea-Bissau and Sierra Leone , the Coalition recommends the implementation of specific programmes for the demobilization and reintegration of child soldiers as well as the creation of educational and employment opportunities in refugee camps , as an alternative to joining a rebel force . On Colombia , the Sudan , India and Indonesia , the Coalition recommends the inclusion of all revolutionary and paramilitary groups on the list prepared pursuant to paragraph 16. On Myanmar , the Coalition believes that both Government and opposition forces should be included in the list . The Coalition recommends that the Government and opposition groups in Liberia should demobilize child soldiers . On Macedonia , Yugoslavia and Pakistan , it deems necessary further investigation to determine if opposition paramilitary groups are , in fact , recruiting children . On the Democratic Republic of the Congo and Nepal , the Coalition suggests , inter alia , the classification of the recruitment of children as a criminal offence . With respect to Palestine and the occupied territories , the Coalition calls on the various groups not to encourage children to participate in acts of violence . With respect to the Russian Federation , the Coalition is proposing that the Chechen rebel groups be included on the paragraph 16 list . On Rwanda and Uganda , the Coalition recommends the adoption of measures to implement the Optional Protocol to the Convention on the Rights of the Child , including the carrying out of programmes for the demobilization and reintegration of child soldiers . Lastly , the Coalition recommends that the Secretary-General draw the attention of the Security Council to the situation in Sri Lanka . As can be seen from this list of recommendations , the Security Council is facing a tremendous task if an end is to be put to the use of child soldiers . Accordingly , we believe that the Council must adopt a holistic approach to protect young people . First , the Council should ensure that any resolution or measure adopted to deal with a specific situation of armed conflict must include clear and specific provisions aimed at safeguarding the security and fundamental rights of children during armed confrontation . Second , the Council should set up an institutional mechanism that would enable it to consider , on an ongoing and comprehensive basis , the problem of children in armed conflict . The Council should , accordingly , set up a subsidiary body to monitor the situation of children in all situations that are on the Council 's agenda . To that end , it would make use of information provided by Member States and by non-governmental organizations . Following the model of the Counter-Terrorism Committee , the subsidiary body set up should have a group of independent experts who would evaluate objectively the information that is received . They could also carry out fact-finding missions where there are accusations of serious violations of the rights of the child , and they could offer early warning in the event of a situation that might threaten the security of children . Third , the Security Council , with assistance from the Secretary-General , should , on an ongoing basis , maintain , review and update the list of entities that recruit or use children in conflict , in violation of their international obligations . It is essential to broaden the list to include not just situations already on the Council 's agenda , but also situations that , because of the seriousness of the violations of children 's rights involved , should be referred to the Council by the Secretary-General . In this connection , the Council should request the Secretary-General to update the list regularly . Fourth , the Security Council should ensure that plans for the post-conflict demobilization , disarmament and reintegration of combatants must include programmes to facilitate the rehabilitation of child soldiers . Peace-building processes must take account of the perspective and the needs of children . Fifth , it is essential to take effective steps to regulate illicit trafficking in small arms and light weapons , which facilitate the use of children as combatants and are the main weapons used in the destruction wrought . We would advocate a complete prohibition on the transfer of weapons , ammunition and military assistance to Governments or armed groups that violate human rights , including the fundamental rights of children . Sixth , the Security Council , in any peacekeeping operation , must include humanitarian personnel who are dedicated to dealing with the problems of children who are victims of conflict . Such personnel should facilitate the provision of humanitarian assistance to children during conflicts . In this context , we are pleased that the Security Council has included in some peacekeeping operations expert advisers on the protection of children . Seventh , before adopting any sanctions regime , the Security Council should carry out an in-depth study of any possible impact on the most vulnerable population , particularly children . Any sanctions regime must include exceptions so as to minimize any damaging impact on children . We deem it essential that the Secretary-General make full use of his powers under Article 99 of the Charter and refer to the Security Council any situations of armed conflict in which young people under the age of 18 are being recruited or used in fighting . Over the long term , the only way to save children from evil consequences of armed conflict is to do away with war . As long as war exists , we cannot free children from those harmful consequences . As long as there are wars , children will be orphaned , displaced , hurt or killed . As long as there are wars , schools and hospitals will be burned down , roads destroyed and families broken apart . As long as there are wars , it will be impossible to ensure that children can fully develop into worthy , productive and creative adults . The President ( spoke in French ) : The next speaker on my list is the representative of Indonesia . I invite him to take a seat at the Council table and to make his statement . Mr. Hidayat ( Indonesia ) : My delegation would like to congratulate you , Sir , on your assumption of the presidency of the Council for the month of January and to extend to you its sincere appreciation for organizing this open meeting on one of our key concerns , children and armed conflict . In our view , this meeting is an indication of the Council 's continued commitment to the welfare of children in general and of its determination to ensure their protection . At this juncture , I would also like to express my delegation 's gratitude to the Secretary-General for his report ( S/2002/1299 ) , and to his Special Representative for Children and Armed Conflict for his efforts on this issue . Particularly worthy of notice in the current report are the commitments obtained for the protection and well-being of children in conflict and post-conflict situations . Indonesia continues to be concerned about the continued use of children in armed conflict around the world . In this regard , we take particular notice of the list annexed to the report , as requested by the Council in its resolution 1379 ( 2001 ) , of parties to armed conflict that recruit or use children in violation of their international legal obligations . We are disturbed at the abuses that children suffer in camps , and at the general suffering and deprivation that they endure because of conflicts . In that connection , it is also important to point out the persisting problem of humanitarian access in conflict situations . In the occupied Palestinian territories , for example , the Secretary-General reports that the conditions imposed by Israel — notably stricter closures , curfews , roadblocks and checkpoints — have created humanitarian problems including frequent school closures and a drop in immunization levels . This kind of avoidable inhumanity to society , especially to children , must not be allowed to continue . In the past , we have lent our national support to international efforts at ensuring the protection of children in such conflicts and at alleviating the suffering of those who have been unfortunate enough to find themselves in the midst of them . My delegation has always seen these two aspects of the problem : on the one hand , children are deployed as instruments in a situation while , on the other , they are intended and unintended victims . Children who are involved in battle , whether they are hurt or not , are victims , and there is not much of an escape once the bullets , or the logistical demands of conflict , take over . It is the responsibility of those formulating international law within the multilateral system to continue to adopt measures to limit children 's involvement in and exposure to conflict . The continued recruitment of under-age children for the purposes of conflict should not continue with impunity . To respond to these concerns , the international community possesses several international instruments , such as the 1989 Convention on the Rights of the Child , of which Indonesia is a signatory . That Convention underlines the political , social , economic and civil rights of children . Indonesia also supports the Optional Protocol that strengthens the Convention by calling for a minimum age of 18 for eligibility for participation in hostilities . Unfortunately , in recent conflicts the Convention and its Optional Protocol have conveniently been ignored . In this connection , another key international document by which the international community has tried to address this issue in recent times is “ A world fit for children ” ( General Assembly resolution S-27/2 , annex ) , the outcome document of the landmark May 2002 special session of the General Assembly on children . It calls on the world community to make the world safer for children , and outlines the responsibilities of nations and the measures they must take in that regard . Among other things , it specifies an assortment of responses to protect children from armed conflict and impunity . We are of the opinion that it is a thorough and strong document that , if implemented , would go a long way towards resolving several issues relating to the protection of children in conflict situations . With reference to post-conflict situations , it is important to take a brief look at the example of what the United Nations Children 's Fund ( UNICEF ) has been able to achieve in Sierra Leone . In 2001 , UNICEF helped more than 3,600 child soldiers in Sierra Leone to leave army life and rejoin their families . The children obtained counselling , vocational training and education towards reintegration into their communities . We commend and support programmes of this nature , not only those of UNICEF and other relevant United Nations agencies , in conflict and post-conflict situations where children have been a factor . Similarly , my delegation stresses the importance of enhancing the monitoring mechanisms spelled out in resolution 1379 ( 2001 ) . Since the adoption of that resolution , we are pleased that the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict , and other relevant international agreements and conventions have entered into force . We cannot afford to pay only lip service to this very important matter , and must therefore find ways of implementing these critical international instruments . To that end , we congratulate those States that are already making efforts to harmonize their national legislation with available international child rights standards . As we have often said , the future of humanity depends on children , and they must be protected because that is the only protection that the future of mankind has . We cannot have our children exposed to violence so early in their lives without expecting them to bear and carry insecurity , violence and hatred within them , especially when they have also forfeited their youth and the chance of a good education at such an early stage of their lives . While conflict itself should be avoided altogether , children should not be dragged into it if it does arise . A child should not have to carry a gun , find himself at the receiving end of gunfire or be hurt by conflict . Rather than celebrate minor moral victories , the international community should focus its attention and evaluation on the larger picture . The President ( spoke in French ) : I thank the representative of Indonesia for the kind words he addressed to me . The next speaker on my list is the representative of Sierra Leone . I invite him to take a seat at the Council table and to make his statement . Mr. Rowe ( Sierra Leone ) : Mr. President , my delegation would like to associate itself with the words of welcome and congratulation extended to you by previous speakers . We look forward to working with you in your capacity as the President of the Security Council and as the new Permanent Representative of France . Sierra Leone has no more child soldiers . We say this not with a feeling of pride . We have no reason to take pride in the fact that Sierra Leone is not named in the Secretary-General 's latest report ( S/2002/1299 ) among areas of conflict where children are still being recruited and/or used as child soldiers . On the contrary , we say Sierra Leone has no more child soldiers only with a sense of relief ; relief that our children , those who survived the atrocious rebel war , are free at last from the abominable practice of recruiting children to kill and be killed . As a country that has just emerged from a prolonged and brutal armed conflict in which children were both perpetrators and victims , we know from experience the immediate and long-term consequences of the abduction , drugging , training and deployment of children for armed combat . Experience has also taught us that urgent action must be taken to put an end to such practices , first and foremost through the disarmament , demobilization and reintegration of ex-combatants . In 1999 the Government of Sierra Leone insisted that its peace agreement with the rebel movement the Revolutionary United Front ( RUF ) must include an appeal to the conscience of the parties to recognize that the children of Sierra Leone , especially those affected by the conflict , in view of their vulnerability , are entitled to special care and protection consistent with the provisions of the International Convention on the Rights of the Child . The Government , for its part , also pledged to accord particular attention to the issue of child soldiers by mobilizing resources through the Office of the Special Representative of the Secretary-General for Children and Armed Conflict , and through the United Nations Children 's Fund ( UNICEF ) and other agencies , to address the special needs of these children in the disarmament , demobilization and reintegration ( DDR ) process . I would like to pay tribute to the Special Representative , Mr. Otunnu , and to Ms. Bellamy of UNICEF for their untiring efforts on behalf of the children of Sierra Leone . We would also like to commend them for their statements this morning . Sierra Leone has also learned from experience that the problem of former child soldiers could be addressed through the establishment of an oversight institution for the welfare of children in a post-conflict situation . Beyond the disarmament and demobilization process , however , we have tried to ensure that the welfare of children and the protection of their right to develop in a peaceful environment are at the centre of government policy-making and resource-allocation strategies . Our thanks again go to the Special Representative of the Secretary-General , Mr. Otunnu . His ground-breaking 15-point agenda for action for the children of Sierra Leone paved the way for the establishment in January last year of a statutory National Commission for War-Affected Children . It is now the principal child protection and advocacy mechanism in the country . Although the scope of its work is relatively wide and covers different categories of war-affected children , the Commission is expected to address the special needs of former child combatants . My delegation takes note of the reference in the Secretary-General 's report to the risk we face in Sierra Leone of losing thousands of former child combatants to the conflict across the border in Liberia . This underscores our concern that in the absence of adequate resources for implementing the Government 's reintegration programme for ex-combatants , especially the thousands of demobilized child ex-combatants , those warlords will take advantage of the situation and recruit them again into the killing circus that has characterized the activities of the rebel movements in the subregion . We therefore endorse wholeheartedly the recommendation that the Security Council and Member States should be urged to provide sustained and adequate resources to the relevant organizations engaged in implementing DDR programmes for children . My delegation strongly believes that the establishment of international norms proscribing the involvement of children in armed conflict , and strict compliance with those norms , are important steps in our collective effort to rid the world of this unconscionable practice . My delegation shares the view set out by the Secretary-General in his report that the codification of international norms and standards for the protection of children during conflict has made an impressive contribution to that effort . Sierra Leone has ratified the two Optional Protocols to the Convention on the Rights of the Child . We have also become a party to the African regional equivalent , the Organization of African Unity and African Union Charter on the Rights and Welfare of the Child . Our ratification of the Rome Statute of the International Criminal Court is also a testimony to our commitment to , among other things , the relevant provisions concerning the recruitment and use of child soldiers , and the mechanism of accountability for crimes specific to children . We also share the view of the Secretary-General that the challenge today is to ensure their implementation on the ground , that is , compliance with these international norms . The list of violators contained in his report is indeed an important step forward in our efforts , as he puts it , “ to induce compliance with international child protection obligations by parties to conflict ” ( S/2002/1299 , para . 28 ) . However , my delegation believes — and we would like to stress this point here — that we must also recognize that rebels and other non-State insurgent groups are not parties to those international instruments on the involvement or use of children in armed conflict . As we witnessed in Sierra Leone , notwithstanding the commitments rebel movements make in peace agreements , these forces , at least in the West African subregion , account , in our view , for most of the recorded abuses of international norms for the protection of children in armed conflict . We recall here the number of instances where the RUF rebel movement reneged on peace and ceasefire agreements . We observe that there are only four Governments on the “ name and shame ” list annexed to the Secretary-General 's latest report . That of course does not mean that we should downplay violations by States . The list indicates clearly , as far as we are concerned , that ways and means must be found for dealing more effectively with the role of non-State actors in the recruitment and use of child soldiers . This brings my delegation to a related issue that has been placed on the agenda of the Security Council : the illegal trade and transfer of small arms and light weapons . Many speakers referred to it this morning , and Switzerland and other delegations also spoke about it eloquently this afternoon . The Sierra Leone delegation would like to take this opportunity to reiterate once again its appeal to all States , in particular manufacturers and their agents , to ensure , including through appropriate legislation , that these weapons do not get into the hands of rebel movements and other non-State actors . Security Council arms embargoes and travel restrictions against rebel movements are very important — we recognize that — but are certainly not enough , especially where sanctions monitoring mechanisms do not exist or are woefully ineffective . Finally , based on the Sierra Leone experience , my delegation would like to see in the draft resolution to be adopted by the Security Council following its discussion of the Secretary-General 's report some reference to the question of impunity . The Special Court for Sierra Leone should be seen as an example of the type of mechanism available to the international community for addressing impunity , especially impunity related to the recruitment of children to commit heinous atrocities in conflict situations . We feel that the Special Court could be regarded as a court set up for our children 's sake . As the prosecutor , David Crane , said recently , the children of Sierra Leone have suffered enough both as victims and as perpetrators . The objective is to prosecute not children , but the people , including those warlords , who forced thousands of children to commit unspeakable crimes . The President ( spoke in French ) : I thank the representative of Sierra Leone for the kind words he addressed to my delegation . The next speaker is the representative of Slovenia . I invite him to take a seat tat the Council table and to make his statement . Mr. Kirn ( Slovenia ) : Slovenia has already associated itself with the statement made by the representative of Greece on behalf of the European Union and with the statement made by the representative of Austria as Chair of the Human Security Network , and we fully endorse both of them . Since the issue of children and armed conflict is one of particular importance for Slovenia , I would like to highlight some points in our national capacity . Let me first express our appreciation to you , Sir , for having convened this meeting . We consider it primarily to be an opportunity to review the progress achieved and to identify further action to be taken . Since the adoption of resolution 1261 ( 1999 ) , the issue of children and armed conflict has been firmly established on the agenda of the Security Council , in recognition of its importance for peace and security , thus adding a new dimension to the discussions in this body , which Slovenia firmly supports . We are pleased to see that a number of significant developments were achieved in the past year , particularly in the normative domain , such as the entry into force of the Rome Statute of the International Criminal Court . Slovenia ratified the Rome Statute in December 2001 , and we are looking forward to the constitution of the new Court in March this year . Almost a year ago , the Optional Protocol on the involvement of children in armed conflict entered into force , and it is encouraging to note the growing acceptance of this new instrument . Slovenia will ratify it in the very near future . The special session of the General Assembly on children , held last May , and the adoption of the outcome document , “ A world fit for children ” reaffirmed our joint commitment to protect children during armed conflict , in accordance with international humanitarian and human rights law . This provides the necessary political , as well as legal frameworks , to combat the abuse of children in armed conflict . We call on all Member States and all other parties in conflict to fully implement or respect their provisions , and especially to act against impunity for all crimes committed against children . Slovenia welcomes the most recent report of the Secretary-General on children and armed conflict . We would like to express our sincere appreciation of and support for Special Representative Olara Otunnu and his Office for their work in this respect . This is the first time that parties recruiting and using child soldiers have been specifically identified , giving us a clear picture of who the perpetrators of crimes against children really are . The report and the annex list represent a very clear sign that the international community is no longer ready to tolerate abuses of children in conflict situations . They also represent a concrete contribution to the raising of global awareness on this issue . Slovenia shares the views expressed that the report should be the first step towards drawing up an integral list of all parties using children , not only those involved in situations on the Security Council 's agenda . Austria , on behalf of the Human Security Network , presented a set of specific recommendations to the Council on how to further address this issue , and Slovenia fully supports those recommendations . I should like just to recall the need to regularly update the list , to extend it by including situations that are not on the Security Council 's agenda and to ensure that the issue of war-affected children is taken fully into account in all of its decisions on peacemaking , peacekeeping and peace-building operations . Another positive development this year is the beginning of the deployment of child protection advisers in some United Nations peace operations . We concur with the Secretary-General and his Special Representative that the deployment of such advisers in each United Nations peace operation is highly desirable . In addition to efforts undertaken globally , regional and interregional action is needed . We greatly appreciate the opportunity to share our views with the like-minded countries of the Human Security Network . As pointed out by Austria , the Network believes that it can significantly contribute to the global debate on the issue , as well as improve the situation in our respective regions through various concrete activities . Being aware of the importance of children for the future and for the prosperity of our societies , Slovenia decided several years ago to contribute to the recovery of South-Eastern Europe by establishing an institution to assist war-affected children — the Regional Centre for the Psychosocial Well-being of Children , which is also called “ Together ” . The basic aim of the Centre is to strengthen local structures in the field of child care , to develop mechanisms for their psycho-social protection and to empower war-affected children , remaining in the region even after international assistance has been withdrawn . We would like to thank all donors and to invite all other countries and institutions to work with us to improve the situation of war-affected children in South-Eastern Europe . Another of Slovenia 's initiatives contributing to the safety of children in the region of South-Eastern Europe is in the area of anti-personnel mines and demining — the work conducted by the Slovenia-based International Trust Fund for Demining and Mine Victim Assistance . The report of the Secretary-General points out that little progress has been made regarding efforts to sever the link between the proliferation and widespread use of small arms and light weapons and the related victimization of children . In this regard , I am pleased to inform the Security Council that a United Nations subregional conference on the illicit trade in small arms and light weapons in all its aspects , co-organized by the United Nations and Slovenia , will be held in Slovenia in March this year . We hope that the conference will contribute to reducing the illicit trade in small arms and light weapons and its negative impact , including its impact on children , in the region of South-Eastern Europe . In conclusion , allow me to reassure you , Mr. President , that Slovenia fully supports all endeavours of the Office of the Special Representative , the United Nations Children 's Fund and other United Nations agencies and non-governmental organizations in this field . We encourage continuous and meaningful dialogue and cooperation among all of us , with the aim of alleviating the plight of children affected by armed conflict . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Myanmar . I invite him to take a seat at the Council table and to make his statement . Mr. Swe ( Myanmar ) : In congratulating you , Sir , on your assumption of the presidency of the Council , I would also like to thank you for convening a public meeting on children and armed conflict . The situation of children in armed conflict is heart-wrenching . As the Secretary-General 's report pointed out , war displaces families and communities , and children are at risk of exploitation and forcible recruitment . This underscores the fact that peace and stability are important , not only for the development of the country concerned but also for the welfare of its population , particularly women and children , which are the most vulnerable groups in conflict situations . As reflected in the Secretary-General 's report , impressive gains have been made in codifying international norms and standards for the protection and well-being of children . We share the opinion that there is a need to promote and disseminate these norms and standards and to raise awareness about them on the ground . We take satisfaction from the fact that , in preparing the list , the Secretary-General was guided by resolution 1379 ( 2001 ) . We note , however , that the report departed from its mandate when it made reference , under situations of concern not included in the list , to a number of countries , including Myanmar . We particularly regret that in addition to the armed insurgent groups in Myanmar , the national armed forces were also referred to — this despite the fact that there is no credible evidence of the use and recruitment of children by the Myanmar Armed Forces . In that regard , I share the view expressed this morning by one Council member about the need for verification and checking the validity of information before it is presented to the Security Council . Nor should the issue of protection of children be politicized . The allegation made regarding my country is the result of interviewing 20 or so insurgents inside a neighbouring country . Additionally , the situation in Myanmar is not , by any stretch of the imagination , a threat to international peace and security . The Myanmar armed forces is an all-volunteer army . Those entering military service do so of their own free will . Under the Myanmar Defence Services Act of 1974 and War Office Council Instruction 13/73 , a person cannot enlist in the armed forces until he has attained the age of 18. There is neither a draft system nor forced conscription by the Government of Myanmar . The Special Rapporteur of the Commission on Human Rights , who had visited Myanmar four times , expressed concern in his report over : “ abuses of civilians and refugees on the part of armed opposition groups , notably the Karenni National Liberation Army , which has been accused of forced conscription of male villagers , including under-age youths ” . ( A/57/290 , para . It is a practice of armed insurgent groups in Myanmar to recruit and abuse child soldiers . That was brought to the wide attention of the international community in 2000 , when some members of a splinter insurgent group , styling themselves as God 's Army , took over a hospital in Ratchaburi , in Thailand , taking 700 people hostage . The self-styled God 's Army is an insurgent group led by two 10-year-old twins , Johnny and Luther Htoo . We share the view of many delegations that the best way of protecting children in armed conflict lies in conflict prevention and resolution . Myanmar regained its independence in January 1948. In a matter of months , it had to face the challenge of insurgencies by various armed groups . Until recently , there were 18 armed insurgent groups in the country , as well as a narco-trafficking armed group . For over 40 years , Myanmar had to suffer the scourge of insurgency . The ethnic insurgencies which had existed in Myanmar since its independence were contained and rolled back only in recent years through the painstaking efforts of the Government . As a result , 17 armed ethnic insurgent groups have participated in the exchange of arms for peace programme . They are now actively engaged in development activities in their respective regions , together with the Government . Apart from a splinter armed group of narco-traffickers , only one ethnic insurgent group , the Kayin National Union ( KNU ) , remains to return to the fold , and the Government continues to extend an olive branch to this group . For the first time in nearly half a century , the armed conflict that plagued Myanmar has ceased in all parts of the country with the exception of a few border areas . The Special Rapporteur on human rights , in commending the achievement of the ceasefire agreements by the Government with 17 armed ethnic groups , stated in his report : “ After decades of fear , insecurity and widespread violence the first dividend of the ceasefire agreements is peace and the second is some development ” ( ibid . , para . The Government is promoting a culture of peace . We are fully aware that , in any conflict situation , children are among the most vulnerable groups . We share the determination to give the fullest attention to the question of protection of children in armed conflict . The Secretary-General 's report has pointed out that education has also been a casualty of war . In Myanmar , since civil insurgency has effectively been overcome in nearly all parts of the country , the Government has been able to concentrate its efforts on development of the areas where fighting raged for over four decades . In 1992 , the Government set up a separate ministry for that purpose and was able to bring development to those areas . It has built hospitals , roads and bridges in these border areas . From 1988-1989 to 1998-1999 , in a span of 10 years , it built more than 350 schools in the former insurgent-held areas . The Government has now been able to provide child immunization for all children nationwide . We are able to conduct extensive immunization programmes in the remote areas . It is a time-honoured tradition in Myanmar to place special emphasis on the overall development of children and to ensure their protection , upbringing and development . In bringing about peace and stability , we endeavour to provide the children with a peaceful and developed world so that they will have a secure and enabling environment to develop their individual capabilities . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Colombia . I invite him to take a seat at the Council table and to make his statement . Mr. Valdivieso ( Colombia ) ( spoke in Spanish ) : I am pleased , Sir , to see you representing France and presiding over this Security Council meeting devoted to an item that connects two important aspects of United Nations action in the world : the maintenance of international peace and the protection of children . My delegation is grateful for the presentations made at the beginning of the meeting by the Secretary-General , by his Special Representative for Children and Armed Conflict , Mr. Olara Otunnu , and by the Executive Director of the United Nations Children 's Fund ( UNICEF ) , Ms. Carol Bellamy . We acknowledge the commitment of these latter two officials in ensuring that peacekeeping operations focus on the special needs of children in conflict situations . The needs of children are one aspect of the broad actions required to protect civilians in armed conflict . In this respect , I would like to recall that in the statement issued on 20 December 2002 on the protection of civilians in armed conflicts ( S/PRST/2002/41 ) , the Council encouraged United Nations agencies to cooperate with Member States in formulating a comprehensive , coherent and action-oriented approach to the protection of civilians in armed conflict . The report of the Secretary-General ( S/2002/1299 ) , which is the basis for this debate , highlighted several special needs of children in conflict situations . It referred , among other things , to juvenile justice , education on the risks of landmines , and care for internally displaced children and for girls who are exposed to sexual abuse . Therefore , we encourage Council members to bear those needs clearly in mind when considering conflicts that are included in their programme of work . The problem of child soldiers is so important that it has captured the attention of agencies , such as the World Bank , which in the past were quite remote from this topic . The report 's list of military forces and rebel groups that recruit children alerts us to the need to resolve these conflicts and to counter the world trade in small arms and light weapons . We call on the Council to consider establishing the origin of arms that are used by groups that recruit minors , and we call , in particular , on arms-exporting countries , for greater controls . We regret the fact that many rebel groups within Colombia continue to recruit and kidnap children in order to carry out their attacks against society . The Government of Colombia , in accordance with its accession to international conventions — in particular to the relevant Optional Protocol to the Convention on the Rights of the Child — does not recruit those younger than 18 in its military forces . We encourage other States to accede to the Protocol and to respect this limit on compulsory recruitment and on the participation of minors in combat . As this is my last official function as representative of Colombia to the United Nations , I should like to thank you , Mr. President , for the opportunity to participate in this debate . I assure you that it will guide my personal action in this area in the coming years . In addition , I thank my colleagues of the countries members of the Security Council for the friendship and cooperation that they extended to me during Colombia 's two years on the Council , which concluded just a few days ago . Moreover , I should like to wish the new members every success in their work on behalf of international peace . The President ( spoke in French ) : I should like to take this opportunity , on behalf of the members of the Security Council , to say that we regret the departure of the Permanent Representative of Colombia , to thank him for his very valuable contribution to the Council 's work over the past two years , and warmly to wish him every success in his future endeavours . The next speaker inscribed on my list is the representative of Malawi . I invite him to take a seat at the Council table and to make his statement . Mr. Lamba ( Malawi ) : Let me begin by saying that I shall present what one might call a summary in the interests of time . Copies of my complete statement have been deposited with the conference officers . I should like to join preceding speakers in congratulating you , Sir , on assuming the presidency of this important organ of the United Nations and in thanking you and the Security Council for organizing this important debate to highlight the plight of children in conflict situations . My delegation would also like to congratulate the Secretary-General on his lucid and candid report on children and armed conflict ( S/2002/1299 ) , which forms the substance of this debate . Special acknowledgement also goes to the excellent presentations by the Special Representative of the Secretary-General , Mr. Olara Otunnu , and by the Executive Director of the United Nations Children 's Fund , Ms. Carol Bellamy . The information that has been provided will undoubtedly lead to soul-searching with regard to the strategies needed for the protection of children , especially in armed conflicts , but also for the necessary post-conflict care . My delegation is satisfied with the approach aimed at monitoring and reporting the treatment of children through the codification of international norms and standards to secure maximum protection . Malawi cannot claim much experience in armed conflict , and the problem of children now under discussion might be considered rather peripheral on Malawi 's socio-economic agenda . However , the welfare of children must form the central feature of any nation 's socio-economic planning . Malawi has supported all actions designed to create an improved environment for our children 's realization of their full physical , emotional and intellectual potential . All regional and international protocols for children have been accorded Malawi 's support . Malawi considers imperative the promotion of any action that alleviates children 's suffering and deprivation , which negatively affect their hope for a good future . Although Malawi may not be engaged in conflict or warfare , it — like many other African countries — is engaged in a more subtle war against the HIV/AIDS pandemic , which has created approximately 600,000 orphans , of whom no less than one fifth were born already infected with HIV and therefore face a bleak future in an environment blighted by excessive poverty . The Malawi Government has placed children high on its development agenda , and its vigorous intervention in child development — which covers nutrition , water and sanitation , psycho-social care , education and health — demonstrates its seriousness in addressing the welfare of children . Malawi ratified the Convention on the Rights of the Child in 1991 , and the Government is working in collaboration with the Committee on the Rights of the Child to assiduously monitor the implementation of the Convention . Other concrete measures taken by the Government include the establishment , in 1999 , of a children 's rights unit within the Malawi Human Rights Commission to protect children from abuse , violence and exploitation . The Malawi Law Commission has embarked on a review of existing legislation to bring it into conformity with international human rights standards , including those for children . Financial and technical assistance will be needed here to promote the administration of juvenile justice and human rights education . Malawi is also a signatory to all International Labour Organization protocols , and national legislation has been enacted to regulate the minimum age of employment . The United Nations Children 's Fund ( UNICEF ) has always proved to be an ardent partner in the improvement of the state of Malawi 's children . Our achievements today must contribute to a positive and hopeful future for our children . That is why my delegation commends the Secretary-General 's report for exposing and providing heightened awareness of the plight of children created by a senseless adult world . My delegation fully endorses all measures proposed and adopted for the creation of a world fit for children and all actions taken under international humanitarian and human rights law to induce compliance by the perpetrators of crimes against children . Therefore , my delegation hopes for systematic international compliance , on the part of both States parties and insurgent armed groups , with two instruments : the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict and the Rome Statute of the International Criminal Court . In the report , Malawi is pleased to note the United Nations offer of technical and legal assistance in the area of ensuring children 's rights . In conflict regions , no child can be safe , whether that child is in the fighting ranks or in a devastated home environment . The trauma experienced by children in conflict remains with them long afterwards . Malawi therefore endorses the establishment of child protection advisers in affected countries , such as Angola , Sierra Leone and the Democratic Republic of Congo , to collaborate with other stakeholders , such as UNICEF and Governments . Indeed , children 's rights must be highlighted on the United Nations agenda of peacemaking , peacekeeping and peace-building , with child protection adequately integrated into that agenda . It is our hope that the draft guidelines formulated by the Department of Peacekeeping Operations and the Department of Political Affairs will make an effective contribution to the promotion of effective child protection . The proposed comprehensive child protection training to supervise the conduct of staff towards children in mission areas stands out as a necessary initiative that deserves unqualified support . Equally important is the suggested inclusion of landmine risk education programmes and rehabilitation of child victims of mines . The exploitation of children as forced labour to extract natural resources in various countries , including the Democratic Republic of the Congo , only emphasizes the inhuman tragedy faced by displaced children . A childhood spent in refugee camps encounters enormous challenges . Indeed , apart from forced labour , the recruitment of children by armed forces and by other groups deprives them of the right to education , to proper health care , to development and , above all , to choices . A refugee camp in a foreign country creates an even more complicated situation for children . Malawi fully supports the work of the Office of the United Nations High Commissioner for Refugees , whose work and intervention brings hope to the many suffering children . The horrible experiences of girls and women in armed conflicts present a nemesis to any norms of civilization and form a topic deserving urgent action . The substantial claims of sexual exploitation involving rape , forced recruitment , abduction and trafficking all serve as condemning testimony to the absence of commitment to practical support for girls ' welfare . On a different occasion in the United Nations , Malawi expressed total condemnation of the despicable sexual exploitation of girls in conflict zones not only by armed forces , but , more disturbingly , by aid workers and peacekeepers . Malawi notes with satisfaction the Plan of Action of the Inter-Agency Standing Committee 's Task Force on Protection from Sexual Exploitation and Abuse in Humanitarian Crises , the strict implementation of which should make a significant difference and contribution towards the protection of girls from sexual exploitation . My delegation would like to pay special tribute to the Secretary-General for including in his report lists of people and States involved in the violation of the legal and human rights of children who find themselves subjected to various indignities and deprivation . The list should create a time for reflection over the important obligation of international child protection through unquestionable compliance with international agreements and protocols . Malawi will support any Security Council actions with respect to States and organizations listed in the report . Children 's rights deserve respect and their flagrant violation with impunity should not be tolerated and must be addressed through recourse to punitive measures , such as tough sanctions . Finally , the field visits of the Special Representative have demonstrated the crucial importance of such an approach to verify and elucidate the war-affected child 's situation in conflict zones . Such visits , which need to be encouraged , give the Special Representative a visual picture of the extent of the problem . The data so competently collected enriches our comprehension of the child 's predicament . As the Security Council deliberates the problems facing the child in conflict areas , it is Malawi 's strong plea that children facing other crises , such as HIV/AIDS , should feature in the Special Representative 's future itinerary . For example , Malawi , where the pandemic has created untold misery for children , would benefit from a proactive visit by the Special Representative to assess the efficacy of the interventions and child-protection measures currently in place and subsequently to advise appropriately . My delegation would like to conclude this statement by once again thanking the Secretary-General for submitting a landmark report on children , which will challenge the deliberations of the Security Council . If the mishandled child , who holds the future , cannot be considered a security issue , what can ? If we cannot demonstrate concern for the child now , who will and when ? There is no time to stand idle and watch . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Liechtenstein . I invite him to take a seat at the Council table and to make his statement . Mr. Wenaweser ( Liechtenstein ) ( spoke in French ) : At the outset , I should like to thank you , Sir , for convening this meeting on a subject to which we attach the highest importance . ( spoke in English ) Liechtenstein welcomes action by the Security Council on the issue of children and armed conflict and , in particular , the open debates , the products of which have been instrumental in creating a normative framework for the protection of children affected by armed conflict . Much to our satisfaction , the special session on children last year also placed strong emphasis on this topic . As far as standard-setting is concerned , the year 2002 was a good one for children . Two new legal instruments entered into force : the Optional Protocol to the Convention on the Rights of the Child on the sale of children , child prostitution and child pornography and the Optional Protocol on the involvement of children in armed conflict . Liechtenstein has signed both of these Protocols and is preparing to ratify them . Another step forward — an historic step indeed — was the entry into force of the Rome Statute of the International Criminal Court . The Statute , among other things , provides for the better protection of children , especially but not exclusively in times of armed conflict . The inclusion of the recruitment and use by all parties to a conflict of children under the age of 15 in conflicts of both an international and non-international character as a war crime is of special importance in this respect . Success in standard-setting must not give us cause for complacency — quite to the contrary . While the existing standards are high , the picture continues to be very grim when it comes to their application . The rights of millions of children around the world continue to be violated in numerous and brutal ways . Children affected by armed conflict , with all its manifold and devastating consequences , are in the worst situation . We therefore agree with the Special Representative on Children and Armed Conflict that we must move with resolve into an era of application , which was also one of the lessons we drew from last year 's special session on children . In the implementation of these existing norms , the Security Council can play a central role . The creation of a list of parties to conflicts on the Council 's agenda that continue to recruit or use child soldiers is one measure through which to make progress in assuring compliance with international obligations . The list should be expanded to cover parties to conflicts in a global manner , not only in situations on the agenda of the Council . We welcome such practical steps and hope that the Council will again agree on a strong response to the report before us and thus ensure a follow-up based on the recommendations contained in the report . We welcome the report before the Council and its emphasis on systematically integrating child protection objectives into the mandates of peace operations , including through the deployment of child protection advisers and special training for peacekeeping personnel . Given the importance of the participation of children in accordance with the letter and spirit of the Convention on the Rights of the Child , children must be given a voice , in particular in the process of post-conflict peace-building , rather than merely having their best interests represented by others . Liechtenstein has supported the work of the Special Representative , Mr. Olara Otunnu , right from the inception of his mandate . His advocacy on behalf of children in armed conflict over the past six years has been heard widely and proven effective . Worldwide awareness of children and the ways in which they are affected by armed conflict is increasing . In order to enhance the application of the legal instruments I referred to at the outset of my statement , more needs to be done to make these achievements better known . Advocacy and creating awareness help to broaden the base of support and to get more stakeholders involved . In this context , the work and involvement of non-governmental organizations and civil society groups can be instrumental , especially in highlighting different aspects of the plight of children affected by armed conflict . In this context , we have taken note with great interest of two reports : first , the “ 1379 Report ” of the Coalition to Stop the Use of Child Soldiers and , secondly , the study on the voices of girl child soldiers presented by the Quaker United Nations Office . The situation of the girl child is one aspect that requires our special attention in order to effectively protect the rights and well-being of children affected by armed conflicts . Those conflicts have manifold and complex consequences for all children , but specific forms of victimization are often added to the plight of girls and women . Rape , abduction , sexual enslavement and trafficking are some of the crimes perpetrated against female victims in particular . What is characteristic of such crimes is their traumatic nature and long-term effects . One figure may illustrate this point : two out of three women and girls raped during the 1994 genocide in Rwanda have reportedly tested positive for HIV/AIDS . It is therefore no exaggeration to say that the genocide continues in a silent way . True stability and security cannot be re-established for long after an armed conflict has subsided , because of the specific crimes inflicted especially upon women and girls . All of that is to say that the international community would be well advised to address very specific issues and details regarding children affected by armed conflict . As I indicated at the outset , it does not suffice to adopt broad norms and standards . The effects of armed conflicts on children , the different forms of child labour and sexual exploitation and the resulting special vulnerability of children to the HIV/AIDS pandemic stand out as areas where concerted national and international action is a prerequisite for successful and durable solutions . All these issues constitute large-scale crises that can be addressed only through specific and coordinated action by all of us . Nobody must be allowed to deprive children of both their childhood and their future . By permitting this we would be violating a moral imperative we all hold dear . But , moreover , we would not only be destroying the future of individual children but also the collective future of the countries concerned . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of the Democratic Republic of the Congo . I invite him to take a seat at the Council table and to make his statement . Mr. Ileka ( Democratic Republic of the Congo ) ( spoke in French ) : I have the pleasant duty of expressing my delegation 's satisfaction at seeing the representative of France presiding over the Security Council as we begin the year . My country enjoys excellent relations with France , relations that are based on mutual trust and respect . Allow me also , Mr. President , to pay tribute to your predecessor , the representative of Colombia . I commend him for the skill and ability with which he discharged his difficult tasks during his presidency last month . I would like to congratulate Angola , Chile , Germany , Pakistan and Spain on becoming members of the Council . I would also like to pay well-deserved tribute to the outgoing members . We are very grateful to them for their efforts , in particular with regard to the search for peace in my country . Lastly , I would like to thank you , Mr. President , for having convened this meeting of the Security Council . I also express my gratitude for the Secretary-General 's important report on children and armed conflict ( S/2002/1299 ) , which Special Representative Olara Otunnu presented this morning with his usual eloquence . I also thank Ms. Carol Bellamy , Executive Director of the United Nations Children 's Fund ( UNICEF ) , for her important statement . With regard to the item under consideration , I would like to remind the Council that problems pertaining to the protection of children are central to my Government 's primary concerns . That concern is reflected , for example , in the existence of an institutional and legal framework to guarantee the rights of children . Despite the continuing financial difficulties and war , my Government has reacted positively to all the recommendations relating to the protection of children that are contained in the relevant resolutions of the Security Council , including resolution 1325 ( 2000 ) on the subject of women and peace and security . Furthermore , the Democratic Republic of the Congo is party to the major international instruments on the protection of the rights of the child , including the Convention on the Rights of the Child and its Optional Protocols on the involvement of children in armed conflict and on the sale of children , child prostitution and child pornography , the African Charter on the Rights and Welfare of the Child , International Labour Organization ( ILO ) Convention No. 138 — concerning the minimum age for employment — and No. 182 — on the elimination of the worst forms of child labour , and , of course , the Rome Statute of the International Criminal Court ( ICC ) . The implementation of the Rome Statute is of great importance to my Government , which expended great effort to facilitate its entry into force , which took place on 1 July 2002. This treaty includes an important provision to protect the rights of children , making it a war crime to conscript children under the age of 15 years into national armed forces . The Council should also recall that my Government has been greatly involved in the process of protecting children , including through the promulgation of its Decree-Law No. 66 , of 9 June 2000 , which dealt with the demobilization and reintegration of vulnerable groups in armed forces . That political will has been reflected in the establishment of an appropriate structure , the National Bureau for Demobilization and Reintegration ( BUNADER ) , which is charged with following up and implementing the decree-law in partnership with UNICEF , whose valuable work is greatly appreciated . Since 1997 , my Government has been aware of the urgency of the need to end the presence of child soldiers known as kadogo in the Congolese armed forces . Since that time , my Government has developed several programmes to demobilize child soldiers . Most of those programmes required multilateral support , in particular through the United Nations Development Programme ( UNDP ) and the Human Rights Field Office in Kinshasa . Other programmes required bilateral assistance . While today we welcome the sincere cooperation and partnership that has developed between my Government and the United Nations system as a whole , as well as the efforts under way to end this deplorable situation and fully implement norms and principles on the rights of the child and on their protection , we must nevertheless recognize that , at the time , the response of the United Nations , the international community and donor countries did not meet our expectations . Reasons having to do with security , inaccessibility and , frankly , a lack of confidence in the capacity and the will of my Government to implement its policies to protect the rights of the child resulted in the United Nations being very late in providing support to my Government with regard to formulating appropriate policies to protect children in armed conflict and implementing initiatives , particularly outreach initiatives and those aimed at raising awareness . Nevertheless — pursuant to the relevant provisions of resolution 1261 ( 1999 ) of 25 August 1999 , in which the Security Council called upon States and the relevant parts of the United Nations system to intensify their efforts to end the recruitment and use of children in armed conflict — I would like to reaffirm to the Council that the Democratic Republic of the Congo has ended the enlistment of children in the Congolese armed forces . That is in contrast to the behaviour of the armed groups that hold sway in occupied provinces , which continue to employ child soldiers in the theatre of military operations . A process of demobilization for child soldiers is now taking place under the supervision of BUNADER and UNICEF . However , the future of those soldiers continues to be of major concern and to pose an immense problem . When one takes into account the fact that serious acts of banditry , particularly in Kinshasa , are being carried out by armed young people , one has to wonder about the wisdom of launching these young people into the world without any financial incentives or viable possibilities to reintegrate into society , especially as we are dealing with young people in their prime who know how to handle weapons . This phenomenon represents a time bomb for the entire Congolese society , as well as a real problem that the United Nations is tackling very timidly and one that the Government alone cannot address due to a lack of funds . It is important that steps be taken not only immediately but also through the implementation of chapter VI of the comprehensive , inclusive agreement on the transition in the Democratic Republic of the Congo , relating to the training of our national army . We must all take concrete action very quickly . Paragraph 55 of the report of the Secretary-General under consideration ( S/2002/1299 ) mentions a commitment by the World Bank and donor countries to support a regional multi-country demobilization and reintegration programme for the entire Great Lakes region . To us , such a commitment still seems to be a long way off . Last Thursday , France made 1 million euros available to the United Nations Development Programme . Of that amount , 200,000 euros are immediately available for a programme to return to civilian life foreign ex-combatants located in the Democratic Republic of the Congo . France 's contribution , following a contribution of 2 million euros to the funds of the World Bank , gives France the leading rank in support for the disarmament , demobilization , repatriation , resettlement and reintegration programme of United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) . That will greatly assist the return of foreign ex-combatants — including the child soldiers among them — to their countries of origin and their families and homes . Furthermore , implementing the relevant provisions of resolutions 1314 ( 2000 ) and 1379 ( 2001 ) , MONUC has established child protection units . But given the proliferation of armed groups and their dispersion , and given the size of our national territory , one might question their effectiveness and advocate a substantial increase in the number of their personnel within MONUC so that they can be more effective . The international community is also called on to help the Democratic Republic of the Congo in the implementation by the Government and the future transition authorities of the relevant recommendations made by the delegates to the inter-Congolese dialogue . The war of aggression that has raged in my country for four years now , in violation of the United Nations Charter , has not only given rise to the phenomenon of child soldiers , whose forced recruitment continues in the occupied provinces . For children , this war has brought a succession of miseries , of which they are the first victims . Thousands of them survive , marginalized throughout the country , cut off from society and their own families , living in the streets alone or in groups , sexually exploited and abused , breaking the law , without protection or future . This war of aggression has also led to the forced , brutal and tragic displacement of populations within the borders of the Democratic Republic of the Congo and has forced many Congolese into exile in neighbouring countries . It has also encouraged all kinds of violations of fundamental human rights , particularly those related to the physical integrity of women and children . My delegation wishes to express my Government 's concern at the events currently taking place in the east , in Uvira , and further north , in Beni , Mambasa , Bunia , Kilo , Mongwalu and Mahagi . A major humanitarian crisis has been created , especially due to the forced displacement of thousands of people , which has been confirmed by MONUC . Purely commercial reasons are at the base of this upsurge in tension , in which , through opposing Congolese factions , Ugandan generals and Rwandan businessmen equally attempt to gain control of the goldmines of Kilo-Moto and of the Mongwalu area . My Government denounces the delaying tactics employed by Rwanda and Uganda , as well as their manoeuvring to prolong the war in the Democratic Republic of the Congo . Those two countries , after signing agreements with my country , were quick to incite new rebellions and create new warlords . Uganda created the Union des patriotes congolais ( UPC ) — headed by Mr. Thomas Lubanga , a notorious hostage-taker and known criminal — which is not a signatory of the Pretoria Agreement . For its part , Rwanda has given the present Governor of Nord-Kivu , Mr. Serufuli , responsibility for leading a militia of almost 20,000 men , essentially Hutus released from the prisons of Rwanda by the Kigali Government , with the mission of sowing terror , looting and committing massacres among the civilian population . My Government expresses its dismay at information reporting widespread cases of looting and mass rape of women and girls and summary and extrajudicial executions perpetrated by the Mouvement pour le libération du Congo ( MLC ) and its ally , the Rassemblement congolais pour la démocratie-National ( RCD-N ) , as well as by the UPC . My Government is scandalized by the discovery of mass graves in Mambasa , where violent clashes continue between , on the one side , the troops of the Rassemblement congolais pour la démocratie — Mouvement de libération ( RCD-ML ) and on the other , the troops of the RCD-N , in coalition with the MLC . My Government is shocked at the allegations made by representatives of the Catholic Church and non-governmental organizations for the defence of human rights alleging acts of cannibalism by soldiers of the MLC and the RCD-N , principally and specifically targeting pygmy populations and the Nande people . My Government awaits the conclusions of the investigation carried out by the United Nations and hopes that those conclusions will be made public so that light will be shed on that indescribable act of terror and those dreadful events . If that unimaginable barbaric savagery turns out to be true , my Government would ask the Security Council to take against the alleged perpetrators , authors and those responsible all measures authorized under the Charter of the United Nations in order to stop those atrocities and crimes , which now fall within the purview of the International Criminal Court . In conclusion , my Government appeals to all our international , regional and subregional partners to help us carry out our programme to promote and to protect the rights of children . There is an urgent need to renew international commitments to make children a priority so that we do not waste the most precious human resource in the world and to build a stable and productive society . The future of the Democratic Republic of the Congo lies in the well-being of its children . Investing in children today will ensure peace , stability , security , democracy and sustainable development for present and future generations . The President ( spoke in French ) : I thank the representative of the Democratic Republic of the Congo for his kind words addressed to my country . The next speaker inscribed on my list is the representative of Burundi . I invite him to take a seat at the Council table and to make his statement . Mr. Nteturuye ( Burundi ) ( spoke in French ) : My delegation is sincerely pleased to see you , Sir , presiding over the work of the Security Council for the first time since you assumed your new duties . We wish you every success in your mission . How fortunate that the first public meeting of the Council over which you are presiding is dedicated to the situation of children in armed conflicts , a subject of utmost importance and one to which France has always given special attention . I also congratulate the new members of the Security Council and wish them every success in their noble task . I would like to welcome the presence among us of our brother Mr. Olara Otunnu , who has made such great efforts to raise the awareness of the international community and mobilize it to assist children , whose innocence is brutalized by the belligerents of the conflicts currently raging throughout the world . The report of the Secretary-General ( S/2002/1299 ) before us is extremely clear on the suffering of children in conflicts and on the proposed approaches for a solution , especially through the implementation of international conventions that already exist or are in the process of being adopted . Burundi is mentioned in the report , in which the principal belligerents — the Government , the rebels of the Front pour la défense de la démocratie ( FDD ) and of the Parti pour la libération du peuple hutu/Forces nationales pour la libération ( PALIPEHUTU/FNL ) — are accused of using child soldiers in their conflict . I should like to recall here that the war that has been raging in Burundi since 1993 has particularly affected the vulnerable populations , including children . They are the ones who suffer most from diseases related to the poor hygiene and other negative conditions prevailing in camps for internally displaced persons and refugees . They also suffer most from poor nutrition and food shortages ; the destruction or closing of schools , health clinics and hospitals ; and from the many horrors of war . The phenomenon of street children in urban areas — in Burundi and elsewhere — is a shocking reality of civil war in our States . The task of rehabilitating children therefore is a multidimensional one , as indicated by international norms to protect children in situations of conflict . In Burundi , there is , however , a glimmer of hope for the entire population , and in particular for children . That hope was kindled by the signing of the Arusha Peace Agreement in August 2000 and , more recently , by the signing of a ceasefire between the Transitional Government and the three armed factions . We hope that the armed group that has remained outside of this peace process — the PALIPEHUTU/FNL — will soon join it . The Arusha Peace Agreement makes explicit reference to the rehabilitation of the educational and health sectors for the benefit of children , and there are plans to introduce peace education and tolerance programmes into school curricula . With respect to child soldiers , the Peace Agreement , as well as the ceasefire agreement signed on 2 December 2002 at Arusha with the FDD armed group , both define the ceasefire as , inter alia , the cessation of all acts of violence against the population as well as an end to the use of child soldiers and to sexual violence . The ceasefire agreement also specified in the annex — which is an integral part of the agreement — that the question of child soldiers is one of the technical issues still to be negotiated between the Government and the FDD , and that the Government and the rebel groups must agree on a common solution . Such a solution can be found in the disarmament , demobilization , reintegration and repatriation or resettlement programme , which is the most important part of the ceasefire agreement , and for which , thankfully , the international community has planned substantial funding , within the framework of a possible United Nations peacekeeping mission in Burundi . As concerns the Government , we recognize the existence of child soldiers recruited on a voluntary basis due to a lack of other options following unsuccessful primary schooling . In 1989 we signed the Convention on the Rights of the Child , and then , in 2001 , the Optional Protocol to that Convention on the involvement of children in armed conflict . Ratification proceedings are under way . We have already set up , jointly with the United Nations Children 's Fund , a programme for the demobilization of child soldiers , and a census of these children is under way . However , with respect to the armed groups , the situation is quite distressing , because , following the signing of the ceasefire agreement on 2 December 2002 , the FDD rebels carried out a forced mass recruitment of young schoolchildren and students , promising them the world , including military ranks and large sums of money , which the international community was to give them if some of them were to be demobilized some day . This attitude should be condemned by the Security Council , because it is cynical , anachronistic and constitutes a violation of the ceasefire and of the agreed truce . Let me recall here that the Burundian armed groups are notorious for the horrific killing of children in boarding schools — the most infamous being the burning alive in 1993 of dozens of Kibimba Normal School students , as well as the slaughter of young seminarians in Buta in 1996 , who were killed in cold blood because they refused to group themselves by ethnicity , as had been ordered by the FDD rebel execution squad . The rebels also have excelled in the destruction of schools and hospitals , as well as in the kidnapping of schoolchildren and students under the age of 15 , with the goal of recruiting them or making them carry plundered goods . As the report points out , these actions are true war crimes , which , thankfully , the International Criminal Court plans to prosecute . The challenge raised by the situation of children in the Burundian conflict can be taken up now that the combatants seem to want to put an end to the war . Once the war has ended , the national and international community will be able to reweave the physical , social and moral fabric of the country . Children will once again be able to smile and to live a full and happy life with their parents — who themselves will welcome the chance to rebuild their lives in a reconciled nation . We ask the international community and the Security Council in particular to continue to help Burundi , so that it may continue forward on the path to peace . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Japan . I invite him to take a seat at the Council table and to make his statement . Ms. Saiga ( Japan ) : As all of us here will acknowledge with regret , the majority of victims and casualties in recent conflicts have been civilians , of whom the most vulnerable are children . Children are the most negatively affected by armed conflicts , as they are the victims of attacks , landmines and violence on the one hand , while being exploited as child soldiers on the other . We all bear responsibility for safeguarding the rights and welfare of children , who are the basis of the future development of any society . It is therefore commendable that the Security Council has regularly been taking up this important subject since 1998. The Minister for Foreign Affairs of Japan , Yoriko Kawaguchi , is advocating what is referred to as the “ consolidation of peace ” , which is a new pillar of our foreign policy . This consolidation of peace includes a feature under which Japan would provide early support to local communities , before the achievement of any formal peace agreement . This initiative not only provides local people with assistance at a crucial time of need , but also gives critical momentum to the peace process by enabling them to enjoy the dividends of peace . That approach is more proactive than our conventional approach , which had focused on rehabilitation and the reconstruction of a country after the signing of a peace accord . Specifically , in order to ensure that children enjoy those dividends of peace , Japan has made a variety of concrete efforts to protect and assist children in situations of armed conflict . One example is the “ Back to School ” campaign in Afghanistan , which the United Nations Children 's Fund has been advancing , with the financial support of Japan . Other examples of Japan 's efforts in this area are school reconstruction and education reactivation in Kosovo , Timor-Leste and Côte d'Ivoire ; assistance to internally displaced children in Somalia ; and landmine awareness education in Afghanistan , Angola and the Sudan , to name just a few countries . I should like , on behalf of the Japanese Government , to make a number of comments regarding the United Nations work on children and armed conflict . First , we would like to express our appreciation to the Special Representative of the Secretary-General for Children and Armed Conflict , Mr. Olara Otunnu , for his activities , including field visits to countries caught in or recovering from armed conflict , since such visits can contribute to the promotion of awareness of the importance of the protection of children in situations of armed conflict , who need special attention for their survival . The annex to the most recent report of the Secretary-General includes a list of certain parties to armed conflicts that recruit or use child soldiers . It is not sufficient simply to denounce those who are responsible , but every possible effort — for example , awareness raising and eradicating the culture of impunity — must be made to bring such practices to an end . Secondly , a number of United Nations agencies have been actively involved in the issue of children and armed conflict , including the Office of the Special Representative , field-based implementing agencies and various departments at Headquarters . In order for such agencies to use the limited resources available in an effective and efficient manner , inter-agency coordination and periodic review and streamlining of their activities are of great importance . Japan therefore welcomes the adoption by the General Assembly of resolution 57/190 , entitled “ Rights of the child ” , which calls for a comprehensive assessment of the response of the United Nations system to the issue of children and armed conflict . It is hoped that concrete and bold ideas for the reform of United Nations activities in this area will be submitted , based upon achievements to date and changing needs on the ground . Thirdly , Japan is pleased that the Security Council has been regularly addressing the subject of children and armed conflict , as well as those of the protection of civilians in armed conflict and women , peace and security , as the issue of the protection of civilians , including women and children , is part and parcel of the maintenance of international peace and security . As my Government has frequently pointed out , however , the three subjects are intricately intertwined and thus should be addressed in an integrated manner . For instance , those three issues might well be addressed under a single agenda item . In conclusion , I am convinced that under your leadership , Mr. President , a resolution will be adopted that contributes to the improvement of the situation of children suffering as a result of conflict . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Namibia . I invite him to take a seat at the Council table and to make his statement . Mr. Andjaba ( Namibia ) : Permit me at the outset , Sir , to express my delegation 's satisfaction at seeing see you presiding over the work of the Security Council this month , and to thank you for having convened this very important meeting . I would also like to take this opportunity to warmly congratulate the new members of the Council and to pledge my delegation 's full support to them . Allow me also to pay tribute to the outgoing members of the Council for the excellent manner in which they participated in the Council 's work over the past two years . I would like to thank the Secretary-General for his statement this morning and for his thought-provoking report , which reviews activities and progress made in the protection of children affected by situations of armed conflict . This report goes a step further than a mere review of the situation ; it provides a list of parties to armed conflict that recruit or use children in violation of relevant international obligations , and highlights the plight of children in conflicts that are not on the agenda of the Security Council . We see this step as a positive development in our efforts to protect the most vulnerable in our society . I wish to commend the Special Representative of the Secretary-General for Children and Armed Conflict , Mr. Olara Otunnu , as well as Ms. Carol Bellamy , Executive Director of the United Nations Children 's Fund , for the information that they provided today . Their tireless work and actions are clear testimony of their strong and unwavering commitment to protect children everywhere . It is encouraging to note from the report that impressive gains have been made in codifying international norms and standards for the protection and well-being of children . My delegation applauds this progress , since , as has been stated many times by the Council , the impact of conflict on children has severe implications , not only for peace and security , but also for socio-economic development . These positive developments should be built upon by the international community to ensure that children are forever protected against the consequences of war . Further efforts should be made to ensure that the standards according to which children are treated are implemented on the ground , and that permanent monitoring and reporting mechanisms are created in order to identify and adopt measures against violations . As responsible members of the international community , we must move with a great sense of urgency — and move beyond mere words . We must take concrete actions to practise what we preach . And we must not forget the children that are today suffering under foreign occupation and domination . Here , I speak of the children of Palestine and the children of Western Sahara . We must summon the necessary courage and political will to bring the suffering of those children to an end by ensuring that their countries attain their inalienable right to self-determination . The Security Council has a Charter responsibility in that regard . For its part , Namibia will continue to contribute to all efforts aimed at protecting future generations from the evils of armed conflict . It is for those reasons that Namibia was at the forefront in getting the Security Council involved in addressing the plight of children in armed conflict during our tenure in the Council in 1999 and 2000. We therefore strongly supported resolutions 1261 ( 1999 ) and 1314 ( 2000 ) , which were adopted during that period . Resolution 1261 ( 1999 ) , in particular , heightened international attention with regard to this issue , which resulted in the progress that we are seeing today . Furthermore , we believe that the entry into force of the Rome Statute of the International Criminal Court and of the Optional Protocol to the Convention on the Rights of the Child will have a profound impact that will contribute to achieving this goal . The provisions of the Optional Protocol will result in a sharp decrease in the number of young children recruited for war , and the Rome Statute will be a strong deterrent to war crimes such as sexual violence against children . Namibia strongly supports both instruments and will work tirelessly to ensure that their provisions are fully implemented . Other specific concerns of my delegation are the disproportionate impact of conflicts on girls and the devastation caused by HIV/AIDS . In many instances , the trauma of girls is compounded when they are infected with deadly diseases through sexual violence during times of war and peace . My delegation therefore urges the Security Council to continue to devote special attention to the needs of girls and to the effects of HIV/AIDS . Before I conclude , I wish to make an observation . The report before us ( S/2002/1299 ) , in paragraph 55 , mentions Namibia together with several other countries where the World Bank and other donors have committed themselves to give priority to the unconditional and urgent demobilization of child soldiers in a Multi-Country Demobilization and Reintegration Programme for the Greater Great Lakes Region . The language of the paragraph , as it stands , could be misinterpreted to mean that Namibia also has child soldiers to be demobilized , although that is not directly stated . I should like to make it very clear that Namibia does not have or recruit child soldiers , because that is against the supreme law of our land , the Constitution of the Republic of Namibia . Finally , my delegation urges the Council to act expeditiously on the information provided to it in the report under discussion . The paramount consideration should be that more needs to be done to protect children from the scourge of war . The President ( spoke in French ) : The next speaker inscribed on my list is the representative of Ecuador . I invite him to take a seat at the Council table and to make his statement . Mr. Gallegos Chiriboga ( Ecuador ) ( spoke in Spanish ) : It is an honour to speak before you , Sir , representative of a friendly country such as France . At the same time , I should like to express my delegation 's congratulations to the former President of the Council , the representative of Colombia , on his excellent work during his tenure . I should also like to congratulate the representatives of Angola , Chile , Germany , Pakistan and Spain , who have just joined the Council . First of all , I should like to express Ecuador 's gratitude to the Secretary-General for his new and important report on children and armed conflict ( S/2002/1299 ) , in which he presents an account of activities undertaken and progress achieved related to that crucial issue during the period of the report . We express our congratulations to the Special Representative of the Secretary-General for Children and Armed Conflict on his valuable initiatives and on the commitments reached in various countries in order to ensure the protection and well-being of children during and after conflicts , as well as compliance with obligations arising from international law . We encourage the Special Representative to continue to undertake all necessary efforts , in coordination with the competent bodies , to achieve increasingly significant results and commitments . It is also important to highlight — as the Secretary-General did in his report — the adoption by the General Assembly of the document “ A world fit for children ” , annexed to resolution S-27/2 , in which the Assembly agreed on a renewed commitment to protect children during armed conflicts , in accordance with international humanitarian law and human rights law . The Security Council resolutions in that area and effective compliance with them are also important means to contribute to that objective . Other important advances in that sphere are the entry into force of the Optional Protocol to the Convention on the Rights of the Child on the involvement of children in armed conflict , as well as the Rome Statute of the International Criminal Court , which ensures that the gravest significant crimes for the international community — among which are crimes committed specifically against children — will not go unpunished . The strengthening of international law in that sphere , respect for it and effective application of it are indispensable in order to guarantee the necessary protection for children , especially in the light of the persistence of conflicts of all kinds in various regions of the world . We also welcome the progress that has been made in the incorporation of the issue of the protection of children as an essential component of the work of peacemaking , peace-building and peacekeeping . One of the saddest and most tragic realities that we see in various parts of the world today is the unspeakable suffering experienced by the innocent and most helpless victims of society — children — as a result of armed conflicts . The report of the Secretary-General describes that intolerable reality , including the risks to which children are exposed as a result of landmines , unexploded ordnance and small arms and light weapons . It also discusses the serious situation of displaced children and the exploitation and abuses of every kind to which children are exposed . Therefore , the international community must accord high priority to the situation through the implementation of better concrete measures to guarantee children 's most fundamental rights and to mitigate and prevent the pernicious effects that armed conflicts have on them . In his report , the Secretary-General also emphasizes the problems related to child soldiers . Nothing is more inhuman and more contrary to the highest values of any society than the fact that , instead of toys , children are forced or permitted to handle instruments of death ; that human beings , in the earliest stages of their existence , are dragged into violence , confrontation and destruction . The solution to this problem must , of course , be a United Nations priority . Ecuador wishes to note the list included in the Secretary-General 's report , at the request of the Security Council , of the parties to armed conflict that recruit or use child soldiers , in violation of applicable international obligations . This is an important development , through which we no longer speak in general terms concerning the brutal realities that exist in various regions and fully identified areas . Instead , we are identifying specific parties , which will allow us to encourage State and non-State actors involved to alter their behaviour and to adhere to the basic norms of human rights and international humanitarian law . Although much remains to be done , the progress noted by the Secretary-General in his report on the issue of protecting children in armed conflict , while limited , is praiseworthy . We hope that it will continue and that the necessary efforts and actions will be stepped up in order to ensure that the world can truly become a place fit for children . The President ( spoke in French ) : The next speaker inscribed on my list is the Permanent Observer of Palestine . I invite him to take a seat at the Council table and to make his statement . Mr. Al-Kidwa ( Palestine ) ( spoke in Arabic ) : At the outset , let me express our great satisfaction at seeing you , Sir , preside over our Council . You are a skilful diplomat well known throughout the United Nations . I am pleased to see France , a friendly country , at the helm of the Council . Although Colombia is no longer a member of the Security Council , I should also like to take this opportunity to convey our thanks and appreciation to the friendly delegation of that country and to Ambassador Valdivieso for his presidency of the Council last month and to wish him every success . We also thank the former members whose membership lapsed at the end of the year , congratulate the new members and wish them every success . Over the past 28 months , the children of Palestine have been subject to systematic murderous action by Israel , the occupying Power . During this period , the occupying forces of Israel have committed war crimes and acts of State terrorism , as well as systematic violations of the rights of Palestinian children and of the Palestinian people in general . The occupying forces , both deliberately and through the indiscriminate or excessive use of force , have killed over 650 Palestinian children and wounded thousands more , hundreds of whom have been permanently disabled . Through the use of force , widespread destruction and the collective punishment of the entire Palestinian community , the occupying forces have also inflicted psychological disorders and emotional and social damage on huge numbers of Palestinian children . Above all , Israeli measures and practices have impoverished Palestinian children , who consequently suffer malnutrition and lack of health care , and have halted and destroyed the educational system , leading to the spread of ignorance among future generations . All of this is occurring against the backdrop of Israel 's ongoing occupation of our land for over 35 years , during which the occupying forces have not only oppressed and suppressed the population , but have also practised settler colonialism , one of the worst possible war crimes . The settler colonialism , which denies our people 's rights to exist and survive and to national independence , further inhibits the Palestinian child 's right to a natural and normal future , such as that enjoyed by any child throughout the world . To all of this we must add Israel 's uprooting of half our population — including children and women — from their lands and homes since 1948 and its prevention of their return for over 50 years . We can thus realize the magnitude of the great humanitarian crisis and plight of Palestinian children at the hands of the leaders and forces of Israel , who are war criminals and the colonialists of the twentieth century . The efforts of the Security Council in the field of children and armed conflict complement the great work of the General Assembly . In this respect , we express our appreciation for the efforts of the General Assembly in addressing the situation of Palestinian children . The Israeli Chargé d'affaires , with all his well-known arrogance , earlier attacked and criticized the General Assembly resolution concerning Palestinian children . Only four members , whom I shall not name , voted against that resolution . It may be possible in a professional context for the representative of the occupying Power to seek to defend the illegal and illicit behaviour of his country , but it is intolerable and disgusting that he should try to tell Member States what to do and to portray the occupying Power as a State that obeys and observes international law and loves peace . We welcome the improvement of the Security Council 's position concerning the question of children and armed conflict through its acceptance of the legal necessity of addressing the issue of children under foreign occupation . This logically leads to the issue of Palestinian children under Israeli occupation . We also welcome the improvement of the Secretary-General 's report in this context and the reference made therein to Palestinian children and their suffering , although the reference inadequately covers all the essential aspects of the issue . The same can be said of the statement made this morning by the Special Representative of the Secretary-General on Children and Armed Conflict , Mr. Olara Otunnu , in which he added to the relevant paragraph of the Secretary-General 's report another paragraph on the use of suicide bombings in Israel . Although we do not disagree in principle , we nevertheless do not understand part of the text in that additional paragraph . More important , we believe that the two paragraphs do not clearly reflect either the situation or its legal aspects ; nor do they reflect the tragic situation experienced by Palestinian children for many years now . Nevertheless , this is a beginning that we hope will develop in an appropriate manner , including a visit by the Special Representative to occupied Palestinian lands , including Al-Quds Al-Sharif . We convey our welcome to him in advance . We hope that the Security Council will take the steps needed to provide the necessary protection for Palestinian children living under Israeli occupation , not only in accordance with the Convention on the Rights of the Child and its relevant Optional Protocol but also with the legal commitments emanating from the Fourth Geneva Convention — which must be respected in all circumstances , as must its Additional Protocol I. The President ( spoke in French ) : The representative of Israel has asked to speak . I invite him to take a seat at the Council table and to make his statement . Mr. Mekel ( Israel ) : I regret that I am forced to take the floor again in this debate . We had hoped that this discussion would not turn into an exchange regarding the particularities of the situation in the Middle East . Unfortunately , that has not been the case . In the course of today 's debate , a few speakers — in particular the Palestinian observer — have used the issue of children in armed conflict to single out Israel for criticism and condemnation . Such criticism directed at one country , and at one country alone , is not intended to alleviate the situation facing Palestinian children or , for that matter , the situation facing any group of children living under the threat of armed conflict . Rather , it is intended to advance a political agenda and to isolate my country . For that reason , I am compelled to make a second intervention . The situation facing the Palestinian people , including Palestinian children , is a serious one . Israel shares the concern of the international community over their plight and has taken steps to improve the humanitarian situation of all Palestinians . It must be stressed , however , that this situation is first and foremost a product of the decision of the Palestinian leadership to engage in violence , to pursue confrontation in place of negotiations and to encourage , finance and support a deliberate campaign of terrorism against the people of Israel . While it may be convenient to place full blame for the plight of the Palestinian people on Israel 's shoulders , the fact remains that the Palestinian leadership , which chose to forego a viable political process in favour of a bloody campaign of terrorism , is primarily responsible for the difficult situation we are currently facing . Israel has never , and will never , intentionally target Palestinian children or any unarmed civilian . We recognize that , in the course of our battle with Palestinian terrorists , civilians have suffered . Those cases are deeply regrettable ; but , in contrast to Palestinian terrorists who have deliberately targeted school buses , discos and other areas where children are known to congregate , Israel has gone to great lengths — and at considerable risk to its own security — to ensure that its counter-terrorist operations are conducted so as to reduce the threat to civilians as much as possible . Those who are genuinely concerned about the situation of Palestinian children must scrutinize and condemn the criminal behaviour of Palestinian terrorists , who have obscured the fundamental distinction between civilians and combatants , set up camps in civilian refugee areas , used Palestinian civilians , including children , as human shields and used private homes and schools as bases from which to launch attacks against Israel , in grave violation of international humanitarian law and Security Council resolutions . The international community must loudly condemn the practices of Palestinian leaders , who have actively encouraged the participation of Palestinian children in armed conflict , elevated suicide terrorists to the status of national heroes and urged children to follow their examples . If delegations truly care about Palestinian children , they must first and foremost address the shameful practices of Palestinian leaders and terrorists that have led too many Palestinian children to believe that murder and death are noble pursuits . However , if their purpose is simply to exploit another United Nations discussion to attack and defame Israel , let those delegations find a more appropriate forum . On an issue as urgent and critical as protecting children , we can ill afford to allow our discussions to be tainted by such naked political hostility . The President ( spoke in French ) : The representative of Rwanda has asked to speak . I invite him to take a seat at the Council table and to make his statement . Mr. Gasana ( Rwanda ) ( spoke in French ) : A moment ago , the Permanent Representative of the Democratic Republic of the Congo made an attempt to confuse the members of the Council . Fortunately , absurdity never killed anybody . The representative of the Democratic Republic of the Congo sought to sully and to tarnish Rwanda 's image by saying that Rwanda had sent 20,000 prisoners to the Democratic Republic of the Congo . I would like to say to the Council that that was a lie , pure and simple . I would ask everyone present here not to take the representative of the Democratic Republic of the Congo seriously . The Security Council should not be a forum for insults . The President ( spoke in French ) : The Permanent Observer of Palestine has asked for the floor . I invite him to take a seat at the Council table and to make his statement . Mr. Al-Kidwa ( Palestine ) ( spoke in Arabic ) : I am sorry to once again take up the Council 's precious time , but I would like to make the following brief points in response to the second intervention by the Israeli representative . First , any attempt by Israel to depict its criminal acts against our people as a reaction to acts of violence by Palestinians is a false attempt . Suffice it for me to refer to the continuation of the occupation for more than 35 years and to the transfer by Israel of 400,000 settlers to that land , in grave violation of the Fourth Geneva Convention and many Security Council resolutions , in order to occupy the land and to prevent the Palestinians from exercising their rights . The occupation , its abhorrent practices and settler colonialism are what led to the violent reaction by our people , not the contrary . Secondly , Israel 's claims that it has mitigated the suffering of our people are ridiculous . I need only refer to the report of the Secretary-General on the humanitarian situation . Thirdly , the claim that Israel , the occupying Power , has not targeted civilians or children is also a lie . When an Israeli warplane drops a one-ton bomb on a residential area of Gaza , that act constitutes a deliberate murder of civilians . Two days ago , when an Israeli helicopter fired a missile at a certain car in a highly populated area in Gaza , resulting in the death of two children , aged 14 and 15 , it was a deliberate murder of civilians . Israel , the occupying Power , has deliberately murdered civilians through the excessive and indiscriminate use of force . Fourthly , the representative of Israel claims that the Palestinian side uses its children as human shields . That is very racist , as well as unacceptable . It reflects a sick mentality . We hope that Israel 's representatives and leaders will overcome such thinking in the future . Finally , we once again hope that the international community will truly stand up against the culture of illegal impunity by confronting the war crimes and all other crimes committed by the leaders of Israel as part of the official State policy of successive Israeli Governments , particularly in the last 28 months . We hope such a stance will be taken because it is the only thing that could lend real credibility to the statements of the international community on this issue . Despite all this , we have not yet lost hope for changing both the situation and the Israeli policy and for reaching a just and comprehensive peace in the region , based on two States , Palestine and Israel , living side by side . The President ( spoke in French ) : I now give the floor to the Special Representative of the Secretary-General for Children and Armed Conflict , Mr. Olara Otunnu , to respond to comments in a brief intervention , given the lateness of the hour . Mr. Otunnu : I have taken very careful note of the extremely important comments and critiques made by members of the Security Council and other Members of the United Nations . I shall be in continuing dialogue with them , and I shall do everything possible to act on the suggestions and proposals which have been made . At this late hour , I do not intend to respond or to elaborate on any specific suggestion or proposal . Thank you very much , Sir , for your interest and engagement and the commitment of the Security Council . The President ( spoke in French ) : I now give the floor to the Deputy Executive Director of the United Nations Children 's Fund , Mr. Kul Gautam , to respond to comments made in a brief statement , given the lateness of the hour . Mr. Gautam : It is late in the day , Sir , as you said , so I will try to be brief . This open debate of the Security Council has been enormously encouraging to us at UNICEF . On behalf of Carol Bellamy , our Executive Director , I would like to thank all Member States that have so generously acknowledged UNICEF 's work in the demobilization and reintegration of children in situations of armed conflict in many countries . We will convey your words of appreciation and encouragement and your sense of solidarity to our field staff , who work day in and day out to try to help children in difficult circumstances . I know it will be a tremendous inspiration to them . I would also like to take this occasion to acknowledge and pay a special tribute to our non-governmental organization partners . There are very few of them left here . But I know that there is a large number of them outside , watching the proceedings of the Council . Their work and collaboration are of tremendous value to the work of the United Nations . We could not be as effective as we are without their passion , support and solidarity . As many delegations highlighted , prevention is better than cure . A major contribution by UNICEF and our partner organizations to ensure that all children are helped to enjoy childhood to their full potential requires investing in basic services and reaching the Millennium Development Goals , which are very important for the development of children . We were particularly happy to hear so many delegations referring to the commitment that our leaders made to “ A world fit for children ” . Indeed , if we can implement some of the goals , targets and objectives of “ A world fit for children ” , we will do well for children in difficult circumstances , in armed conflict and otherwise . Let me mention just two or three specific things that we take to heart . Several delegations reminded us that the illicit traffic in small arms contributes enormously to violence . We share their concerns and hope that there will be a stronger response in that area . We are encouraged by the comments made by many delegations on the need to ensure that the list in the annex to the Secretary-General 's report is developed , strengthened , expanded , reviewed and made more of a practical tool . We hope that these statements will be reflected in the Council 's resolution , when it is adopted in the next few days. Many delegations made specific suggestions and recommendations for the follow-up to the Secretary-General 's report . Austria , speaking on behalf of the Human Security Network , made 10 very specific and concrete proposals . We trust that some of those very specific and pertinent points will be reflected in the draft resolution that the Council is to adopt in the next few days. The Council 's debate today , and the draft resolution that it will soon adopt , will provide powerful encouragement and support for all of us to redouble our efforts to protect children from the barbarity of armed conflict and to help them build , and live in , a more peaceful world — a world that is fit for children . The President ( spoke in French ) : I thank the Deputy Executive Director of the United Nations Children 's Fund for his statement . There are no further speakers inscribed on my list . The Security Council has thus concluded the present stage of its consideration of the item on its agenda . The meeting rose at 7.55 p. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-154A . </text>
<text id="un/S_PV4736">
Agenda Africa 's food crisis as a threat to peace and security Briefing by Mr. James Morris , Executive Director of the World Food Programme The meeting was called to order at 3.20 p. m. Adoption of the agenda The agenda was adopted . Africa 's food crisis as a threat to peace and security Briefing by Mr. James Morris , Executive Director of the World Food Programme The President ( spoke in Spanish ) : In accordance with the understanding reached in the Council 's prior consultations , and in the absence of objection , I shall take it that the Security Council agrees to extend an invitation under rule 39 of its provisional rules of procedure to Mr. James Morris , Executive Director of the World Food Programme . It is so decided . I invite the Executive Director of the World Food Programme , Mr. James Morris , to take a seat at the Council table . On behalf of the Council , I extend a warm welcome to the Executive Director of the World Food Programme . The Security Council will now begin its consideration of the item on its agenda . The Security Council is meeting in accordance with the understanding reached in its prior consultations . At this meeting , the Security Council will hear a briefing by the Executive Director of the World Food Programme , Mr. James Morris . After the briefing , I will give the floor to those members who wish to address questions to Mr. Morris . I now give the floor to Mr. Morris . Mr. Morris : I thank you very much , Sir , for the distinct privilege , pleasure and honour of being with you today on behalf of the World Food Programme . The purpose of my visit is to talk about Africa , probably with a focus on Southern Africa , but , like all members of the Council , the World Food Programme is very focused on issues in Iraq . We have had a presence in Iraq since 1991 and have been a major implementer of the oil for food programme since late 1995. I would be pleased to entertain members ' questions or comments about the work of the World Food Programme in Iraq after I conclude my opening statement . Our work in Iraq focuses on the potential of having to feed 27 million people in that country at a cost of $1.3 billion for a period of six months . It is interesting that my assignment today is to talk about Africa , where nearly 200 million people are malnourished and 50 million are severely at risk , especially women and children . People in Iraq have had a generous Government food supply . I can tell the Council today that most people in Iraq have food in their households for the next month . It is ironic that , if people in parts of Africa had a month 's worth of food in supply in their homes , they would be overwhelmed . In fact , we have a bit of a double standard in the world . How is it that we routinely accept a level of suffering and hopelessness in Africa that we would never accept in any other part of the world ? My view is that we simply cannot let this stand . The causes of Africa 's food crises remain much as I described them in December — a lethal combination of recurring droughts ; difficult , failed economic policies ; hostility and conflict ; and the extraordinary , almost unquantifiable impact of HIV/AIDS . The World Food Programme will have a budget in Africa this year of $1.8 billion . May I tell you that this equals the entire budget of the World Food Programme worldwide in 2002. Worldwide , global food-aid commitments have dropped precipitously over the last 10 years , from 15 million metric tons in 1999 to less than 10 million last year . The Food and Agriculture Organization of the United Nations ( FAO ) would tell us that chronic hunger is actually rising in the developing world outside China and the World Health Organization would tell us that hunger is still the greatest factor in poor health in the world . There is good news . Secretary-General Kofi Annan has placed the issue of African hunger at the top of his agenda . Secondly , France and the United States are working together , within the framework of the G8 , to focus the world on the African food crises . President Chirac will put this issue at the top of the agenda at the G8 meeting in Evian in June and President Bush has announced the creation of a new $200 million fund to prevent famine in Africa . In Southern Africa , and to a lesser degree in the Horn of Africa , the impact of AIDS on the political and economic structure grows daily . In January , I returned to the region along with Stephen Lewis , who is the Secretary-General 's Special Envoy for HIV/AIDS in Africa . We were struck by the impact the disease was having on both governance and the food sector , and on how the two were intertwined . Much of Africa 's political and technical talent is dying or emigrating — a huge depletion of African human resources . More than 7 million African farmers have lost their lives to HIV/AIDS . The peak impact of HIV/AIDS in Africa will not be felt until 2005-2007 . How do you turn around food production in countries that no longer have a viable agricultural extension service ? How do rural children learn to farm when their parents are too sick to teach them ? How do you maintain a basic educational system for children when their teachers are dying faster than new ones can be trained ? In a conversation with the President of Zambia that I will never forget , he said , “ Jim , the most important thing you can do for the people of Zambia is to help us train teachers . Last year we lost 2,000 teachers to death by HIV/AIDS in Zambia , and we were only able to replace half of them ” . The good news is that because of the generosity of many countries and the work of the World Food Programme ( WFP ) , our non-governmental organization partners and other important United Nations agencies , we were able to deliver more than 620,000 tons of food in the region to more than 10 million people , and serious death and starvation were avoided . The issue of genetically modified ( GM ) food has faded and is no longer delaying or disrupting deliveries . Five of the six countries needing aid in Southern Africa are accepting processed and milled GM food . We simply could not have reached the level of food deliveries we have now attained without the constructive problem-solving undertaken as it relates to the GM issue . The WFP remains especially concerned about Zimbabwe , where there have been numerous media reports that food assistance is being politicized . We are confident that this is not the case with our food . In the few instances where we have received credible reports of abuse , we suspended those operations . I have met with President Mugabe six times , and we have offered the services of the United Nations to monitor and verify the food being distributed by the Government there , but we have not yet received a positive response . Inflation , Government monopolization of the food sector and the impact of the land redistribution scheme are likely to mean that the food situation will not stabilize any time soon in Zimbabwe . Our goal is not to politicize but to depoliticize food aid in Zimbabwe . Food should be available to all , based on humanitarian principles , with any other consideration being absolutely inappropriate . That is the case everywhere we work . Hungry people cannot afford to be caught in political crossfire . There are those who would have us pull out in crisis situations to punish Governments and to take a stand on political or human rights issues . But WFP believes that emergency aid simply cannot be politicized , for good or for ill . When people in power , be they Government or rebels , deny food aid to certain vulnerable groups of the population , we will speak out . While we see our role as neutral and much like that of the Red Cross and Red Crescent societies , our member States have also asked us to be advocates for the hungry . That has put us on a tightrope and in a perpetual balancing act . When Governments take economic actions , such as banning private trade or monopolizing food imports , which undermine the food sector and exacerbate hunger , our member States expect us to speak out , and we will . With respect to the situation in Ethiopia , Eritrea and the Sudan — the Horn of Africa — the numbers of people at risk are comparable to those in Southern Africa . In Southern Africa , a little more than 15 million people are at risk , with half of them in Zimbabwe . More than 11 million people are absolutely at risk of hunger in Ethiopia , with another 3 million on the edge : 20 to 25 per cent of the population . In Eritrea , the situation is much more difficult . It is a smaller country with a smaller population , but with 2.2 of the 3.3 million people absolutely at risk . The situation is further complicated by the conflict , with a good many members of the military yet to be resituated to their home towns . Clearly , drought is the major culprit in the Horn of Africa . We have had good response to our needs for Ethiopia but a mediocre response to our work in Eritrea . The interesting thing about Ethiopia is that of all the countries in the world it has the highest per capita emergency support and the lowest per capita development support . I had the good fortune to be there recently , and I visited communities where a few hundred dollars ' worth of food properly used in food-for-work programmes helped communities plan for their future , think about soil and soil erosion and think about the impoundment of water . They planned and prepared , and they will get through this crisis . In the experience , they developed a cadre of community leadership that will serve those communities superbly for a long period of time . Meanwhile , a few miles away , that kind of preparation — investments in prevention and development — was not made , and they are in a catastrophe . There are probably 10,000 communities in Ethiopia that need this kind of help . We are working in 800 right now . Food security has also deteriorated in the western Sahel — Mauritania , Cape Verde , the Gambia , Senegal and Mali — with approximately a million people at risk . We are grateful to many member countries for the investments that they have made in our early warning food response systems . We were not prepared for the problem in Ethiopia of 15 years ago . With the new early response systems , assessment systems and surveillance systems , we are now much better prepared to respond . The issues in Angola , also in Southern Africa , are a bit different , coming out of 30 to 40 years of conflict and armed violence . The good news is that there is peace on the ground . Food is critical to the recovery of the Angolan economy and to maintaining the peace . It was our initial intent to feed about a million people in Angola . Today , we are feeding 1.8 million people . By June , the number will be 2.2 million people . Angola is a wealthy country that needs , over time , to develop a substantial agricultural system . With respect to the issue of refugees and internally displaced people , the World Food Programme cooperates with the Office of the United Nations High Commissioner for Refugees . It is our responsibility to provide the food . Today , in Africa , we are feeding 1.8 million refugees and 5.7 million internally displaced people . It is hugely expensive . The turmoil that this can cause if it is not done properly will have enormous effects on the countries where we work . This is a particularly difficult issue in western coastal Africa . Members have all followed the issues in Côte d'Ivoire and Liberia , where there are between 4 million and 5 million refugees — people moving about . The conflict is producing enormous chaos in the region . There are things that we need to do and things that we can do . The Office of the United Nations High Commissioner for Refugees ( UNHCR ) and WFP have warned that the fate of more than 1.2 million refugees in Africa is uncertain due to the lack of funding for much needed food aid . There are places where we have had to cut rations in half or by 25 per cent . Major interruptions in the food pipeline are feared in Tanzania , Uganda , Kenya , Liberia , Sierra Leone , Algeria and the Sudan : the major nations in Africa that host refugees . A few weeks ago here at the United Nations , we had a very positive session with the Group of Eight , which the Secretary-General kicked off , in which we talked about what the world needs to do to get the issues in Africa on a firmer foundation . We talked about the fact that Africans themselves will ultimately have to provide the leadership . They will be responsible for their own domestic policies . Global trade issues will have to be resolved in such a way that they do not become such a huge disincentive for agricultural production and export in places in Africa . The specific points that we left with the group on that occasion are as follows . First , we need a far stronger donor commitment to emergency food aid based on better targeting and more sophisticated early-warning systems . The World Food Programme is funded entirely with voluntary contributions from countries . We receive no core funding from the United Nations . We are the largest humanitarian agency in the world , and our annual budget is larger than the United Nations budget for its New York City operation . We receive 90 per cent of our support from nine countries plus the European Community . There are two dozen more countries that now have the capability to help us , and there are many countries that now have agricultural surpluses that can help us by providing commodity but that do not have the cash to pay for transportation . We have looked for ways to twin countries that have cash with countries that have commodities , and we will see how we can make that work . The leverage is enormous . India has committed a million metric tons of wheat for Afghanistan in part for us to produce high-energy biscuits for a million school children in Afghanistan . We need help from countries that can help with the transportation of the wheat biscuits that are produced in India . We have had good support for the first time ever from the Russian Federation . We are working hard to bring new partners into our programme . Secondly , there is a need for a substantial increase in support for investment in basic agricultural infrastructure , both micro and macro , especially irrigation infrastructure , but also roads and markets . There is a need to make agricultural work easier on women . Women do 80 per cent of the agricultural work in Africa . Women now are 58 per cent of those infected with HIV/AIDS in Africa . They are expected to produce the food and to serve the food . They are expected to give care to so many people who are critically ill in their homes or regions . The world needs to focus on making agricultural production easier for women in Africa . I had a good visit with the Minister of Agriculture of Malawi . He said , “ Jim , the most important thing the world could do for us would be to invest about $77 million in an irrigation system that would serve Malawi countrywide . ” Malawi is a country with huge lakes and huge water resources , and a properly constructed irrigation system would address its agricultural issues in a very substantial way . The Secretary-General 's call for a green revolution in Africa is one of the most important statements to be made recently . Thirdly , we propose funding of a $300 million African food emergency fund that would be an immediate response account that can be used at the very outset of a food crisis . Our emergency response account now has $35 million , and our experience suggests that those dollars that are available to invest immediately when there is a crisis on the horizon are those that allow families to keep their farms together and to not sell their coping mechanisms ; a little help at the beginning is worth a lot of help later on in the process . I should also say that in the crisis in Southern Africa , we were very successful in raising cash and commodities to meet the food requirements . We were not very successful in raising the resources for non-food items . Water and sanitation , health , medicine , vaccination and educational issues are every bit as important as food , and somehow the donor community — and as head of WFP I am grateful for this — finds it easier to focus on food and more difficult to focus on other issues . Investments made in farm implements , seed and fertilizer have enormous leverage and help to put people back on their feet . I would encourage members to take a look at those kinds of issues . I mentioned the issue of non-traditional donors . Finally , let me say that the piece of our work that I consider to be maybe the most important is our work with school feeding . There are 300 million hungry children in the world . If we take the Millennium Development Goal of cutting hunger and poverty in half by 2015 seriously — there are 800 million hungry people in the world , nearly 40 per cent of them children ; half of the children do not go to school , and most of those are girls — the single most important investment we can make is in educating children . Educated children become better citizens , better teachers , better parents and better farmers . Whatever one chooses to do with one 's life , a person 's education directly affects the quality of life and the quality of the community . We know how to feed a child in school for about $35 per year . For less than $1 per year , we can have extraordinary health interventions led by the World Health Organization ( WHO ) that reduce worms and all sorts of other serious health issues . We fed 16 million children last year ; we need to feed 100 million worldwide and we need to feed another 50 million in Africa . This will be the single best investment , with great leverage , that we can make worldwide in beginning to turn the future of Africa around . I am more grateful than I could ever express to the many countries that have helped us . Last week I had the most remarkable phone call from Canada . Canada committed $75 million over the next three years to feed school children . I just had a terrific visit in Switzerland , and Switzerland committed to feed an additional 10,000 school children . We are working hard to engage the private sector with our work . A magnificent Dutch company — TPG — with 150,000 employees committed each one of its employees to feed a school child . If we are thoughtful and resourceful about this and cover a wide range of territory , we will have the opportunity to change the world by feeding school children . I want to underline the critical importance of peacekeeping and diplomacy . War and conflict , in Africa as elsewhere , quickly lead to hunger . People who are hungry and without food have risky behaviours and tend to be more aggressive . War and conflict cut productivity , increase HIV/AIDS , increase populations of refugees and internally displaced persons and dramatically affect children . War changes the focus of the way countries do their business . There is no doubt that in much of Africa hunger and poverty are fuelling conflict and robbing Africans of the bright future they deserve . Their suffering cannot be any less to us than the suffering we see elsewhere in the world today . We all must do more to help . The President ( spoke in Spanish ) : I thank the Executive Director of the World Food Programme for his timely and very relevant briefing on a problem that directly affects a very large population . I wish to remind the members of the Council that we have a very long list of subjects to address this afternoon and that we would like to take full advantage of Mr. Morris ' presence . Therefore , I request members of the Council to limit questions and comments to strictly necessary ones so that this can be an interactive information meeting , rather than a meeting of statements . Mr. Cunningham ( United States of America ) : My thanks go to Mr. Morris . That was really a superb presentation on this very , very difficult situation . I want to thank him also for his hard work and his organization 's hard work in trying to deal with it . Unfortunately , Mr. Morris has outlined the elements of an emergency that force us to deal with the short term and with chronic cases . In his comments he pointed to many of the other elements that make this even more intractable : man-made complications , the politicization of food , the effects of war . We join Mr. Morris in opposing food being used as a weapon , and we are particularly alarmed at the impact of HIV/AIDS , for many of the reasons he described . What I wanted to ask Mr. Morris is , given all this , what has been his most recent message to donors on the crisis ? What have the responses been and what does he assess to be the unmet needs still before us in 2003 ? Mr. Belinga-Eboutou ( Cameroon ) ( spoke in French ) : I would like to say how very pleased we are to have Mr. James Morris , Executive Director of the World Food Programme ( WFP ) , here with us . He has spoken to us about an extremely difficult and relevant issue : the food crisis in Africa , which poses a threat to international peace and security . We have heard to some extent a repetition of what we were told last December regarding the major obstacles to the activities of the WFP : weather conditions , health/sanitation conditions , HIV/AIDS and those that could also be considered as man-made , such as civil disorder , conflict and problems of governance . The question I would like to ask Mr. Morris — in response to your appeal , Mr. President , to get straight to the heart of the matter — is the following . The mandate of the WFP was expanded in 1999 to make the Programme an instrument for development . In fact , WFP was called on to use food assistance , essentially and as a priority , to support economic and social development actions . This was the primary objective . The other objectives relate to so-called emergency situations where there is a need to cope with the immediate needs of refugees and of populations that have fallen victim to humanitarian crises . At present , the emergency functions and objectives seem to be , in fact , highly pivotal to what the WFP is doing . What about the essential function aimed at preventing emergency situations , namely , the use of food assistance to support development actions ? That is my question to the Executive Director ; it refers to WFP 's new mandate . We pay tribute to WFP 's work , which is so beneficial in emergency situations , including today in Iraq . But that does not prevent us from going back to the crux of the mandate , which is to support development action to prevent emergency situations . Mr. Valdés ( Chile ) ( spoke in Spanish ) : I thank Mr. Morris for his briefing and for the valuable information he has given to the Council today . As previous speakers have mentioned , one can only be powerfully struck by the dimensions of the task , by the severity of the crisis and by the difficulties faced by the World Food Programme ( WFP ) in trying to cope with situations , such as that of Ethiopia and Eritrea , whose urgency Mr. Morris has described . Like Ambassador Cunningham , we wonder how the WFP can today face an emergency affecting 11 million inhabitants without being certain — or at least , we are not certain — about what the actual donations expected from member countries would be ? So my first question would be along the same lines as that raised by Ambassador Cunningham : given a situation such as Ethiopia and Eritrea , what assistance can we expect to receive in order to tackle the magnitude of the crisis ? Secondly , it is clear that when it is said that chronic hunger is growing in the developing world and that hunger in the world is still the main reason for medical emergencies or shortcomings , we are dealing with questions concerning the system . As the representative of Cameroon said , we are facing problems which have to do with development policies and how we address them . The United Nations has a toolbox for this . For decades , we have developed bodies within the United Nations whose function it is to assess the situation in developing countries and to try to provide , particularly through the Economic and Social Council , responses that relate to how the international system can tackle these questions . I would like to ask Mr. Morris if he has any further thoughts about this . Lastly , while entirely aware of the seriousness of the situation in Africa , Mr. Morris explained at the beginning of his speech the tasks that the WFP is undertaking in Iraq . I would like to raise the possibility that we hold another meeting in which Mr. Morris could directly address that issue . Mr. Schumacher ( Germany ) : I thank Mr. Morris very much for a superb presentation and , in particular , for his continuous efforts to brief the Council . I would like to challenge somewhat one of the initial observations that he made in saying that we routinely accept a situation in Africa that we would not otherwise accept in other parts of the world . Are we really routinely accepting such a situation in Africa ? Is it not more something like , may I say , donor fatigue ? I recall correctly that some 10 years ago , there was another serious food crisis in Southern Africa , and the international community responded very efficiently to the call of the WFP and others to cope with that crisis . Now , we are again faced with the same situation . Mr. Morris mentioned that there are two intertwined problems — the scourge of HIV/AIDS and the food crisis — and he and others have vaguely referred to man-made problems . Are there not three intertwined elements that create the deadly brew that makes it almost impossible to cope with these sorts of problems worldwide ? Is not the combination of bad governance , HIV/AIDS and the food crisis the problem that we are facing today ? In that context , my question is the following . Would Mr. Morris agree that , without a sound approach to the establishment of good governance worldwide , any isolated effort to come to grips with HIV/AIDS or the food crisis would remain a piecemeal approach ? I should like to recall that good governance is an important element and an important objective in the Millennium Declaration , which was adopted by our heads of State three years ago . Unfortunately , it does not fall under the heading of “ Millennium Development Goals ” . I very much hope that , when Millennium Development Goals are mentioned in future discussions of this issue as a justified appeal to donors to help us cope with these problems , this third element of good governance also becomes an important objective . Mr. Akram ( Pakistan ) : My delegation would like to join others in expressing our appreciation to Mr. James Morris for his excellent and comprehensive briefing . We are aware of the outstanding work that the World Food Programme has performed in so many crises — including in a neighbouring country , Afghanistan — and we have a very high regard for that organization . In the context of the presentation that we heard this afternoon , the central issue for us to explore is the specific link between the food crisis in Africa and the threat to peace and security . I would be very interested to know whether Mr. Morris has any thoughts about exactly how that relationship exists — whether it exists in a negative way and possibly could be established in a positive way . Mr. Morris has said that our goal is not to politicize food aid but to depoliticize it — in Zimbabwe , for example — and that food should be available to all on the basis of humanitarian principles . I think that is absolutely correct as far as it goes . But , for example , could we use the provision of food assistance — food security — as an incentive for conflict resolution in some of the crises faced in Africa and perhaps elsewhere ? Without politicizing and without depriving people of humanitarian needs , could the provision not only of food aid but also of agricultural assistance , development and technical support be utilized as elements of conflict resolution in Africa and elsewhere ? Secondly , I should like to pose perhaps a more immediate question to Mr. Morris . There is a looming drought and a conflict between Ethiopia and Eritrea in the Horn of Africa . How does he think the drought has exacerbated the conflict or has acted to the contrary ? I believe that the food aid received by Ethiopia is perhaps more generous than that received by Eritrea . Are there any reasons for that , and , if so , are they related to the conflict that is under way ? Those are some thoughts that arise from the briefing . Finally , I should like to say that I support the proposal of my colleague Ambassador Valdés that the Security Council receive a similar briefing with regard to the situation in Iraq . The President ( spoke in Spanish ) : I should now like to give Mr. Morris the opportunity to respond to the questions raised . That will allow Council members who wish to pose questions that Mr. Morris has already answered to skip those questions and focus on the responses that he will now give us . I call on Mr. Morris . Mr. Morris : In response to the question from the representative of the United States — and I thank the United States ; it should be said that in 2001 the United States provided more than 60 per cent of the humanitarian assistance for the World Food Programme — the most recent message that we have been trying to convey as it relates to Southern Africa — and , by the way , I agree completely with the representative of Germany 's comment about leadership and governance ; they are pivotal and basic to everything — we are overwhelmed with the issue of children . There are 11 million AIDS orphans in sub-Saharan Africa . Zimbabwe has 780,000 orphans ; Malawi and Zambia have somewhere between 400,000 and 500,000 orphans . Half the families are headed by someone older than 65 , and it is not uncommon to see a family of five children headed by a little girl 14 years of age who is the same size as my 7-year-old granddaughter . The world 's responsibility for these children is enormous in terms of their education , their food and their health . That has also had the most devastating impact on the human resource structure of Governments and institutions . I mentioned the loss of teachers and the depletion and loss of human resources . We are at a point where we are talking about replenishing systems . Essentially , the medical personnel in Southern Africa — the doctors , nurses and pharmacists — are gone . The talent that will be necessary to address these issues is enormous . So we must focus on children and on human resource talent . The HIV/AIDS issue is enormous . More than half a million people died in those six countries last year as a result of HIV/AIDS ; 30 million people are infected in Africa , up 3.5 per cent from last year ; and 34 per cent of the adult population in Zimbabwe is affected by HIV/AIDS , with comparable numbers elsewhere in that part of the world . We have been focusing on the importance of agricultural investment both in a micro sense and in a macro sense , and on the importance of broadening the donor base . Everyone in the world has the primary responsibility to look after his or her own , but we all have some responsibility for those elsewhere who are worse off than we are . We are working very hard at growing our donor base . We will need 3.8 million metric tons of food to do our work in Africa this year ; we will need $1.8 billion , plus the $300 million that we carried over from last year . Eight of our 10 top donors increased their support for the World Food Programme dramatically last year . We need to keep that support growing . We need new donors , and we need help from the private sector . With regard to the question from Cameroon — we have a regional office in Yaoundé ; Cameroon has been a great friend — 10 years ago , 80 per cent of our support was for development . Today , 80 per cent of our support is for emergency relief . I do not know what has happened in the world — I am not a scientist . But , working with the Food and Agriculture Organization of the United Nations , we are conducting three times as many natural disaster assessments today as we did in 1965 , and twice as many as in 1990. There has been a change . There are presumably limited resources , and the resources have gone to keep people alive and to reduce human suffering in an emergency context . In emergencies we try as much as possible to ensure that our work has long-term development implications . If we feed a child and encourage that child to go to school , that is development . If we feed a child and enhance the nutritional content of the food with iodine , vitamin A or iron , that is development in a human resource for that country for a long period of time . Some of our most important investments are in food-for-work programmes , whereby we make resources available to feed people if they participate in the rebuilding of a community 's infrastructure . In that way the community wins and the family wins . We are very troubled by the fact that today only 20 per cent of our resources are aimed at long-term development — at prevention . That is a huge problem in a place like Ethiopia ; it is a huge problem around the world . Our colleague from Chile asked a question about assistance required for Ethiopia and Eritrea . It has been our plan to feed about 40 per cent of the hungry people in Ethiopia , with the rest being handled by the Government , by non-governmental organizations or bilaterally . We have been raising something in the neighbourhood of $205 million there . We are doing a good job — we have raised about 70 per cent of what we need . The issue in Eritrea is much more difficult . We looked to raise more than $100 million , but the response has been less than 20 per cent . We work very well with the Government of Ethiopia . With regard to the question raised by the representative of Pakistan about the conflict , my sense is that there are 900,000 soldiers still in the Eritrean army who are being repatriated . Not having that manpower available for agricultural work has been a huge factor in the problem in Eritrea . So I think that the conflict has exacerbated the problem — there is no question about that . Investments in early warning systems , in assessment systems and in surveillance systems for agriculture and health are incredibly important . That gets to the issue of knowing what is likely to happen as soon as possible and being prepared for it . We need to make more investments in doing that better . The technology is there . In analysing what the problems are , historically we have looked only at food issues . But as we do our assessments today and analyse the severity of a problem , we need to look at other issues , too . I agree completely with my colleague from Germany . The issue of governance and leadership is a prime responsibility . Some countries , such as Zimbabwe , are having very difficult problems right now . I am a little more optimistic about the agricultural situation of Malawi and Zambia this year — likewise Mozambique , Lesotho and Swaziland . But the number of people at risk in Zimbabwe has increased , and agricultural production has not increased . Foreign exchange , which would allow for imports , is not available . The private sector does not function there . The donor community does function there . Those are issues that will require enormous leadership if the situation is to be turned around . The question from Pakistan about tying peace and security to food issues was absolutely on target . There is no question in my mind that hungry people behave differently from people who are not hungry . When people are fed and begin to learn they have hope and opportunity in their lives , and lives with hope , opportunity and a future are less likely to be violent . Clearly , we have talked about the issue of refugees and internally displaced persons . We have used food to some degree in conflict resolution in Angola and Sierra Leone . We have offered food as an incentive for people to lay down their weapons , and that has worked pretty well . Beyond that , this is an issue that I think we would be interested in thinking a little more about . We try to stay focused on the humanitarian agenda — the world does not want people to starve . We are especially concerned about the very vulnerable people at risk , including women and children . We try to absent ourselves from all of the other political debates going on . But the representative of Pakistan raised a question worth considering . The President ( spoke in Spanish ) : I thank Mr. Morris for his answers . Mr. Tafrov ( Bulgaria ) ( spoke in French ) : I would like briefly to make two comments and to ask Mr. Morris a question . First , I would like to thank him for his eloquent statement , which I believe will prompt us to reflect further on what actions the Security Council can take . That leads me to my second comment . I would like to thank you in particular , Mr. President , for having included today 's meeting on our programme . We now realize that the food situation in Southern Africa and elsewhere in the continent has direct implications for the security of Africa , while security — or , rather , insecurity — has negative implications for the food situation . From that perspective , I believe that it is extremely important for the Council in future to have the knowledge and the capacity necessary to enable it to integrate information and other factors relating to food security into its approach to conflict in Africa . In that regard , I wholeheartedly support the proposal of Ambassador Valdés . I believe that the Council should go even further ; we should not be timid or worry about going beyond our area of competence . My question to Mr. Morris relates to Somalia . He referred to the Horn of Africa . The question of Somalia is on the Council 's agenda ; that country is experiencing severe problems . What is the situation regarding food security in that country in the Horn of Africa ? What is the attitude of the donor countries and of donors in general towards Somalia ? Sir Jeremy Greenstock ( United Kingdom ) : I share colleagues ' feelings on the importance of this briefing this afternoon and on the terrific role which the World Food Programme ( WFP ) is playing . I would like the Council 's praise for that to go to the whole team led by Mr. Morris . It is a huge team effort — one of the most impressive United Nations agency performances of all . I want to home back in on why we are here in the Security Council , listening to this briefing . I want to put the question to Mr. Morris as to what he expects from the Security Council on this . He is saying that , increasingly , WFP is looking at symptoms , not causes , and dealing with the outflow of misery from hunger and other related problems . That means , as he says , that the Programme is looking at more than food issues and increasingly less able — I take this as implicit in what he is saying — to deal with the causes of what is happening . And yet , the causes are , as I gather from his report , as much structural as they are emergency , or due to bad luck or bad climate . Therefore , the United Nations system should be doing something about those structural causes , as well as addressing the misery that comes out of the lack of food and health worldwide . Yes , it is production policy and the arrangements for food production ; yes , it is always never enough donor activity ; yes , we could do with twice as much money and twice as many agencies doing it all ; but it also has to do with the interplay with health problems , particularly HIV/AIDS ; with peace and security on the ground ; with governance ; and with long-term problems and short-term problems . We can go on analysing , and Mr. Morris 's oral and written statements do that ; but in the written version , the seven proposals , as well as the six he mentioned orally at the end of his presentation , are not really the responsibility of the Security Council , as such . They are a responsibility of the United Nations family , the donor countries and the Governments on the ground . Yet , Mr. Morris ended by saying how critically important the peacekeeping and diplomatic aspects are . I would like him , perhaps , to give examples of what the Security Council could actually do . There are three things in my mind . One is , of course , conflict resolution . He has pointed to Angola and Sierra Leone as having got better ; Ethiopia/Eritrea as not yet better enough ; and perhaps Côte d'Ivoire and other places getting worse . Liberia is still a problem and other parts where there are rebellions and wars are still difficult . Secondly , there is the problem of politicization and of governance . Perhaps that , too , is an area where the Security Council can play a role . The third area — one we have not really talked about yet , but one we ought to discuss among ourselves and with our sister organizations — is coordination . If , behind this picture of starvation and misery , there is not just climate , agricultural policy and what is happening on the ground in the agricultural area , but also health and governance and wars and all sorts of other things , should not the interplay between WFP and the Security Council be looking at the coordination of the response ? It is not all our business to get into these areas , but it is our business to do part of it and therefore to work with others in doing all of it . Does he not see a crying need for better coordination within the international and the United Nations systems , much of which may come back to the governance problem ? Mr. Morris mentioned Zimbabwe because it is the one area of Southern Africa which is getting so much worse than the others . He did not say “ unnecessarily ” , but he did not point to a climatic or a coincidental reason . There are things there that , from a human perspective , could go better ; ditto in some other parts of Africa , where the right policies could make this immediately better . To what extent does Mr. Morris believe that the Security Council is making a difference ? Since he only has a few further minutes left with us today , what would he like us specifically to do , until he comes back to talk to us about it again , to make what he sees , from the WFP viewpoint , start improving , rather than continue to go worse ? Ms. Menéndez ( Spain ) ( spoke in Spanish ) : I should like to thank you first of all , Sir , for having organized this interesting meeting , which we deem to be very important . I should also like to thank Mr. Morris for his very interesting briefing , which was concise but very instructive . Mr. Morris gave us information that was very graphic and stark . We see the reality of the problem very clearly . We have two questions . The first is perhaps connected to what Ambassador Greenstock just said , but we wish to ask more specifically : Have we effectively learned the lessons from success stories and from less successful stories of the past , in cases where famine in Africa has been averted and where it has not ? Can the World Food Programme ( WFP ) tell us what the Security Council has done , if anything , in those cases , and what such action might entail in the future ? My second question concerns a concept that Mr. Morris included in his briefing and which he spoke about in passing in his first series of answers to our questions . This is the concept of replenishment . He said that it is currently very difficult to have a capacity-building policy when , for example , parents have died or are ill and cannot pass their knowledge in the agricultural sphere on to their children . Has WFP , singly or in cooperation with other agencies , considered the idea of capacity-replenishment , which Mr. Morris , I believe , mentioned earlier ? Mr. Duclos ( France ) ( spoke in French ) : Allow me in turn to convey our gratitude to Mr. Morris for his extremely interesting statement , which I believe both contained highly significant data and figures and communicated a sense of the human experience . We , too , attach the greatest of importance to the question of the food crisis in Africa . As Mr. Morris said , we hope to take advantage of our leadership of the G8 in order to place this issue at the top of its agenda . With respect to Mr. Morris 's briefing , I think we were all struck by the magnitude of the crisis and by everything he had to say regarding the interaction of various factors that contribute to and further exacerbate the crisis . Many questions raised by my colleagues here addressed in one form or another the factors contributing to the food crisis . I was struck by the fact that Mr. Morris spoke a great deal of Southern Africa . Southern Africa is perhaps the region that combines the most worrisome factors of the current food situation in Africa . Perhaps that is because it is a region that is not prepared — or is less prepared than others — for large-scale famines and because it is there that the phenomenon of the ravages of AIDS is most glaring , to the extent that perhaps it is the region that most urgently causes us to ask whether the current number of deaths will compromise life in the future and the capacity of those societies to recover for the future . Mr. Morris said that he wanted to concentrate on the humanitarian aspect of the question of food . Therefore we should not ask him too much about the overall strategy or related issues . However , all the questions we have asked naturally touch somewhat on the issue of whether , in these particularly terrible situations , it is necessary to reconsider the international community 's overall strategy with respect to those societies ? It is a question that cannot be resolved with a few minutes ' discussion . However , in that context , I would like to ask a more specific question : on the basis of his experience , does Mr. Morris consider , for example , in Southern Africa — which it seemed to me was the most striking and illustrative case — is all the necessary coordination among the principal actors of the international community actually in place , or is there a need further to unite our energies to deal with this problem from the various angles he himself has mentioned ? I thank Mr. Morris for his attention . I might add that I , too , would be interested in a later briefing by Mr. Morris on Iraq . But I , too , would like him to give us some preliminary information this afternoon , as he proposed earlier . Mr. Boubacar Diallo ( Guinea ) ( spoke in French ) : I would like to join preceding speakers in expressing my delegation 's full appreciation to Mr. James Morris for his very rich and instructive briefing on the food crisis in Africa . The last time Mr. Morris spoke to the Council on this issue was on 3 December 2002. The briefing that he has just given leads to the general impression that the picture is far from rosy . Rather , it is the opposite . The food situation in Africa is becoming increasingly alarming due , as he said , to several causes that vary from one area to another and from one country to another . My question relates to the approach that must be adopted to solve the food crisis in Africa . Is there coordination among the various actors involved in the fight for food security in Africa ? If there is , how does it function ? If there is not , could a viable mechanism be put in place to make this fight more effective ? Mr. Mekdad ( Syrian Arab Republic ) ( spoke in Arabic ) : I would like to join preceding speakers in welcoming Mr. Morris and to express my satisfaction at his very informative briefing . This is one of the most urgent and important of issues and is one to which the Security Council has not devoted enough time . As Ambassador Greenstock mentioned , there are certain limits to the responsibilities of the Security Council . This issue relates to the responsibility of States and , as Ambassador Schumacher of Germany said , to good governance . However , despite those limitations , I think that this issue is very important . It deserves further consideration so that we can clarify the role that the Council could play in resolving this important problem . At the start of his presentation , Mr. Morris mentioned the timely issue of Iraq . We are closely watching the role played by the World Food Programme ( WFP ) within the framework of the oil-for-food programme . I think that it has played a very constructive role . I believe Mr. Morris will agree with me when I say that the situation has changed since the war in Iraq began . We believe that there is a new role for the WFP and humanitarian agencies to play , which would be separate from the role of the oil-for-food programme . That is because the oil-for-food programme was limited to meeting the needs of the Iraqi people during a specific period of time and in a very specific situation . But now , everything has changed . There is a war . That war must be governed by the Geneva Conventions , in particular the Fourth Geneva Convention . We believe that we should not use the Iraqi people 's own funds to assist them . We should not take money from their pockets in order to feed them . International funds have to be used . Does the WFP now have the necessary funds to meet the new needs created by the war ? Mr. Gaspar Martins ( Angola ) : I too would like to thank Mr. Morris for coming here . It is not an accident that he is coming to the Security Council . One might ask why . Mr. Morris deals with food ; the Security Council deals with peace and security . Yet , it is important that he has come here . I think the link was established also by what Ambassador Greenstock touched on . I think that at one point in Mr. Morris 's presentation , he said that what Africa needs is a green revolution , meaning the opposite of the type of revolutions that we have been seeing , which are , perhaps , red revolutions — we see a lot of blood . We need to change that . Very often , the inadequacy of food supplies , famine and the drastic situations that exist in quite a number of places create conditions conducive to disturbances . Let me raise a question . I too have noted a point that Mr. Morris mentioned : 80 per cent of the resources of the World Food Programme are devoted to emergency situations — in other words , food distribution . Only 20 per cent is devoted to development , meaning food production or addressing other conditions . Something that was mentioned was the question of perhaps investing in more early warning systems , which are needed to prevent some of the food crisis situations . My question is , how is this trend changing ? How is Mr. Morris 's thinking evolving towards a situation where we are looking more at food production and investing more in resources for development to create the conditions for food production , rather than at dealing with emergencies . Granted , there are situations that are emergencies . But in some of these situations — some of them have been mentioned , and one of them is in my country — we will go from crisis situations to post-conflict situations , and the 80 per cent that we are talking about will probably be reduced . In what direction are we moving ? In other words , are we moving in the direction of investing more in development and less elsewhere , in order to do what Mr. Morris mentioned in terms of the green revolution he spoke of ? Mr. Zhang Yishan ( China ) ( spoke in Chinese ) : I listened very attentively to the detailed and informative briefing of Mr. Morris . It has been very helpful in providing us with a better understanding of the food situation in Africa . However , it must be acknowledged that the picture he presented to us , in which 40 million people lack food and face malnutrition , is very grave . Without the strenuous efforts of Mr. Morris and his colleagues , the situation today would be ever more grim and terrifying . We have a saying in China : if you give a fish to a person , he or she can merely eat it as a meal . But if you teach a person to fish , then he or she will benefit from that for life and will live in comfort . Therefore , it is obvious that , in addition to providing aid , a better approach to eliminating poverty and the lack of food is to teach people to fish . I seek clarification about whether or not the WFP works with other international organizations to increase capacity for self-reliance , so that emergency aid can produce better results . The President ( spoke in Spanish ) : I wish to make a comment and to ask a question in my capacity as the representative of Mexico . As Mr. Morris has starkly shown , the food situation in Southern Africa and in other parts of Africa clearly leaves us perplexed in the light of a commitment that the international community still has not managed to fully meet . But food security , which is a moral imperative and a colossal challenge , is also an issue that must be resolved through profound changes in the region . It is clear that human beings have an inalienable right to a healthy and balanced diet . To that end , an immediate challenge is to increase sustainable food production and , on that basis , make the benefits of that production available to the most vulnerable sectors . In Africa , that must be achieved in a particularly adverse environment , where there is soil degradation , desertification and , as Mr. Morris said , recurring natural catastrophes , infections , violent conflicts , civil disturbances — the legacy and effects of which are passed from one generation to the next and are evident in matters as simple as the existence of explosives and landmines in agricultural fields — climate change and , no less important , the HIV/AIDS epidemic and other diseases such as malaria and tuberculosis , which also undermine societies ' ability to produce . In these circumstances , and given the cited combination of internal and external factors , the international community has a commitment . Mr. Morris pointed out that $1.8 billion is needed , which seems an extraordinary figure but which is not , if we compare it to today 's worldwide military expenditures , which are vastly greater than that figure . Given all that , I would like to simply underscore Ambassador Greenstock 's question . From that point of view and taking all the factors into account , what would Mr. Morris say could be done right now by the Security Council , beyond what has already been established as an immediate task , in terms of donors and in terms of the attention that the Security Council should give this item ? What does Mr. Morris think the Security Council should do together with other United Nations bodies to tackle a crisis of the magnitude and dimensions that he has described to us ? I now resume my functions as President of the Council . I call on Mr. Morris . Mr. Morris : May I say that both rounds of questions have raised profound issues , and that it means a lot to the World Food Programme and our colleagues that Council members have all been so thoughtful about the work we are a part of . Clearly , I am unable to give Council members the answers they deserve this afternoon . As we did last time , we will respond in considerable detail in writing to all the questions ; our responses will be available to everyone . The representative of Bulgaria asked a question about Somalia . The situation in Somalia is very troubled . It is a very , very difficult place to work in , and it is a difficult place to assess the magnitude of the difficulty , given the conflict . We have been there for a long time . It is one of the places where we operate the United Nations humanitarian air service . Our programme this year is to feed nearly 3 million people in the country . We have had good success in the past raising nearly 75 per cent of the resources that we need to do our work there . It has been encouraging , in that it is one of the places where we have a very broad base of support . Nearly 20 countries help us in Somalia . There was a question from the United Kingdom . May I first express our appreciation to one of Sir Jeremy 's colleagues , Anthony Beattie , who is our Executive Board President this year . He has extraordinary competence and effectiveness and is very bright . The question was about structural issues . Clearly , there are structural issues at every level . There are structural issues that affect the family farmer , that affect the marketing operation and that affect the system in which agriculture can survive and thrive . The representative of the United Kingdom raised the question about what the Security Council can do . It is much the same question as the President raised . First of all , I think what the Council can do is to help put the humanitarian issues — food is one of them , and there are many — at the centre of the world 's agenda . Humanitarian issues are security issues . If people are treated in a humane way and have the basic ingredients that lead to a life of hope , opportunity , fulfilment , the realization of potential and civil behaviour , I believe security issues will be mitigated or moderated . So what we are about has an enormous impact on families , on children and on other individuals , saving lives and propping up lives in such a way that people can begin to be productive citizens . In terms of reducing conflict , what we do is very important . We need to think more about that . I am grateful that Council members are thinking about it ; as they communicate with their capitals , this becomes part of the dialogue . Usually , we relate to the Ministry of Agriculture . That is very important . When we relate to the Ministry of Foreign Affairs and the Ministry of Finance , we are more successful in having a stronger country partner . On the issue of the politicization of food aid , I think , strong statements on that subject from the most important political body in the world , which this Security Council is , are very powerful and very important . People have to take what Council members say seriously . It is important to make the statement that it is the basic entitlement of a person to be fed if he or she is down and out — without a personal political agenda . There is no more important place in the world for that statement to be made than right here . Food , health and education are at the base of security and at the base of a good life for individuals . We will talk more about this , and we will give members the best answer of which we are capable . It will be a good exercise for my colleagues . The representative of Spain asked a question about lessons learned . We have learned that we do indeed know how to distribute food . A couple of years ago in Ethiopia , before I was there , we did a terrific job in getting food distributed so that people did not die . We knew how to do that . We are learning how to use food as a tool for prevention and investment and development . We know how to do that . We know how important small neighbourhood groups are to getting the job done and how important remarkable community leaders are . We have also learned how difficult it is to make the case for non-food aid items . We have learned that comparable dollars invested in seed , fertilizer and farm implements in the long run have more of a pay-off than comparable dollars invested directly in food . For the life of me , I cannot see why it is so much more difficult to make that case . It is beyond me . But we do know that . We have learned the value of early warning systems and of being well-informed . We know that the investments we make at the very beginning of a crisis — and the sooner we get there the better — are more powerful and have more leverage than what we do later on down the trail . We have a good paper on lessons learned , and we will share it with Council members . A question was also asked about capacity-building policy . I suspect we have not seen ourselves as capacity-builders . In Afghanistan , we did provide food to pay the compensation of 150,000 schoolteachers . They had nothing else with which to pay them in Afghanistan . We have also used food to pay for rebuilding the bureaucracy in Afghanistan . There are other examples where we have done things like that , but we generally look to the United Nations Development Programme ( UNDP ) to provide leadership in that sphere . Here I must mention the issue of coordination and how we all work together . Rebuilding the capacity of education , agriculture and health in that part of the world is so critically important that we are all going to have to be a part of it . The representative of France asked a question about coordination . I am not going to try to answer the question generally , but may I tell you that in Southern Africa the level of cooperation has been extraordinary . All of the United Nations agencies , plus the Southern African Development Community ( SADC ) , the regional organization in Southern Africa , plus the International Committee for the Red Cross ( ICRC ) and non-governmental organizations , have come together into something called the United Nations Regional Inter-Agency Coordination Support Office ( RIACSO ) . This is the regional coordinating arm of the United Nations Children 's Fund ( UNICEF ) , the World Health Organization ( WHO ) , the Joint United Nations Programme on HIV/AIDS ( UNAIDS ) , UNDP , the United Nations Population Fund ( UNFPA ) , WFP , the Food and Agriculture Organization of the United Nations ( FAO ) ; there are about 100 people working together to coordinate and cooperate on a regional basis . The response to the initiative in the six countries is that it works superbly well . The Southern Africa crisis will be a food crisis for a few more months . I am hopeful that we will work our way out of the agricultural predicament . Going forward , there will be an enormous crisis in Southern Africa related to governance and related to HIV/AIDS . What form the lessons learned from RIACSO will take and how our work is re-formulated going forward are very important questions . Maybe , in part , this answers the question of the representative of Guinea . The representative of the Syrian Arab Republic raised a question as it relates to Iraq , and a new role for WFP . May I express our gratitude to Syria and to the Islamic Republic of Iran . Both countries have made their own food reserves available to WFP to use in Iraq , where we can borrow from them as we need it , urgently and in a timely way . We will always repay them , but having the reserve right at hand has been a blessing to us . The WFP , as I said , has been in Iraq for 12 years now . We have been a major implementer of the oil-for-food programme , directly implementing it in the north to about 4 million Kurds every day and helping to monitor it in the central and southern parts of the country . As we have been getting prepared for the conflict at hand , we have pre-positioned enough food in the countries on Iraq 's perimeter to feed up to 2 million people for 30 days. So we have essentially focused on refugees or internally displaced persons who would make their way to the perimeter . We are now looking at a six-month programme that , in the first month , would focus on refugees and internally displaced persons — somewhere between 2 million and 4 million people . We are looking at ensuring that food is available in the second , third and fourth months to feed the entire population of Iraq — 27 million people . Iraq is interesting in that 60 per cent of its people rely entirely on the central Government for food , and 100 per cent of its people rely on the central Government for part of their food . The country has had a successful public distribution system , with 44,000 outlets distributing food proceeds from the oil-for-food programme . So we would look at helping to ensure that there was a steady pipeline of adequate food resources available to feed Iraq 's entire population for the second , third and fourth months . As the fifth and sixth months come along , we would assume that the oil-for-food programme would be fully back in place , administered by the Government of Iraq , and that our responsibility would be to continue to look after refugees , internally displaced persons and people who are very vulnerable . We feed about 700,000 people in Iraq who are very vulnerable , including those in orphanages , pregnant women and lactating mothers . The World Food Programme is also the logistical arm of the United Nations . We run the United Nations Humanitarian Air Service , we manage the communication systems in Afghanistan — we went in with Ericsson and installed an entire communication system in Kabul — and we manage transportation , trucks and the fuel supply , among other things . As a part of the consolidated appeal process , in which the United Nations family came together to request $2.2 billion in the short term for humanitarian issues in Iraq , we have asked for $1.2 billion for food and $100 million for logistical activities . Under resolution 1472 ( 2003 ) , the oil-for-food resolution that the Security Council adopted a week ago Friday , the Council kindly gave us authority to have access to proceeds already encumbered through the oil-for-food programme as long as they were under transport within a period of 45 days. We have had only a short period of time in which to analyse the contracts , but our best estimate today is that $110 million of value will be available from the oil-for-food programme during that 45-day period to feed the people of Iraq . We are obviously very hopeful that the Council will find a way to extend the 45 days to a longer period of time and that it will address other footnote issues that are significant in terms of costs associated with transportation of those items . That means we will need to ask the donors for at least $1.1 billion in help to fund the rest of the programme , and we are in the process of doing that now . We have had dozens of conversations with many Council member countries and with all of our donors , and those conversations are going very well , if I may say so . I suspect that we have more than half of what we will need under the current negotiations , and we have people in Rome — where we have our headquarters — and , in fact , all over the world working around the clock to put this package together . The World Food Programme is a bit different in that sometimes it can take two , three or four months from the time a commitment is made until food is purchased , transported and delivered to someone . So timing is absolutely of the essence . But many countries have made generous commitments ; we now have commitments from 11 countries . And I should say that commitments come from countries that have very different views of the conflict . One of our strengths has been that we keep a narrow focus on humanitarian issues . People may have one view or another of the conflict , but no one wants human beings to starve , especially very vulnerable people who are severely at risk . So countries that have different views of the conflict will be comfortable about helping us . Last week , we had a tremendous commitment from Germany to help . I had a wonderful two days in Berlin , and I am profoundly grateful for that . My friend from Angola raised a question about the green revolution . I was saluting the Secretary-General for raising that issue and making that commitment . Worldwide , the trend is away from investment in basic agricultural infrastructure : in 1988 , the world committed $14 billion to that programme ; last year , it committed $8 billion . Now there is some good news : the United States and the United Kingdom have both begun to turn their investments around in this area . Last year , the United States committed $200 million more to investment in basic agricultural infrastructure than it had the year before . So the trend had been downward , but now there is a bit of hope that it is beginning to head in the other direction . With regard to the question concerning Ethiopia , I am asked , “ Jim , how can this happen again ? ” Well , our investments had been made in emergency relief as opposed to prevention and development , and I think we are beginning to learn that lesson . We are working closely with the FAO , the International Fund for Agricultural Development and other organizations . Concerning the question from the representative of China , we have had a relationship with China for 40 years , and it is an extraordinary success story . China is one of the great success stories in the world in terms of letting the market function ; hundreds of millions of people there who were not fed years ago are now fed . The agencies of the United Nations do work well together ; we cooperate on these issues , and the notion of capacity for self-reliance is basic . Mr. President , when I tried to address the question of the representative of the United Kingdom , I tried to answer your question as well , but we will provide a thoughtful answer as to what the Council could do to help us and how we could work more closely together . I am grateful for the offer , and we will try to provide a good answer . The President ( spoke in Spanish ) : I thank Mr. Morris for his comments and his responses to questions raised concerning the subject of this afternoon 's meeting . I should also like to thank him most especially for his willingness to respond to questions related to other items that were not on the agenda , in particular the situation in Iraq . In that connection , various countries members of the Security Council have expressed interest in the possibility that , in the near future , the Council might be able to continue to engage in dialogue with Mr. Morris on the situation in Iraq and on the role that the World Food Programme will play . The presidency will consult with other Council members and with Mr. Morris to consider the possibility that , in the near future — before his return to the Programme 's headquarters in Rome — he could meet in consultations with the Council in that regard . There are no further speakers on my list . The Security Council has thus concluded the present stage of its consideration of the item on its agenda . The meeting rose at 5.10 p. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-154A . </text>
<text id="un/S_PV4903">
Agenda Post-conflict national reconciliation : role of the United Nations The meeting was called to order at 10.25 a. m. Adoption of the agenda The agenda was adopted . Post-conflict national reconciliation : role of the United Nations The President ( spoke in Spanish ) : I should like to inform the Council that I have received letters from the representatives of Afghanistan , Argentina , Bosnia and Herzegovina , Burundi , Costa Rica , Côte d'Ivoire , Croatia , Egypt , Guatemala , India , Ireland , Japan , Liechtenstein , Mexico , Morocco , Nigeria , Peru , the Republic of Korea , Rwanda , Serbia and Montenegro , Sierra Leone and South Africa , in which they request to be invited to participate in the discussion of the item on the Council 's agenda . In conformity with the usual practice , I propose , with the consent of the Council , to invite those representatives to participate in the discussion without the right to vote , in accordance with the relevant provisions of the Charter and rule 37 of the Council 's provisional rules of procedure . There being no objection , it is so decided . At the invitation of the President , the representatives of the aforementioned countries took the seats reserved for them at the side of the Council Chamber . The President ( spoke in Spanish ) : In accordance with the understanding reached in the Council 's prior consultations , and in the absence of objection , I shall take it that the Security Council agrees to extend an invitation under rule 39 of its provisional rules of procedure to Mr. Tuliameni Kalomoh , Assistant Secretary-General for Political Affairs . There being no objection , it is so decided . I invite Mr. Kalomoh to take a seat at the Council table . In accordance with the understanding reached in the Council 's prior consultations , and in the absence of objection , I shall take it that the Security Council agrees to extend an invitation under rule 39 of its provisional rules of procedure to Mr. Mark Malloch Brown , Administrator of the United Nations Development Programme . There being no objection , it is so decided . I invite Mr. Malloch Brown to take a seat at the Council table . In accordance with the understanding reached in the Council 's prior consultations , and in the absence of objection , I shall take it that the Security Council agrees to extend an invitation under rule 39 of its provisional rules of procedure to Ms. Carolyn McAskie , Deputy Emergency Relief Coordinator . There being no objection , it is so decided . I invite Ms. McAskie to take a seat at the Council table . The Security Council will now begin its consideration of the item on its agenda . The Council is meeting in accordance with the understanding reached in its prior consultations . In accordance with the understanding reached among Council members , I wish to remind all speakers to limit their statements to no more than five minutes in order to enable the Council to carry out its work expeditiously . Delegations with lengthy statements are kindly requested to circulate the texts in writing and to deliver a condensed version when speaking in the Chamber . As another measure to optimize the use of our time in order to allow as many delegations as possible to take the floor , I shall not individually invite speakers to take seats at the table or invite them to resume their seats on the side . When a speaker is taking the floor , the Conference Officer will seat the next speaker on the list at the table . I thank members for their understanding and cooperation . At this meeting , the Security Council will hear briefings by Mr. Tuliameni Kalomoh , Assistant Secretary-General for Political Affairs ; Mr. Mark Malloch Brown , Administrator of the United Nations Development Programme ; and Ms. Carolyn McAskie , Deputy Emergency Relief Coordinator . Post-conflict national reconciliation is a subject that should be systematically integrated in the United Nations in order to prevent the resurgence of conflicts and to create more stable societies . This question lies at the intersection of the ethical responsibility and the political responsibility of the international community to create conditions for lasting peace in societies emerging from conflicts . It presents challenges for the work of the United Nations . In recent years , the United Nations has been involved in post-conflict situations in which reconciliation has had to be addressed in order to overcome antagonisms among those who must learn again to live together in a single society . In the light of that reality , we should ask ourselves some questions . What role should the United Nations have in processes of national reconciliation ? Should we incorporate the need for reconciliation into exit strategies for post-conflict situations ? Should the United Nations design strategies for reconciliation ? Is there a role to be played by other principal organs of the Organization ? As we have noted in listening to various non-governmental organizations under the Arria formula , these and other questions underlie an issue in which civil society demand coherent and timely responses . Other questions that could be approached in this debate concern the principles and mechanisms of reconciliation , the instruments for seeking truth such as truth and reconciliation commissions , consensus-building among political actors , reparations for victims and the role of justice . I invite delegations today to present their observations and comments on how the Security Council and the United Nations system as a whole can approach the question of post-conflict national reconciliation in the future . I would like to inform delegates that I have received a message from Archbishop Desmond Tutu , Nobel Peace Prize laureate , on the occasion of this debate . The message will be circulated in the Chamber . I will therefore read only a few paragraphs from it . He says the following : “ I begin by commending your Excellency for convening this session on peace and reconciliation and the role of the United Nations . I am sorry not to have been able to be present . “ This body was set up precisely to guarantee and promote peace and stability in our world and is thus most appropriate . Our world is wracked by conflict , hatred and strife , particularly between those who share the same borders , who should be fellow citizens or at least good neighbours in juxtaposition “ When human beings have been humiliated , oppressed , slighted or have imagined themselves to have suffered these things , then almost always they have wanted to get their own back , to even scores , to avenge their setbacks . These things are etched in the tribal memory , and so strife , which may have been provoked by something fairly insignificant , continues because the resentment , the grudge , has lost nothing in the telling and retelling . That is how we tend to behave — but it is not inevitable or invariably the case . Two conspicuous examples show that it is possible “ Nearly everyone predicted that South Africa would be overwhelmed by a racial conflagration . It did not happen . The courageous leadership of Mr. F. W. de Klerk and especially of Nelson Mandela , ready to compromise , remarkably ready to forgive in a display of magnanimity and generosity emulated by followers , helped that land to walk the path of forgiveness and reconciliation and to become , so improbably , a beacon of hope for lands hag-ridden with conflict and strife . “ And East Timor , where the United Nations played a pivotal role in its birth : its leaders also chose not to engage in retribution and revenge but to concentrate on building up a nation on the foundations of forgiveness and reconciliation . ” These are excerpts from some of the paragraphs of the letter received from Archbishop Desmond Tutu . I shall now give the floor to Mr. Tuliameni Kalomoh , Assistant Secretary-General for Political Affairs . Mr. Kalomoh : Most armed conflicts eventually come to a physical end . However , many such conflicts linger on in the minds and hearts of the parties and their victims . Every armed conflict is a human disaster , and its real ending requires genuine reconciliation . Post-conflict reconciliation is closely related to the broader discussion of the rule of law and to addressing in all seriousness the root causes of the conflict . An important debate on this issue was begun in September of last year under the Security Council presidency of the United Kingdom . That debate clearly identified the need to more systematically incorporate rule of law concerns in the activities of the United Nations . The Secretary-General looks forward to presenting his first report on this matter to the Council later this year . Reconciliation , most simply understood , is about allowing people who share a painful and divided past but who are united in a common future to resume harmonious relations and to live together once more . Often this requires more than simply the laying down of arms and the shaking of hands . To be lasting , reconciliation may require the settling of the past , an accounting of prior wrongs and an acceptance of responsibility for abuses . How this is achieved , though , varies according to specific national circumstances . The pursuit of justice , accounting for past atrocities , restitution for victims and the regeneration of the severed bonds of trust and civility — these are daunting tasks in a shattered society , but they must not be overlooked when we deal with the pressing matters of restoring stability and bringing violence to a definitive end . In particular , they must be borne in mind when peace agreements are being negotiated . Peace agreements tend to frame the context for national reconciliation . Often the imperatives of the present , especially the need to restore stability and the rule of law , triumph over the long-term need for justice . Tensions between peace and justice are common in post-conflict societies . Helping war-shattered people to resolve those tensions is a key role that the international community can and should play . The international community has employed a number of instruments in post-conflict situations to address the important issue of reconciliation . I will mention but a few . Some , such as tribunals , seek to contribute to reconciliation by trying and punishing the perpetrators of crimes . Others , such as truth and reconciliation commissions , seek to contribute to a better future by establishing an official accounting of past violations of human rights during a specific historical period . Knowing the truth and accepting responsibility , whether judicial or not , is an important basis on which reconciliation can rest . In addition , amnesties , except for genocide , war crimes and crimes against humanity , reparations and targeted assistance programmes designed to promote , inter alia , communal harmony have constituted important tools for international efforts to support national reconciliation processes . The return of displaced populations in post-conflict situations also often provides critical opportunities to sustain a peace process through the promotion of measures conducive to national reconciliation . To be successful , these instruments need to be combined in a social process of catharsis . Our experience has shown that it is indeed difficult , even impossible , to set in stone prescriptions for reconciliation that would apply to each and every situation . What may work in one case may not be ideal , or ideally suited , in another . The process of catharsis that I mentioned earlier is assisted by different means in different places . Today , during the course of this debate , we are likely to hear specific examples of combinations of measures that have been successfully applied in some circumstances and not so successfully in others . Nonetheless , irrespective of national specificities , some general observations should inform the international community 's activities . First , peace without reconciliation is hardly ever durable . Secondly , it is difficult to achieve reconciliation without a significant measure of justice . Thirdly , there are some crimes that are so heinous that they require that justice be done . Fourthly , the pursuit of justice should not become an obstacle to establishing or maintaining peace . Ending the climate of impunity in conflict , post-conflict and transitional situations is vital to restoring public confidence and normalcy . The particular formula for any given country should be determined on the basis of appropriately facilitated national consultation . It is for each society to decide its own best approach to address past crimes and the violation of domestic or international law . The international community can offer assistance , outline options and provide information about what other countries in similar circumstances have done regarding , among others , prosecution , truth-seeking endeavours , reparations and apologies . While amnesties may sometimes be seen as the price to be paid for peace agreements to succeed or for stability to be maintained , the United Nations cannot condone agreements arrived at through negotiations that violate Charter principles . Amnesty clauses in peace agreements must exclude amnesties for war crimes , genocide , crimes against humanity and other serious violations of international human rights and humanitarian law . Blanket amnesty clauses are inconsistent with the twin goals of justice and reconciliation . As the Secretary-General has stated , this Council must attempt to balance the demands for peace and justice , conscious that they often compete and aware that there may be times when they cannot be fully reconciled . When reconciliation does not involve providing a sense of justice for the worst crimes , the wounds of the past have a way of resurfacing . An essential part of reconciliation is to isolate those who are most responsible and have committed the most egregious violations in order to bring them to justice . To ensure that justice is done in post-conflict societies , the United Nations has established , or helped establish , a number of courts and tribunals to try those responsible for serious violations of international humanitarian law committed during the preceding or ongoing conflicts . In doing so , the United Nations has explicitly pursued a number of objectives that have included the provision of justice to the victims of violations and the promotion of national reconciliation within societies affected by conflict . At the international level , the International Criminal Court seeks to ensure that egregious violations do not go unpunished . The establishment of tribunals , however , has not been problem-free , and working with domestic courts when possible is often a wiser course . Criminal courts are the instrument needed to try and punish the guilty . No matter their design , however , they are unlikely to be successful at fully meeting the objectives of providing justice to victims and promoting national reconciliation . They are intended to ascertain the fate of missing persons . They are ill-suited to ensure compensation to a larger number of victims . They are , then , by their nature , ill-adapted to granting “ moral ” forms of reparation . Whereas criminal courts are intended to resolve the problems of individual accountability for specific alleged crimes , they are ill-suited for establishing official historical accounts . For these reasons and others , additional non-judicial mechanisms , such as truth and reconciliation commissions , may be useful in fulfilling some of these tasks and can complement judicial instruments . Finally , efforts to promote justice need to accompanied by reconciliation and peace-building strategies that will address the root causes of the conflict , be they ethnic , social or economic . Formal legal processes and processes to bring about truth and justice should go hand in hand with economic and social measures to fight the inequalities and exclusion that may have fuelled the conflict in the first place . Reconciliation is a complex , often difficult process in which contradictions may be inevitable . It involves accounting for the past and meeting demands for justice and the degree of forgiveness that will allow for the reconstruction of a social fabric that has been rent by conflict . It is a process that involves striking a balance between the aggrieved and the aggressors , the pursuit of justice and stability . It is a long-term , difficult process , the conclusion of which cannot be clearly identified in advance . The difficulties of the process have been captured in the words of Hannah Arendt , who , when referring to atrocities committed during the Second World War , spoke of how we are unable to forgive what we cannot punish and unable to punish what has turned out to be unforgivable . Our collective experience has shown that the right combination of measures will depend on the specific conditions in each post-conflict situation . In all cases , domestic enlightened leadership can be a catalyst for the creation of the social consensus necessary for reconciliation . At the very least , the past and reconciling with it should offer hopes for a better future . In the words of Maya Angelou , “ History , despite its wrenching pain , can not be unlived , but if faced with courage , need not be lived again . ” The President ( spoke in Spanish ) : I now call on Mr. Mark Malloch Brown , Administrator of the United Nations Development Programme . Mr. Malloch Brown : I am grateful for this invitation to address the Security Council on this subject , which is very close to the institutional heart of the United Nations Development Programme ( UNDP ) . Let me frame my remarks in terms of the political economy of reconciliation and therefore talk a little bit about the politics , the issue of building democracy , how quickly to do it , the issue of other processes which can sometimes substitute for or supplement democracy as a means of achieving a national dialogue , and the critical issues that we keep on running into of the minority rights and the rule of law , as well as the role of other institutions , such as the police , who are so critical to sustained reconciliation . I also want to say a word on the economics of reconciliation , because , while it may appear to be less important than the political or even the social dimensions , it is a lot harder to reconcile populations that have been in conflict in a context of economic austerity and the lack of jobs and growth than it is if you can achieve an economically dynamic situation . Again , I want to say something about that , and then briefly something about the institutional side of this — the question you have posed , Madame , in this debate today of what the United Nations can do — and therefore , of course , particularly a little advertisement for what UNDP seeks to do , as well as an observation on the role of the Security Council . Turning first to the political dimensions and democracy . There is no bigger advocate across the United Nations for democracy than UNDP . We have long since concluded that it is at the heart of sustainable development . However , I have to say that , perhaps precisely because we are so enthusiastic about it , we are also cautious about introducing it too quickly and in too imperfect a way . We have come to recognize from experience that , while over time you have to try and shift the competition between different groups in a society from an armed competition to a peaceful and democratic one at the ballot box , nevertheless , if you rush that shift — if you move immediately to a democratic competition without addressing the underlying causes of conflict — you can indeed drive parties further apart . We have been very struck by the value of the cautious approach adopted in Afghanistan of moving directly to a recognized interim Government and to a Loya Jirga process in order to both build a consensus and then endorse a Constitution and only at the end of that process to direct elections . We contrast that to processes that we have been very involved in in Cambodia , Bosnia and Herzegovina , Haiti or Kosovo and recognize that there is real value in getting it right and taking the time to put in place the conditions for an electoral exercise which will pull people together rather than drive them further apart . I think we are all struggling with that now in the context of Iraq . We are very anxious to see that the democratic processes evolve in a way which allows the maximum direct representation possible , while ensuring that the different parties in that country are not driven apart by the exercise . It is for that reason that we as an Organization have become very involved in the promotion of national reconciliation dialogues , both where a Parliament and an election do not yet exist and in many situations where there is a Parliament but the democratic process has somehow become narrowed or not fully representative of the elements in a country . We have seen , particularly in Latin America , starting with the aftermath of conflict in Central America , how the important role which a dialogue that brings together different civil society groups with the political leadership can , at the very least , supplement — and often , in some cases , temporarily substitute for — a more formal democratic process and can critically lay the groundwork for a later democratic exercise which will enjoy broader support . As we have reviewed these national reconciliation processes , we have noticed that , on a number of occasions — in Haiti in 1987 , in Zaire in 1991 , and in Côte d'Ivoire in 2001 — there were struggling indigenous reconciliation processes which were , perhaps , fatally handicapped by the lack of strong international support . With the value of hindsight , one sees that , possibly , the small sapling of the beginning of a reconciliation that might have avoided later conflict never grew into a stronger oak because there was not the right international support and encouragement . Equally , we have seen the vital role of civil society in both formal democratic exercises and in these national reconciliation dialogues as well , where the requirement of bringing as broad a range of opinion to the table as possible is absolutely critical . Let me make one other observation on the political process , concerning the issue of minority rights . Too often in straightforward , quick , early elections after conflict , we see a winner-takes-all mentality develop where those who have lost at the ballot box — and perhaps had been the losers in the previous military conflict — feel further alienated from the situation and that their rights are not protected . Of course , this is a tremendous incentive to conflict 's renewing . Indeed , in our Human Development Report 2002 on democracy , we spent a lot of time arguing for a second generation of democratic reforms , where the issues of minority rights and more broadly of human rights , the issue of media freedom and the broader culture of democracy — where the vote exists in a much broader set of cultural and ethical values in a society about respecting each other 's opinions and allowing the competition of ideas to take place in a free political exchange — are critical . We must not blind ourselves into believing that democracy consists solely of an exercise of the ballot box . As we have just heard from Mr. Kalomoh , behind these issues lies the critical issue of justice and reconciliation . He made many important points on this and I do not want to repeat what he has said , except to observe that , from UNDP 's experience — and , I must , say , in part my own as well — truth and reconciliation , a little bit like democracy , cannot be rushed . I have been very struck by the experiences of Chile and Argentina , as well as by that of South Africa , that , for this to be a genuine internal process — with a society feeling strong enough and harmonious enough to take on these issues in a thoroughgoing way — usually some time has to have elapsed . Democracy needs to be well established , and the feeling that the ghosts of the past can be revisited without risk to the democratic present takes time . It is also , however , inevitable . I myself have yet to see what I would consider a full reconciliation after conflict where this process has not occurred . Thus , while , arguably , it should not happen at the beginning , it is an inevitable step on the road to a real healing . I think there is a real issue of the international role in this . Sometimes that international role may be a little heavy-handed and too early in terms of trying to move too quickly to a process of justice and accountability before a country is ready for it . Secondly , at a critical moment , international justice , through commissions or other forms , can be a key catalyst for the country itself taking hold of the issue and pushing it to conclusion . I therefore think this is an area of enormous interest . Let me say , however , that some more mundane issues of institutions matter as well . UNDP as a development agency is , I think , continuously surprised to find the extent to which we have become a police training agency , because whether it is supporting the German-led Trust Fund in Afghanistan or , more directly , supporting police training efforts in countries such as Haiti or Mozambique over the years , with the help of Spain and many others in this room , we have found that , unless citizens feel that their personal security is being met by effective policing of their streets and communities , a lot of the rest of reconciliation and peace-building is hard to achieve . Yet this is , in terms of international support , one of the most costly , ambitious and difficult commitments to secure . It is one which very much falls on the shoulders of the United Nations , because the World Bank , for example , treats this — I think understandably — as being outside its mandate . One last institutional political comment is that the vital tasks of demobilization , reintegration and landmine collection are key to these reconciliation processes , as well as — often — being difficult to resource quickly or effectively enough in the period when reconciliation is just beginning . I said at the start of my statement that I wanted to say a word about the “ economy ” part of political economy . It is a lot easier to achieve reconciliation in the context of economic growth than it is in the context of austerity and budget reduction . Yet the characteristics of a post-conflict situation are usually austerity and budget reduction . A post-conflict Government almost always inherits a situation of either no tax base or a very impaired one . The response of many of the international financial institutions to that has been to insist on a reduction of Government expenditure to a level which reflects that situation — and for very reasonable reasons , because as demand is also at a low level in the economy , anything bigger on the Government side can be highly inflationary , as well as unsustainable . Yet the fact is , unless you have an economic strategy which is based on expansion and therefore on job creation and the ability to finance the provision of services , including health education , to the other victims of conflict , and , above all , to manage the downsizing of critical areas of Government , such as , in particular , the army — which may have many of the ex-combatants in its ranks — the financial stability you may wish to achieve will fall victim to the absence of real stability and to the renewal of conflict . At Davos over the weekend I chaired some very interesting discussions between the International Monetary Fund and Professor Joe Stiglitz — who is the champion of expansionary economics — on how to reconcile these two sides of the dilemma . I think that that is an area to which we need to give a lot more attention as we move forward . I would like to make two institutional points . First , with regard to the role of UNDP , since the Brahimi report I think there has been a very clear understanding of the different roles played by the various parts of the United Nations , under the leadership of the Department for Political Affairs , in post-conflict reconstruction in general and , therefore , in reconciliation in particular . We as system have just had a report on transitional work , prepared under the chairmanship of Carol Bellamy of the United Nations Children 's Fund ( UNICEF ) , which touches on this . For us in UNDP that presents a couple of critical issues . First , as we move from relief to reconciliation and our colleagues in the Office for the Coordination of Humanitarian Affairs ( OCHA ) start to scale down their roles , while we are required to build up ours , we see a terrible funding gap . We see it today in Liberia . We have seen it in every post-conflict situation . Secondly , whereas our colleagues in OCHA have an impressive massed strength in the different areas of relief work , we in UNDP are much less well resourced in areas such as disarmament , demobilization and reintegration , the rule of law and justice and early support for building electoral systems . We work in all of those areas and , under Julia Taft 's leadership , have strengthened enormously our capacity in each . But I sometimes feel like those generals who say that they can deploy their armies in only one foreign operation at a time . I have huge difficulty in providing adequate support to half a dozen of these activities around the world at one time , and have therefore begun a conversation with key supporters in this area about how , first , we can strengthen our own capabilities in this regard — to both learn the lessons of these operations and have enough human capacity to deploy to support our country offices and United Nations teams in these areas — and how , secondly , the international community can make funds available more quickly for the early steps of reconciliation . The situation is comparable to that of a heart attack victim . All the research tells us that the greatest propensity to revert to conflict is in the early months after conflict . But that is the period when we are least able to put up the resources for successful demobilization and reintegration . That brings me to a final point about the Security Council , and to another medical analogy . You are very good in the operating theatre — you do peace agreements well , you do peacekeeping well . But my challenge to you all — and I say this without making any comment on the debate between the various organs of the United Nations — is that the real statistics of peace-building demonstrate that the most critical interventions are , in a medical sense , in the preventive health phase — the pre-heart-attack phase — as well as in the rehabilitation — the post-heart-attack phase . Yet the focus of all your activities is in the operating theatre , not in the clinic afterwards — let alone giving the patient the preventive help beforehand . The President ( spoke in Spanish ) : I thank Mr. Malloch Brown for his informative briefing , in which he was so eloquent with regard to what needs to be done . I give the floor to Ms. Carolyn McAskie , Deputy Emergency Relief Coordinator . Ms. McAskie : On behalf of my colleagues in the humanitarian community , I should like to thank you very much , Madam President , for giving me this opportunity to address the Council on such an important matter . National reconciliation in post-conflict situations is a complex issue that we all know needs to be addressed comprehensively , taking into account a wide range of issues and perspectives . It is for this reason that I am pleased to be able to put before the Council some humanitarian perspectives on post-conflict reconciliation . Why is post-conflict reconciliation of concern to the humanitarian community ? The simple answer is that it is an issue upon which our humanitarian work can have a significant impact . Conversely , it is an issue that can have a direct and significant impact on our humanitarian work . I will probably touch in my statement on some issues that have already been raised by my colleagues Mr. Malloch Brown and Mr. Kalomoh , but I will try to do so from the point of view of the humanitarian consequences and the humanitarian context . As we are all aware , post-conflict reconciliation is not an event , but an ongoing process . It can begin , and should be nurtured , in the immediate humanitarian response phase of a conflict , and can be informed by the neutrality and impartiality that humanitarians bring with them . Their message is one of putting the individual — the woman , the man , the child — at the centre of what the United Nations is there to do . When we hear the phrase “ post-conflict reconciliation ” , we first think of formal reconciliation processes , some of which have been mentioned — truth and reconciliation commissions and so forth — and their role relative to criminal justice processes . These formal processes are undeniably critical to national reconciliation and sustainable peace . But some of the most powerful forms of reconciliation , in terms of restoring the social fabric and regaining national unity , will be found in everyday life : children of different ethnic groups sitting together at school , neighbours working together to rebuild their villages and health clinics , despite the fact that they were on opposite sides during the conflict . Indeed , formal reconciliation processes and these grass-roots forms of reconciliation must be seen as complementary and mutually reinforcing . One can grow and evolve from the other . In the same way , we cannot afford to focus exclusively on political developments and peace processes in countries that are in transition from conflict to peace . Here I would refer to Mr. Malloch Brown 's very good analogy at the end of his statement about the operating theatre ; that has been very much the focus of our work . The broader humanitarian concerns must be addressed properly , and we must ensure that the international humanitarian response supports — and does not undermine — efforts to foster national reconciliation and the consolidation of peace . Getting humanitarian assistance right is an important building block for post-conflict reconciliation . The starting point must be to ensure that adequate levels of humanitarian assistance are available in the most critical situations . The inability to ensure even minimal levels of assistance in immediate post-conflict situations will serve only to increase tensions and foster grievances , thereby undermining efforts at reconciliation . If we are not there to provide that assistance , the people remain at the mercy of warlords for their basic survival . Sadly , it is in the “ forgotten ” emergencies that the risks are greatest . The serious lack of attention and material support to countries such as the Republic of the Congo have consistently undermined local and national efforts at reconciliation . The humanitarian assistance itself must be provided equitably and efficiently , on the basis of demonstrable need . This fundamental humanitarian principle can frequently be the most challenging , particularly in situations where we are denied access or where factions seek to manipulate and misuse humanitarian assistance to their own ends . The legitimacy of a faction 's engagement in peace processes should be based on its commitment to unhindered humanitarian access . A very blatant example of this was the situation last year in the Democratic Republic of the Congo , when the Rassemblement Congolais pour la Démocratie-Goma ( RDC-Goma ) was requesting protection from the United Nations Organization Mission in the Democratic Republic of the Congo ( MONUC ) — for it to come down to Kinshasa — even as it was perpetrating the most blatant violations of human rights , including sexual abuse , on the population in its own area . There was an example of a case in which we could have insisted that the United Nations should not provide protection until they themselves were providing protection to their own people . The humanitarian community must also ensure that it works with people and communities that are the victims of conflict , rather than acting on their behalf . Humanitarian assistance needs to be seen as an investment that enables people to rebuild their lives and sustains the very fabric of society , which will be essential to peace and reconciliation processes . A principled and strategic approach to humanitarian assistance is therefore required , so as to ensure that it is delivered in a way that does not perpetuate grievance or hamper longer-term societal and institutional development , the restoration of livelihoods and the strengthening of State legitimacy . The responsibility for this lies as much with donor countries and the international community as with humanitarian agencies . Mr. Malloch Brown referred to the work that the United Nations is doing on transition . I will not repeat his words here , but this is an important element in that respect . Post-conflict situations exemplify the importance of ensuring that adequate funding is provided not only for life-sustaining humanitarian assistance , but also for other programmes that will have a significant impact on national reconciliation . Effective peace and reconciliation processes require effective social and administrative structures . It is important , therefore , that schools and their teachers , health centres and their workers , local administrative offices , and local welfare and community structures not be neglected by the international humanitarian community , but that every effort be made to engage and sustain them through times of conflict . Rapid and effective responses to key transition needs are critical to national reconciliation efforts . If people are denied the fruits of peace — such as shelter , education , health care and employment — national reconciliation will be much harder to achieve . Our experience with the consolidated appeals process , however , reveals that , while donor countries are willing to support initiatives that address immediate humanitarian needs , the longer- or medium-term tools of reconciliation , such as education , health care and demobilization and disarmament , are often under-funded . This can serve to undermine post-conflict reconciliation in a number of ways . Inadequate resources for education programmes can result , for example , in generations denied access to education and left with poor prospects for the future , thus perpetuating the social divisions at the root of conflict . Burundi is an unfortunate salutary case in point . I believe that there is considerable scope to look further into ways to channel reconciliation efforts into the programmatic work of our agencies , bearing in mind the fact that the impartiality and neutrality of humanitarians provides us with a unique base from which to play an important bridging role . The United Nations Children 's Fund ( UNICEF ) , the Office of the United Nations High Commissioner for Refugees ( UNHCR ) , the World Food Programme ( WFP ) and other humanitarian agencies already play this role in their everyday work . The impact of reconciliation on the work of humanitarian agencies is the other side of the coin . A fundamental concern to humanitarians in post-conflict situations is the risk of a return to armed conflict if peace processes and reconciliation measures fail . The need for massive humanitarian assistance will remain if reconciliation issues are not handled effectively and swiftly . It is therefore critical to ensure that reconciliation measures do not inadvertently exacerbate tensions and encourage a return to conflict . This could happen , for example , through inconsistent application of measures related to justice and impunity , property restitution , and reintegration . These are problems that have plagued peace processes in various countries , and , once again , I would use Burundi as an example . Indeed , consistency must be seen as one of the cornerstones of reconciliation in post-conflict situations . Humanitarian aid must be consistently and equitably provided ; legal and judicial mechanisms , international humanitarian law , property restitution , reintegration , reparations — all must be consistently applied if reconciliation is to have a solid base . Effective post-conflict reconciliation requires us to address not only institution-building , but also the root causes of the crisis , and Mr. Kalomoh has spoken on this issue . But at the root of most conflicts are issues of poverty , corruption , deliberate manipulation of minority groups , social inequity and exclusion , with certain elements of society denied access to political and social processes , property and education . We must ensure that we do not perpetuate socially divisive institutions that leave no scope for reconciliation , either by inadequately funding and implementing humanitarian assistance or through the manner of our engagement in local capacity-building . As the Council is aware , humanitarians are often present in conflict situations when no one else is . It is our experience that , in countries recovering from conflict , peace and national reconciliation ultimately depend on attitudinal and behavioural changes within society . This is particularly the case where society has become polarized . Far too often , peace processes are seen as the prerogative of combatant forces , but lasting peace and national reconciliation will depend on developing a social climate that seeks to sustain peace . All sectors and elements of society — not just the fighting forces — need to be brought together to that end . In terms of the work of the Security Council , I think that this is an issue on which we could usefully focus : that political processes — peace processes — tend to ignore the vast swath of communities that have been affected by the crisis and that have a stake in the future ; they should be at the table , not just the parties in conflict . The earliest possible involvement in reconciliation efforts of local community leaders — representing the range of interests and perspectives within a society — is critical . Civil society organizations in particular , which provide important channels for understanding the key concerns of various sectors of a society , can help to build bridges between divided and disaffected communities . Post-conflict situations also provide an opportunity to recognize and promote the important role of women in reconciliation efforts , as well as to address the gender inequality that prevails in many societies . Women 's lack of equality in Africa , for example , is too often their death sentence , as they are forced to adopt survival strategies that increase their risk of contracting HIV . Women are also central to the response to HIV/AIDS and to other aspects of emergencies , but entrenched gender hierarchies all too often hinder appropriate responses . If we are serious about reversing that situation , we must return to women 's control over their livelihoods and their bodies , and we must bring their needs and concerns into humanitarian planning and post-conflict responses at the strategic level . Before closing , I should like to touch very briefly on some key issues of concern for humanitarians as they relate to reconciliation . Foremost among humanitarian concerns are issues surrounding the return of refugees and internally displaced persons and their reintegration into their communities . When members of ethnic minorities choose to return to still-fragile communities emerging from conflict , there is no more important role for the humanitarian community than ensuring that they are safe and protected and that they are helped to remain in their homes . Over the past 10 years , there have been successful and well-targeted humanitarian and recovery programmes to foster the commitment to reconciliation in practical ways . I am thinking here , for example , of the UNHCR 's Rwandan and Bosnian Women 's Initiatives , in which women from across ethnic and party lines were offered the opportunity for vocational training and microcredit funding so that they could collectively begin the process of recovery and reconciliation themselves . We also have positive , practical lessons to learn from the reintegration of internally displaced persons in East Timor , where reception ceremonies based on traditional practices were held to foster the acceptance of those persons into their communities . In Angola , the regulamentos have proved an important tool for the restoration of property rights to the former internally displaced . Similarly , effective disarmament , demobilization , reintegration and rehabilitation ( DDRR ) can provide vital support to national reconciliation efforts . The culture of youth violence witnessed in the Mano River Basin and in Côte d'Ivoire , for example , will continue to impede reconciliation efforts unless well-designed and well-resourced regional DDRR programmes are introduced to address the particular needs of young people brutalized by war and now left with no means of survival but the gun . In line with the mutually reinforcing nature of these issues , DDRR initiatives depend on reconciliation efforts for their success , because the reintegration of combatants is critically dependent on the ability of societies to accept them back into the community . The recognition of rape and other forms of sexual violence as weapons of war raises particularly difficult issues of reconciliation . Only now is the extent of deliberate , broad-based attacks on women and girls being acknowledged . Beyond the devastating physical , psychological , emotional and social traumas suffered by women and children who are brutally attacked , those egregious crimes undermine cultural values and community relationships , and they can destroy the very ties that bind society together . I have already mentioned the particularly horrifying consequence with which many are faced : the spectre of HIV/AIDS . Helping the survivors of sexual violence — and their communities — to heal requires a concerted response by the humanitarian community . Humanitarian programmes that provide health , medical , nutritional and psychosocial support , trauma counselling , education and advocacy therefore become vital to reconciliation efforts . Given cultural and social sensitivities , it is especially important that this work be carried out through local non-governmental organizations and women 's initiatives , but with the full support of the political process and not as something separate . Finally , I should just like to refer briefly to the fact that one of the most disturbing aspects of the widespread sexual and other violence perpetrated against innocent civilians in armed conflict is that those crimes are committed in a climate of impunity — a topic that was fully addressed by my colleague Mr. Kalomoh . In post-conflict situations , reconciliation must be tempered with a clear commitment to ending impunity for serious violations of international humanitarian and human rights law . Effective conflict resolution and longer-term national reconciliation depend on processes of reconciliation and justice — something on which we are all agreed . Indeed , justice and reconciliation — as Mr. Kalomoh pointed out — must be seen as complementary . Both are vital to effective reconciliation in the broader sense . And , while amnesties provide an important measure for dealing with lower-level perpetrators , they must never be granted for serious violations of international humanitarian and human rights law . In conclusion , we cannot expect reconciliation to be an easy or straightforward process . In many post-conflict countries , the brutal memories of past abuses take years to heal . Indeed , one of the most difficult challenges of reconciliation in post-conflict situations is how to focus on the future without ignoring the past . It has long been clear that humanitarian assistance alone will not provide a solution to crises . Unless proper and timely attention is paid to reconciliation , rehabilitation , reconstruction and development , countries will slip back into the horrors of war , and the efforts of the humanitarian community — often at great peril for humanitarian workers , I should add — will be lost . As we know , 65 per cent of the countries emerging from conflict in Africa are slipping back into violence , and we cannot afford to be complacent on that front . It is therefore vital to have an effective , broad-based , international support strategy to ensure that humanitarian activities are reinforced with corresponding reconciliation , rehabilitation and reconstruction efforts . We must also recognize within that context , however , that each country must find its own path to reconciliation . Humanitarian actors are in a position to begin that process , and it is important to recognize that reality within such an international strategy . The President ( spoke in Spanish ) : I thank Ms. McAskie for her briefing . I now give the floor to members of the Council . I should like to reiterate that speakers should strive to limit their statements to five minutes so that we can hear all those on the list , and that those who have more extensive statements should circulate the texts in writing . Mr. Pleuger ( Germany ) : First of all , I should like to thank Mr. Kalomoh , Mr. Malloch Brown and Ms. McAskie for their briefings initiating today 's debate . I present my remarks in anticipation of a more comprehensive statement to be made later by the representative of Ireland on behalf of the European Union . We fully endorse that statement . Germany welcomes Chile 's initiative to hold this open debate on the role of the United Nations in post-conflict national reconciliation . The fact that you are presiding , Madam President , demonstrates the importance that you attach to this subject . After the debate held in September 2003 on the role of the United Nations in promoting justice and the rule of law , today 's debate will again highlight the wish of the Council — and indeed of the entire United Nations membership — to ensure that peacekeeping and peace-building efforts can be sustainable . In the Council 's debate on justice and the rule of law , Mr. Guéhenno clearly expressed what is at stake . He said : “ if the international community limits its response to post-conflict situations to the creation of traditional criminal justice mechanisms such as courts , focused on delivering retribution and meting out punishment , then it will fail to respond to many of the expectations that victims and ` victim societies ' have concerning mechanisms of post-conflict justice , in particular reparation , a full accounting of what happened and national reconciliation . ” ( S/PV.4835 , p. 5 ) Patrick Burgess , former Legal Counsel of the Commission for Reception , Truth and Reconciliation in Timor-Leste , described the challenge in even more evocative terms : “ Punishment of those most responsible is not the complete picture . Populations in post-conflict situations are faced with the real and present danger that the dry grass of past anger and resentment will burst into flame again and , fanned by the winds of poverty , frustration and joblessness , soon become an uncontrollable fire . Punishment will help to heal past wounds and provide some consolation to victims , but focus also needs to be maintained on the damaged relationships between individuals at a grass-roots level . Not only punitive justice but also restorative justice is required to mend these relationships . ” These two quotations , we feel , quite rightly make the point that justice and reconciliation — or punitive and restorative justice — ultimately serve the same purpose : to heal the wounds of a conflict-torn society , first , by acknowledging and establishing accountability for the wounds that have been inflicted on victims ; secondly , by creating a just and inclusive social and political order that offers guarantees for the peaceful resolution of future conflicts and against the recurrence of past conflicts and social injustices ; and thirdly , by restoring a sense of common purpose among a hitherto divided population . The United Nations has broad experience in addressing each of these areas , ranging from the establishment of justice and reconciliation mechanisms to assistance in building democratic institutions and the promotion of a common development perspective based on greater participation and shared benefits . Specific activities to achieve these goals include programmes as diverse as the creation of tribunals and truth and reconciliation commissions , assistance in organizing and holding free and fair elections , assistance in drawing up a new , integrative constitution , joint demilitarization and demining , as well as the complete range of disarmament , demobilization and reintegration programmes for ex-combatants of former civil war enemies , and the mobilization of international financial and technical assistance for post-conflict economic and social reconstruction plans . In declaring its readiness to host a Bonn II conference on Afghanistan , Germany follows that same holistic approach to national reconciliation . Indeed , the purpose of the conference , in line with suggestions by Special Representative Mr. Lakhdar Brahimi , would be to promote throughout the international community efforts that lay the foundation for further reconciliation in a more peaceful and more prosperous Afghanistan . A real challenge for the United Nations will be the ability to deliver its expertise and its assistance in a coherent , coordinated and effective manner . In the interest of quality and cost-effectiveness , consideration may be given to the establishment of a Secretariat unit that has the necessary conceptual and operational know-how in the area of promoting national reconciliation in post-conflict situations and that can coordinate the various actors engaged in that field throughout the United Nations system . In the Council 's ministerial meeting on justice and the rule of law , held on 24 September 2003 , Germany suggested the establishment of a rule-of-law task force in the Secretariat . Given the close relationship between issues of justice and reconciliation , I suggest that they be dealt with jointly by such a task force . A starting point in addressing post-conflict reconciliation issues must be that no post-conflict situation is equal to another and that there are no one-size-fits-all solutions . But , on the other hand , the opposite is also true : the wheel does not need to be reinvented on every occasion , and there are certainly a few standard parameters and model procedures that can usefully be defined and applied . Among those standard parameters , let me mention three that are of particular importance . First , experiences in Sierra Leone and Timor-Leste have made it quite clear that the way in which courts and reconciliation mechanisms interact with and complement one another should be well-defined . In that regard , it is important to ensure that both mechanisms , taken together , cover the whole spectrum of injustices committed during a conflict , without leaving an impunity gap . Closing the impunity gap has been high on the international agenda , and reconciliation mechanisms , if properly combined with judicial mechanisms , can play an important role in that regard . Secondly , those bearing the greatest responsibility for war crimes , genocide , crimes against humanity and other serious violations of human rights and humanitarian law must not escape punishment . Secretary-General Kofi Annan was right in reminding the Council in his statement during the debate on justice and the rule of law that there are international standards to be adhered to . The International Criminal Court was created precisely for the purpose of ensuring criminal accountability for these crimes should national jurisdictions fail to do so . Thirdly , it should be recalled that judicial and non-judicial mechanisms need local acceptance and legitimacy . Before such mechanisms are established , interested segments of a victimized society should be consulted . Once the mechanisms are operating , they need to be engaged in ongoing outreach efforts . We applaud the thorough outreach activities undertaken in Sierra Leone , and we hope that such activities can avoid the recurrence of situations in which a defendant finds an audience for his twisted claim that he is the victim and the judges are the villains . Against that backdrop , it is an important challenge for all of us to ensure that transitional justice mechanisms in Iraq will meet with broad popular support . The last point leads me to my final observation . None of the goals contained in the paramount goal of reconciliation — neither justice nor reconciliation nor development — can be achieved without the firm political will of local decision-makers . Where such political will is weak or non-existent , it may be one of the most delicate and challenging tasks for the United Nations to inspire among local policy-makers and conflict-torn populations the confidence necessary to make the policy choices that hold the promise of a just and more prosperous future . Indeed , the United Nations has a unique legitimacy to do so . The President ( spoke in Spanish ) : I thank the representative of Germany for his kind words addressed to me . Mr. Baali ( Algeria ) ( spoke in French ) : Allow me at the outset to thank the delegation of Chile for taking the initiative of organizing this debate on a question which is clearly central to the mission of our Organization . I also thank Ambassador Muñoz for enabling our discussion of this question with the non-governmental organizations at the Arria formula meeting he organized on 22 January . The spirit and the letter of the United Nations Charter make civil concord among members of a single human society — and reconciliation among them if that concord is broken — the primary condition to be met in order to build a world of peace . Reconciliation follows a phase in which a society 's harmonious relations have been ruptured , most often by a violent armed conflict in the case of civil war , by violence practised by a State against society or part of society in the case of dictatorships , or by violence directed at both society and the State in order to undermine their foundations for political purposes . National reconciliation attempts to heal a society of the effects of these breaches and therefore can only be successful if a reliable and objective diagnosis of the causes of the conflict is provided . To that end , the observation of conflict situations , of which the United Nations has been seized since its creation , points to the recurrent presence of certain symptoms , namely one social or ethnic group 's excessive domination over other groups or components of society . This is reflected , generally speaking , in the monopolizing of national resources and positions of power , causing , more often than not , the use of State repression to maintain this domination . This does not allow for any kind of counterweights or opposing powers , which are the hallmarks of the rule of law . The absence of the rule of law , therefore , is at the source of violent conflicts of interest within a society . These conflicts would have been peacefully resolved if they had taken place in a democratic environment characterized by the sound practices of good governance and respect for the law , a law drafted in a spirit of fairness and with the aim of preserving everyone 's rights . National reconciliation , therefore , cannot be dissociated from the establishment or rehabilitation of the rule of law , characterized by the idea of justice . In a post-conflict situation , national reconciliation , to attain its overriding goal , a peaceful society , necessarily involves telling the truth , which is the basis of justice . This occurs at two levels : first , setting the record straight about the causes of conflicts , including the inequalities and denials of rights which caused them , and universal recognition of those imbalances ; secondly , telling the truth about the human rights violations and atrocities committed during the period of hostilities . While the first stage naturally lends itself to reconciliation by calling on the political arena to summon up the will — and create the conditions — to correct previous imbalances , the second does give rise to many questions , since it rejects the idea of impunity in favour of the idea of settling accounts , of punishment , and of reparations due to the victims as well as to moral rehabilitation , all of which increase the chances of lasting reconciliation . The main difficulty in this exercise lies in reconciling the rejection of impunity — demanded by the rule of law — and the risk of a conflict dragging on because of the fears that the prospect of prosecution gives rise to among those who have violated human rights . This places the whole question of amnesty in our discussion today . The problem of amnesty does not come up in situations where one of the parties to the conflict was defeated militarily by the other party , whether by the victor 's own means or with the support of the international community . In that situation , generally speaking , those who are defeated will be prosecuted . In situations where the belligerents have the means to prolong a conflict , along with its accompanying atrocities , or in situations where the wielders of State power negotiate the conditions for retreat , the scenario is not the same . We all know that , while a settlement is being negotiated , the mediators are always confronted with demands for amnesty and this amnesty often determines the success of their efforts . Truth and reconciliation commissions , as in the case of Chile and South Africa in particular , try to get around this difficulty inherent in the rule of law , of the obligation to prosecute , by emphasizing the therapeutic value of digging up the truth . This practice has the immense merit of fulfilling the duty to remember , which is essential for building a new national consensus , while avoiding a repetition of the errors of the past . However , since it does circumvent the judicial phase , it is nonetheless a kind of amnesty , similar to the one that was negotiated and obtained recently for Charles Taylor by the Economic Community of West African States ( ECOWAS ) mediators . These mediators , to their credit , did spare Liberia the additional tribulation caused by the inertia of the international community in the face of a major humanitarian catastrophe . I now come to the question before us — the role of the United Nations in the process of national reconciliation . First , on the question of impunity and amnesty , the Organization seems to have opted for a firm position of not granting any concessions to the parties to the conflict that it is seized of , as Mr. Kalomoh recalled . This is a position that is legally justified , but its downside is that it reduces the Organization 's ability to put an end to the hostilities by mediation alone , since some of the belligerents will distrust the Organization if it has , in advance , opted in favour of a criminal prosecution of these crimes . Furthermore , the considerable developments in international criminal law in recent years do not allow the Organization and Member States much room for manoeuvre in this area . In the specific case of international crimes , namely , war crimes , genocide and crimes against humanity , this room for manoeuvre is henceforth practically nil . Yet it is interesting to note , here , that even the Rome Statute of the International Criminal Court ( ICC ) , in article 53 , paragraph 2 ( c ) , gives the prosecutor some leeway and the discretionary power not to open a judicial enquiry if “ A prosecution is not in the interests of justice , taking into account all the circumstances , including the gravity of the crime [ and ] the interests of victims ” . In order to maintain its role as an honest broker , the United Nations must first , as far as possible , avoid placing itself in the position of accuser , even more so since it is less and less the United Nations and increasingly the States or regional or subregional organizations that are involved in the difficult quest for solutions to particularly bloody conflicts . Secondly , the United Nations needs to establish the conditions whereby it can credibly threaten the use of force against recalcitrant parties . These conditions , which , we think , are lacking today , depend on the affirmation of a clear political will on the part of the Security Council , in particular on the part of the permanent members , and in the availability of appropriate resources for the Department of Peacekeeping Operations . In the post-conflict period , the role of the United Nations seems to have been clearly defined in the Millennium Declaration . I do not want to go into any details here , but in the specific case of national reconciliation processes , it seems to us that this role consists of supporting the former parties to the conflict during the peace-building stage and in the transition to the rule of law . This can be done in the following ways : by sharing the Organization 's experience and recognized expertise in the resolute conduct and completion of disarmament , demobilization and reintegration processes ; through assistance in electoral processes and the establishment of representative democratic institutions , including political parties and civil society organizations ; by the establishment of an independent , impartial and functioning judicial system ; by developing public information bodies that embody the values of democracy and tolerance in order to counter the adverse effects of partisan media , sometimes referred to as hate media , which may not only create a climate leading to the outbreak of conflict but also cause the failure of national reconciliation ; and , finally , by the mobilization of international assistance for reconstruction . As I recalled in our debate on West Africa , clearly , if the United Nations were to become decisively involved in conflict-prevention by tackling , in particular , the socioeconomic causes and by mobilizing more resources for development , many countries would be spared many conflicts , which are costly in many respects . The international community would thus have to finance neither peacekeeping operations that are often burdensome , nor post-conflict activities of sometimes questionable usefulness and consistency . In other words — in the medical usage evoked by Mr. Malloch Brown , with my regrets for using such a prosaic formula — it is better to prevent than to cure . The President ( spoke in Spanish ) : I thank the representative of Algeria for his kind words addressed to our mission . Mr. Arias ( Spain ) ( spoke in Spanish ) : I wish to thank the Chilean delegation for organizing this debate , which gives us the opportunity to delve more deeply into a subject of great importance . We endorse the statement to be made by the representative of Ireland on behalf of the European Union . Despite more than half a century of experience of the United Nations and other organizations in preventive diplomacy and peacekeeping , only very recently have we begun to understand the critical role that we must play in post-conflict situations , the strengthening of the rule of law and the administration of justice , and the follow-up and facilitation of the entire process of national reconciliation . The task of strengthening and broadening the mandates of peacekeeping operations is no doubt part of that trend and we must continue to work in that direction by including in our mandates , in an increasingly systematic way , elements of human rights , the rule of law and the facilitation of national reconciliation processes . In the context of reconciliation efforts , the rebuilding of the rule of law and the subsequent consolidation of institutions are priorities . Without them , it is impossible to guarantee security in any way , impunity remains the rule and economic activities are seriously disrupted . In such conditions , consolidating a political process is even more complicated and cannot succeed in the long term . It is essential to focus efforts on such tasks before attempting to step up the reconciliation process , for instance , through the holding of general elections . Without due prior stabilization of the situation , elections can prove to be ineffective and sometimes even counterproductive . In any event , the involvement of the United Nations will differ in response to each specific case . It can vary from accompanying , supervising and even assuming the functions of a justice system through the post-conflict transition process , as in Timor-Leste , to helping a State through a stage of convalescence to restore its mechanisms of law and consolidate its national institutions . It must , however , always enjoy the will of the people most directly affected . Indeed , as the Secretary-General said in the debate on justice and the rule of law , the United Nations must hope to guide , not direct . In cases where circumstances do not permit at the outset , responsibility must be shifted at the proper time to local actors , whose role should always be central . It is also necessary to settle accounts with the past so as to be able to face the future with greater confidence . That requires elucidating the truth of what has occurred , providing opportunities for victims to express themselves and closing the doors on impunity for those who have committed extremely grave acts that are offensive to humankind . There are various mechanisms to that end , the most innovative and demonstrably useful of which is the constitution of mixed tribunals . It is worth looking more closely into that mechanism . In any case , and whatever system is adopted , the task will be enormously difficult , since it will require striking a balance between the necessary application of justice and the search for national peace and reconciliation . In carrying out such tasks , the Council will need to be most mindful of the specificities of each particular situation , of whether or not there existed a genuine rule of law within the State before a conflict , and of the prevailing legal system in order to ensure that the mandates it confers are clear and unequivocal . To facilitate that task , it may be useful to prepare a compendium of model practices for use by the United Nations in each post-conflict situation . Undoubtedly , such practices will need to be flexible and adaptable to the specificity of each situation . Finally , we stress the role that falls to the International Criminal Court . The international community now has an independent and impartial forum to render justice in the most serious cases of violations of human rights and international humanitarian law in situations where , in keeping with the principle of complementarity , national penal systems are unable to address the matter in a genuine and effective way . Beyond the specific cases that are submitted to its jurisdiction , we are certain that the Court will contribute to establishing guidelines for penal justice and respect for the rights of accused and victim alike that will serve as guidance for all States in the area of crimes against humanity . In that way , the International Criminal Court will contribute through its work not only to the achievement of justice and the effectiveness of human rights and humanitarian standards , but also to strengthening peace and security throughout the world . Mr. Duclos ( France ) ( spoke in French ) : At the heart of the process of national reconciliation often lie — as your country , Madame , knows especially well — serious political and moral dilemmas in terms of justice . My delegation was very interested in the meeting that Ambassador Muñoz organized a few days ago with the non-governmental organizations , which provided particularly enlightening testimony on the subject . I pay tribute here to their work and thinking . My delegation listened with great attention to the outstanding statement of Mr. Kalomoh on this subject early in this meeting . We believe that the solution to these dilemmas always lies in the establishment of the rule of law , with all of the force and breadth inherent in that concept . Your delegation , Madame , was wise in holding today 's discussion in the wake of the Security Council 's debate in September , presided over by Mr. Jack Straw , the Secretary of State for Foreign and Commonwealth Affairs of the United Kingdom , whose initiative my country deeply appreciated . National reconciliation often requires a balance between the imperatives of justice and the defence of universal values , on the one hand , and taking into account the circumstances inherent in a situation or a particular culture , on the other . Wise time management is often a condition of success . Such non-jurisdictional instruments as truth and reconciliation commissions may make a valuable contribution . However , that which is inviolate must be respected . There can be no impunity for serious crimes under international criminal law . Likewise , victims are entitled to the truth and reparations . The United Nations must continue to play a role in this area , first by including in the mandates of peacekeeping missions — as is increasingly the case — measures to fight impunity by , for example , investigating human rights violations and then , when this is appropriate or necessary , by providing support for national tribunals . As the representative of Spain stated , the International Criminal Court can now , of course , make a major contribution in this respect . It is respectful of national jurisdictions and can help to make up for any possible shortcomings that they may have . Justice is not the only key to the success of any national reconciliation process . It first requires a peace agreement or other viable form of agreement — one that does not contain within it the seeds of another conflict or civil war , but that makes it possible to deal with or resolve basic problems . Success will also depend on the process being inclusive . It is crucial that the positive effects of national reconciliation spread to all segments of the population . That is why , in this context , special importance must be accorded to disarmament and reintegration programmes for former combatants , to the situation of children , to the situation of women — whose important role has been acknowledged in resolution 1325 ( 2000 ) — and to the full integration of communities , minority groups , refugees and foreign or displaced populations . Nor should we forget that if we truly want to bring about national reconciliation in current post-conflict situations , the fair distribution of economic resources , as well as power-sharing , access to education and health and development are all necessary conditions for improved coexistence and , ultimately , for the return of trust . The earlier comments of Mr. Mark Malloch Brown and of Ms. Carolyn McAskie were very interesting in this respect . Thus it can be seen that , in dealing with these problems , we have moved from a simple approach — support for a top-down agreement between government and opposition leaders — to a more complex and comprehensive approach involving several kinds of support from the international community . This , of course , means greater involvement on the part not only of the Security Council but of the entire United Nations system — though such involvement can never be a substitute for the will of local stakeholders . My delegation , like others , believes that in practice it would be beneficial for the Secretariat to bring together in a more effective way the unique experience and expertise of the United Nations and to better coordinate the instruments and mechanisms that need to be mobilized . It would also be desirable that the Secretary-General 's report — pursuant to the discussion last September — reflect the discussion that we are having today . My delegation is particularly grateful to you , Mr. President , for having organized this very important and useful debate that will shed light on the day-to-day activities of the Security Council . My delegation fully aligns itself with the statement to be made later by the representative of Ireland , speaking on behalf of the European Union . Mr. Sardenberg ( Brazil ) ( spoke in Spanish ) : I should like at the outset to thank Assistant Secretary-General Kalomoh ; the Administrator of the United Nations Development Programme , Mr. Mark Malloch Brown ; and the Deputy Emergency Relief Coordinator , Ms. Carolyn McAskie , for their introductory statements . I should also like to thank you , Mr. President , for having organized the Arria-formula meeting held last week with non-governmental organizations , which provided us with a great deal of interesting information . My delegation is honoured and pleased that once again the Foreign Minister of Chile was in the Chair , presiding over our meeting . I also express my delegation 's satisfaction that you yourself , Sir , presided over the work that led to this open debate on a subject proposed , in a very timely manner , by the delegation of Chile . This is certainly a question that merits — and demands — close attention . National reconciliation represents the culmination of the Security Council 's work when considering a conflict situation . ( spoke in English ) It has by now been widely accepted that the United Nations has a major role to play not only in the resolution and immediate aftermath of conflict situations , but also in conceiving and conducting long-term post-conflict initiatives , such as demobilization , disarmament and reintegration and the restructuring of the police , armed forces and the judicial system . Beyond conflict resolution and stabilization lies the long road towards development , democratization and the strengthening of the rule of law . There is much that the Security Council can do with a view to achieving those objectives , particularly if it makes more extensive use of the provision contained in Article 65 of the Charter and seeks the collaboration of the Economic and Social Council — as it has done in the cases of Guinea-Bissau and Burundi , with some success . We believe that reconciliation efforts are compromised when the legacy of past violence is left unaddressed . National reconciliation is the best way for divided countries to confront threats to their stability and to promote and build durable peace and viable democratic institutions and practices . The role of the United Nations in post-conflict national reconciliation has not received nearly as much attention as it merits . The reticence as regards a more focused United Nations approach to this subject is perhaps due in part to its utter complexity . National reconciliation depends on many diversified factors and is riddled with challenges . No single model is applicable . What works in one case does not necessarily work in another . In each experience , the dynamic is different , but studies show that successfully reconciled societies usually undergo an extensive process of truth , justice , reparation and the re-establishment of identities . Closely related to the matter of justice , the search for truth is central to the process . Information is not only unveiled , but also publicly recognized , and findings are widely disseminated . Truth commissions provide a public platform for victims and create common understanding . Ideally , their findings should inform the progress towards justice and lead to constructive recommendations on legal and institutional reform . Aside from institution-building aspects — which often entail the training of judges and lawyers — an adequate balance should be struck . When Sergio Vieira de Mello addressed the Council in January 2002 as Transitional Administrator for East Timor , his assessment was that “ Long-term peace and stability will depend on the degree to which we can overcome the legacy of violence by fostering and facilitating reconciliation and by the effective prosecution of serious crimes . Those efforts should be viewed as interdependent ” . ( S/PV.4462 , p. 4 ) In his understanding , a truth commission seeks the truth about human rights violations and facilitates community reconciliation . But it should not act as a substitute for the judicial process . As a matter of fact , in situations of post-conflict national reconciliation the legacy of past violence must be addressed , and a victim-centred approach is certainly required . In most situations , one can identify very clearly who the victims were and who the offenders were . If , on the one hand , offenders must be prosecuted for their crimes , so , on the other , the limitations of prosecutorial methods must also be borne in mind . As the Secretary-General , Kofi Annan , stressed last year during the debate on justice and the rule of law , “ there cannot be real peace without justice ” ( S/PV.4833 , p. 3 ) . At the same time , one has to agree with his statement that “ If we always and everywhere insist on uncompromising standards of justice , a delicate peace may not survive ” ( ibid . ) . The challenge is to facilitate the reintegration of offenders and at the same time bring a sense of justice to the victims , breaking the cycle of impunity and defending the rule of law without provoking a destabilizing backlash , with political stability remaining precarious . Given this context , the concept of restorative justice has been gaining legitimacy as a middle ground between retributive justice and a blanket pardon . Restorative justice would rely on traditional arbitrators and on a high degree of public participation , flexible procedures , and social pressure as a means of enforcement and accountability . Ideally , greater emphasis should be placed on the acceptance of responsibility and on the making of amends than on the severity of the punishment meted out . Restorative justice addresses the need to preserve public order and to maintain a just peace . It cannot be regarded as a panacea , and it certainly does not detract from the work of the International Criminal Court and the fight against impunity , both of which are of the utmost relevance . It certainly merits the attention of the United Nations and could be made a part of future peace negotiations . Restorative justice is a helpful concept , as it focuses on undoing harm . In this regard , the timing of the reparations made to victims is crucial . The re-establishment of identities and a commitment to a new social relationship are also highly important elements . Groups are brought once again into the framework of political interaction , and the military is , in most cases , depoliticized . Reconciliation does imply the striking of a delicate balance between antagonists , within the context of justice and truth-telling . An emphasis on building trust is indispensable for reconciliation in ravaged societies . Otherwise , great resentment may be created that could lead to recidivism , a phenomenon that could make the reconciliation process seem like a continuous tightrope walk . Each new national reconciliation effort requires a deep immersion in the specific grievances of the afflicted community , through the establishment of lines of dialogue with the key actors , as well as — incrementally — among them . The United Nations cannot impose a durable peace ; only victims and perpetrators can strive to reconcile with one another . The United Nations can , however — by positioning itself as a neutral facilitator while clearly leaving the ultimate responsibility for reconciliation in the hands of the aggrieved population — establish favourable conditions as well as offer political advice and valuable technical assistance in the areas of justice and truth-seeking . On a concluding note , our delegation would like to stress that , although there is no single model for post-conflict reconciliation , and any effort will always be subject to pitfalls , an integrated approach to the process must nonetheless be sought and , to the extent possible , woven into the work and mandates of the United Nations as it endeavours to help war-torn societies get back on their feet and achieve durable peace . The President ( spoke in Spanish ) : I thank the representative of Brazil for the kind words he addressed to our Mission . Mr. Akram ( Pakistan ) : I would like to welcome you once again , Madam , to the presidency of the Security Council . We wish also to thank you , Ambassador Muñoz and the Chilean delegation for having convened this important debate and for the Arria-formula session which was arranged with non-governmental organizations ( NGOs ) . I should like also to thank Under-Secretary-General Kalomoh for his important statement as well as the Administrator of the United Nations Development Programme ( UNDP ) , Mr. Mark Malloch Brown , and Ms. McAskie , Deputy Emergency Relief Coordinator . The conclusion of the cold war , instead of promoting universal peace , coincided with the eruption of a number of conflicts among , and especially within , States in various regions of the world . The agenda of the Security Council and the list of our peacekeeping operations over the last decade reflect this . The Pakistan delegation has consistently emphasized the point — which was raised this morning by the UNDP Administrator and Ms. McAskie — that prevention is better than cure . The Security Council , the Secretary-General and our other agencies have considerable scope for action to prevent conflicts through the modalities and mechanisms available under Chapter VI of the United Nations Charter . Reconciliation entails a multifaceted process . The first fact which must be acknowledged is that there is no “ one size fits all ” approach to promoting post-conflict national reconciliation . Each situation is different and unique . However , some general guidelines , or parameters , as my German colleague said , can be identified in promoting post-conflict peace and reconciliation . The first step in all situations must be to end the conflict and the accompanying violence and violations of humanitarian law and human rights . Without this , expressions of the desire for post-conflict peace and reconciliation will continue to ring hollow . The onus for halting existing violence must fall equitably on all parties , but especially on the Governments concerned , because they have an institutional capacity and the clear international obligation to halt the recourse to imposed and violent solutions . The second step , which can be initiated in parallel with the first , is to address the root causes of the conflict . These causes can be both internal — religious or group differences , political and social injustices , a struggle for power among rival groups and local leaders — and , often , external — conflicts which are fuelled by external influences such as foreign occupation , arms supplies and the illegal cross-border exploitation of natural resources . In such cases , internal and external steps to halt conflicts and violence would have to go hand in hand in a parallel and reciprocal process . Economic deprivation and discrimination exercised over extensive periods prior to the conflicts are often ignored , although in most cases they are the root causes of the conflict . Post-conflict reconciliation can be facilitated considerably by equitable socio-economic development . In the process of national reconciliation , transparency and openness , especially to impartial international actions such as those of civil society organizations and the United Nations , can be helpful in arresting ongoing violence and violations and in encouraging the parties to address the underlying causes of the conflict . The focus on providing transitional justice and redress for past violations and injustices for affected individuals and groups no doubt constitutes an important element in promoting national reconciliation . This can obviously happen only once ongoing violations and violence have been halted . The pursuit of justice , while essential , should not become an obstacle to peace , as the Secretary-General noted at our previous meeting . Brazil 's reference to “ restorative justice ” is an interesting concept . However , in any case , there must be no impunity for the most serious violations , such as genocide and violations of the Fourth Geneva Convention , which must not go unpunished . The Security Council , the Secretary-General , the United Nations Secretariat and our agencies such as UNDP are well placed to play an active role in post-conflict reconciliation . This is indeed the desire of world public opinion and of the people who are involved in such conflicts . Over the past decade , the United Nations has gained considerable experience and developed institutional mechanisms and methodologies to respond to the serial conflicts and post-conflict situations in various parts of the world , such as East Timor , Bosnia and Herzegovina , Cambodia , Sierra Leone and Afghanistan . United Nations efforts must therefore receive adequate financial and political support from all Governments in order to attain the objectives which have been espoused by the world community . The precise response of the Security Council and of the United Nations at large will naturally depend on the specific nature and content of a given situation . Such responses can include the dispatch of a special envoy to mediate , a fact-finding mission , utilizing the specific mechanisms of the Commission on Human Rights and of the Office of the United Nations High Commissioner for Human Rights , the appointment of a special representative of the Secretary-General and dispatching a peace observer mission . And where efforts at post-conflict reconciliation are being conducted in parallel with containing a conflict , there will be a need to buttress the process with full-fledged peacekeeping operations , such as those in Afghanistan , in Liberia and soon , we hope , in Côte d'Ivoire . Such peacekeeping operations should encompass wider mandates to monitor human rights violations and progress in peace-building and reconciliation ; to identify responsibility for war crimes and crimes against humanity ; to implement disarmament , demobilization and reintegration programmes ; and to provide technical , legal and institutional support to the parties concerned . One issue that often needs to be addressed is the question of the consent of the parties concerned to the mediatory and peace-building role of the United Nations . Refusal by any State or other party to allow the United Nations to play a helpful role in conflict resolution and peace-building cannot be a sign of good intentions . Obviously , where a conflict situation cannot be successfully addressed by the parties , the need for the Security Council and the Secretary-General to assume a role should be evident , in accordance with the provisions of the United Nations Charter . Yet even where the parties are engaged in peace-building , the United Nations can and should play a useful role in encouraging them , in monitoring progress and in playing a good-offices and mediatory role , as outlined in Chapter VI of the Charter , especially where the United Nations has obvious and direct responsibilities under resolutions and decisions of the Security Council . Finally , we cannot ignore the fact that many conflict situations arise from the politics of poverty and scarcity . Post-conflict reconciliation will inevitably have to be built upon the provision to destitute and desperate people of hope for a better tomorrow . Thus , economic and social development must constitute an integral part of the international community 's endeavours to promote peace and reconciliation on a sustainable basis in various conflict situations . The United Nations and its family of organizations , including the Bretton Woods institutions , as well as civil society , have a vital role to play in generating equitable socio-economic development in those countries and regions . To that end , the principal organs of the United Nations — the Security Council , the General Assembly and the Economic and Social Council — must promote and pursue a coherent approach in helping to build peace and reconciliation in complex crisis situations . Mr. Lavrov ( Russian Federation ) ( spoke in Russian ) : We are delighted , Madam Minister , to see you in the Chair , presiding over the Security Council . Our thanks go to the delegation of Chile , which has been guiding our work this January with an effectiveness that we anticipate will continue throughout the month . The item before us today is most topical in the context of the activities of the Security Council with respect to various conflicts . A key goal in conflict resolution is the attainment of national reconciliation in the countries emerging from crisis . The Security Council devotes great attention to the issue of national reconciliation in the specific situations on its agenda . In January 2004 , the Council has adopted resolution 1522 ( 2004 ) to assist in efforts to form an integrated national army in the Democratic Republic of the Congo ; it has considered the post-conflict rehabilitation of Sierra Leone ; it has discussed the implementation of the recommendations of the Security Council mission to West Africa ; and it is engaged in intensive work to prepare the deployment of a large-scale , multi-function United Nations mission to Côte d'Ivoire . Those are examples from one month alone , and all of them are directly related to the promotion of national reconciliation . There is no doubt that the parties to a conflict themselves must play the main role in charting the paths towards national reconciliation — paths that take account of local characteristics , traditions and customs . Here , the range can be extremely broad : from the establishment of national truth and reconciliation commissions , the organization of nationwide dialogue , the formation of transitional governments of national unity and the proclamation of general amnesties to the setting up of ad hoc tribunals to prosecute of all those involved in crimes during the conflict , including those involved in massive violations of human rights and of the norms of international law , in particular international humanitarian law . We have repeatedly observed that there can be no peace or concord without justice . But the quest for justice should not be an impediment to peace . In this complex and painful process , a special role should be played by the international community , and primarily by the United Nations , whose key task is to promote the creation of the conditions necessary for national reconciliation processes . Here , we refer primarily to establishing a secure climate that can rule out attempts to use armed force to settle political problems . The experience of United Nations peacekeeping operations has shown that only a comprehensive approach to a settlement can restore lasting peace and ensure the attainment of genuine national reconciliation in countries emerging from crisis . Such approaches include assistance in the disarmament , demobilization and reintegration of ex-combatants ; the provision of international guarantees ; and assistance with building a civil society and the rebuilding of State institutions — including through the holding of free democratic elections ; fostering post-conflict economic rehabilitation ; promoting security , judicial and law-enforcement reform ; addressing women 's issues and the problem child soldiers ; et cetera . A striking example of the special responsibility borne by the parties to a conflict can be seen in Kosovo , Serbia and Montenegro . Unfortunately , the progress made in the Kosovo settlement has came about thanks essentially to the international presences in that province . The Provisional Institutions of Self-Government often complicate such efforts , abuse their powers and even attempt to undermine the basic resolution of the Security Council : resolution 1244 ( 1999 ) . Another conclusion we can draw from the case of Kosovo is the importance of a holistic approach , establishing a division of labour between the United Nations and regional organizations . In that province , there is close interaction not only among various components of the United Nations system , but also among regional organizations such as the North Atlantic Treaty Organization , the European Union , the Organization for Security and Cooperation in Europe and the Council of Europe . All together , they make an important contribution to the common cause . United Nations peacekeeping operations in Africa , particularly those in Angola and in Sierra Leone , clearly demonstrate the Council 's ability to deal with the most complex of tasks involved in the settlement of crises and the promotion of national reconciliation . A striking example of the great importance of ensuring a central role for the United Nations in promoting national reconciliation is that of Afghanistan . The briefing recently given to the Security Council by Mr. Lakhdar Brahimi , the then Special Representative of the Secretary-General for Afghanistan ( see S/PV.4893 ) , showed that some fairly good results have been achieved in that country in an unusually brief span of history . We note in particular the country 's adoption of a new Constitution , which has opened the way for democratic reforms in Afghan society . Certainly , much remains to be done , and the Security Council must continue to devote priority attention to Afghanistan 's problems . It will be possible to implement our shared effort to support the Afghan settlement only if a unified approach is maintained in the international community as a whole , particularly among Afghanistan 's neighbours . The convening of a representative international conference on Afghanistan would be another important step in that area . The successful experience of the settlement achieved in Tajikistan offers a wealth of lessons on national reconciliation . That experience was useful also because it included an effective plan for interaction among the various international actors . The United Nations Mission of Observers in Tajikistan , Contact Group of Guarantor States and international organizations donor countries all played an indispensable role at various stages of the inter-Tajik settlement , whose culmination was the implementation of the Moscow General Agreement on the Establishment of Peace and National Accord in Tajikistan . That the effort was effective is demonstrated by the fact that today , Tajikistan is experiencing development , has successfully overcome a dire societal division and is on the path to national harmony . The Security Council must take all of those lessons into account in its current work on the post-war rehabilitation of Iraq and in post-conflict rehabilitation efforts in Liberia , Guinea-Bissau , the Central African Republic and other crisis areas . We look forward to further close cooperation with all Council members and with members of the wider United Nations family in carrying out those efforts . The President ( spoke in Spanish ) : I thank the representative of the Russian Federation for the kind words he addressed to my delegation . Sir Emyr Jones Parry ( United Kingdom ) : Building a sustainable peace in countries that have suffered from armed conflict is one of the most difficult challenges we face , so I thank you , Madam Minister , for scheduling this debate . I am grateful to those who presented briefings , and I should like to associate myself with the remarks to be made later by Ambassador Ryan on behalf of the European Union . I shall shorten my intervention , Madam President , to comply with your request at the beginning of today 's meeting . The rule of law is an essential element in establishing democracy , but it is not enough in itself . The goal for countries emerging from conflict is to be able to transform themselves into democratic States — not only States that respect law , but States whose citizens are bound together by common commitments and objectives , regardless of ethnicity , religion , past division or conflict . The minimum is coexistence among citizens ; much better are productive cooperation and harmonious , peaceful living together . History , if it has taught us anything , has shown us that cycles of conflict are truly broken where political and social measures accompany legal ones and where the participatory and emotional elements of reconciliation are not overlooked . Finding ways and processes that enable people to participate in the rebuilding of their country and to deal with those emotions is perhaps the most difficult challenge . It seems to the United Kingdom that , in many ways , reconciliation is about trust : promoting it where it has never existed and re-establishing it where it has been lost — trust between communities on different sides of a conflict , between groups within society or between citizens and their Government . It is a bridge from being in a state of conflict to reaching a shared peace , and , where it includes the end to injustice , it can provide a foundation for preventing future atrocities . As others have said , there is no one blueprint for justice and reconciliation that fits all cases ; different approaches fit different countries . Experience suggests that a reconciliation process has the best chance of success if it is built from the ground level . Durability is best guaranteed by local ownership . If the people of the conflicting parties or ethnic groups — both perpetrators and victims — are to be encouraged to enter that painful process , then they need to have a common purpose to rebuild their societies . Different models exist and have been described by others . There are issues of sequencing . In that regard , permit me , if I may , to borrow from some recent comments by Lakhdar Brahimi , who said that there are three key steps to establishing justice and the rule of law : first , injustice needs to be ended ; secondly , a fair judicial system needs to be created ; and it is right to take the third step — of tackling past crimes — only when those two steps have been taken . So perhaps there is a time and a place to pursue justice and reconciliation vigorously and a time and a place to hold back . The key focus of today 's discussion is how best the United Nations can help . Few would argue with the moral authority of the United Nations , an impartial actor with the weight of the international community behind it . Politically , not only has the United Nations played a key role in facilitating peace processes around the world , but , at the country level , United Nations country teams , Resident Coordinators and agencies have sometimes played a more subtle convening role in difficult situations , bringing together various stakeholders to start a dialogue or facilitating a planning process to bring about consensus on the way forward for a difficult set of issues . United Nations peacekeeping operations around the world can provide the essential security framework that is the catalyst for national reconciliation to proceed — a framework for security that allows communities to re-establish some sense of normality in their lives , to restart economic activity and to move more freely . And it is in development terms that the programmes of United Nations agencies aim to facilitate the building of basic elements of human security : good governance , security sector reform , participation , justice , health , education and economic opportunities . All those processes , as we have heard , support national reconciliation . Given the United Nations experience of reconciliation , how can we ensure better use of best practices ? First , I would suggest that we should encourage the agencies to maintain — and indeed to enhance — their excellent work . Secondly , we might support United Nations efforts to identify and use the network of reconciliation practitioners : United Nations staff who have experienced reconciliation first-hand and can put that experience to good use in a different context . Thirdly , we should make creative use of information systems to provide the huge benefits of lessons learned and best practices , ensuring that information is shared quickly and easily among the right people so that the United Nations has the capacity at Headquarters to mobilize and moderate such information and best practices . And fourthly , we might continue to encourage an integrated approach among the various parts of the United Nations system so that lessons on the political , peacekeeping and developmental approaches can be shared , with no sense of departmental boundaries . Re-establishing justice and starting to reconcile communities that were once in conflict will inevitably be an imperfect process , but the United Nations can and should play a central supporting role . It has the right tools to make a contribution and breadth of experience that enables it to add value where others cannot . I hope that this debate that you have launched , Madam President , will be the start of our consideration of how we can better support the United Nations to be more effective in this area , but not only here in the Council : given the interest that all parts of the United Nations have , that consideration should be taken forward coherently in the General Assembly , in the Economic and Social Council and in the executive boards . Mr. Baja ( Philippines ) : I would like to congratulate your delegation , Madam President , for organizing this debate on a very timely topic and for organizing an Arria formula debate on the same topic last week . We are again honoured by your presence and by your presiding over this meeting on the eve of your much-awaited visit to my country . We are also grateful for the very informative briefings given by the Assistant Secretary-General for Political Affairs , the Administrator of the United Nations Development Programme and the Deputy Emergency Relief Coordinator . The issue of national reconciliation has touched every nation in one form or another , some in the distant past while others more recently , if not even at the present time . No country has ever been homogenous in all respects . All are liable to be challenged by fissures in the fabric of their societies , some more acutely than others . There are diverse sources of the division of societies and communities , and experience has shown that they run the gamut of racial , ethnic , political , ideological and religious factors . Unfortunately , such conflict sometimes leads to violent confrontation and the breakdown of the body politic . If this happens , the easier task is to stop the violence . The harder challenge is to begin the process of reconciliation and reverse the dynamics of conflict that ruptured the society . Winning the war is easier than winning the peace . My delegation would like to add further emphasis to some general propositions referred to previously by members of the Council that have enriched our discussion of the topic at hand . First , there are no quick fixes to achieve reconciliation in post-conflict societies . National reconciliation generally takes place through a long-term process , aided by policies and actions that confront the conflict head-on . It requires serious efforts to take stock of , assess and analyse the conditions under which reconciliation can take place . While there are no easy solutions , the process of reconciliation is indispensable to ensure the long-lasting stability of post-conflict societies . Secondly , national reconciliation is essentially an internal process and cannot be imposed externally on communities in conflict . I think the delegations of Brazil and the United Kingdom have eloquently observed that . The context of each post-conflict society is unique . The parameters of the process of reconciliation must grow out of the specific experiences of the society concerned . No external body or organ can decree reconciliation from the outside . That would invite disaster . Stakeholders in post-conflict societies must have the sense of having ownership of the process if it is to bring about the emergence of institutions and practices capable of creatively resolving the kind of social and political tensions that led to past violent conflict . This is not to say , however , that the expertise and the guidance that could be provided by outside groups such as the United Nations have no place in national reconciliation processes . In many instances , the traumas of violent conflicts are so deep that conflicting groups require the even-handedness of objective outsiders to overcome emotional , cultural , political and other hurdles to mount a successful reconciliation process . But such an intervention , while desirable in certain instances , must be pursued carefully to maintain the integrity of the reconciliation process . One danger that could undermine such integrity would be for the interveners to yield , wittingly or unwittingly , to the temptation of supplanting the goals and values of the stakeholders with their own . Thirdly , reconciliation should delve into a conflict 's dynamics , which span the entire political , physical , cultural and psycho-social dimensions of the society concerned . The physical and political ravages of war and violence are clearly felt and observed and , more often than not , become the focus of attention in the reconstruction of societies in transition . While this is an important consideration , those ravages do not represent the totality of the negative impact of conflict . Healing the hearts and minds of victims in post-conflict societies is sometimes more critical than the reconstruction of burned villages or the salving of maimed bodies . The violent rupturing of a society sometimes necessitates the search for new social identity , meaning and values , which cannot be downplayed or smoothed over with political niceties and rhetoric . Post-conflict societies face a multitude of challenges . Let me at this time discuss one of the shared , perennial dilemmas in transitional societies that weigh heavily on the issue of reconciliation : how to balance the legitimate demands for justice against the perpetrators of heinous crimes with the vital need for peace and stability . It is difficult to measure the legitimate interest in punishing perpetrators against the imperative for national reconciliation in a society recently torn by conflict . Should post-conflict societies pursue truth and justice above all else , or should they focus on the attainment of political stability and not put in jeopardy their fragile new democracies under the pressure of truth commissions and prosecutions ? In our view , the correct approach would be somewhere in between those two positions . While justice should figure out in the process of national reconciliation , it must be recognized that in many instances the attainment of retributive justice is not feasible at the onset of the reconciliation process because of the inability of transitional institutions to provide justice through conventional means . This is why one of the most important needs in post-conflict societies is the strengthening of the rule of law and its institutions . This does not mean , however , that contrition and restitution by wrongdoers are not possible during the reconciliation process . Those goals could be pursued through truth-telling alternatives such as truth commissions , which have been tried in various post-conflict societies over the last few decades . Reconciliation , in this case , can lay the path from a past where justice was denied , to a present where it is not yet fully attainable and to a future where it will be an integral part of the social order . Finally , let us not lose sight of one of the most important functions of national reconciliation : to lay the foundation for preventing future conflicts and atrocities . This is one of the dimensions of the process that must be carefully considered by the parties to the conflict . National reconciliation should not focus narrowly on reacting to overt violence associated with the widespread abuse of human rights . It must include proactive social and political strategies for the removal of political and social conditions that made discrimination and abuse acceptable in the society . This is not a simple task , as it could require the transformation of post-conflict societies from the culture of violence to the culture of peace . In the end , the goal of national reconciliation is to enhance justice based on recognizing and completely accepting the supreme value of the human person , as guaranteed by institutions providing its fullest expression . It creates a society that would have a capacity to deal creatively and equitably with the threat or eruption of conflict based on the values of truth , justice , mercy and dignity . With those considerations in mind , the United Nations has a key role in achieving national reconciliation in post-conflict situations . In playing such a role , security and development offices within the United Nations system should maintain their core roles as they work for greater synergy , which will integrate political strategies with development policies . As the delegation of Germany has observed , the real challenge for the United Nations will be its ability to deliver it expertise and its assistance in a coherent , coordinated and effective manner . Here , the Security Council should have a leading role in generating the political will among the parties in conflict areas , the countries in the region and the subregion and the international community to adopt strategies and frameworks that will heal the wounds of conflict and promote the reconciliation process . The President ( spoke in Spanish ) : I thank the representative of the Philippines for his kind words addressed to me . Mr. Gaspar Martins ( Angola ) : I would like to start by thanking you very much , Madam , for presiding over this important debate . This is a very important contribution by Chile , especially following the very rich Arria-formula meeting that we had last Thursday . I would also like to thank Assistant Secretary-General Kalomoh for his contribution and Mr. Mark Malloch Brown , Administrator of the United Nations Development Programme ( UNDP ) , and Ms. Carolyn McAskie for their respective contributions to our debate . I trust that this meeting will contribute to a better conceptual understanding of the issue we are addressing today , particularly on the United Nations role in fostering national reconciliation and assisting countries emerging from conflict to establish the rule of law and justice , the pillars of genuine reconciliation . The lessons learned from peacekeeping operations in various regions of the world point to the need to further explore the linkages between peace , security and justice on the one hand and economic and social development on the other . The challenge ahead is , therefore , to promote a coherent and integrated approach involving early warning , conflict prevention , crisis management , conflict resolution and post-conflict national reconciliation and reconstruction . Every society emerging from conflict faces the issue of addressing the human rights violations committed during the conflict . Accountability for those crimes is not only a question of justice for the victims and for those guilty of committing such crimes but also of looking forward to a future of justice . The criminal accountability for war crimes , genocide and crimes against humanity is , therefore , a critical component of the process of national reconciliation . The international tribunals for Rwanda , Sierra Leone and the former Yugoslavia , as well as the International Criminal Court ( ICC ) , are very important instruments in rebuilding the foundations of a society governed by the rule of law and fostering national reconciliation . Lessons can be drawn from post-conflict national reconciliation processes that stem from national specificities . In fact , countries emerging from conflict have employed a variety of accountability mechanisms as alternatives to criminal prosecution . A national apology , reparations to the victims , international public pressure and shaming , truth and reconciliation commissions and outright amnesties have been applied as means to end conflicts and set in motion processes of national reconciliation . Each method can be effectively applied under the appropriate political conditions as a price to pay for the attainment of peace . These alternative mechanisms can be successful in fostering peace and national reconciliation if the societies are ready and prepared to engage in a meaningful process of national reconciliation and if the forces causing the divisions are effectively isolated . Today 's meeting takes place two years after the signing of the Memorandum of Understanding at a symbolic and highly meaningful ceremony , which put an end to the long war in Angola . This is also , therefore , an appropriate occasion to take stock of the achievements and of the challenges that lie ahead , especially in fostering national reconciliation . The signing ceremony I am referring to not only signalled the end of the war , a very difficult and painful period indeed in the history of the nation ; it also marked the beginning of a process and of a period of rebirth for a reconciled nation in which people , irrespective of their past and free from war , can live together and face together the challenge of building the pillars of reconstruction to prevent a return to the past . National reconciliation is an imperative , and an expression of the people 's will translated into practice by the political determination of the Government of Angola and of UNITA to live within a pluralistic political framework under the rule of law . In this context of national reconciliation , the competent institutions granted an amnesty for crimes committed during the conflict . The candidates elected in the legislative elections on the list of UNITA and other political parties assumed functions in the national assembly , enjoying the rights , freedoms , guarantees , immunities and privilege provided for by law . Social welfare and social reintegration programmes are being implemented throughout the national territory and , in application of the relevant provisions of the general principle of national reconciliation , members of different political parties were invited to assume posts in the national reconciliation Government and in local administration . A political process was set in motion , conducive to the holding of general elections , as a step towards the consolidation of democratic institutions and the rule of law . Basically , post-conflict reconciliation in Angola is being pursued as a real process of forgiveness and reintegration , in which Angolans are called upon to forgive but not to forget the divisions and the crimes committed during the conflict , in order to build a peaceful society , aware of past divisions — and of the dangers ahead if the programme collapses . Angola 's experience and that of other countries confirms that there is no preset approach to post-conflict national reconciliation and that each situation calls for specific solutions . Every process of national reconciliation must , however , be participative , must enjoy popular adherence and must be seen as a way for the entire nation to reconcile itself with the past and to build a better future . The Security Council has , in recent years , contributed to various aspects of post-conflict national reconciliation . This is reflected in the measures and norms instituted for the protection of civilians in armed conflict ; disarmament , demobilization and reintegration programmes in the context of peacekeeping operations ; and strengthening of international criminal justice . Assistance and financing for reconstruction and reconciliation processes are critical ; much more needs to be done in order to ensure the success of reconciliation in countries emerging from conflict . This goal can be advanced through greater coordination within the United Nations system , the Security Council and the Economic and Social Council especially , as well as the Secretariat , the agencies and the Bretton Woods institutions , as has already been noted . In that connection , we look forward to the Secretary-General 's report on this theme , which I trust will help to fill a gap that seems to remain and has not yet been satisfactorily addressed or covered , as was hinted at again this morning by the Administrator of the United Nations Development Programme . Special attention should be given to the appropriate organ for coordinating post-conflict assistance , comprehensively assessing and meeting the needs of countries emerging from conflict , and coordinating the actions of all international actors assisting in the reconciliation and reconstruction processes , in order to ensure its efficiency and the success of the whole enterprise . This debate addresses an important area of the agenda of our Council , which will deserve more attention in the future . In order to be successful , peacekeeping operations will have to be followed by well-conceived and implemented post-conflict programmes related to cross-cutting issues involving the areas which are covered by the Security Council and the Economic and Social Council , bringing about cooperation between those two organs . The consolidation of peace following a successful peacekeeping operation stands as one of the main challenges to be addressed by our Council . This is therefore a timely debate . Let me end by commending you , Madame , for including this theme on your agenda . The President ( spoke in Spanish ) : I thank the representative of Angola for his kind words addressed to me . Mr. Cunningham ( United States of America ) : First , let me join others in welcoming you back to the Council , Madame . I want to express my delegation 's appreciation that you are again leading our Council 's deliberations on a topic of such complexity and genuine importance . Your presence adds significance to our debate today and is clear evidence of your personal commitment and that of Ambassador Muñoz and the Chilean delegation to finding creative ways for the Security Council better to meet future challenges . Like many people around the world , Americans also live in a post-conflict society . Although our wrenching national tragedy — what we call the Civil War — ended nearly a century and a half ago , its echoes have been felt throughout the intervening generations . Historians have written volumes about the issues related to national reconciliation faced by the United States as the agonies of war gave way to the promise and realization of a reunited , peaceful and prosperous nation . Although our own reconstruction was obviously achieved without the assistance of the United Nations , we believe that the issues we faced as a nation still have relevance to nations attempting to recovery from their own , more recent national nightmares . The need to address issues of transitional and long-term justice , reconciliation , the establishment or reinvigoration of democratic institutions , economic restructuring and recovery , and reintegration into the community of nations remains as critical and as challenging today as it was when we began our effort to address some of those same issues as a post-conflict nation , beginning in the latter half of the nineteenth century . Our effort continued through the twentieth century and , in some ways , is still ongoing this very day . But twenty-first century circumstances offer enormously promising new opportunities for nations facing the challenges of post-conflict national reconciliation . Advances in communications and the increasing interdependence of our world mean that national tragedies are now played out on the world stage . A growing sense of commonality and shared experience has increased the number and scope of potential remedies available as countries begin their long roads back to peace , justice and normalcy . Intra-State conflicts are fundamentally different from those that occur between nations and it is an unfortunate fact of recent history that deadly conflicts are increasingly occurring within , rather than between States . Unlike traditional conflicts between States , where the belligerents can be expected to return to their own territories , in these conflicts former belligerents must , at the end of the conflict , resume their roles as neighbours and fellow citizens . That was the case in my country at the end of the Civil War . Finding a home to come home to is the great task of any post-conflict society . Among the most significant potential resources available now to assist nations in their effort at post-conflict national reconciliation — finding that home to come home to — is the United Nations itself . In its deliberations last week , the Council focused on children and armed conflict . Finding homes for those children to come home to poses a unique and special challenge . Indeed , all the disarmament , demobilization and reintegration programmes and activities of the United Nations and other international actors are , in a very real sense , the mechanism to accomplish that goal . The various organs and specialized agencies of the United Nations have experience and demonstrated expertise in a number of relevant areas . The scope and duration of the United Nations direct involvement should and will vary considerably from case to case . We may use it to go as far as creating an interim administration that effectively becomes the post-conflict governing authority until local authorities are ready to assume that responsibility themselves . In other cases , the United Nations involvement may be more narrowly focused , drawing on the wide range of capabilities it can bring to bear , many of which we have already discussed this morning . Our task as the international community and as the Security Council is to find the right set of tools to help bridge the gap between the end of conflict and the resumption of normal economic life in a reconstituted society . Others have noted that each national situation is unique . The United Nations experience over the years in dealing with conflicts at varying stages and in different capacities makes it a repository of knowledge and a valuable unifying instrument that can materially enhance the effectiveness of international assistance to a nation embarking on the path of reconciliation and recovery . My delegation looks forward to hearing from others about their individual reconciliation experiences and I think the intervention by the representative of Angola was very illustrative in that regard . Lessons learned from the past may help us address the cases of national reconciliation that will — unfortunately but inevitably — face us in the future . In those future cases , as with those in the past , there will be no easy prescriptions for success and the cost of failure will be almost immeasurably high . That said , it is the belief of my Government that the establishment , restoration or preservation of democratic governance should be the most important overarching objective of post-conflict reconciliation . Only thus can the requisite political will and commitment to recovery be built and maintained . Such will is a fundamental precondition for reconciliation . Without developing democratic governance , the likelihood of successfully addressing the critical questions of justice , truth and equitable reconstruction will be vanishingly and tragically small . Mr. Cheng Jingye ( China ) ( spoke in Chinese ) : I wish to begin by thanking the delegation of Chile for its initiative of convening this open debate . I welcome your presence here , Madame , to preside personally over this important meeting . I wish to thank Mr. Kalomoh , Mr. Malloch Brown and Ms. McAskie for their statements . National reconciliation is an important condition for lasting peace and stability in post-conflict regions . When conflicts end , if the parties concerned do not put aside their old grievances , a genuine consolidation will hardly be possible and the flames of conflict are likely to be rekindled . In many instances , post-conflict national reconciliation requires joint efforts on the part of all the parties concerned , as well as support and assistance from the international community , in particular the United Nations . Over the years , the United Nations has played a useful role in post-conflict national reconciliation processes , thereby acquiring a great deal of experience . We believe that if it is to be successful in helping to facilitate post-conflict national reconciliation , the United Nations should effectively address three specific relationships . The first of these is the relationship between immediate needs and long-term goals . Generally speaking , national reconciliation is a process that cannot be completed overnight . Each phase of the process should have its own focus . The first priority , at the outset of the post-conflict national reconciliation period , is that former combatants lay down their arms so as to create a secure environment . In this phase , the focus should be the disarmament , demobilization and reintegration of former combatants into society . The advantage that the United Nations has in this field must be brought fully into play . From a long-term perspective , durable national reconciliation must be based on the creation of adequate economic conditions . After the situation has stabilized , the United Nations should actively mobilize the international community to effectively help the countries concerned to achieve economic reconstruction and development . Secondly , as regards the relationship between justice and stability , national reconciliation requires that the perpetrators of acts that violate international humanitarian and human rights law be punished in order that justice be upheld . At the same time , efforts must be made to avoid a negative impact on the peace process and to forestall the development of new conflict in society . In certain circumstances , therefore , amnesty is indispensable to national reconciliation . In the words of the Secretary-General , Mr. Kofi Annan , if we always and everywhere insist on uncompromising standards of peace , a delicate peace may not survive . Over the past 10 years or so , some post-conflict countries have taken a variety of measures to ensure justice for victims . Such measures include the establishment of truth and reconciliation commissions and special courts , the holding of national dialogues and the improvement of the justice system , for all of which the United Nations has provided assistance . Relevant United Nations agencies need to take stock of their experience in this regard so as to ensure that United Nations actions have a positive impact on national reconciliation , as well as on the peace process . Thirdly , with regard to the relationship between international support and ownership by the parties concerned , post-conflict national reconciliation is not possible without the support and assistance of the international community and the United Nations . At the same time , national reconciliation within a country will depend , in the final analysis , on the efforts of all the parties concerned in the country . The support and assistance of the international community must therefore be based on an understanding of and respect for local conditions , traditions , history and culture , and its focus must be on their local interests and needs . Nothing should be imposed upon them . China supports an active role by the United Nations in helping the countries concerned to achieve post-conflict national reconciliation . In view of the fact that various phases of the national reconciliation process often involve a number of different United Nations departments , we hope that the United Nations will enhance its internal synergy and take stock , on an ongoing basis , of its experiences and of lessons learned so that its role in the process can be further improved . Mr. Adechi ( Benin ) ( spoke in French ) : We are delighted to see you , Madam , presiding over our work . We are grateful to you for having organized this open debate . We listened with great attention to the outstanding briefing given by Mr. Kalomoh , as well as to the statements by Mr. Malloch Brown and Ms. Carolyn McAskie . There can be no doubt that the international community is making an enormous effort to put an end to conflict by securing ceasefires and encouraging warring parties to conclude peace agreements . Concluding and implementing a peace agreement is just the initial phase in a long process of national reconciliation that must be encouraged and supported , because it is the best defence against the re-emergence of conflict . The success of national reconciliation will determine how lasting the peace will be . Even if conflicts in Africa have certain features in common , every conflict has its own specific characteristics and the actors involved vary from one conflict to another . Examples of successful reconciliation show that there is a need for an integrated approach to be taken to the process of reconciliation — an approach that looks to the long term . The process of reconciliation cannot and should not be a short-term exercise , because it must bring together social , economic and political elements in a coherent political programme , with a view to rebuilding the State and revitalizing the institutions of good governance . The goal should be achieved using long-term solutions . The specific nature of each situation must be borne in mind , and that is why ownership of the process of national reconciliation is crucial . The parties must be allowed to state their views and concerns . Participation in the process of reconciliation must be as inclusive as possible , and the United Nations or the regional organizations must play a facilitating and support role in this regard . It is important that discussions take place as much as possible in the national language , or that interpretation be made available , so that contributions can be made at the grass-roots level . The national dialogue organized in Niger with United Nations support is an example of good practice from the standpoint of ownership of or representation in the process of national reconciliation . Reconciliation involves action to prevent the re-emergence or outbreak of an internal conflict . Here , I would like briefly to allude to the process of reconciliation in the context of the non-violent restoration of democracy . Benin has had some experience in this area . Fortunately , we did not have to deal with an armed conflict , but all the ingredients were present for the outbreak of civil war . In keeping with the very African practice of negotiating under the banyan tree , the National Conference of February 1990 brought together representatives of all social groups , whom we in Benin referred to as the dynamic currents of the nation , in order to find the most appropriate way in which to resolve the crisis . After eight days of debate , a consensus draft of a social document was agreed to . The fundamental texts were drafted and adopted during a transitional period of 12 months , following which a new democratic political system was established . Fourteen years later , democracy , which was restored to Benin , is taking root and ensuring social peace and political stability . The success of the national reconciliation process in Benin owes its success , first and foremost , to the fact that the political stakeholders abandoned force and violence . The second element — which was decisive — was the fact that priority was accorded to the political and economic dimension and to restructuring the State , rather than to finger-pointing . In order to strike a balance , to ensure that impunity was not encouraged and to bring about social peace , financial reparations were provided in the case of proven human rights violations . At a more general level , political transition has an important role to play in the restoration of confidence and the strengthening of national reconciliation . Given the competition inherent in any election , hastily organized elections could jeopardize a fragile balance that has not been fully consolidated . A Government of national unity or other power-sharing arrangements may prove to be necessary — indeed , they may be preferable . It is often forgotten that democracy only survives because democrats are there to guide its institutions . In general , it is better to take the time to build a consensus according to the rules of the political game before embarking on the electoral process . In achieving such a political process , rather than hastily organizing legislative elections , it is sometimes a good idea to establish an advisory body to consider crucial political , economic and social questions — a body in which all stakeholders in the country are represented . Regarding the choice between amnesty and ad hoc tribunals to bring about national reconciliation and lasting peace , here again we believe that the nature of each conflict and of the reparations to be made should prevail . There needs to be a process of reflection on the notion of war crimes in a situation where there is no longer a regular army but only barbaric armed gangs . Flagrant human rights violations , crimes against humanity and genocide should not be tolerated and require punitive justice . The United Nations has an important role to play in the reconciliation process by strengthening the fragile environment in which such a process takes place . The United Nations may assist civil society , which is often a weak and poorly organized element among the parties to a dialogue . The United Nations can promote social peace by helping to reduce economic inequalities . It can supervise the disarmament , demobilization and reintegration of former combatants , with special attention being paid to child soldiers . It can help the subregional organizations to carry out projects that strengthen subregional unity and cohesion . Finally , the United Nations can strengthen reconciliation by promoting real prospects for social progress by reweaving the social fabric . Ongoing economic assistance to countries in a post-conflict situation is essential in order to restore the general socio-economic balance and to guarantee human security . It is for that reason that the United Nations must also take into account the impact that poverty continues to have on development and security . The President ( spoke in Spanish ) : I thank the representative of Benin for the kind words he addressed to me . Mr. Motoc ( Romania ) ( spoke in French ) : The Romanian delegation wishes at the outset to associate itself fully with the statement to be made later by the Irish presidency of the European Union . I wish , through you , Madam Minister , to express our gratitude to the Chilean presidency for having inscribed this item , which is of a universal character , on the Council 's agenda . The Council is an organ that is essential to international stability and security . However , we often find ourselves running from pillar to post , trying to manage the consequences of conflict , with no time to think about ways of increasing the effectiveness of the solutions we are proposing . In that regard , today 's debate can add real value to our thinking about the best means to guarantee lasting solutions to conflicts , most of which , regrettably , have been on the Council 's agenda for far too long . Let us recall that all conflicts destroy not only lives and economies , but also the social fabric that is essential to a functioning society . To make peace prevail and to rebuild infrastructures are vital activities , but they cannot guarantee a permanent end to a conflict . Here we see the need for an integrated approach — political , even military , economic and social — that is present from the very beginning of the Council 's reflection on means of restoring stability to crisis areas . Above all , let us make no mistake ; there can be no lasting solution without reconciliation . The persistence of hatred and resentment means , at best , a paralysed society that is incapable of working for its own progress . At worst , it means the probability of a relapse into murderous folly . Allow me to touch briefly on a subject that is of great importance to the Council : peacekeeping operations . Peacekeeping forces are doing excellent work , interposing themselves , often at the risk of their lives , between rival factions . We must ensure that such missions are put together and equipped in such a way that their action of separating rival parties is supplemented by efforts to bring them together . United Nations forces must not prolong situations of division ; they must contribute to the political and social reunification of areas in crisis . We must not overlook the fact that to speak of reconciliation means taking into account complex disputes that are often difficult to overcome . That means that we must be able not only to contain such disputes to prevent them from recurring , but also to identify , if possible , the principal parties involved . There are no societies in which reconciliation can be based on individual forgiveness and on forgetting past injuries . To think otherwise would be to labour under a dangerous illusion . Romania recognizes the unquestionable contribution made to reconciliation by justice in general and in particular by the establishment of international or national ad hoc courts for the most serious crimes . Impunity cannot be accepted as a basis for building a society , because it will permanently undermine confidence in the legal system and encourage future atrocities . We would mention also the need , in order to strike a balance , to recognize the important role played by amnesties , which , if wisely managed , can contribute greatly to reconciliation . There are , of course , myriad other areas that can contribute to the success or failure of a reconciliation process . We believe that nothing can argue more convincingly in favour of reconciliation than the promise of a decent and stable life . Another very important element is political reform and the rule of law . In that regard , the role and capacities of the United Nations are invaluable . Good guidance in the context of reform processes is vital , because such processes , if correctly managed , can lead to a moral dynamic , social cohesion and the good will that is necessary to achieve true reconciliation . The first example that comes to mind in this regard is that of Georgia , where , we believe , a sound programme of economic and political reforms , assisted by a resolute fight against corruption , can have a positive impact on the peace process . However , United Nations representatives must pay attention to the real political conditions on the ground . They have the support of this delegation for a pragmatic approach , because sometimes a political reform that is too rapid , or inadequate , can be counterproductive to international efforts . Romania does not wish to let this opportunity go by without touching on some specific aspects relating to the Council 's aims with regard to the process of national reconciliation . For that reason , we would appeal , in the context of resolution 1244 ( 1999 ) , to the population of Kosovo and to its leaders — Albanian Kosovars and Serb Kosovars alike — to commit to a true reconciliation . Absolute priorities at this time are participation in the drafting and implementation of a plan of application of the standards for Kosovo , and in particular participation in the direct dialogue between Belgrade and Pristina , which , indeed , is one of those standards . Allow me to close my statement on this complex subject with a few comments on the role that the Council can play . National reconciliation cannot be achieved overnight . It is a complex and very delicate psychological process that requires several generations to come to full fruition . For that to happen , there must be a sound initial framework and constant encouragement for the parties in the initial post-conflict stages . There is no single solution for all conflicts and all parties involved in conflicts throughout the world . For that reason , we are convinced that the Council must have a firm grasp of the political dynamics on the ground and a clear picture of the broader regional or subregional context . It is also important for peacekeeping missions and representatives of the international community and of the United Nations to have a clear mandate and be vested with an authority that is fully supported by the Council in order to make progress in very difficult political and security conditions . The meeting was suspended at 1.30 p. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-154A . </text>
<text id="un/S_PV4944">
Agenda The situation between Iraq and Kuwait The meeting was called to order at 10.17 a. m. Adoption of the agenda The agenda was adopted . The situation between Iraq and Kuwait The President : The Security Council will now begin its consideration of the item on its agenda . The Council is meeting in accordance with the understanding reached in its prior consultations . At this meeting , the Security Council will hear a briefing by Mr. John Negroponte , the representative of the United States . Mr. Negroponte ( United States of America ) : On behalf of the Member States contributing forces , I am pleased to report to the Security Council on the efforts and progress of the multinational force authorized under Security Council resolution 1511 ( 2003 ) . Together with our multinational force partners , the United States remains committed to a secure , stable and democratic Iraq at peace with its neighbours . To that end , the multinational force and Iraqi security forces are working together to provide security for the Iraqi people and to defeat those who seek to destabilize Iraq . The Security Council adopted resolution 1511 ( 2003 ) in the wake of a series of violent incidents directed against the Iraqi people and members of the international community , including the United Nations . Resolution 1511 ( 2003 ) recognizes that international support for the restoration of conditions of stability and security in Iraq is essential for the well-being of the Iraqi people , for their ability to elect a new Government under a permanent constitution and for the ability of all concerned to carry out their work on behalf of the people of Iraq . The events of recent days demonstrate yet again that there are those who believe that they should decide Iraq 's political future through violence . Yet only peace and justice , enforced by the rule of law and not by the gun , and freedom from fear of terror or a return of former regime elements will enable all Iraqi citizens to participate fully in political and economic life . All of us gathered here mourn the loss of life in Iraq , among members of the multinational force and Iraqi and international civilians . But let me be very clear : we will stay the course . In addition to the United States , the multinational force comprises more than 30 countries contributing a total of approximately 24,000 personnel . The multinational force is divided into three sectors : centre-south , south-east and northern Iraq , which includes Baghdad . Forces in all sectors are engaged in stability operations , reconstruction efforts , the training of Iraqi security forces and civil affairs training . As recent days have vividly demonstrated , threat elements continue to challenge all those who are working for a better Iraq . We have witnessed ambush and mutilation , riots and attacks , perpetrated by three groups : insurgents including former regime loyalists , terrorists who have infiltrated Iraq and militias affiliated with radical elements . The violence has been terrible and the losses great . In fulfilling the Security Council 's mandate “ to contribute to the maintenance of security and stability in Iraq ” ( resolution 1511 ( 2003 ) , para . 13 ) , the multinational force has conducted the full spectrum of military operations , which range from the provision of humanitarian assistance , civil affairs and relief and reconstruction activities to the detention of those who are threats to security , looking for and securing weapons that threaten Iraq 's stability , intelligence-gathering and , when necessary , offensive combat operations against insurgents , terrorists and others . Against the backdrop of continued threat , the multinational force has performed or assisted in many humanitarian and reconstruction activities throughout Iraq , in all of the division sectors . Assistance has been provided by all soldiers , sailors , airmen and marines assigned to the multinational force as well as by civil affairs personnel . The initial focus of humanitarian and reconstruction activities was the restoration of essential services for restoring electricity to homes , public facilities and business . That was critical to returning normal life to the Iraqis . Engineering units have been key in helping restore power to levels that now exceed pre-conflict levels in both the North and the South of Iraq , and units of the multinational force have helped to provide security for key infrastructure until the Iraqi Facilities Protection Service could take on that role . Multinational force engineering units have helped repair numerous bridges , ports , roads and railroads . But multinational force units have been involved in much more than large engineering projects . Multinational force tactical units have assisted in local construction projects throughout Iraq , resulting in the construction and repair of schools , hospitals , post offices and other public buildings . Multinational force explosive ordinance disposal units have disposed of thousands of tons of captured or found Iraqi ammunition , including mines . Multinational force medical units have treated Iraqi civilians throughout the country and have assisted in children 's vaccination programmes . All multinational force units in all sectors have assisted in the distribution of the new Iraqi dinars over the past several months . Perhaps the longest-lasting contribution multinational force units may make is in the area of local governance . Civil affairs personnel have been crucial elements of the seed of Iraqi democracy , working daily to help Iraqis form the basis of a civil democratic society . These civil affairs personnel are active in all 18 governorates and have helped form 17 governorate councils , 78 city councils , 102 district and sub-district councils and 138 neighbourhood councils , giving a genuine political voice to millions of Iraqis for the first time in decades . In addition to the broad-based efforts of the multinational force that I have described , one of its key long-term objectives is to recruit , train and equip Iraqi security forces in preparation for their assumption of the responsibility for maintaining security and enforcing the rule of law . This is both a major challenge for the multinational force and a work in progress , requiring continued multinational force support . The multinational force has made significant progress in standing up Iraqi security forces , given the vacuum created by the dissolution of the Iraqi police and armed forces when Iraq was liberated . Despite the increase in attacks targeting Iraqi security forces , Iraqis continue to join and the multinational force is methodically working to build professional entities to provide a stabilizing influence , from routine civil policing to combating terrorism throughout the country . Iraqis know the rhythms of their neighbourhoods , the language and the culture and are best equipped to provide a long-term security solution . Their involvement is therefore critical to combating successfully threats from hostile elements that remain currently active in Iraq . At the beginning of April 2004 , approximately 200,000 members of Iraqi security forces were either on duty or in training . Clearly , however , numbers are only part of what makes security forces effective . The development of competent leaders is critical and takes time . The multinational force will be engaged on a priority basis in both the development of leaders and in specialist training in the months ahead . In February , when I reported on the implementation of resolution 1483 ( 2003 ) , I provided a comprehensive description of the various Iraqi security forces — specifically , the Iraqi Civil Defence Corps , the Iraqi police service , the Facilities Protection Service , the new Iraq armed forces and border security . I would like to take this opportunity to provide the Council with a brief further update . The Iraqi Civil Defence Corps , which now totals approximately 32,000 Iraqis , is designed to support local and regional police efforts . The Civil Defence Corps performs a range of duties , including fixed-site security , convoy security , patrols , cordons , the establishment of checkpoints and other tasks under the operational control of the multinational force . The Iraqi police service also has continued to grow and , as of the beginning of April , over 75,000 police officers were on duty or in training . The Facilities Protection Service , charged with protecting Iraq 's strategic infrastructure , Government buildings and cultural and educational assets , also has increased in number to approximately 74,000 personnel overall . From 1 March of this year , each of Iraq 's ministries has responsibility for the hiring , payment , equipment and training of its individual guards . As of 9 April , the Iraqi armed forces had nearly 4,000 personnel on duty , many of whom have participated in military operations against insurgents and terrorists under the operational control of the multinational force . Lastly , the Iraqi border police and immigration and customs inspectors totalled approximately 23,000 at the end of March . Necessary equipment is flowing in and training has been integrated into the Baghdad Public Service Academy . I note that , while we have made substantial progress in securing Iraqi borders , much work still needs to be accomplished . I have just described the range of Iraqi security forces and want to stress a related issue that has become all the more critical in light of recent events . As President Bush stressed on 13 April , there is no place for armed militias in Iraq . Our objective is to establish the rule of law in a democratic Iraq and to prevent any party from exercising influence through violent means . Many Iraqis have expressed strong support for the end of militias and armed groups outside of the legitimate Iraqi security services . The Coalition Provisional Authority is engaged in productive negotiations to ensure the transition and reintegration of all armed organizations not under Government control . Progress has been made , but we will have no choice but to deal firmly with those who refuse to negotiate . Resolution 1511 ( 2003 ) authorized the multinational force to contribute to the security of the United Nations Assistance Mission for Iraq . The United States is committed to working with the international community to ensure that the security needs of the United Nations are met , both before and after 30 June . In January of this year , a United Nations team of security experts began working in Iraq to establish a strong relationship with the multinational force to facilitate the return of international United Nations personnel . We continue to work with the United Nations team to this day , including in such areas as identifying potential facilities for United Nations operations , and we have worked closely with United Nations security personnel in coordinating effective security for the important United Nations missions which have been deployed to Iraq — the teams of both Ambassador Brahimi and Miss Pirelli — in support of their work . With the support of the United Nations , the United States has begun to solicit force contributions for the protection of a broad-based United Nations mission , whose role will be further defined by Security Council action . Operating as part of the multinational force , such forces would be dedicated solely to providing security for United Nations personnel and facilities . I believe that I do not overstate the broad desire within the international community for the United Nations to return to Iraq to play an expansive , robust and vital role , in particular after the 30 June transition . In this regard , I urge that Member States contribute to the future of Iraq by providing troops to carry out the function of security support for the essential United Nations role . Member States should contact my delegation or other Coalition members as soon as possible . The end of the occupation and the assumption of governing authority by the Iraqi interim Government on 30 June will mark the beginning of a new era for the people of Iraq . Ambassador Brahimi has consulted with a wide range of Iraqis both inside and beyond the Governing Council over the past 10 days , and just two days ago he outlined his preliminary recommendations for the transition process . The United States welcomes his highly constructive recommendations and looks forward to hearing about them in greater detail . The Coalition 's commitment to Iraq will continue well beyond 30 June , nonetheless . The transfer of sovereignty will not bring total calm to Iraq , and the multinational force will be needed in Iraq to continue to support Iraq 's security forces until they can assume sole responsibility for the security and stability of their country . In the months to come , we will witness continuing efforts by a new Government to further develop institutions of democracy and take on the critical task of preparing elections for the transitional National Assembly , which will subsequently draft a new constitution . That new Government will be challenged by those who are now , and have been , challenging the Iraqi security forces and the multinational force , those who believe that the indiscriminate targeting of the Iraqi people and the international community will erode our shared resolve to see Iraq through a successful political transition . But together with our partners in the international community and the Iraqi people , we will continue to stand fast , anchored by the vision of a stable and secure Iraq at peace with its peoples and its neighbours . The President : In accordance with the understanding reached in the Council 's prior consultations , I should now like to invite Council members to informal consultations to continue our discussion on the subject . The meeting rose at 10.35 a. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-154A . </text>
<text id="un/S_PV5627">
Agenda Post-conflict peacebuilding The meeting was called to order at 9.45 a. m. Adoption of the agenda The agenda was adopted . Post-conflict peacebuilding The President ( spoke in Russian ) : I should like to inform the Council that I have received letters from the representatives of Afghanistan , Argentina , Brazil , Canada , Chile , Croatia , Egypt , El Salvador , Germany , Guatemala , Jamaica , Japan , Nigeria , the Republic of Korea , Senegal and Uruguay , in which they request to be invited to participate in the consideration of the item on the Council 's agenda . In conformity with the usual practice , I propose , with the consent of the Council , to invite those representatives to participate in the consideration of the item , without the right to vote , in accordance with the relevant provisions of the Charter and rule 37 of the Council 's provisional rules of procedure . There being no objection , it is so decided . At the invitation of the President , the representatives of the aforementioned countries took the seats reserved for them at the side of the Council Chamber . The President ( spoke in Russian ) : In accordance with the understanding reached among Council members , I am pleased to invite the following participants under rule 39 of the provisional rules of procedure of the Security Council : His Excellency Mr. Dalius Čekuolis , President of the Economic and Social Council ; His Excellency Mr. Ismael Abraão Gaspar Martins , Chairman of the Organizational Committee of the Peacebuilding Commission ; Ms. Carolyn McAskie , Assistant Secretary-General in the Peacebuilding Support Office ; Mr. Oscar Avalle , Special Representative of the World Bank to the United Nations ; and Mr. Reinhard Munzberg , Special Representative of the International Monetary Fund to the United Nations . Also in accordance with the understanding reached among Council members , I am pleased to invite the following participants under rule 37 of the provisional rules of procedure of the Security Council : the Permanent Representative of Burundi , His Excellency Mr. Joseph Ntakirutimana ; the Permanent Representative of the Netherlands , His Excellency Mr. Frank Majoor ; the Permanent Representative of Norway , His Excellency Mr. Johan Løvald ; and the Deputy Permanent Representative of Sierra Leone , His Excellency Mr. Sylvester Ekundayo Rowe . At the invitation of the President , Mr. Ntakirutimana ( Burundi ) , Mr. Majoor ( the Netherlands ) , Mr. Løvald ( Norway ) and Mr. Rowe ( Sierra Leone ) took the seats reserved for them at the side of the Council Chamber . The President ( spoke in Russian ) : The Security Council will now begin consideration of the item on its agenda . The Council is meeting in accordance with the understanding reached in its prior consultations . This morning 's meeting of the Security Council deals with one of the most significant challenges on the agenda of the United Nations — that is , how to help countries emerging from crisis to overcome the consequences of conflict , to prevent the renewal of those conflicts and to put those countries on the path to sustainable development . It was for this very reason that it was decided at the United Nations summit in 2005 to create the Peacebuilding Commission . The beginning of the Commission 's work was one of the most important and tangible achievements reached by Member States in the reform of the Organization . We hope that the discussion in the Security Council and the forthcoming discussion in the General Assembly will give additional impetus to a mutually supportive partnership between these two organs and among all those who are contributing to the peacebuilding process , and that it will facilitate the constructive work of the Peacebuilding Commission . In accordance with the understanding reached among Council members , I should like to remind all speakers to limit their statements to no more than five minutes in order to enable the Council to carry out its work expeditiously . Speakers with lengthy statements are kindly requested to circulate their texts in the Chamber and to deliver a condensed version when speaking . I shall now give the floor to the President of the Economic and Social Council , His Excellency Mr. Dalius Čekuolis . Mr. Čekuolis : I wish to thank the Russian presidency of the Council for convening today 's meeting and for inviting me to this debate , which , together with other relevant steps , will help us to improve the contributions of the United Nations bodies to the success of the Peacebuilding Commission , in line with their specific competencies and mandates . Time and again it has been noted that there is a strong correlation between low levels of development and violent conflict . Nine out of 10 countries with the lowest human development indicators have experienced conflict at some point or another since 1990. According to World Bank estimates , a civil war lasts at least seven years on average , with the growth rate of the local economy reduced by 2.2 per cent each year . This downward spiral of poverty , conflict and added impoverishment is difficult to reverse . In broader terms , given the linkage between development , peace and security , more focused efforts should be made to advance and oversee the implementation of internationally agreed goals , including the Millennium Development Goals . The Economic and Social Council was given the mandate by the 2005 World Summit to focus on this implementation through its annual ministerial reviews . In doing so , the Council intends to continually assess how conflict is affecting the implementation of the United Nations development agenda . International assistance can play a major role in addressing the challenges faced by conflict-prone countries and in filling some of their capacity gaps . The recommendations made by experts on the volume and sustainability of international aid to fragile States and countries emerging from conflicts , therefore , deserve our full consideration . In particular , research suggests that the optimal period for absorbing increased aid is about six years after a peace settlement , by which time donors tend to move on to another country in crisis . The Economic and Social Council is ready to assist the Peacebuilding Commission in utilizing these insights in its plans and activities . We believe that our respective intergovernmental bodies should exchange views , analyses and policy recommendations on these and other matters . Another example of the perspectives the Economic and Social Council can share with the Peacebuilding Commission is related , for instance , to policy actions on youth employment , because unemployed young people in countries where this phenomenon is massive are an easy target for recruitment into armed groups . As recently as last year , the Council considered the issue and developed policy recommendations regarding the mainstreaming of youth employment into national development plans and development cooperation programmes . The Council continues to be concerned about the situation in some regions of the world , particularly in Africa and the Middle East , where the two phenomena of youth unemployment and conflict continue to feed on each other . Through increased interaction and readiness to share relevant experience , we can contribute to strengthening the value added by the Peacebuilding Commission . In this respect , the Economic and Social Council is ready to share its lessons learned , especially given that the pioneering work of the Council 's ad hoc advisory groups on countries emerging from conflict was , in a way , a forerunner of this qualitatively new organ — the Peacebuilding Commission , a body meant to ensure an integrated approach to peacebuilding on the basis of the links between security , development , rule of law and human rights . The Economic and Social Council 's Ad Hoc Advisory Groups on Haiti , Guinea-Bissau and Burundi have been successful in promoting coordinated support to post-conflict countries through a comprehensive approach to relief , peace and development . In an effort to assess and constantly improve its work , the Council has carried out a lessons-learned exercise through the experience of the ad hoc advisory groups , including the one on Burundi , which is now being considered by the Peacebuilding Commission . I would like to share some of these lessons learned with members of the Security Council . First of all , the experience of the Ad Hoc Advisory Groups on Burundi and Guinea-Bissau highlighted the need for appropriate mechanisms to mobilize donors and to promote the translation of pledges into disbursements . Secondly , there is a need to go beyond immediate problem-solving in the countries considered to defining , from the very beginning , a vision towards longer-term rehabilitation and support , in order to ensure that assistance is sustainable and is not undermined by organizational and functional problems encountered on the ground . Thirdly , the international community should maintain concrete development support to a country in question , even when factors on the ground — for example , an electoral process — may incline donors to adopt a “ wait and see ” approach . Fourthly , it is essential to make good coordinated use of the work of United Nations entities to complement the policy approach of the intergovernmental body through strong support at the technical and operational level . Fifthly and finally , a good articulation must be ensured between United Nations actors and regional partners of the countries concerned , including regional and subregional organizations , regional development banks and the United Nations Regional Commissions . These and other lessons emerging from the continued work of the Economic and Social Council 's ad hoc advisory groups can be further discussed and brought to bear on the future work of the Peacebuilding Commission . We hope that we can further explore practical modalities for interaction between the Economic and Social Council and the Peacebuilding Commission , in line with General Assembly resolutions . Our common objective should be to mobilize the whole institutional machinery of the United Nations to promote across-the-range policy approaches and best practices to develop answers to the complex and difficult needs of post-conflict countries and prevent their relapse into conflict . The meeting today is a good step in that direction . For its part , the Economic and Social Council is ready to contribute to the best of its ability , collectively or through its individual members on the Peacebuilding Commission 's Organizational Committee , to developing the strategic goals and defining a viable peacebuilding strategy of the Commission , thereby ensure its lasting added value . The President ( spoke in Russian ) : I thank Mr. Čekuolis for his statement . I shall now give the floor to the Chairman of the Organizational Committee of the Peacebuilding Commission , His Excellency Mr. Ismael Abraão Gaspar Martins . Mr. Gaspar Martins : Mr. President , I am pleased and wish to thank you and the Russian presidency for the opportunity to participate in this meeting on the work of the Peacebuilding Commission in my capacity as Chairman of that Commission . This is indeed an important occasion to reflect on the work of the Peacebuilding Commission with one of the principal bodies that created it , through its resolution 1645 ( 2005 ) . I am equally pleased that the General Assembly has scheduled for 6 February a similar debate , which I hope will provide an opportunity for the wider participation of the membership of our Organization — a fact which we in the Peacebuilding Commission welcome . Although the Peacebuilding Commission has been in existence for less than a year , questions are already being asked about the results it has achieved during that period . That is a legitimate concern and it speaks to the high expectations that the international community , in particular the Member States , have for that new organ of the United Nations . Yet , we should recognize that peacebuilding is by nature a complex and long-term process which requires persistent and long-term commitment by all . This debate today will , I hope , contribute to mobilizing the commitment needed so that we can move faster , providing more clarity in the discussion of some outstanding procedural issues in the workings of the Commission . Let us all agree that our theoretical differences in New York are meaningless to those who are directly suffering from the consequences of conflict on the ground . What matters for them are concrete actions and not just eloquent statements . The Peacebuilding Commission will be relevant and succeed only if it paves the way for an engaged partnership and practical actions by its members , as well as by the donor community , regional organizations , multilateral financial institutions and the Governments , civil society and private sectors of countries under consideration by the Peacebuilding Commission . It is that active partnership that will produce the incremental and tangible results we are seeking . Our common efforts are and should be aimed at reinforcing confidence in post-conflict communities , ensuring that countries do not relapse into conflict and that they move swiftly on the path to stability , recovery and development . The fact that allocations were made from the Peacebuilding Fund for both Burundi and Sierra Leone is an important first step in underlining international commitment and attention . That will certainly have a catalyzing effect , but we do need a long-term commitment from donors to remain engaged with the countries throughout the peacebuilding effort . Equally , the two countries need to make greater efforts to lay the foundations for sustainable peace . I am particularly pleased that we are about to decide on country-specific plans of action and a programme of action for the Organizational Committee , which I believe will allow the Commission to review and monitor the implementation of its decisions on a more regular basis . The recent staffing of the Peacebuilding Support Office is also a welcome development . The Office should continue to be given the necessary attention and resources , as it constitutes a vital instrument for the functioning of the Commission . I am pleased by the contributions recently made to the Peacebuilding Fund . That is an encouraging trend , though the amount available is still insufficient when compared to the needs of the two countries and the urgency of meeting those needs . The Peacebuilding Commission is a body to which the Council has dedicated much valuable time to establishing . It is the Council 's body , and it will perform only in accordance with the means that the Council and the international community put at its disposal in order to meet the high expectations of the populations of countries emerging from conflict . In order to meet the objectives expected from it on the ground , the Commission must be a real bridge for all stakeholders to marshal resources and to advise on and propose integrated strategies for post-conflict peacebuilding and recovery , in conformity with the decision made by the heads of State at the September Summit . I would like to seize this opportunity to commend the Governments of Burundi and Sierra Leone for providing a legal and political framework by establishing national bodies and a suitable environment to facilitate the work of the Commission on the ground . That is their primary responsibility and the role of national ownership . As stated by former Secretary-General Kofi Annan , “ [ w]here peacebuilding succeeds it is always the leadership of domestic actors that is the essential ingredient of success . No amount of international engagement can substitute for domestic political leaders shouldering their responsibilities and leading their people towards peace and development ” ( A/61/1 , para . Finally , I want to acknowledge the fact that the new body has a number of issues to address in order to improve its effectiveness and enhance its impact . While we have to acknowledge that the Peacebuilding Commission is still in the early phase of its existence , we also need to be decisive in tackling some of the critical challenges in relation to its working methods and strategic vision . That requires a collective commitment , and I hope that , as we move forward , all members of the Commission and of the United Nations will contribute to that effort . The President ( spoke in Russian ) : I thank Mr. Gaspar Martins for his statement . I shall now give the floor to the Assistant Secretary-General in the Peacebuilding Support Office , Ms. Carolyn McAskie . Ms. McAskie : I thank the Security Council for the opportunity to be here today . I am very pleased to provide a short statement in my capacity as head of the Peacebuilding Support Office . The links between the Commission and the Security Council , the General Assembly and the Economic and Social Council are critical , and I know that members of the Commission are exploring how to make the relationships among and between those bodies as effective as possible . How to deal with the critical post-conflict period has escaped our collective best efforts , despite several attempts to address the issue through transitional mechanisms . The creation of those new mechanisms — the Peacebuilding Commission , the Peacebuilding Support Office and the Peacebuilding Fund — offers a new opportunity to address that critical and fragile period in the life of a country ravaged by conflict . For that to happen , the Peacebuilding Commission has an important role to play in bringing all the actors together . That means that it must and will take on board the work of the Council , as well as that of the Economic and Social Council , the General Assembly , the United Nations agencies and all the partners , be they the financial institutions and other donors , the regional players , internal actors — such as civil society — and any others , as appropriate . That does not mean duplication ; that does not mean overlap . Rather , it is the strategic way in which the Commission will work by bringing everyone together . There is general agreement that , if it is to be most effective , the work must play out at the country level . The test of relevance for all of us will be to apply that approach in a way that will bring results for Burundi and Sierra Leone , in the first instance , and others as time goes on . The Chair and the Vice-Chairs will be working closely over the next several weeks with members of the Commission and with the Governments of Burundi and Sierra Leone to frame the next stage of the Commission 's work , building on the first round of work accomplished so far . For its part , the Support Office will do everything it can to support the Commission in that important work . The Office must work with the players in the United Nations system , both in the field and at Headquarters , to ensure that the strategies of the Commission are applied to all relevant areas of the United Nations work . An important part of the Commission 's mandate will be to marshal resources . While we all agree that the Peacebuilding Commission is not another donor forum , its work should generate significant additional resources for countries committed to staying on track for peace , to prevent their becoming , once again , the forgotten crises . The Secretary-General just announced , a few days ago , the first allocation under the Peacebuilding Fund — $35 million for Burundi — and will soon make an announcement regarding Sierra Leone . The Fund , however , can act only as a catalyst . Alone , it cannot address the peacebuilding resource needs of countries emerging from conflict . The role of the Peacebuilding Commission in marshalling resources will be much broader , although the Peacebuilding Fund — which has been set up rapidly and which has attracted very significant contributions from donors — is an extremely useful start . It is only by bringing all the actors together that the Peacebuilding Commission can fulfil its mandate to advise on and propose integrated strategies for peacebuilding and to identify critical elements of peacebuilding in the countries under its consideration , bringing them together under an integrated strategic approach . It is in that way that the Commission can work inclusively to define its own objectives , enter into agreements with the countries under its consideration and provide guidance to the various actors as to how they can meet the broad goals of peacebuilding across the range of political , security , human rights and economic and social interventions — always under the lead of the country concerned itself . As I said , my Office is committed to supporting the Commission and the overall efforts of the international community in that important endeavour , including through extracting lessons learned and becoming the repository for peacebuilding advice within the United Nations Secretariat . We are now closer to completing the staffing requirements for that stage of the Office 's work , and will continue to discuss with members of the Commission their vision for the work of the Support Office , in particular in the context of this year 's budget discussions . Under the leadership of El Salvador , in its capacity as Vice-Chair of the Peacebuilding Commission , work on lessons learned will begin soon , with the establishment of a working group that will include broad participation by all Commission members . In the long run , peacebuilding must not be another layer of work for Governments or the United Nations or donors on the ground . Instead , it should define the way in which we frame our interventions to ensure that we can most effectively respond to the immediate needs of a post-conflict society and keep hard-won peace processes on a sustainable track . The President ( spoke in Russian ) : I thank Ms. McAskie for her statement . I now give the floor to Mr. Johan Løvald , Permanent Representative of Norway . Mr. Løvald ( Norway ) : Today 's discussion — like the subsequent discussion in the General Assembly on 6 February — is an important occasion to highlight the importance of peacebuilding . We must maintain and , if possible , further increase the momentum behind our peacebuilding efforts . While our focus at all times must be on concrete results at the country level , we are all also conscious of the importance of this endeavour for the United Nations and the international community as a whole . Since entering office , the Government of Burundi has embarked on a series of planning and consultation processes in order to prepare development strategies to move Burundi from an emergency situation to a more normal pattern of development . Those strategies include the Government 's emergency programme , the Poverty Reduction Strategy Paper , the United Nations Common Humanitarian Action Plan and Joint Road Map and the United Nations Development Assistance Framework . Finally , I should also mention the establishment by the Government of Burundi of a joint Government-United Nations peacebuilding committee . Thus , much is already being done at the country level . Burundi has made progress in consolidating peace . However , the situation is still fragile , and continued international support is needed . The Peacebuilding Commission held two meetings on the situation in Burundi last fall . The Government of Burundi participated actively at the ministerial level on both occasions . I should like to thank the Government of Burundi for the very close cooperation extended to the Peacebuilding Commission , including myself , during my visit to Bujumbura last fall . The identification of priorities for peacebuilding and how to address them was the focus of those two country-specific meetings . At the first country-specific meeting three main critical peacebuilding challenges were identified in Burundi , namely : promoting good governance , strengthening the rule of law and the security sector and ensuring community recovery . Based on those critical challenges , a number of important peacebuilding priorities were identified . Among other things , those included strengthening national dialogue , continued efforts to include women in the consolidation of peace , sustained political support from countries in the region and strengthening of the Government 's ability to deliver on basic services , inter alia through budgetary support . The Peacebuilding Commission 's engagement with Burundi is now entering a new phase . The Commission will , in the near future , finalize its work plan and commence work on an integrated approach to peacebuilding , clearly outlining Burundi 's commitments and the response to be provided by the international community in critical areas . At the same time , we should continue to work with the Government to monitor progress in the critical areas already identified . In that regard , I would like to welcome the decision by the second Summit of the International Conference on the Great Lakes Region to establish a regional follow-up mechanism — to include a Conference secretariat — and to establish its offices in Bujumbura . I am sure that the Peacebuilding Commission would like to discuss how we can also support peacebuilding in that regional perspective . On 29 January , at the African Union Summit held in Addis Ababa , the Secretary-General formally announced a Peacebuilding Fund country envelope of $35 million for Burundi . I welcome that development . In the Peacebuilding Commission , we must now decide how we can build on that and achieve a catalytic effect . We recognize , of course , that funding through the Peacebuilding Fund can only provide initial support . Much more will be needed from other sources . Donor per capita assistance to Burundi remains low . The international community must support national efforts to address the priorities and gaps identified by the Government . The upcoming donors ' round table to be held at Bujumbura from 15 to 16 March will provide an opportunity to respond to those challenges . The Peacebuilding Commission would obviously like to consider that event and discuss how integrated peacebuilding efforts can complement the results of the round table . Let me also offer a very brief national point of view . We are humbled by the enormous challenges facing Burundi . The Norwegian Government is committed to doing what it can in order to achieve durable peace and economic development . The visit to Burundi by Norway 's Minister for Development Cooperation last month laid the groundwork for a bilateral programme in support of development and peacebuilding . In consequence , Norway will in the near future establish an embassy in Bujumbura . To sum up , successful peacebuilding will necessitate sustained political and material support in the years to come , from all stakeholders : the United Nations system , the international financial institutions , donors , civil society and regional actors . Similarly , continued national ownership will be key , based on an inclusive approach within which all relevant segments of society can contribute . The President ( spoke in Russian ) : I thank Mr. Løvald for his statement . I now give the floor to Mr. Frank Majoor , Permanent Representative of the Netherlands . Mr. Majoor ( Netherlands ) : I very much welcome this opportunity , early in the new year , to participate in the Security Council 's discussion on the Peacebuilding Commission , and to do so in my capacity as Chairperson of the Commission 's country-specific meeting on Sierra Leone . Allow me to refer to my statement before the Security Council made on 22 December 2006 ( see S/PV.5608 ) , when I was invited to brief Council members on the outcome of the country-specific meetings on Sierra Leone that had taken place in October and December 2006. While various activities have been ongoing in Sierra Leone itself , as well as at an informal level within the Peacebuilding Commission , I believe that my 22 December statement still very much reflects the state of play as concerns the Commission 's involvement with Sierra Leone . Allow me , therefore , to refrain from repeating the overview that I presented at that time and instead make a number of additional remarks that may feed into today 's discussions . First , I very much welcome the interest shown by the Security Council in the activities of the Peacebuilding Commission , as demonstrated by today 's debate . The same is true for the interest shown by other bodies within the United Nations , such as the General Assembly — which intends to discuss the Commission 's work next week — and the Economic and Social Council , and by those outside the United Nations . Today represents a good opportunity to strengthen our common focus on our shared interests , that is , to assist Sierra Leone and Burundi — as the first countries under consideration — in building peace and in preventing any possible relapse into conflict . Secondly , I wish to stress that good progress has been made in Sierra Leone in addressing the identified gaps in critical areas . Allow me to highlight just a few recent developments . A national steering committee on peacebuilding has been established by the Government of Sierra Leone and the United Nations to relate to the work of the Peacebuilding Commission and the Peacebuilding Fund . It will bring together Government , the United Nations , donors and civil society representatives to jointly address peacebuilding priorities . Also in Sierra Leone , consultations are ongoing to finalize the priority plan for funding from the Peacebuilding Fund . Once the review process stipulated in the terms of reference for the Fund is completed , it is expected that a country envelope in excess of the initially indicated $25 million will be made available . At the Peacebuilding Commission 's most recent country-specific meeting on Sierra Leone , members of the Commission urged the international community to lend support to the Government of Sierra Leone in order to broaden its donor base and secure assistance , including further debt relief . I am pleased to note that the World Bank 's International Development Association and the International Monetary Fund have agreed that Sierra Leone has made sufficient progress to reach the completion point under the enhanced Heavily Indebted Poor Countries Initiative . The Commission also called on the international community to provide , in a timely manner , adequate resources and support for the upcoming presidential and parliamentary elections , including capacity-building to ensure women 's equal participation in the political process . In this area a great deal of progress has been observed . The initial resource gap of $7 million for the election has been reduced to less than $3 million , with further pledges expected . Progress has been made in establishing an independent National Electoral Commission to prepare credible elections . The signing of an electoral code of conduct by eight political parties , the strengthening of the Sierra Leone police and the countrywide discussions on a media code of conduct for electoral reporting are other examples of progress . Finally , allow me to revert to the process of the Peacebuilding Commission 's discussions in New York . Next week , members of the country-specific meetings on Sierra Leone will discuss a work plan for the work of the Commission on Sierra Leone . This work plan is to guide our activities in the coming months leading up to the next country-specific meeting on Sierra Leone , due to take place in March or April . It sets a timeline and defines the actions to be undertaken by the Sierra Leone Government , the United Nations system and other stakeholders . Ownership , especially at the national level , and close coordination between New York and national actors are crucial . A key focus of the work of the Commission on Sierra Leone in these coming months will be the development of an integrated approach to outline clearly the commitments made by the Government of Sierra Leone and the international community . I am confident that in the spirit that has guided the Commission 's discussions thus far , we will be able to continue to engage in meaningful discussions in the country-specific meetings on Sierra Leone and , in the process , contribute to the building of peace in Sierra Leone . It will require the involvement of all the stakeholders : the Government of Sierra Leone , the full membership of the Peacebuilding Commission , potential other donors , the United Nations country team and the individual United Nations bodies on the ground , non-governmental organizations , civil society and the private sector . It will also require continued support by the Security Council , and I therefore very much welcome the Council 's continued engagement regarding the Peacebuilding Commission and Sierra Leone in particular . The President ( spoke in Russian ) : I shall now give the floor to Mr. Oscar Avalle , Special Representative of the World Bank to the United Nations . Mr. Avalle ( spoke in Spanish ) : It is a privilege to address the Security Council on behalf of the World Bank during this open debate on post-conflict peacebuilding . I wish to reaffirm the full support and commitment of the World Bank to the work of the Peacebuilding Commission , in all its aspects and at all levels . As members of the international community , we cannot afford to ignore the urgent problems currently faced by countries in crisis . It is our obligation to speedily provide the urgent assistance necessary to respond to the needs of those countries . In this context , we believe that the United Nations system plays a critical role in conflict prevention and resolution , but we cannot forget that after the conflict is over the work must continue , with support for reconstruction and the economic and social recovery and development of the countries affected . Like Ms. McAskie , we believe that the Peacebuilding Commission is a useful and effective instrument which makes it possible to deepen our engagement with the United Nations system and to continue to work together in a coordinated manner , responding to the needs of affected countries . It should be recalled that more than 16 per cent of the population of the world , a billion people , live — or rather , exist — in extreme poverty and are directly affected by civil war or are at high risk of being so affected in the very near future . The legacy of conflict is well known ; it is a terrible legacy , and that is why over the last decade the World Bank has significantly expanded its conceptual work in the area of the reconstruction of countries affected by conflict . Our research has confirmed that security and development are inherently connected . But we must also work together with all stakeholders , offering the necessary holistic support for peacemaking processes and drawing up genuine long-term development plans that turn into concrete action on the ground . This is why we believe that the work of the Peacebuilding Commission is critical and should yield concrete results in the real world and in the field . The work of the Commission and all of our work will thus be judged not only by our work here in New York , but primarily by the concrete results achieved in the countries concerned . The World Bank has actively supported the work of the Peacebuilding Commission , with the main objective of improving coordination and cooperation of all of the actors involved . The World Bank is committed to cooperating even more closely with the Commission both in New York and in the field , with all of the resources that we can provide , and that have been requested , insofar as possible . We welcome all of the efforts being made by the Commission in order to create a more focused agenda that would lead to specific results for the benefit of the affected countries . Unfortunately , thus far , we have still have not been able to take part directly in all of the Commission 's meetings , as originally stipulated in resolution 1645 ( 2005 ) . I would conclude by saying that we are ready to work jointly with all of our partners to ensure that there is international support and the necessary strategic cooperation among all of the parties that are committed to promoting the peacebuilding processes and to achieve sustainable development . The President ( spoke in Russian ) : I thank Mr. Avalle for his statement . I now give the floor to Mr. Reinhard Munzberg , Special Representative of the International Monetary Fund to the United Nations . Mr. Munzberg : Mr. President , we would like to thank you for the opportunity to intervene at this meeting of the Security Council on the Peacebuilding Commission . The Peacebuilding Commission is a very useful forum where all relevant aspects of a country in a post-conflict situation can be addressed in a comprehensive fashion . We are prepared to cooperate actively with that forum . As members know , the International Monetary Fund ( IMF ) is already involved in a number of post-conflict cases , including in the two countries that are on the agenda of the country-specific meetings of the Commission . We share the Commission 's emphasis on work on concrete country cases and on country ownership of strategies . Our activities and those of the Commission need to be well integrated in those country-owned strategies . The Commission has made good progress , together with the countries concerned , in identifying priority areas that need to be addressed . We have interacted with the Commission in the country meetings and also in the field . Interactive discussions are of particular value . We appreciate the fact that the IMF will be invited to meetings of the Commission , as stated in the resolution establishing the Peacebuilding Commission . In that regard , it would be useful if the issue of attendance at meetings of the Organizational Committee could be clarified . We are satisfied that the Commission will be an advisory body , and , accordingly , we will inform our governing organs of the progress of the Commission 's work in order to ensure that their decisions are informed by the Commission 's deliberations on the whole spectrum of aspects relevant to a specific case . The President ( spoke in Russian ) : I thank Mr. Munzberg for his statement . I now give the floor to His Excellency Mr. Joseph Ntakirutimana , Permanent Representative of Burundi . Mr. Ntakirutimana ( Burundi ) ( spoke in French ) : It is an honour for me to be able to speak before the members of the Security Council on an important topic , peacebuilding in post-conflict countries . This subject is today of concern to the various stakeholders determined to offer space for stability , development and hope to countries shattered by conflicts . On behalf of my delegation and on my own account , I would like to thank you , Mr. President , for having invited Burundi to this debate . I would also like to express my gratitude , and that of the people of Burundi , to all the members of the Peacebuilding Commission for the extensive support and encouragement they provided during the country-specific meetings where Burundi was on the Commission 's agenda . Similarly , I would also like to express appreciation for the efforts of the Peacebuilding Support Office , which , in a new and difficult context , is trying to make the Commission a success . In July 2006 , the delegation of Burundi was able to offer to the members of the Peacebuilding Commission a comprehensive view of the situation in Burundi . Commission members were able to become familiar with the desolation and poverty through which my country is struggling after more than 10 years of civil war . During the country-specific meeting on Burundi last October , the delegation of Burundi offered a detailed picture of the effects of war in several areas of national life . The members of the Commission were able to see for themselves the immense needs facing the Government of Burundi . Our delegation was also able to stress the many efforts being made by the Government in order to help Burundi emerge from an economic , political and social situation that is significantly impacted by the adverse consequences of conflict . Those efforts were also noted and welcomed by the World Bank and the International Monetary Fund , which have been tracking the evolution of the Burundian economy and which were also invited to the same meeting . Following the October meeting , the delegation of Burundi returned home with the task of preparing a presentation for the country-specific meeting on Burundi that was planned for December 2006. The Government of Burundi had to establish a list of urgent priorities , formulate the technical specifications of those priorities , and so on . My Government immediately set up a national peacebuilding commission , which has worked day and night , untiringly , in synergy with the United Nations Operation in Burundi ( ONUB ) , the diplomats on the ground and civil society . Following that country-specific meeting on Burundi on 12 December 2006 , the Peacebuilding Support Office pledged to the Burundian delegation a package designed to finance the projects presented at that meeting . We are extremely grateful for that . Once again , I would like to thank all of the countries that have already contributed to the Peacebuilding Fund . By doing so , they have made it possible for the new Commission to be operational and to get down to brass tacks . While welcoming the work that has already been done by the Commission , my delegation would like to make the following observations . First of all , seven months after its creation , the Commission should finally become operational and deal with the implementation of projects that were selected in December 2006. Secondly , my delegation would like to understand the mechanism or mechanisms for disbursing the allocated funds and would especially hope that these mechanisms might be made more flexible . Thirdly , my country is organizing a donor round table in March 2007 , for which I would like to request the support of the Commission at three levels . First , we would like to see members of the Commission attend the donor round table , which we plan to hold on 14 March 2007. Secondly , we would like the Peacebuilding Commission to provide ongoing support to the Burundian Government so as to galvanize donors , ensuring the success of the round table . Thirdly , given the fact that most of the donors are members of the Peacebuilding Commission , we urge each member to be present at the March meeting and possibly to announce a contribution . The President ( spoke in Russian ) : I thank Mr. Ntakirutimana for his statement . I now give the floor to His Excellency Mr. Sylvester Ekundayo Rowe , Deputy Permanent Representative of Sierra Leone . Mr. Rowe ( Sierra Leone ) : It is an honour for Sierra Leone to have been selected as one of the first two countries to be placed on the agenda of the Peacebuilding Commission . It is also an honour for my delegation to speak as a country-specific participant at this meeting of the Security Council . We are grateful to the United Nations and the international community for their continued engagement with the situation in Sierra Leone following the devastating rebel war . That engagement has been demonstrated in many practical ways . For instance , following the successful peacekeeping operation — the United Nations Mission in Sierra Leone — the Organization established its first Integrated Office in Sierra Leone . The Office — now in its second year — is , indeed , an experiment , and hopefully it will become a model of United Nations post-peacekeeping . It has set the pace for a similar mechanism in Burundi . It will also be recalled that a few years ago Sierra Leone became the subject of another experiment : an experiment in transitional justice , in the form of a hybrid Special Court , based on national and international criminal law , to try individuals accused of war crimes and crimes against humanity . Incidentally , as we all know , that experiment has been working well but is facing funding problems . The Special Court cannot become a model without the financial resources necessary to conclude its work within the established time frame . Now Sierra Leone finds itself the subject of yet another experiment in post-conflict cooperation , namely , as a specific country under consideration by the new Peacebuilding Commission . We are occupying an enviable position . My delegation would like to assure the Security Council that Sierra Leone will make good use of its position in this worthy experiment . We are committed to the integrated approach to peacebuilding that the United Nations has adopted in post-conflict peacebuilding leading to sustainable development . Sierra Leone had great expectations regarding the Commission . We saw it — and still see it — as a supplementary but effective instrument for facilitating the process of early post-conflict recovery . We have faith in its commitment to help us to address some of the problems and challenges that require urgent attention , and our expectations remain high . As others have pointed out , the Peacebuilding Commission is new . It is still going through the proverbial teething stage . Perhaps one could say that it is even too early to make a definitive and objective evaluation of its substantive work . However , in the view of my delegation , the results of the recent country-specific meetings augur well for the future success of the Commission . For Sierra Leone , a highlight of those meetings was the conclusion that an envelope of approximately $25 million was expected to be made available as an initial — I stress : initial — contribution towards the implementation of our priority programmes . It is in this regard that my delegation would like to emphasize that any assessment of the work of the Peacebuilding Commission must be based on its objectives and mandate as outlined in the relevant resolutions of the Security Council and the General Assembly . First of all , we should always bear in mind that the Commission is a special mechanism created to address the special needs of a special group or category of countries . Accordingly , the process of meeting those special needs may require some elements of creativity , flexibility and adaptability . Secondly , the mandate of the Peacebuilding Commission reflects a sense of urgency — we are in a hurry . If , indeed , the Commission is to help ensure that countries emerging from conflict do not relapse into conflict , and if provision has been made for the Commission to deal with any situation where a country is at risk of or already relapsing into armed conflict , it follows that the Commission and the international community must act speedily to avert imminent crisis . As far as achieving the objectives of the Peacebuilding Commission is concerned , the bottom line is “ resources , resources , resources ” . Indeed , throughout the mandate of the Commission , the key words are “ assistance ” and “ resources ” — and we can look at the mandate and objectives again . Of course , the Commission was created to provide advice and propose integrated strategies for post-conflict recovery . Of course , its job — or part of its job — is to mobilize sustained international attention on the needs of our countries , even beyond the period of post-conflict recovery . However , we should bear in mind — and I would like to emphasize this — that the Commission is expected to assist our countries in laying the foundation for sustainable development , to mobilize assistance and , I stress , to bring together all relevant actors to marshal resources and help ensure predictable financing for early recovery activities . This brings me to the issue of delivery , which is very close to our heart . My delegation believes that the most effective way that the international community can continue to demonstrate its continued engagement with Sierra Leone and other least developed countries emerging from conflict is through the timely delivery of the necessary assistance to meet the special needs of the countries concerned . My delegation notes with satisfaction that the most recent country-specific meeting of the Commission stressed that every effort should be made to deliver the Peacebuilding Fund country assistance envelope for Sierra Leone in January 2007 so that implementation of the agreed short-term priorities can commence immediately . The Sierra Leone delegation is aware that the processes of mobilizing and marshalling resources are complex . They obviously require extensive coordination and consultations at various levels — at the national level and at the international level . However , timely delivery of assistance is crucial to the success of the whole recovery process . We are encouraged by the commitment of the Peacebuilding Commission and the international community , especially those countries that have made generous contributions to the Peacebuilding Fund . We applaud them . We want just to take this opportunity today to make an appeal , in the form of a reminder that before the ruthless rebel war , Sierra Leone was one of the least developed countries of the world . The conflict made an already precarious situation even worse . While we share many or most of the problems that other post-conflict countries face , we should realize that Sierra Leone is , in a sense , unique . It should be treated according to its own particular circumstances . My delegation is confident that within the next few days the Secretary-General will announce the allocation of an appreciable amount from the Peacebuilding Fund that is commensurate with the special needs and critical priorities that we outlined in the Peacebuilding Commission last year . The President ( spoke in Russian ) : I thank Mr. Rowe for his statement . Mr. Arias ( Panama ) ( spoke in Spanish ) : The delegation of Panama believes that this is an opportune moment to recall that heads of State or Government , meeting during the 2005 World Summit , acknowledged the need for the Organization to carry out a coordinated , consistent and integrated peacebuilding and reconciliation effort in countries that have emerged from conflict . To meet that need , they established the Peacebuilding Commission with the participation of the General Assembly , the Security Council and the Economic and Social Council . That is why Panama believes it is appropriate that both the General Assembly and the Security Council have decided to conduct an initial review of how , in terms of form and substance , the Commission is carrying out the task entrusted to it . After all , the maintenance of international peace and security is a task entrusted to both the Assembly and the Council by the Charter itself . The mission of Panama believes that that task must be carried out in a coherent , coordinated and comprehensive manner . The objective of this consultation process should be an initial assessment of the Commission 's working mechanisms and decision-making processes so that all of these organs , each within its own perspective , can have the information and knowledge they need in order to provide the Commission , if necessary , with timely assistance or advice so that it can carry out the task entrusted to it by the heads of State and Government . We acknowledge that the Peacebuilding Commission is still in the process of finding its own identity . However , we applaud the efforts of the Organizational Committee and the Peacebuilding Support Office in preparing for meetings on specific cases , assessing the progress on those cases and drawing up a plan based on the requests of the Governments of Sierra Leone and Burundi . We expect and are resolved that the Peacebuilding Commission will distinguish itself through effective and efficient performance . To that end , each and every one of us who are involved must maintain a firm commitment to act with the promptness and transparency that this responsibility requires . The Commission 's function must be to coordinate the available resources in a comprehensive , rigorous and coherent manner in order to make it easier for the countries under its auspices to have the programmes , institutions and capacities that will enable them to take the necessary measures to achieve economically sustainable and socially responsible development . Mr. Voto-Bernales ( Peru ) ( spoke in Spanish ) : My delegation welcomes the fact that the Security Council is today considering the role of the Peacebuilding Commission . We highlight the participation in this debate by the President of the Economic and Social Council , the Chairman of the Organizational Committee of the Peacebuilding Commission and the delegations in charge of following up on the cases of Sierra Leone and Burundi , as well as representatives of the major international financial institutions , whose statements will enrich this debate . The Peacebuilding Commission is one of the outcomes of the 25 Summit , which reaffirmed our confidence in multilateralism as a way to face the new challenges arising in the transition from the maintenance of international peace and security to stability and development . If it is to carry out that mandate , this new organ must be as useful and effective as possible . That is undoubtedly the spirit that , we are sure , we all share as we take part in this debate . Peru supports the efforts to sustain the peacemaking and reconstruction processes in countries emerging from violent armed conflict , and it participates in peacekeeping operations dealing with such cases . We are aware that recent history has demonstrated that the premature withdrawal of peace operations puts countries back into a situation of crisis and violence , which no one wants ; that conflicts seemingly overcome have re-emerged ; and that the populations involved lose faith in the effectiveness of these peacemaking processes . Prolonged conflicts create a perverse dynamic of force and destruction as permanent instruments of power and even of survival . To counteract that , we must reconstruct the social fabric , establish a culture of peace and convey the notion that the best security and the most benefits are to be found in peace , thus enhancing its social value . That requires a comprehensive approach that includes the military and police component that restores the security environment ; the rebuilding of public institutions , the rule of law and the promotion of human rights ; and attention to the structural economic and social elements , the poverty , marginalization and exclusion that are at the root of many of these conflicts . A fundamental component of peacebuilding is development . There will always be a greater risk of relapse into conflict to the extent that people feel vulnerable and see no improvement in their situation . We must lay the foundations for development in the form of institution-building , justice and respect for human rights , but also in the provision of services such as health , education , security and opportunities for economic inclusion . In order to build a viable and sustainable peace process , it is essential that the local actors in these conflicts be committed to that process and carry it out responsibly . That element must underlie peacebuilding initiatives and is ultimately the only guarantee that armed violence will not destroy the progress that has been made . In that connection , inclusive processes are necessary to create links of interdependence and mutual commitments and obligations among the parties involved . Thus , through the path of participation , we create common spaces for aspirations and objectives , and national identity and a feeling of belonging are affirmed . That is why reconstruction programmes must not repeat the events that made the States fail in the first place . We must build democratic societies with viable economies — that is , States that emerge from disorder and backwardness and take charge of their own destiny . These processes must be adapted to each specific situation , in which the Peacebuilding Commission must promote the development of national capacities and institutions capable of developing organic plans and projects that provide continuity and consistency to the national effort and attract international cooperation . It is important to appropriately define areas of work and , when possible , to establish suitable indicators that let us know about progress in the management capacity of a country emerging from conflict . Likewise , such indicators will make it possible to assess progress and the relevance of the recommendations and assistance of the Peacebuilding Commission . We also believe that the Commission must help to improve the coordination between the United Nations and the system 's agencies so that there will be appropriate leadership on the ground and a clear mandate for the tasks of peacebuilding . Moreover , reconstruction is a process that must arouse the interest of national and international private enterprise . That is why we need to formulate programmes capable of attracting such business participation . It also means that we must redouble our efforts to strengthen State institutions so as to ensure that special interests coincide with the general interest , that reconstruction programmes are transparent and that the resources generated — including those derived from the exploitation of natural resources — have increased benefits among the population . This should also be a requirement in programmes of the international financial institutions . Let me conclude by noting that we are closely following the way in which the cases of Sierra Leone and Burundi are currently being addressed by the Peacebuilding Commission . Without doubt , it is a challenge to all of us to enable those countries are able to make a successful transition to stability and development . Mr. Lacroix ( France ) ( spoke in French ) : My delegation wishes at the outset to thank the Russian Federation for its initiative to organize today 's debate during its presidency of the Security Council . I wish also to welcome the President of the Economic and Social Council , the Chairman of the Organizational Committee of the Peacebuilding Commission and Ms. Carolyn McAskie , and to thank them , and the other previous speakers , for their statements . Those statements clearly indicated everything that is at stake in ensuring that the Peacebuilding Commission is successful in its mission and outlined the all challenges that it must meet to achieve that success . In our view , it is vital that flexible and effective interaction between the Commission and the Security Council be developed in practice ; we hope that the Council will regularly consider the work of the Peacebuilding Commission . We hope too that the General Assembly and the Economic and Social Council will devote particular attention to the new body 's work , as provided for in the resolutions that established the Commission . While we fully endorse the statement that will be made by the presidency of the European Union , I wish to speak of some particular aspects of the work of the Peacebuilding Commission . The Peacebuilding Commission 's added value derives from its capacity to deal in a concentrated manner with problems that are specific to peacebuilding processes , by tackling the most urgent challenges . The participation in the Commission 's work of all relevant actors on the ground , in particular States of the region and institutional and bilateral donors , is fundamental in that regard . Here , my delegation fully supports participation in the meetings of the Peacebuilding Commission by the World Bank and the International Monetary Fund , as their representatives have proposed today . Most often , issues of institution-building — related to such areas as the rule of law , good governance and security-sector reform — are key post-conflict priorities . In many cases , those areas fall outside the realm of intervention and the capacity of development actors . By their very nature , they require close coordination of activities undertaken on the ground . I am thinking in particular of disarmament , demobilization and reintegration processes , which lie at the intersection of peacekeeping and development concerns . By making it possible to identify goals and priorities shared by all actors and to coordinate their activities in accordance with a timetable for intervention that is robust but adapted to immediate priorities , the Peacebuilding Commission can become an essential instrument for setting countries emerging from crisis firmly on the path to peace and sustainable development . The first country-specific meetings , on Burundi and Sierra Leone , have made it possible to start identifying areas that are critical for the peacebuilding processes in those countries on the basis of analyses carried out by their national authorities . That is at the core of the work of the Peacebuilding Commission , and it must continue with a view to precisely identifying priority actions and measures to be undertaken in areas seen as crucial to the peacebuilding process . At the end of the process , all actors in the field , first and foremost the authorities of the countries concerned , should have a road map that can form the basis for an appropriate and lasting commitment by the international community . In that spirit , we consider that the Commission should focus its efforts at this stage on preparations for country-specific meetings concerning the countries on its agenda . The Peacebuilding Support Office , which is now operational , has a critical role to play here . We consider that speedy and appropriate distribution to Commission members of information relating to the countries concerned is essential . An inventory of actions undertaken in each of the areas critical for the peacebuilding process has already been carried out . It should now be the basis for identifying gaps and improving coordination among all peacebuilding actors in the two countries . In addition to projects financed by the Peacebuilding Fund , the Commission 's work should lead to better allocation of resources and enhanced involvement by all actors , starting with the authorities of the countries concerned . Those authorities should , of course , be closely involved in the preparation and implementation of the work of the Commission . Here , I want to pay tribute to the endeavours carried out by the authorities of Burundi and of Sierra Leone in liaison with the United Nations and other actors . My delegation wishes in conclusion to reaffirm the importance it attaches to the goal of being able collectively and in the very near future to achieve tangible results for the countries being considered by the Commission . I wish also to stress that at the appropriate time the Security Council should fully integrate those results into its work . The Council ought to be able to share in the added value that the Peacebuilding Commission should bring to our collective effort to promote peace and security . Mr. Verbeke ( Belgium ) ( spoke in French ) : I wish at the outset to thank you , Mr. President , for your initiative in organizing a debate on the work of the Peacebuilding Commission . My comments supplement those that our colleague , the representative of Germany , will make on behalf of the presidency of the European Union , with which my delegation aligns itself . Belgium has been closely involved in the initial work of the Peacebuilding Commission because we believe in the Commission and will continue to do so . I shall limit my statement to a few brief comments . It should be recalled that the Peacebuilding Commission is multidimensional in nature . It stands at the intersection of questions relating to such concepts as security , good governance , justice , the rule of law , reconstruction and development . That is because it has two parents : the Security Council and the General Assembly . Its multidimensional nature is reflected in the Commission 's primary task : to make use of the various existing reconstruction and development plans and strategies to promote the use of an integrated approach taking account of the specific needs of fragile States and the potential threats to peace and stability . The goal is not a package of limited , short-term measures , but comprehensive medium-term and long-term support enabling us to provide guidance to all bilateral and multilateral actors both within the United Nations system and outside it — as well , of course , as in the country itself . But such an integrated approach must not exist only in the abstract : it must specifically and concretely identify the risks , priorities , shortcomings and weaknesses that require specific attention . It is essentially the quality and credibility of this approach that will convince donors to support it by working together and by being actively involved , including in financial terms . The Commission , the Peacebuilding Support Office and the Peacebuilding Fund should not be substitutes for current donors but should inform them and guide them , as appropriate , in order to supplement their action . Here , of course , it is vital that all players , beginning with the country concerned , and including civil society and the private sector , be fully involved in the design of these strategies . I would like to conclude with some more practical considerations . The work of the Peacebuilding Commission takes place , first and foremost , in the country-specific meetings , which could benefit from informal discussions on specific aspects of the action to be taken in a given country with regard to peacebuilding . More sustained work could also be enhanced by relevant documents produced by various players , but above all by the Peacebuilding Support Office . We too , as the Security Council , can support the work of the Peacebuilding Commission by creating more regular and more systematic interaction with the Commission — for example , through briefings to the Council by the Chairs of the country-specific meetings . Beyond the request for general comments , we could ask the Peacebuilding Commission for guidelines on specific peacebuilding issues , and we could do so in a timely way , so that the Commission 's views could be usefully integrated into our own work . Mr. Spatafora ( Italy ) : I think the timeliness of this debate is reflected in the food for thought it is generating . At the outset , I would like to express deep appreciation and support for what Ambassador Gaspar Martins , Chairman of the Organizational Committee of the Peacebuilding Commission , said earlier in this meeting , and to draw the attention of Council members to it . Let me quote him briefly . He said , “ Let us all agree that our theoretical differences in New York are meaningless to those who are directly suffering from the consequences of conflict on the ground . What matters for them are concrete actions … ” ( Supra ) . I think that this is a benchmark that must remain clear in our minds . What we do has an effect on the ground . In general terms , I think we have to express the strongest support for the Chairman of the Organizational Committee . If he does not feel that he has the House behind him , he will not be able to be effective . As our colleague the representative of Sierra Leone has said , we will need creativity , flexibility and adaptability . When it comes to the Commission , it will be mainly the responsibility of the Chair to inspire flexibility and creativity . But he will not be able to be creative if he does not feel that the House is behind him . That was the first point I wanted to make . Secondly , I fully endorse the statement that my colleague , the representative of Germany , will deliver later on behalf of the European Union . I want to stress the importance of the points that he will make . Because of time constraints I will not repeat his words , except to quote briefly from what he will say , according to his advance text : “ If the Commission is to add value to peacebuilding efforts worldwide…it will have to be ambitious . It will have to be more than the tools we already have : more than a mere coordination mechanism and more than a donors conference . Promoting the development of a viable peacebuilding strategy is where the Peacebuilding Commission can really create added value . ” Here , we should bear in mind what Assistant Secretary-General McAskie said on this matter . I will now limit myself to a few additional remarks . I think that , in shaping and implementing our strategies , we will need , first , to focus strongly on institution-building , as mentioned in operative paragraph 2 ( b ) of Council resolution 1645 ( 2005 ) and General Assembly resolution 60/180 , in line with the inspiration of the Peacebuilding Commission : to strengthen the sovereignty of post-conflict States by increasing the effectiveness and credibility of national policies and institutions , with particular reference to the rule of law . As my Belgian colleague said , this will increase the attractiveness of such States to private foreign investors . Secondly , we will need to include a clear sequencing of actions and clear indications to all stakeholders , including donors , of what needs to be done . Thirdly , the strategy should be based on a broad sense of ownership . National responsibility should be at the centre of the peacebuilding process . Institutional donors and relevant regional organizations should be fully on board , through regular consultations both in New York and at the country level . I hope involvement , like that we have seen today , by the World Bank and the International Monetary Fund ( IMF ) will be structured and will continue in the future . Fourthly , the involvement of civil society , including the national and international private sectors , should be deepened and widened . I will not elaborate further here . Finally , the Peacebuilding Commission should also elaborate a system of benchmarks to monitor progress in implementation . We need monitoring , but monitoring is not just making reports after a certain number of months on what has been done . We are submerged in reports . What is needed is proactive monitoring along the way . It should not point out who is doing well or who is doing badly , but it should just point out where we stand week after week and what has to be done . We know what proactive monitoring is . This is an aspect that has to be injected into the work of the Peacebuilding Commission and into that of the parent bodies of the Commission : the General Assembly and the Security Council . Of course , we should start developing objective criteria for phasing out the involvement of the Peacebuilding Commission in countries that are under consideration and that are successful . We should also start thinking — as we are , in fact , doing — about possible new entries on the Commission 's agenda . On a final note , we believe that the Security Council should work together with the Peacebuilding Commission with a view to designing conflict-sensitive peacekeeping and peacebuilding strategies . When I say “ work together ” , I mean not only having a meeting like today 's from time to time , but rather having more interactive meetings where we can see a ways and means process , together with the General Assembly . As we are all aware , and as has to be clear in our minds , the issue is not only how the Commission can assist or advise the Council ; it is also how the Council can provide the Peacebuilding Commission with operational input . We , therefore , believe that the Security Council should , for example , request the advice of the Commission when renewing the mandates of existing peacekeeping missions or when establishing new ones , with a view to developing integrated mission planning processes . The renewal of the peacekeeping mission in the Democratic Republic of the Congo , for example , could present the first opportunity for an early peacebuilding planning process . Then , it would act on the advice of the Commission by supporting the crucial functions of the United Nations Integrated Office in Sierra Leone and the United Nations Operation in Burundi on the ground , with a clear mandate and ad hoc expertise . In particular , the role of the United Nations Integrated Offices in facilitating coordination and consultation among all stakeholders , including donors , should be strengthened , as has been mentioned by some of my colleagues . Finally , the promptness of the Commission 's responses to Security Council requests for advice should be promoted . We need timely advice . The Department of Peacekeeping Operations , the Department of Political Affairs and the Peacebuilding Support Office should pool their resources and coordinate their efforts in support of the Commission — and I am very grateful to Assistant Secretary-General McAskie for her earlier statement in that regard — in order to ensure smooth and efficient interaction between the two bodies and , of course , between the Peacebuilding Commission and the General Assembly . Mr. Al-Bader ( Qatar ) ( spoke in Arabic ) : We thank you , Sir , for convening this open debate , the first of its kind in the Council since the Peacebuilding Commission started its work . It gives us a timely opportunity to review the Commission 's activities and the best ways to support it . I also wish to commend and thank Ambassador Ismael Gaspar Martins , Chairman of the Organizational Committee of the Peacebuilding Commission , and Assistant Secretary-General Carolyn McAskie of the Peacebuilding Support Office for their efforts in a new field . We wish them every success in their work . The establishment of the peacebuilding mechanism composed of the Peacebuilding Commission , the Peacebuilding Support Office and the Peacebuilding Fund is among the most practical and tangible steps taken by the international community to date in the context of operationalizing the indisputable concept that the dedication of resources necessary to peacebuilding in countries emerging from conflict is critical to the consolidation of stability , peace and development . Similarly , the assistance received by those countries from the international community plays a pivotal role in safeguarding against their relapse into conflict . The Commission is still an infant entity and struggling to identify the best ways and means to achieve the objectives for which it was established . Since its inception , it has received encouraging and positive responses from the two countries on its agenda , Burundi and Sierra Leone , where national and international efforts have succeeded in ending their respective conflicts . The success of the peacebuilding phase there will no doubt consolidate those positive results . Given that the Security Council is the primary organ responsible for the maintenance of international peace and security , the success of the peacebuilding process in Burundi and Sierra Leone will be a valuable complement to the efforts of the Council , which is engaged in ongoing follow-up on the situations there . Peacebuilding is an integrated process and a multidimensional endeavour undertaken by various United Nations entities , and cannot be broken down into its component tasks . In recognition of that vision , it was decided at the 2005 Summit to establish the Peacebuilding Commission as a consultative organ , under two resolutions of the General Assembly and the Security Council , respectively . Thus , the Commission must work within the mandate given to it by the General Assembly and the Security Council . If the Commission is to meet its objectives , there must be close coordination between it and the Peacebuilding Support Office and the other principal bodies of the United Nations , including the General Assembly , the Security Council and the Economic and Social Council . Peacebuilding activities embody one aspect of such coordination aimed at fulfilling the vision set out in the Organization 's Charter . Moreover , the Commission 's mandate encourages consultation with civil society , non-governmental organizations and the private sector in order to ensure that it receive the input of international organizations in its peacebuilding activities . There is no doubt that several other countries are appropriate candidates for inclusion on the Commission 's agenda . In every case , we must take the fundamental principles of peacebuilding into consideration by acknowledging the unique specificity of each country and hence the different methods by which peacebuilding operations should be conducted . It is important that the Commission and countries emerging from conflict agree on the methodology for undertaking peacebuilding activities if the desired objectives are to be reached . As we have noted , the Peacebuilding Commission is an advisory body seeking to assist countries emerging from conflict in identifying the optimal approach to conducting the peacebuilding process . Its mandate also includes the mobilization of necessary international resources to attain its goals . Consequently , the Peacebuilding Fund and the Commission together constitute an integrated mechanism . We therefore appeal to the international community to donate generously and to mobilize the resources necessary to maintaining the process of peacebuilding and reconstruction . Mr. Gayama ( Congo ) ( spoke in French ) : The delegation of the Congo thanks you , Sir , for allowing the Council today to make an initial assessment of the work of the Peacebuilding Commission , which held its first meeting on 23 June 2006. We welcome the participation in this important debate of the President of the Economic and Social Council , the Chairman of the Organizational Committee of the Peacebuilding Commission , and representatives of the World Bank , the International Monetary Fund , bilateral partners of the Commission and , of course , the Peacebuilding Support Office , headed by Ms. Carolyn McAskie . The creation of the Peacebuilding Commission was a major step taken as a result of a joint effort and as the expression of a desire clearly identified by world leaders at the 2005 World Summit , in accordance with the purposes and principles of our Organization . When we recall that the official launch of the Peacebuilding Fund took place as recently as 11 October 2006 , we must note along with many others who have spoken here today that the Peacebuilding Commission is just a little child that has not yet reached adolescence . If a useful assessment is to be made at this stage , it should focus on the level of attention and assistance that the Commission enjoys from those who created it , rather than on the Commission itself , which is still seeking to define itself . This debate is timely nonetheless . It allows us to consider potential interaction and synergies between the various partners and stakeholders in this common undertaking . Such a collective and constructive commitment should be made on the basis of adherence to a few simple rules , including respect for the Commission 's mission , as established under resolution 1645 ( 2005 ) ; appropriate distribution of work among the partners involved in order to avoid duplication ; and open and transparent debate within the Commission in order to promote concerted action to mobilize all local , regional and international actors . Of course , such a comprehensive approach to addressing issues should take into account the elements associated with integrated strategies for peacebuilding and the re-establishment of peace . But it should also take into account those related to conflict prevention . In order to gain full credibility , the Peacebuilding Commission must not give the appearance of being just another body cut off from reality . The Commission has the advantage that its main area of operations is in the field , where it is called upon to be a catalyst that can mobilize all the necessary elements to ensure the success of its mandate . Two countries are currently on the agenda of the Peacebuilding Commission : Burundi and Sierra Leone . Country-specific meetings devoted to those countries began on 13 October 2006. In that regard , concerns arose in connection with the mobilization of financial resources — a matter that has now become a central issue . Moreover , it is clear that there continue to be social and political obstacles , which pose real threats to stability in those two countries . The high level of youth unemployment and the critical state of social infrastructure in both Burundi and Sierra Leone can lead to popular unrest , which could give rise to unforeseen problems . In addition , the security services do not yet have the necessary means to ensure public order . However , in order to build peace it is clear that we will need to enhance the capacities of those countries , especially their economic and social capacities . We must also help them improve the administration of public resources , combat corruption , ensure respect for human rights , promote good governance and the rule of law and launch and nurture national dialogue . Economic progress and improved living conditions for the people concerned are therefore essential to the stability we seek . The 2005 World Summit Outcome ( General Assembly resolution 60/1 ) correctly recalled that development , peace and security and human rights are interlinked and mutually reinforcing . Thus , a situation that may appear to be back to normal can always conceal threats that can emerge if we ignore certain unforeseen elements . The experience in Timor-Leste has been a good lesson for us all in that regard . It is clear from its first experiences in Burundi and Sierra Leone that the Peacebuilding Commission needs sustained support from the international community . To that end , we will have to put in place strategic options adapted to each situation . Of course , the areas for intervention must be identified in partnership with the Governments concerned and with civil society , while at the same time endeavouring to establish a hierarchy of priorities . Experience in these first cases should provide a basis for improving the Commission 's intervention mechanisms . Success in those cases will make it possible for us more clearly to consider future cases , such as Timor-Leste , Haiti the Democratic Republic of the Congo and others . We should not lose sight of the fact that , to be reliably successful , all peacebuilding efforts should have the support of the relevant national authorities , provided progressively beginning at a specific stage of the undertaking . The Peacebuilding Fund is certainly not a development fund as such , but it should be able to assist us in finding solutions to various urgent problems in a holistic way . It is therefore important to ensure that the Fund has predictable resources . The appeal made by the Secretary-General at the launching of the Fund — in which he emphasized the vital importance of donor support , without which the objectives of the Peacebuilding Commission will not be achieved — should be repeated today , and that is what we are doing . The new Commission will of course not replace existing bodies . The principle of complementarity is at the very heart of the interaction between the various bodies of the United Nations system . In order to benefit from that , however , the Security Council , the General Assembly and the Economic and Social Council should all continue to adapt to ensure that they too achieve a level of effectiveness that meets both their Charter objectives and general expectations . In other words , to use the metaphor of parent and child , the existence of the Peacebuilding Commission should ease the conscience of those who established it , just as parents pass on to their children the dreams and ambitions that they themselves could not realize . The Commission would otherwise be just another body in an insufficiently reformed international institutional framework . Of course , that is not what we want . We believe that the establishment of the Peacebuilding Commission is a promising beginning as regards the reform of the entire United Nations system . In conclusion , we therefore appeal for enhanced coordinated efforts to ensure the continued growth of the Peacebuilding Commission in the spirit of coherence so badly needed by the United Nations system today . Mr. Burian ( Slovakia ) : Slovakia fully aligns itself with the statement that will be delivered shortly by the Permanent Representative of Germany on behalf of the European Union . I shall therefore limit my statement to a few additional comments . At the outset , Mr. President , I wish to commend your initiative to convene this open debate on the work of the Peacebuilding Commission . In our view , this is an important and timely opportunity to explore ways and mechanisms for interaction between the Council and the Peacebuilding Commission in order to strengthen the synergy of efforts aimed at helping post-conflict countries to manage the difficult transition from war to peace . We believe that the Peacebuilding Commission could benefit from more structured interaction with the relevant principal organs of the United Nations . In addition , the Council could benefit from a proactive approach and the advice of the Peacebuilding Commission in dealing with specific post-conflict situations . The Peacebuilding Commission was established to bridge a critical gap in the peacebuilding architecture . In that respect , the first results of the work of the Peacebuilding Commission demonstrate that the decision to create that new United Nations body was a step in the right direction . At the same time , we must continue to seek its proper place in the system of United Nations institutions , so as to avoid unnecessary duplication of effort and to efficiently utilize its unique capabilities and comparative advantages . The Peacebuilding Commission should continue to develop its mechanisms to better serve as a forum for coordination and exchange of views among major stakeholders , donors and countries with experience in peacebuilding , with a view to defining integrated and tailored country-specific post-conflict strategies . In that regard , we share the belief that , as the Permanent Representative of Italy rightly pointed out , the best added value will come not from formal reports or decisions , but rather from operational outcomes envisaged in the interaction stimulated by Peacebuilding Commission meetings in the field that bring together all stakeholders and donors . That will be more helpful , in our view , than trying to reach negotiated agreements on formal decisions and reports . The measure of its success should be gauged by fewer numbers of countries relapsing from fragile peace to conflict , and not by a greater number of reports and more paperwork . In our view , the work of the Peacebuilding Commission will be most effective in the country-specific mode in the field , where its work should be focused . We also believe that the Peacebuilding Commission should be oriented towards seeking practical solutions to complex problems in the area of post-conflict peace consolidation . In that respect , we support the idea of establishing working groups to comprehensively discuss some of the specific aspects of peacebuilding in country-specific meetings , such as the rule of law and other crucial elements of peace consolidation processes . These working groups could bring together different parts of the United Nations that have been involved in the peacebuilding process , major stakeholders and donors . During its presidency of the Security Council in February , Slovakia will organize an open debate on one important aspect of peacebuilding , and that is security-sector reform . We believe that a more coherent and systematic approach by the international community is needed to address this issue and to secure the proper functioning of security forces and institutions in a post-conflict country . We believe the Commission might play a crucial role in this regard in helping countries to address this problem in a comprehensive manner and could generate long-term support and resources to ensure the coherence and sustainability of the process over the long term . Last but not least , we believe that in the future the Security Council should make better use of the Peacebuilding Commission as a source of advice on peacebuilding strategies and mandates . Finally , we believe that the number of situations on the Commission 's agenda could be gradually expanded to include such countries as Haiti , Timor-Leste or the Democratic Republic of the Congo . An important prerequisite for this would be proper definition of the Commission 's role and mechanisms to manage an increased number of highly complex situations . Here again , we want to underline the importance of country-specific mechanisms in the field as a way to meet this goal . Based on the concrete proposals and observations we have heard this morning , we believe that today 's discussion will generate useful ideas that could help to bring new dynamics to the work of the Commission and strengthen the interaction of the Council with the Commission . Mr. Miller ( United States of America ) : Mr. President , I appreciate your initiative in scheduling this open discussion of the Peacebuilding Commission . I will be brief , as I think it is more important that we listen to our guests here today , including the President of the Economic and Social Council , Assistant Secretary-General McAskie , the Chairman of the Organizational Committee of the Peacebuilding Commission and the chairs of the country-specific meetings of that Commission , the representatives of the World Bank , and the International Monetary Fund and particularly the Permanent Representatives of Burundi and Sierra Leone . I suggest that we look at this debate and the discussion on the Peacebuilding Commission to take place soon in the General Assembly as opportunities to re-energize our common effort to better contribute to concrete results on the ground . No one working in post-conflict situations , no citizen of a country trying to emerge from months or years of fighting cares at all about United Nations lines of authority or the institutional breakdown of seats around the conference room table . They care and we should care — about results . What we all agree on is the goal of strengthening the Commission 's ability to make a real difference in strategies to support countries emerging from conflict , to help these societies establish the institutions and systems necessary to prevent a relapse into violence . From the United States perspective as a member of the Security Council , the goal of the Commission must be to facilitate better coordination between the Council 's security component and the broader post-conflict stabilization efforts of the international community . The Commission should provide a forum for the various agencies , Governments and organizations involved in a particular post-conflict situation to come together and share their assessments and work plans and to better coordinate and target their respective efforts , and for the Council to benefit from their common advice and best recommendations . The strength of the Peacebuilding Commission will be found through pragmatic , action-oriented and country-specific recommendations to address the problems of post-conflict peacebuilding . The problems encountered by countries emerging from conflict are not solely — and for some , not even mainly — a lack of resources . In any event , this is something for which the Commission will not be able to compensate . Rather , the problems have rather to do with how to ensure that the activities of the national Government and outside partners are well coordinated , that the significant funds available through existing donor mechanisms are best utilized and that the international community 's attention to these countries ' needs does not fade . We will take this same practical spirit into the discussions that take place in the General Assembly , in the Organizational Committee of the Peacebuilding Commission itself and , most importantly , in the Commission 's country-specific meetings . We hope others do too . We appreciate the opportunity today to hear the views of others , both inside this Council and out , on how we can help the Commission better serve our common goal . Ms. Pierce ( United Kingdom ) : May I join others in congratulating you , Mr. President , for holding this debate and for giving us the opportunity to hear so many valuable contributions in the Chamber today . It is now seven months since the Peacebuilding Commission was established , and it is appropriate that we in its parent body take stock . In this vein , we , along with others , very much look forward to the debate in the General Assembly next week . We are optimistic about the value the Commission can add . It is a new body and is still feeling its way , but we believe the Commission membership is committed to practical steps to improve peacebuilding across key aspects of the work of the United Nations . The Commission was created , as many speakers have noted , because there was in a gap in the market . Countries emerging from conflict had no natural home at the United Nations , and several slipped back into conflict when international scrutiny was diverted elsewhere . This has cost too many lives . So the Commission ensures that countries emerging from conflict remain on our agenda — the joint agenda of the Security Council , the Economic and Social Council and the General Assembly , that these countries benefit from the respective scrutiny we can provide and that they align countries , troop-contributing countries , donors , international financial institutions and other actors in a coordinated set of priorities across the social , security , economic and rule of law areas . I should like to align myself with the statement to be made soon by Germany on behalf of the European Union and will therefore confine my intervention to concentrating on some core elements of the Commission 's work on which we hope we can all focus in the coming months . By the time of the Commission 's first anniversary , we should be proud of the positive impact this new body is having on the ground . First , we believe that the core mandate of the Peacebuilding Commission is its country-specific work with strong national leadership . When the Commission reviews a country , there are six fundamental things we believe it should do . First , the Commission should take a comprehensive look at peacebuilding to identify the most pressing priorities and make recommendations covering governance , human rights and aid , as well as peace and security . Second , it should involve a wide range of actors , including civil society and the private sector , to agree upon a common vision of how to build peace and promote exchanges of information , coordination and best practice . Third , it should provide scrutiny and honest assessment of progress and problems . Fourth , it should , through frank dialogue with the Government concerned , provide recommendations for action to be followed up on by the Security Council , the international financial institutions , United Nations agencies and other partners . Fifth , it should ensure follow-up to those recommendations through regular progress reviews . Sixth , it should ensure that lessons learned are compiled and disseminated . The United Kingdom believes that within this framework and with the establishing resolution serving as a foundation , there are three key areas where the Security Council and the Peacebuilding Commission can develop an effective working relationship . I note from the important contributions we have heard today that there seems to be a wide measure of agreement on how this partnership might work . First , the Security Council can use the Peacebuilding Commission for advice . The timing of the request for advice is important — for example , before a mandate renewal , or before the establishment of a new peacekeeping operation . But the nature of the request is also important . The Council could ask for an overview of the situation or advice on a specific issue . Secondly , the Security Council receives the advice and acts on it appropriately . Sometimes the Council might simply take note of the advice . At others , the advice or recommendation for action will need further evaluation and action by the Council . Thirdly , the Commission provides early warning to the Council , for instance , drawing the attention of the Security Council to setbacks and risk factors in countries on the Council 's agenda . We see this particular area is one where the Security Council can add value . I am also sure that there is complementarity in the value on the economic and social side that the Economic and Social Council will be able to add . I want to stress that there is no exclusivity here . We look forward to discussion in other bodies of the United Nations . All contributions are equally valid . Finally , I cannot mention the development of the Peacebuilding Commission 's work without mentioning the Peacebuilding Support Office . I would like to thank the Assistant Secretary-General for all her efforts so far in bringing this office to life . The Support Office has a number of critical roles . It acts as a secretariat to the Commission , it supports the United Nations country teams in their work with the Commission , and it is a repository for relevant lessons learned so that we can all benefit from best practices . We hope that by the time of the Commission 's first anniversary it will have an important impact on the ground . That means that the peacebuilding priorities identified by the Commission are being implemented in Sierra Leone and Burundi , it means that the United Nations and international actors are being more joined up in support of these priorities , and it means that by July we would hope that the Peacebuilding Commission has an annual calendar of meetings agreed , that there should be well-established in-country consultation mechanisms with national Governments taking the leading role , and that the Peacebuilding Support Office should be working at full strength . With the help of all the colleagues on the Peacebuilding Commission , we believe that we can reach these goals . Mr. Kumalo ( South Africa ) : We thank the delegation of the Russian Federation for organizing this important meeting on post-conflict peacebuilding . My delegation is pleased that the Security Council extended an invitation to the Chairman of the Organizational Committee of the General Assembly , the President of the Economic and Social Council , the President of the Peacebuilding Commission and other important actors that are participating in this debate today . We also appreciate the fact that the Security Council has opened this meeting to other States Members of the United Nations as a way of demonstrating that peacebuilding is a responsibility for all . Last year , both the General Assembly and the Security Council established the Peacebuilding Commission . Now that the Commission is soon to be a year old , it is time for each organ — the General Assembly and the Security Council — according to its respective mandate , to reflect further on the purpose and mission of the Peacebuilding Commission . At present , my delegation is concerned that the Commission means different things to different people . To quote briefly the ambassador of Angola and Chair of the Organizational Committee of the Peacebuilding Commission , “ Let us all agree that our theoretical differences in New York are meaningless to those who are directly suffering from the consequences of conflict on the ground . What matters for them are concrete actions and not just eloquent statements . ” For example , it is easier to explain that the Peacebuilding Commission is not a donor agency , since it cannot have the resources of the United Nations Development Programme , the World Bank or even the International Monetary Fund . Also , the Commission cannot simply meet in New York to discuss far-away countries that are struggling to emerge from conflict . What the Peacebuilding Commission is , and should be , is more complicated and difficult to explain . According to the founding resolutions passed by both the Security Council and the General Assembly , the Peacebuilding Commission has three main purposes . The first is to bring together all relevant actors to marshal resources and to advise on and propose integrated strategies for post-conflict peacebuilding and recovery . Its second purpose is to focus attention on the reconstruction and institution-building efforts necessary for recovery from conflict and to support the development of integrated strategies in order to lay the foundation for sustainable development . The third purpose is to provide recommendations and information to improve the coordination of all relevant actors within and without the United Nations , to develop best practices , to help to ensure predictable financing for early recovery activities and to extend the period of attention given by the international community to post-conflict recovery . Certainly , the aims and purposes of the Peacebuilding Commission are phrased in language that is vague . What is clear , however , is that the Commission has to make its impact on the ground , which means that it needs to embrace strategies for post-conflict recovery that enjoy the confidence of the countries concerned . Without country ownership , the Commission is likely to be regarded as a structure that imposes solutions that may be unacceptable to the countries that are supposed to benefit from its expertise and advice . The Peacebuilding Commission has to be knowledgeable about the actors on the ground that are promoting post-conflict recovery , since it is in the best position to enhance coordination and cooperation among various stakeholders . The Commission can bring together the United Nations agencies , the donors , civil society and the Governments in a common purpose of building peace and thereby fill the gap that is always present when various organizations and agencies are trying their best to achieve the same goal from different perspectives and mandates . In this way , the Commission may be able to identify a niche for itself . We welcome the recognition by the Security Council of the link between peace and development , which is reflected in the integrated approach to peacekeeping . In response , the civilian components of peacekeeping operations are structured under a development pillar and a security pillar . Peacekeeping is an integral part of peacebuilding , and therefore it is important that peacekeeping operations create an enabling environment for those involved in peacebuilding efforts , including the promotion of human rights , so that their efforts could be integrated from the point of the deployment of a mission . This integrated manner is already reflected in the Council mandates for recent complex missions such as the United Nations Mission in the Democratic Republic of the Congo , the United Nations Mission in Sierra Leone , the United Nations Stabilization Mission in Haiti , the United Nations Operation in Côte d'Ivoire , and others . The Security Council could seek advice from the Peacebuilding Commission before peacekeeping operations are deployed and after the Council has decided on mandates , so as to ensure greater cohesion between the United Nations peacekeeping operations and other actors involved in peacebuilding . Before scaling down the activities of peacekeeping operations in a country emerging from conflict , the Security Council could also consult with the Commission , so that the transition is smooth and everything is in place when the peacekeepers leave . The holding of elections has often been considered as a benchmark for declaring that a country has emerged from conflict and is ready for the next stage of peacebuilding . Yet there have been occasions when the donors , including the Bretton Woods institutions , have needed more assurance beyond the holding of elections , no matter how free and fair those elections may be . I pause here again to quote the President of the Economic and Social Council , who put it much better in his statement by calling this tactic “ a wait-and-see approach ” . While the holding of elections is an important indicator of future stability , it may not indicate that a country emerging from conflict is beyond a relapse to its past . A more comprehensive indicator of stability may be a combination of the holding of democratic elections , disarmament , demobilization and reintegration ( DDR ) , reconstruction and security sector reform . Yet in some countries emerging from conflict , the World Bank and the United Nations Development Programme have been slow in funding or implementing DDR activities because of large unpaid debts owed to them — usually by the previous regime or Government . The Peacebuilding Commission could provide a forum through which problems relating to the slow pace of funding peacebuilding activities could be resolved quickly . The quick injection of resources into a country emerging from conflict is often the glue that keeps that country from falling apart once again . Here , I would like to refer to the statement made earlier by the Representative of Sierra Leone , who said simply that the mandate of the Peacebuilding Commission reflects a sense of urgency . For that reason , we believe that the donor community needs to be flexible and to remain engaged , particularly in the early post-conflict stages . The Peacebuilding Fund was created for the specific purpose of assisting in the facilitation of peacebuilding activities . The Fund was understood to be a catalyst for attracting much-needed resources — particularly at a time when there may be little hope of success towards recovery . It is for that reason that we hope that the role of the Peacebuilding Fund will be clearly defined . It would be unfortunate if , because of the Peacebuilding Fund , the Peacebuilding Commission were to be mistaken for a donor agency . Finally , there are fundamental practices that the Commission should follow if it is to become successful . One of these is ensuring that countries emerging from conflict have full ownership of the building of the peace for the benefit of their people . Another is to make certain that the Peacebuilding Commission develops rules of procedure that are permanent and predictable . It should be clear to everyone what the Commission is about and what it can and cannot do . Lastly , the Peacebuilding Commission will soon be requested to consider taking on other countries , beyond Sierra Leone and Burundi . We hope that such requests will be considered in the light of the experience gained in assisting the first two countries on the Commission 's agenda . The Peacebuilding Commission is very important for the lives of people in countries that are emerging from conflict . It needs to be a beacon of hope and promise . Its impact must be felt on the ground . In other words , the Commission should soon meet in Freetown or Bujumbura . New York meetings alone are not going to make a great difference in the lives of people in Freetown and Bujumbura , who are supposed to be the beneficiaries of the Peacebuilding Commission . Nana Effah-Apenteng ( Ghana ) : At the outset , I , too , would like to commend the delegation of the Russian Federation for having organized this debate , which affords us the opportunity to highlight the importance and review the performance of the Peacebuilding Commission . In this regard , we are grateful to the various officials and the representatives of Sierra Leone and Burundi for their briefings and statements . I associate myself with the statement to be made later by the representative of Jamaica on behalf of the Non-Aligned Movement . We all clearly have a stake in the Peacebuilding Commission , whose creation is but one important step in the implementation of the institutional reforms needed to enable the United Nations to respond to the needs identified in the 2005 World Summit Outcome for an institutional , systematic and seamless connection between peacekeeping and post-conflict peacebuilding . Only an effective Peacebuilding Commission can ensure that the huge investments made by the international community in peace and stability in those volatile parts of the world will achieve the most positive , sustainable and irreversible outcomes . The success of the Commission will certainly bring encouragement and hope to millions of people — especially those in Africa — caught in the vicious cycle of conflict and poverty . We are very pleased , therefore , that the Organizational Committee held meetings during which Burundi and Sierra Leone were selected as pioneers in post-conflict peacebuilding under the auspices of the Peacebuilding Commission . They deserve all the support they can get in their recovery efforts because , as pilot projects , their success will impact on the future of the Commission . The danger of relapse is all too real and ever-present in societies that are still emerging from conflict . In a climate of high expectations and lurking distrust , the transition from peacekeeping to post-conflict recovery poses enormous institutional challenges that can easily overwhelm any Government . Above all , we must understand that as long as the underlying causes of conflict remain unaddressed , we could be on shaky ground . In our view , therefore , the most important role of the Peacebuilding Commission will be to identify , to prioritize and to target its limited resources with a view to addressing those fundamental problems . In this way , the Commission can be a worthy partner and help national Governments to adopt the best practices in governance that are so critical to long-term reconciliation and stability and ensure a seamless transition from conflict to the promotion of sustainable peace and development . As a member of the Organizational Committee , Ghana recognizes that the Peacebuilding Commission , like any new body or agency , will have teething problems . However , we are of the considered view that we need to agree early on our modus operandi . In this regard , we should avoid creating unnecessary bureaucratic layers and procedures and focus more on the delivery or implementation of agreed national strategies . As has been evident from some of the statements made today — especially the passionate appeal by the representative of Sierra Leone — we should strive to reduce the time lag between approval and disbursement of resources . Previous speakers have rightly highlighted the organic relationship that must exist between the Security Council and the Peacebuilding Commission and , by extension , the other organs of the United Nations , especially the General Assembly and the Economic and Social Council . It cannot be otherwise , because of the inextricable link between peace , security and development . Indeed , the Peacebuilding Commission offers a unique opportunity to test the efficacy of the growing preference for an integrated approach to United Nations missions and , probably , to point the way towards improved foreign aid management . Since the Peacebuilding Commission is not a donor agency , we should all participate in decisions relating to the disbursement of its resources . Everything must be done to avoid the known pitfalls of donor practices , which have been criticized for duplication of effort , politicization and lack of local ownership , as well as for high administrative costs . The Commission is expected to take a broad approach in its work and to bring together all relevant actors in order to serve as a forum for dialogue and cooperation between national actors and the international community . It is therefore well placed to blaze a new trail in international cooperation by drawing on the knowledge , expertise and experience accumulated by the United Nations , donor agencies , international financial institutions , women , non-governmental organizations and civil society over the years so as to develop programmes that can effectively address the often complex and interrelated problems which are peculiar to each post-conflict situation . It is precisely because each conflict is sui generis that we think the Peacebuilding Commission should be encouraged to have technical meetings in the countries concerned with a view to better appreciating and understanding the internal or local situation . The Peacebuilding Commission , as it develops , should also pay due attention to the regional and subregional dimensions of peacebuilding , seeking to reinforce regional organizations in their peacebuilding efforts and to utilize their expertise . It is also our candid view that , as a newly created body , the Commission has an ideal opportunity to incorporate a gender dimension into its mandate and its work from the start . In consonance with resolution 1325 ( 2000 ) , the Peacebuilding Commission should seek to involve women in all aspects of the peacebuilding process . While we share the view that the Peacebuilding Commission cannot be expected to assume the responsibilities of an elected Government , we also believe that the nature of its operations requires an appreciable level of involvement in order to win the confidence and trust of its clients . After all , it is expected to play the role of a coordinating body that leverages national and international resources . The presence of the Commission must be felt throughout the receiving State , as the traumatized population needs to be assured that the international community remains fully engaged in finding solutions to their problems . Needless to say , in order to meet the challenges of effective peacebuilding , the Peacebuilding Commission needs adequate resources . We doubt whether the quantum of money so far pledged , although commendable , is commensurate with the tasks and urgent needs in post-conflict countries . Finally , we recognize that the Peacebuilding Commission can only facilitate peace ; it cannot build it . Although adequate financial resources are crucial to successful peacebuilding , it is the will and determination of the Governments and the peoples concerned to preserve the peace and change the course of their own history that ultimately constitute the most decisive factor and the best guarantee of sustainable peace and development . Mr. Kleib ( Indonesia ) : We are grateful to you , Mr. President , for convening this important meeting on post-conflict peacebuilding . Indonesia associates itself with the statement to be made shortly by the representative of Jamaica on behalf of the Non-Aligned Movement . The Peacebuilding Commission is truly a unique platform , in that it serves to bridge the current critical gap in the international post-conflict peacebuilding system . Although the Commission is still in its early stages , we recognize that the expectations are high . It is therefore the view of my delegation that this public debate should be intended as a forum for the exchange of views among the stakeholders in order to explore practical ways of strengthening the Commission and enabling it to perform its work in an effective and efficient manner . Enhanced interaction and complementarity among various United Nations organs aimed at supporting the work of the Peacebuilding Commission would be beneficial . In that context , we look forward to the expected debate on the Commission in the General Assembly , which will provide important input on how to better assist the Commission in its tasks . While the Peacebuilding Commission is expected to contribute to the advancement of global peace and stability , we are of the view that it can have a particular impact in its role as a coordinating body that leverages international and national expertise . An inclusive and well-coordinated approach would systematically synergize peacebuilding efforts at both the national and international levels . It is our opinion that the work of the Commission would be more results-oriented if integrated peacebuilding strategies fully reflect the priorities of the countries concerned . Each integrated strategy needs to be broken down into manageable phases laying out a credible set of tasks and identifying the actors concerned . It should have a degree of flexibility in order to adapt to changes on the ground . The priorities have to come from national Governments , and ownership of the post-conflict recovery process is paramount . We feel that a better coordinated , more coherent and well organized international support system , provided through the Peacebuilding Commission , would facilitate better access and response for the countries in need . Here , we would like to underline that the work of the Commission should not create a separate layer of complexity for existing processes and that the Commission should not try to micromanage the activities being carried out in the countries concerned . We must be careful , however , not to end up creating a donor-recipient culture in the Peacebuilding Commission . Due care must be exercised so that the donors to the Commission are not perceived as controlling it , because that would only draw unnecessary criticism towards the United Nations . My delegation takes note that the resolutions establishing the Peacebuilding Commission do not clearly provide modalities for the involvement of regional and subregional actors . We therefore feel that there is also a need to provide practical tools and guidance for engaging regional and subregional actors in country-specific configurations . The positive role of the relevant stakeholders is crucial to a successful transition from the post-conflict phase to the normal process of sustainable peace and development . Hence , we are pleased to see the participation of various important entities in this discussion . Their contribution is useful , not only because they provide the Council with additional ideas on how to support the work of the Peacebuilding Commission , but also because the work that they do on the ground for people ravaged by conflict is indeed very valuable and much appreciated . My delegation is also of the view that civil society and non-governmental organizations , including women 's organizations , as well as the private sector , should play constructive roles in post-conflict rehabilitation and reconstruction . In the light of that , we would like to underline the need to formulate a modality enabling them to participate actively in peacebuilding activities . We are particularly encouraged by the most recent country meetings on Burundi and Sierra Leone , which were more action-oriented . We look forward to the presentation in the near future of the work plans on both countries by the respective Chairs of those country meetings . The progress made on key elements contained in the Chairs ' summaries needs to be evaluated through more frequent meetings of the Peacebuilding Commission . Finally , my delegation would like to state that we need to strike a balance between the work of the Organizational Committee and the country-specific configurations , as success in one aids the other . A properly empowered and robust Committee would serve to strengthen the work of the Commission . Mr. Liu Zhenmin ( China ) ( spoke in Chinese ) : The Chinese delegation wishes to thank you , Mr. President , for organizing this meeting . We would also like to thank the representatives of the relevant bodies of the United Nations system , the World Bank and the International Monetary Fund , for their participation in today 's debate . The Peacebuilding Commission was established as an outcome of the 2005 World Summit . For the first time in its history , the United Nations has a mechanism to coordinate and address post-conflict peacebuilding efforts . Despite the remarkable results achieved over the past 60 years by United Nations Blue Helmets operations in putting an end to armed conflicts , the United Nations faces a great many challenges in building sustainable peace . We hope that the Commission 's establishment will herald better times for post-conflict countries and their peoples and that it will enable them to realize their dreams of peace and development at an early date . The healthy development of the Peacebuilding Commission , a newborn baby in the United Nations family , will depend on the joint efforts of all Member States ; it is also the joint responsibility of everyone . Peacebuilding in any post-conflict country is , by its very nature , a comprehensive and systematic undertaking and requires that each of the parties concerned fully play its role . First , countries under consideration at the country-specific meetings must enjoy full ownership , which is a prerequisite for successful peacebuilding . One of the Commission 's main functions is to provide advice for peacebuilding in post-conflict countries and to help those countries to formulate integrated strategies . In a sense , the countries under consideration are the Commission 's clients . It is only by communicating with them as much as possible and by gaining a better understanding of their needs that the Commission can establish clear objectives for its work and develop country strategies that are appropriate to their specific situations . Secondly , the Commission 's function in comprehensive coordination must be enhanced . That is the key to successful peacebuilding . Coordination should be carried out at the following three levels . The first is coordination among the different plans for reconstruction in post-conflict countries . Before the Peacebuilding Commission entered the scene , a number of plans for reconstruction and framework documents may have already existed . The Commission should consolidate them into an integrated strategy and programme of action . The second level of coordination is that among different players . Peacebuilding is a complex undertaking , with a host of players , including donors , countries that by tradition are influential , international financial institutions , civil society and so forth . The Commission needs to establish and maintain channels for smooth communication among the players . The third level of coordination is that among different organs of the United Nations . The General Assembly , the Security Council and the Economic and Social Council all play an important role in peacebuilding , according to their respective mandates . The relationship between them should be complementary rather than competitive and should enable them to capitalize on their respective comparative advantages . Thirdly , the focus of the Peacebuilding Commission should be country-specific meetings so that integrated strategies and programmes of action can be formulated promptly for countries under consideration , because they constitute the very soul of peacebuilding . Having finished drafting the guidelines for its work in the initial phase , the Peacebuilding Commission should shift its focus to country-specific meetings in a timely manner . Its work should be practical , efficient , focused and action-oriented , with a view to developing integrated strategies and programmes of action that affect the specific situations of the countries under consideration . The Commission should try not to be over-ambitious and should concentrate its limited energy on solid , down-to-earth work . Only by branding and building up prestige at the outset can it attract more attention from the international community . Fourthly , the role of the Support Office should be brought into full play so as to provide guarantees and support for the effective functioning of the Peacebuilding Commission . The Support Office should not only serve as a secretariat by preparing for meetings and providing conference services , but it should also actively make bold proposals to the Commission in the fields of policy , theory and strategy by taking advantage of its wide access to a great variety of information and its extensive contacts , thereby playing the role of a good adviser . The international community , and developing countries in particular , have high expectations of the Peacebuilding Commission . This June we will celebrate the first birthday of this newborn baby . We hope that with the joint efforts of all , the Peacebuilding Commission will be able to give us a report card that pleases everyone . This will be the best birthday present it can give to itself . China is ready to join the international community in working hard towards this end . The President ( spoke in Russian ) : I shall now make a statement in my capacity as the representative of the Russian Federation . The issue of post-conflict peacebuilding has never been more topical in the context of United Nations activities , in particular those of the Security Council . Experience shows that achieving lasting peace and the effective resolution of armed conflicts is possible only on the basis of a comprehensive approach . This approach must include preventive and peacekeeping efforts , along with peacebuilding measures for post-conflict reconstruction , and ensure continuity and consistency during the transition from one phase to the next . Such an approach will allow us to create firm guarantees of regional stability and the non-renewal of conflict . An important tangible result of the decisions taken at the 2005 summit was the joint establishment by the General Assembly and the Security Council of the Peacebuilding Commission . This body , as this morning 's discussion has shown has considerable practical potential and could become one of the important mechanisms of international support for the reconstruction of States that have experienced armed conflicts . In general , the Commission 's work on Burundi and Sierra Leone in its first six months of existence is to be commended . We note the efforts of the Chairman of the Organizational Committee of the Commission — the Permanent Representative of Angola , Mr. Gaspar Martins , and his two country coordinators , the Permanent Representatives of Norway , Mr. Løvald , and of the Netherlands , Mr. Majoor . We must also note the considerable work done by the Peacebuilding Support Office , headed by the Assistant Secretary-General , Ms. McAskie . However , there were not just successes during this period . We suggest that the well-known difficulties are largely due to the complexity of this initial stage in setting up a commission . In its activities , particular attention should be given in the future to ensuring close coordination with the recipient countries . In this context , we welcome the participation in today 's meeting of representatives of Burundi and Sierra Leone and the confirmation of their readiness to cooperate with the Peacebuilding Commission . It is important that members of the Commission conduct an impartial and collective analysis of priorities for peacebuilding in countries on their agenda , and that they develop agreed recommendations that provide assistance required both by recipient States and by the Security Council . If proper account is taken of recommendations developed together with Governments of recipient countries by the Commission , the General Assembly , the Security Council , United Nations agencies , the donor community , the international financial institutions and other interested parties , this will improve the coordination of international post-conflict support and reduce the risk of a relapse into a crisis . Particular attention must be given to enhancing cooperation between the Commission and the Security Council , particularly at this stage when Burundi and Sierra Leone are on the agenda of both bodies . It is important to establish a timely exchange of information and show a clear division of labour . Of course , this must be done while at the same time developing links between the Peacebuilding Commission , the General Assembly and the Economic and Social Council . There is a clear need for more systematic work by the Commission and more careful preparation of its country-specific meetings in order to increase their effectiveness . It is important to have a sensible mix of closed meetings and open , informal consultations within the Commission and the work of the expert groups on specific questions of Burundi and Sierra Leone . The most important component of the work of the Peacebuilding Commission is its work on the ground with national Governments and involving the United Nations country teams and the donor community . Here , additional attention must be given to harmonizing the activities of the Peacebuilding Support Office and the Commission with existing coordinating mechanisms , first and foremost within the United Nations system itself . What is needed is cooperation between the Peacebuilding Commission and United Nations agencies in the field that does not infringe upon existing United Nations operational activities but rather enhances them , including by taking account of the existence of specific cooperation programmes with recipient countries that have been endorsed by the executive boards of those United Nations agencies . The General Assembly , in our view , is precisely that forum where Member States can find an answer to this question . We welcome the initiative of the Non-Aligned Movement to hold a plenary meeting of the Assembly to discuss the work of the Peacebuilding Commission . We suggest that the interest shown in the Commission by the two main United Nations bodies is a guarantee of the close and constructive cooperation between the General Assembly and the Security Council to achieve our common goal — that is , to increase the effectiveness of international efforts in the area of peacebuilding . I now resume my functions as President of the Council . I give the floor to the representative of Germany . Mr. Matussek ( Germany ) : I have the honour to speak on behalf of the European Union ( EU ) . The candidate countries Turkey , Croatia and the former Yugoslav Republic of Macedonia , the countries of the Stabilization and Association Process and potential candidates Albania and Serbia , and the EFTA country Iceland , member of the European Economic Area , as well as Ukraine and the Republic of Moldova align themselves with this declaration . The European Union would like to thank the Russian Federation , as presidency of the Security Council , for organizing this very timely debate on the work of the Peacebuilding Commission following the first two rounds of country-specific meetings . The European Union sees the establishment of the Peacebuilding Commission as a key achievement of the United Nations reform process . Together with the Peacebuilding Support Office and the Peacebuilding Fund , it forms the core of the United Nations new peacebuilding architecture . As a flexible instrument , the Peacebuilding Commission is “ learning by doing ” . In our view , members should be willing to work creatively within the given framework . From its inception , the European Union has supported the concept of the Commission as a body that will ensure an integrated approach to peacebuilding , taking into account the links between security , development , human rights and the rule of law . That very much corresponds to the European Union 's comprehensive approach to conflict prevention , development and peacebuilding . Over the years , the European Union has developed and used an array of instruments . They include political and development-related tools , as well as conflict prevention and crisis management mechanisms . The European Union , the States members of the European Union and the European Community engage in peacebuilding activities worldwide — in Africa and Asia , as well as in the Middle East , Europe , Central Asia and Latin America . European member States and the European Community fund and implement projects in all areas of peacebuilding . A few such important areas include demobilization and reintegration , security sector reform , good governance , reconciliation efforts , child- and gender-related post-conflict assistance , trade-related measures and reconstruction operations . The European Union is committed to actively supporting the work of the Peacebuilding Commission on the basis of its experience , resources and worldwide operability . The Peacebuilding Commission has got off to a good start . After only two sets of country-specific meetings , it has identified areas of priority action for the two countries under consideration . The Commission has also established a dialogue among Governments concerned , the United Nations system , institutional donors , regional actors and members of the Peacebuilding Commission . Now , the recommendations of the Commission must be implemented in the countries concerned and within the institutional framework of the United Nations . Here , the Commission also needs the support of the Security Council , the General Assembly and the Economic and Social Council , and dialogue must be broadened in the countries concerned to include national civil society , the private sector and other relevant parties . One year after its establishment , the Commission will also have to make decisions as to its strategic goals . If the Commission is to add value to peacebuilding efforts worldwide , and particularly in the countries themselves , it will have to be ambitious . It will have to be more than the tools we already have , more than a mere coordination mechanism , and more than a donors ' conference . Promoting the development of a viable peacebuilding strategy that has broad ownership is where the Peacebuilding Commission can really add value . The European Union would like to contribute to the discussion among the Commission 's members on structuring the future work of the Commission and its interaction with other actors . In doing so , we would draw on our own experience in coordinating European Union programmes , as well as on the experience of the first country-specific meetings . The Commission has defined general areas of priority for each country under consideration . It will now be useful to further prioritize within those areas , in consultation with the countries concerned , United Nations country teams , donors , civil society and the private sector . Defining priorities necessarily means making a selection among a huge number of possible areas of engagement . The Peacebuilding Commission should focus on areas that have a direct and traceable link to the causes of conflict , areas in which instruments of so-called classical development are not available or functional , and areas where coordination and integration are especially needed . All peacebuilding initiatives in the field should be linked to existing strategies and programmes to avoid duplication of efforts . We want the Commission to be able to work coherently , continuously and in a result-oriented way . To achieve that , the Commission should focus on activities in the field . It should enhance cooperation with all relevant actors , including donors and non-State actors . It should make use of regular informal meetings in between formal meetings and find a way to capture and condense lessons learned from its work . The Security Council has started to discuss its relation to the Peacebuilding Commission , how to intensify communication between the Council and the Commission , and how best to achieve implementation of advice from the Commission . A similar dialogue is getting under way between the Commission and the General Assembly with the upcoming open debate in that organ . The European Union welcomes those efforts and also recognizes the contribution that the Economic and Social Council can make . There are many ways to enhance cooperation between the Peacebuilding Commission and the Security Council , the General Assembly and the Economic and Social Council . Regular meetings between the Commission chairs and the presidents of those bodies would be one possibility . Invitations to the chairs and the chairs of country-specific meetings to brief those bodies would be another . The European Union remains committed to working on integrated peacebuilding strategies with the Peacebuilding Commission and with the countries concerned . We are determined to make that key project of United Nations reform a success and to make its impact felt positively in the regions where the Peacebuilding Commission is engaged . The President ( spoke in Russian ) : I now give the floor to the representative of Jamaica . Mr. Wolfe ( Jamaica ) : First , let me congratulate you , Sir , on your assumption of the presidency of the Security Council for the month of January and for the excellent work that you and your delegation have accomplished during that period . As coordinator of the caucus of the Non-Aligned Movement ( NAM ) in the Peacebuilding Commission , I have the honour to speak on behalf of the Movement regarding the activities of the Peacebuilding Commission . There can be no denying that , in the recent past , the United Nations has seen a surge in the requirements for peacekeeping operations around the world . The role of those operations has become more complex and demanding , placing a huge responsibility on the United Nations , and as a consequence has led to a tremendous strain on existing resources . We recall that it was in response to that development that the concept of a Peacebuilding Commission was introduced in December 2004 as a result of a high-level United Nations report . It subsequently gained momentum in March 2005 when then Secretary-General Kofi Annan released his report entitled “ In larger freedom ” . In due deference to and respect for the prerogatives of the Security Council and the role of the presidency in advancing initiatives relating to international peace and security , the Non-Aligned Movement is concerned that the Security Council should at this stage find it necessary to review the work of the Peacebuilding Commission . While it is no secret that the Commission has experienced some difficulties with its internal operations and processes , we think that it is both lacking in merit and premature to have the Security Council review or evaluate its activities at this juncture , in particular in the light of the stipulation by General Assembly resolution 60/180 that the Peacebuilding Commission shall submit an annual report to the General Assembly , which shall hold an annual debate to review it . Since its establishment by General Assembly resolution 60/180 — which also established its modus operandi , among other working parameters — the Commission has met four times on matters concerning its core functions . The Commission has examined the situations in Burundi and Sierra Leone , and has approved the disbursement of much-needed finances to support crucial areas identified by key stakeholders and the Governments of both countries . The key areas are those pinpointed as most likely to lead to a relapse into conflict . The Non-Aligned Movement places significant value on the Peacebuilding Commission , in particular its role in support of national ownership of post-conflict peacebuilding priority planning and initiatives . Notwithstanding the fact that the Commission is still in its formative stages and still going through the expected teething processes , it has worked as closely as possible , under the circumstances , with national authorities to ensure national ownership of the peacebuilding process . There is concurrence , and indeed broad consensus , within the Commission that economic reconstruction and rehabilitation and a comprehensive set of risk-reduction strategies should be at the forefront of all efforts aimed at sustaining peace , initiating development and promoting post-conflict recovery . The Non-Aligned Movement emphasizes that due respect and regard must be shown for the role of the Organizational Committee in the preparation of country-specific meetings and in evaluating the progress made and charting the way forward after each country-specific meeting , based on the summaries of the meetings prepared by the respective Chairpersons , in addition to the full participation of the countries under consideration in the decision-making process . It is also useful to remind ourselves that the Peacebuilding Commission is not a donor agency , as its activities are carried out in a far broader and more comprehensive and participatory context , consistent with its mandate . Decisions regarding the provision of financial resources should therefore be guided by national priorities and be based on the collective decision of members of the Peacebuilding Commission . Recommendations for assistance must highlight the priority areas established by the Government of the country under review by the Commission . The matter of Government guidance should also be uppermost in planning the way forward , and will certainly serve to strengthen the process of national ownership . The holistic and inclusive approach to evaluation and recommendations adopted at country-specific meetings can only add to the integrity of the process within the Commission . The Non-Aligned Movement would also further like to reiterate that the Peacebuilding Commission 's involvement in reconstruction efforts is based clearly on General Assembly resolution 60/180 , which stipulates the need for a dedicated mechanism to address the special needs of countries emerging from conflict towards recovery , reintegration and reconstruction , and to assist them in laying the foundation for sustainable development . Despite the seemingly clear channels for the Peacebuilding Commission to work towards achieving its objectives , the Non-Aligned Movement is of course concerned at certain shortcomings that , if not addressed , could have the unwanted effects of stifling its work or threatening to undermine its capability and effectiveness . The Movement would therefore like to see an increase in the frequency of meetings of the Organizational Committee to assess and evaluate strategies , attend to reconstruction and institution-building efforts and work towards developing recommendations and information to improve the coordination of all relevant actors within and outside the United Nations , among other things . Additionally , the Peacebuilding Commission must identify the means by which funds that are approved for disbursement reach recipient countries in the shortest possible time . It is not sufficient to identify the urgency of the need while paying scant regard to , or becoming lax in , follow-up actions at the most crucial stage . It is necessary to strengthen the role and the work of the Organizational Committee as the entity governing the work of the Peacebuilding Commission . In that regard , the Commission is the body responsible and entitled to elaborate on the guidelines regarding meetings in the country-specific format , as well as the work of the Peacebuilding Support Office . We would therefore call on all to avoid any action that could be construed as undermining the authority of the Organizational Committee . Looking ahead , the Non-Aligned Movement is convinced that the upcoming debate in the General Assembly will undoubtedly enrich the awareness of the general membership as to the progress being made within the Peacebuilding Commission , notably in addressing the outstanding organizational and substantive issues . That debate will of course add value to the open debate now taking place in the Security Council , and will not only increase the momentum of the follow-up to the multi-dimensional aspects of the cases under consideration within the Commission but will also enhance its effectiveness , in line with the respective prerogatives and responsibilities of both organs . The caucus of the Non-Aligned Movement in the Peacebuilding Commission would like to take this opportunity to express its appreciation to the Ambassador of Angola , Chairperson of the Organizational Committee of the Peacebuilding Commission , as well as to the Chairpersons of the country-specific meetings and the Peacebuilding Support Office , for the successful outcome of the country-specific meetings held to date . The Movement would also like to encourage the wider membership of the Peacebuilding Commission to remain unrelenting and vigilant in efforts to consolidate the gains and achievements made to date , so as to mitigate the possibility of countries under consideration relapsing into conflict . The President ( spoke in Russian ) : I now give the floor to the representative of Chile . Mr. Muñoz ( Chile ) ( spoke in Spanish ) : I would first like to associate myself with the statement made by the Permanent Representative of Jamaica on behalf of the member countries of the Non-Aligned Movement members of the Peacebuilding Commission . The Peacebuilding Commission is currently in the process of establishing its identity in order to put its imprint on its efforts , in line with the mandates conferred upon it by the resolutions that established it . We believe that the central matter as regards the Commission 's future is the issue of its relevance . Since it is not a new donor entity — notwithstanding the importance of the Peacebuilding Fund — it is essential that the Commission be given the leadership role in mobilizing and coordinating resources and efforts in support of countries emerging from conflict . The Peacebuilding Commission must not become a body for academic debates . It should instead be in the field providing advice and working with countries emerging from conflict . To that end , it is essential to strengthen ties with international financing institutions , such as the World Bank , the International Monetary Fund and regional banks , as well as with the community of donor countries . We welcome the efforts made in that regard . Likewise , we believe it is necessary to adopt the necessary measures to ensure the broadest possible participation by all relevant actors in the search for solutions to the most pressing problems encountered by countries emerging from conflict , including participation by civil society . In the future it will be necessary to strengthen the role and work of the Organizational Committee as the managerial body of the Commission — in particular its country-specific format , which is key . We believe it is urgent to avoid competing visions that could weaken the work of the Peacebuilding Commission . This requires action agreed between the General Assembly and the Security Council , as well as proper coordination with the Economic and Social Council . With a view to strengthening the work of the Organizational Committee of the Peacebuilding Commission , we believe it is necessary to establish an annual calendar of formal meetings , leaving the necessary flexibility to carry out informal meetings whenever necessary , either in a country-specific format or another format . We observe with concern the persistence of discussion on how to carry out the work of the Peacebuilding Commission . National ownership in determining and carrying out national priorities is , of course , a basic premise in this respect . National priorities are identified as a result of an internal process of consultation carried out by the national Government , with participation of various national actors . But in our opinion , defining national priorities is a two-way street , and the Peacebuilding Commission cannot be excluded . One of the main purposes of the Peacebuilding Commission , according to resolution 1645 ( 2005 ) is “ To bring together all relevant actors to marshal resources and to advise on and propose integrated strategies for post-conflict peacebuilding and recovery ” ( para . We are pleased that in the months since its work began , the Peacebuilding Commission has addressed the cases of Burundi and Sierra Leone . During this period , specific plans of action were reviewed for both countries , with the active participation of the national authorities of those countries ; the contribution of the Peacebuilding Support Office in approving the disbursement of significant assistance for both countries was valuable . This year we should follow up on the status of the implementation of the agreed programmes . It will also be necessary for all of us to make efforts to replenish the resources of the Peacebuilding Fund . Lastly , beyond the required reports mandated by the resolutions , we feel that at this stage the most important thing is for the Peacebuilding Commission to make active cooperation with countries emerging from conflict a priority . The President ( spoke in Russian ) : There are still a number of speakers remaining on my list for this meeting . As announced at the outset of the meeting , I intend , with the concurrence of members of the Council , to suspend the meeting until 3.30 p. m. sharp . The meeting was suspended at 12.55 p. m. This record contains the text of speeches delivered in English and of the interpretation of speeches delivered in the other languages . The final text will be printed in the Official Records of the Security Council . Corrections should be submitted to the original languages only . They should be incorporated in a copy of the record and sent under the signature of a member of the delegation concerned to the Chief of the Verbatim Reporting Service , room C-154A . </text>
<text id="un/ST_SGB_2002_9">
Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials , and Experts on Mission United Nations  New York , 2002 ST/SGB/2002/9 18 June 2002 Secretary-General 's bulletin Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials , and Experts on Mission The Secretary-General promulgates the following Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials , and Experts on Mission ( hereinafter “ the Regulations ” ) . Section 1 General provisions 1.1 By its resolution 56/280 of 27 March 2002 , the General Assembly adopted the Regulations . 1.2 The text of the Regulations is attached to the present bulletin . Section 2 Final provision The present bulletin shall enter into force on 1 July 2002. ( Signed ) Kofi A. Annan Secretary-General Contents Introduction Article 105 , paragraph 3 , of the Charter of the United Nations empowers the General Assembly to make recommendations with a view to determining , inter alia , the privileges and immunities of officials of the Organization or to propose conventions to Member States for this purpose . The Assembly did so by adopting the Convention on the Privileges and Immunities of the United Nations on 13 February 1946 ( hereinafter called “ the General Convention ” ) . The United Nations has persons performing full-time services for it , at the direction of its legislative organs , who are not staff . For example , article 13 of the statute of the Joint Inspection Unit ( approved by the General Assembly in its resolution 31/192 of 22 December 1976 ) provides that the Inspectors shall have the status of officials of the Organization but shall not be staff members . In addition , pursuant to article V , section 17 , of the General Convention , the Secretary-General has specified and submitted to the Assembly proposals that a number of persons who occupy certain positions within the Organization be accorded privileges and immunities under articles V and VII of the General Convention , even though they are not staff members . Those persons are the presiding officers of United Nations organs performing functions for the Organization on a substantially full-time basis ( for example , the Chairman of the Advisory Committee on Administrative and Budgetary Questions and the Chairman and Vice-Chairman of the International Civil Service Commission ) . Those officials are not in a separate category under the General Convention , but their names are submitted by the Secretary-General to the host country together with those of Secretariat officials who are staff members . These persons have been consistently referred to by the General Assembly as “ officials other than Secretariat officials ” . Experts on mission may be retained by way of a contract known as a consultant contract , which sets out the terms of their appointment and the tasks that they must discharge . Other individuals may have the status of experts on mission , even though they do not sign a consultant contract , if they are designated by United Nations organs to carry out missions or functions for the United Nations ( for example , rapporteurs of the Commission on Human Rights , rapporteurs and members of its Subcommission on the Promotion and Protection of Human Rights and members of the International Law Commission ) . Article VI of the General Convention provides that experts ( other than officials coming within the scope of article V ) shall be accorded privileges and immunities necessary to enable them to carry out their missions for the United Nations and specifies a number of those privileges and immunities . Article VII , section 26 , of the General Convention provides that facilities similar to those specified in section 25 ( concerning applications for visas and facilities for speedy travel ) shall be accorded to experts and other persons who are travelling on the business of the United Nations . The Regulations contained in the present bulletin will apply to officials other than Secretariat officials , and to experts on mission . The Regulations are in most parts very general since they must apply to all officials other than Secretariat officials , and experts on mission . However , the application of the Regulations and the commentary to officials other than Secretariat officials , and to experts on mission who perform functions in respect of the United Nations and other organizations in the common system in accordance with their mandates ( e. g. , the Chairman and Vice-Chairman of the International Civil Service Commission and the Inspectors of the Joint Inspection Unit ) , is explained in various provisions of the Regulations and the commentary ( see , e. g. , regulation 1 ( f ) , paragraph 3 of the commentary to regulation 1 ( a ) and the commentary to Regulation 1 ( b ) ) . The Regulations contained in the present bulletin will form part of the contract of employment or terms of appointment of any individual , including officials other than Secretariat officials , and experts on mission , who are appointed through Assembly action or through the actions of other representative bodies . Role of the commentary Each provision of the Regulations set out in the present bulletin is followed by a commentary . The commentary is designed to explain those provisions and will thus be of help to those persons subject to the Regulations . The commentary is not part of the Regulations adopted by the Assembly , and so is not a legal norm ; nor does it have the legal force of a rule . It is , however , an official guide published by the Secretary-General on the scope and application of the Regulations . The commentary will be updated from time to time in the light of experience gained in applying the Regulations to specific instances . Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials , and Experts on Mission Regulation 1 Status ( a ) The responsibilities of officials other than Secretariat officials ( hereinafter referred to as “ officials ” ) and of experts on mission are not national but exclusively international . ( b ) Officials and experts on mission shall make the following written declaration witnessed by the Secretary-General or an authorized representative : “ I solemnly declare and promise to exercise in all loyalty , discretion and conscience the functions entrusted to me by the United Nations , to discharge these functions and regulate my conduct with the interests of the United Nations only in view , and not to seek or accept instructions in regard to the performance of my duties from any Government or other source external to the Organization . ” ( c ) The Secretary-General shall seek to ensure that the rights and duties of officials and of experts on mission , as set out in the General Convention , are respected . The Secretary-General shall also seek to ensure , having regard to the circumstances , that all necessary safety and security arrangements are made for officials and experts on mission carrying out the responsibilities entrusted to them . ( d ) Experts on mission will receive a copy of the present Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials , and Experts on Mission ( hereinafter referred to as “ the Regulations ” ) when they receive documentation from the United Nations relating to their mission and will be required to acknowledge receipt of the Regulations . Officials will receive a copy of the Regulations at an appropriate opportunity . ( e ) The privileges and immunities enjoyed by the United Nations by virtue of Article 105 of its Charter are conferred in the interests of the Organization . These privileges and immunities furnish no excuse to those who are covered by them to fail to observe the laws and police regulations of the State in which they are located ; nor do they furnish an excuse for non-performance of their private obligations . In any case where an issue arises regarding the application of these privileges and immunities , an official or an expert on mission shall immediately report the matter to the Secretary-General , who alone may decide whether such privileges and immunities exist and whether they shall be waived , in accordance with the relevant instruments . The Secretary-General should inform and may take into account the views of the legislative bodies that appointed the officials or experts on mission . ( f ) These regulations are applicable to the Chairman and Vice-Chairman of the International Civil Service Commission and the Inspectors of the Joint Inspection Unit , without prejudice to and in accordance with the statutes of the International Civil Service Commission and the Joint Inspection Unit , which stipulate that these officials perform their functions in respect of the United Nations and other organizations that accept their statutes . Regulation 2 Conduct ( a ) Officials and experts on mission shall uphold the highest standards of efficiency , competence and integrity . The concept of integrity includes , but is not limited to , probity , impartiality , fairness , honesty and truthfulness in all matters affecting their work and status . ( b ) In the performance of their duties , officials and experts on mission shall neither seek nor accept instructions from any Government or from any other source external to the Organization . ( c ) Officials and experts on mission shall discharge their functions and regulate their conduct with the interests of the Organization only in view . Loyalty to the aims , principles and purposes of the United Nations , as set forth in its Charter , is a fundamental obligation of all individuals covered by the present Regulations . ( d ) While the personal views and convictions of officials and experts on mission , including their political and religious convictions , remain inviolable , they shall ensure that those views and convictions do not adversely affect their official duties or the interests of the United Nations . Officials and experts on mission shall conduct themselves at all times in a manner befitting their status . They shall not engage in any activity that is incompatible with the proper discharge of their duties with the United Nations . They shall avoid any action and , in particular , any kind of public pronouncement that may adversely reflect on their status , or on the integrity , independence and impartiality that are required by that status . ( e ) Officials and experts on mission shall not use their office or knowledge gained from their official functions for private gain , financial or otherwise , or for the gain of any third party , including family , friends and those they favour . Nor shall they use their office for personal reasons to prejudice the positions of those they do not favour . ( f ) Officials and experts on mission shall exercise the utmost discretion in regard to all matters of official business . Officials and experts on mission shall not communicate to any Government , entity , person or any other source any information known to them by reason of their official position that they know or ought to have known has not been made public , except as appropriate in the normal course of their duties or by authorization of the Secretary-General . If they are not appointed by the Secretary-General , such authorization shall be conferred by the body that appointed them . These obligations do not cease upon the cessation of their official functions . ( g ) Officials and experts on mission may not accept any honour , decoration , favour , gift or remuneration from any Government or non-governmental source for activities carried out during the course of their official functions while in the service of the United Nations . ( h ) Officials and experts on mission shall not be actively associated with the management of , or hold a financial interest in , any profit-making , business or other concern , if it were possible for them or the profit-making , business or other concern to benefit from such association or financial interest by reason of their position with the United Nations . Officials or experts on mission who are in such a situation shall either dispose of that financial interest or formally excuse themselves from participating with regard to any involvement in that matter that has given rise to the conflict-of-interest situation . ( i ) Officials and experts on mission shall file financial disclosure statements if requested to do so by the Secretary-General . The Secretary-General shall prescribe the format and information to be provided in such statements and shall establish procedures for filing them . The financial disclosure statements will remain confidential and will be used , as prescribed by the Secretary-General , only in making determinations pursuant to regulation 2 ( h ) . It will be for the Secretary-General , in due consultation with the appointing authority in the case of officials not appointed by the Secretary-General , to judge whether a particular fact has given rise to a conflict-of-interest situation . ( j ) Officials and experts on mission must comply with local laws and honour their private legal obligations , including , but not limited to , the obligation to honour orders of competent courts . ( k ) Any form of discrimination or harassment , including sexual or gender harassment , as well as physical or verbal abuse , at the workplace or in connection with work , is prohibited . ( l ) Officials and experts on mission shall not intentionally misrepresent their functions , official title or the nature of their duties to Member States or to any entities or persons external to the United Nations . ( m ) Officials and experts on mission participating , as part of their official functions , in activities organized by a Government , intergovernmental organization , non-governmental organization or other private source may receive from the Government , intergovernmental organization , non-governmental organization or private source accommodation and travel and subsistence allowance generally in line with those payable by the United Nations . In such cases , the travel and subsistence allowance that may otherwise be payable by the United Nations shall be reduced in the same manner as in respect of staff members of the Organization . Regulation 3 Accountability Officials and experts on mission are accountable to the United Nations for the proper discharge of their functions . Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials , and Experts on Mission , with commentary Regulation 1 Status Regulation 1 ( a ) The responsibilities of officials other than Secretariat officials ( hereinafter referred to as “ officials ” ) and of experts on mission are not national but exclusively international . Commentary The United Nations has persons who perform services for it on a substantially full-time basis but who are not staff members . These persons have consistently been referred to by the General Assembly as “ officials other than Secretariat officials ” . In addition , pursuant to article V , section 17 , of the General Convention , the Secretary-General has specified and submitted to the Assembly proposals that a number of persons who occupy certain positions within the Organization be accorded the privileges and immunities under articles V and VII of the General Convention , even though they are not staff members . These persons have also been referred to as “ officials other than Secretariat officials ” . The United Nations also has experts who perform assignments for the Organization . Article VI of the General Convention provides that experts ( other than officials coming within the scope of article V ) shall be accorded privileges and immunities necessary to enable them to carry out their missions for the United Nations and specifies a number of those privileges and immunities . These experts have been referred to as “ experts on mission ” . The Regulations and the commentary , as applied to the Chairman and the Vice-Chairman of the International Civil Service Commission , the Inspectors of the Joint Inspection Unit and other officials and experts who perform functions in respect of the common system , in accordance with the statute of the International Civil Service Commission or that of the Joint Inspection Unit , respectively , or other mandates approved by the General Assembly or other relevant main bodies and organs of the United Nations , should be construed in the light of those functions and mandates . References to the United Nations or the United Nations Organization in the context of these Regulations and the commentary should be applied , bearing in mind that the functions of those officials and experts are related to the common system . Regulation 1 ( a ) is similar to the second sentence of staff regulation 1.1 ( a ) . Regulation 1 ( b ) Officials and experts on mission shall make the following written declaration witnessed by the Secretary-General or an authorized representative : “ I solemnly declare and promise to exercise in all loyalty , discretion and conscience the functions entrusted to me by the United Nations , to discharge these functions and regulate my conduct with the interests of the United Nations only in view , and not to seek or accept instructions in regard to the performance of my duties from any Government or other source external to the Organization . ” Commentary Regulation 1 ( b ) , which is similar to staff regulation 1.1 ( b ) , contains the declaration of office of officials and experts on mission . In view of the system-wide functions of the International Civil Service Commission and the Joint Inspection Unit , the term “ United Nations ” in the written declaration will be replaced by the words “ United Nations and other participating organizations ” , and the word “ Organization ” will be replaced by the word “ organizations ” in the case of the Chairman and Vice-Chairman of the International Civil Service Commission and the Inspectors of the Joint Inspection Unit . Regulation 1 ( c ) The Secretary-General shall seek to ensure that the rights and duties of officials and experts on mission , as set out in the General Convention , are respected . The Secretary-General shall also seek to ensure , having regard to the circumstances , that all necessary safety and security arrangements are made for officials and experts on mission carrying out the responsibilities entrusted to them . Commentary The first sentence of regulation 1 ( c ) , which is similar to staff regulation 1.1 ( c ) , codifies an implicit duty that falls upon the Secretary-General , namely , to seek to ensure that the rights and duties of officials and experts on mission as set out in the General Convention are respected ( as such rights are granted by Governments , the Secretary-General can only “ seek to ensure ” that they are respected ) . The protection accorded to officials and experts on mission under this provision relates to their official acts and thus does not lapse upon cessation of their service for the Organization , or , if they are part-time , on days when they are not in service . The second sentence of regulation 1 ( c ) , which reproduces the essence of the second sentence of staff regulation 1.2 ( c ) , sets forth the responsibility of the Secretary-General to seek to ensure the safety of officials and experts on mission . Regulation 1 ( d ) Experts on mission will receive a copy of the present Regulations Governing the Status , Basic Rights and Duties of Officials other than Secretariat Officials and Experts on Mission ( hereinafter referred to as “ the Regulations ” ) when they receive documentation from the United Nations relating to their mission and will be required to acknowledge receipt of the Regulations . Officials will receive a copy of the Regulations at an appropriate opportunity . Commentary Experts on mission retained by the Secretariat sign a consultant contract or receive a letter or other documentation indicating the scope of their mission for the Organization . The consultant contract or other documentation will incorporate the Regulations by reference , and experts will be required to acknowledge that they will abide by the Regulations . At times , legislative bodies entrust tasks to individuals to perform assignments for those bodies ( for example , members and special rapporteurs of the International Law Commission and other bodies ) . Those individuals have the status of experts on mission . Although their appointments may have been concluded without the signature of any document of appointment , their attention will be drawn to the Regulations when they receive documentation from the Secretariat relating to their functions and/or their assignment . That documentation will include a copy of the Regulations explaining that they were adopted by the General Assembly and thus constitute part of the conditions of those individuals ' assignment for the United Nations . Officials will receive a copy of the Regulations at an appropriate time , such as when they make the declaration of office ( see regulation 1 ( b ) ) . Regulation 1 ( e ) The privileges and immunities enjoyed by the United Nations by virtue of Article 105 of its Charter are conferred in the interests of the Organization . These privileges and immunities furnish no excuse to those who are covered by them to fail to observe the laws and police regulations of the State in which they are located ; nor do they furnish an excuse for non-performance of their private obligations . In any case where an issue arises regarding the application of these privileges and immunities , an official or an expert on mission shall immediately report the matter to the Secretary-General , who alone may decide whether such privileges and immunities exist and whether they shall be waived , in accordance with the relevant instruments . The Secretary-General should inform and may take into account the views of the legislative bodies that appointed the officials or experts on mission . Commentary Regulation 1 ( e ) , which deals with privileges and immunities , is similar to staff regulation 1.1 ( f ) ( see paras . 32 , 49 , 54 and 55 of the report on standards of conduct in the international civil service 1954 , which was prepared by the International Civil Service Advisory Board ( hereinafter referred to as “ the ICSAB report ” ) ) . Regulation 2 ( j ) specifies the obligations on those who are covered by such privileges and immunities to honour their private legal obligations . Pursuant to article V , section 20 , and article VI , section 23 , of the General Convention , it is only the Secretary-General who has the right to waive the privileges and immunities accorded to officials and experts on mission . In deciding whether such privileges and immunities exist and whether they should be waived , the Secretary-General may take into account the views of the legislative body that appointed the officials or experts on mission . Regulation 1 ( f ) These regulations are applicable to the Chairman and Vice-Chairman of the International Civil Service Commission and the Inspectors of the Joint Inspection Unit , without prejudice to and in accordance with the statutes of the International Civil Service Commission and the Joint Inspection Unit , which stipulate that these officials perform their functions in respect of the United Nations and other organizations that accept their statutes . [ There is no commentary to this provision . ] Regulation 2 Conduct Regulation 2 ( a ) Officials and experts on mission shall uphold the highest standards of efficiency , competence and integrity . The concept of integrity includes , but is not limited to , probity , impartiality , fairness , honesty and truthfulness in all matters affecting their work and status . Commentary Regulation 2 ( a ) , which describes basic values expected of officials and experts on mission , is similar to staff regulation 1.2 ( b ) . The first sentence of regulation 2 ( a ) is derived from Article 101 , paragraph 3 , of the Charter of the United Nations by virtue of affirmatively placing upon officials and experts on mission the obligation to uphold the highest standards of efficiency , competence and integrity . As pointed out in paragraph 4 of the ICSAB report , the concept of integrity includes “ honesty , truthfulness , fidelity , probity and freedom from corrupting influences ” . Regulation 2 ( b ) In the performance of their duties , officials and experts on mission shall neither seek nor accept instructions from any Government or from any other source external to the Organization . Commentary Regulation 2 ( b ) , which is similar to staff regulation 1.2 ( d ) , flows from the first sentence of Article 100 , paragraph 1 , of the Charter of the United Nations ( see ICSAB report , paras . 7 , 18 and 31 ) . Regulation 2 ( c ) Officials and experts on mission shall discharge their functions and regulate their conduct with the interests of the Organization only in view . Loyalty to the aims , principles and purposes of the United Nations , as set forth in its Charter , is a fundamental obligation of all individuals covered by the present Regulations . Commentary Regulation 2 ( c ) in substance contains the same obligations as are contained in staff regulation 1.2 ( e ) applicable to staff . The first sentence of regulation 2 ( c ) sets forth an idea that is contained in staff regulation 1.1 ( a ) and in staff regulation 1.1 ( b ) , which contains the written declaration of office , that is to say , the idea that staff must regulate their conduct with the interests of the Organization only in view ( ibid . , para . The second sentence of regulation 2 ( c ) focuses on the concept of loyalty to the aims , principles and purposes of the Organization as set forth in the Charter of the United Nations ( which is alluded to in the declaration contained in regulation 1(b ) ) ( ibid . , paras . 5 , 6 and 21 ) . Regulation 2 ( d ) While the personal views and convictions of officials and experts on mission , including their political and religious convictions , remain inviolable , they shall ensure that those views and convictions do not adversely affect their official duties or the interests of the United Nations . Officials and experts on mission shall conduct themselves at all times in a manner befitting their status . They shall not engage in any activity that is incompatible with the proper discharge of their duties with the United Nations . They shall avoid any action and , in particular , any kind of public pronouncement that may adversely reflect on their status , or on the integrity , independence and impartiality that are required by that status . Commentary Regulation 2 ( d ) is similar to staff regulation 1.2 ( f ) . The core idea of conduct befitting an international civil servant was considered by the International Civil Service Advisory Board in 1954. The Advisory Board remarked that “ high standards of conduct are best attained by a universal understanding among staff members of the relation between their conduct and the success of the international organizations , and by the development of a strong tradition among men and women who are jealous of the reputation of the organizations that they serve and are anxious to safeguard it ” ( ICSAB report , para . 2 ; see also para . 4 , on the integrity expected of international civil servants ; paras . 5 , 6 and 21 , on loyalty ; paras . 7 and 18 , on independence ; and paras . 8 and 48 , on impartiality ) . In respect of the last sentence of the regulation , it would be for the Organization to characterize an action or pronouncement as adversely reflecting on the status of an official or an expert on mission . Regulation 2 ( e ) Officials and experts on mission shall not use their office or knowledge gained from their official functions for private gain , financial or otherwise , or for the gain of any third party , including family , friends and those they favour . Nor shall they use their office for personal reasons to prejudice the positions of those they do not favour . Commentary Regulation 2 ( e ) , which is similar to staff regulation 1.2 ( g ) , codifies principles set out in the ICSAB report ( see paras . 17 , 28 and 42 ) . The use of one 's office for personal gain is clearly unacceptable . This includes not only conducting a business from a United Nations office but also such activities as using United Nations facilities for a business , using the United Nations name , logo or address for a business and approving a contract for a family business without disclosure . Regulation 2 ( e ) also reflects the principle set out in staff regulation 1.2 ( g ) that a staff member shall not use information that has not been made public for the private advantage of the staff member or of any third party . The regulation , for clarity , makes specific reference to prohibiting an official or expert on mission from so favouring a third party , including family or friends , as to enable that third party to profit from the position of the official or expert on mission or from the exercise of his or her functions . The term “ friends ” is broad and seeks to encompass not only friends as normally understood , but also relationships that are not recognized by the United Nations as creating a dependency . The regulation also prohibits the use of office or knowledge gained from that office for personal reasons to prejudice or harm third parties . Regulation 2 ( f ) Officials and experts on mission shall exercise the utmost discretion in regard to all matters of official business . Officials and experts on mission shall not communicate to any Government , entity , person or any other source any information known to them by reason of their official position that they know or ought to have known has not been made public , except as appropriate in the normal course of their duties or by authorization of the Secretary-General . If they are not appointed by the Secretary-General , such authorization shall be conferred by the body that appointed them . These obligations do not cease upon the cessation of their official functions . Commentary Regulation 2 ( f ) , which is similar to staff regulation 1.2 ( i ) , reflects the principle that official information may not be used for private purposes , except with authorization . This flows from the idea that officials and experts on mission are obligated to regulate their conduct with the interests of the Organization only in view ( see ICSAB report , para . 4 ) and also from the requirements of regulation 2 ( e ) . It follows that permission must be obtained for disclosure to third parties of information that has not been made public , unless such disclosure is specifically authorized or is in the normal course of duties of the official or expert on mission . Authorization of the Secretary-General is not required for officials and experts on mission who have not been appointed by the Secretary-General . Those officials and experts on mission would require the authorization of the body that had appointed them if the communication of the information was not a normal part of their duties . The last sentence of the regulation provides that the obligations contained in the provision do not cease upon cessation of official functions . It may be difficult to enforce such a provision , but , at the very least , if a former official or expert on mission ignored the obligations contained in this regulation , the official file of the former official or expert on mission could be noted so as to prevent his or her re-engagement . Regulation 2 ( g ) Officials and experts on mission may not accept any honour , decoration , favour , gift or remuneration from any Government or non-governmental source for activities carried out during the course of their official functions while in the service of the United Nations . Commentary To ensure that officials and experts are perceived as impartial , regulation 2 ( g ) prohibits the acceptance of any honour , decoration , favour , gift or remuneration from any Government or non-governmental source for activities carried out during the course of their official functions while in the service of the United Nations . Regulation 2 ( h ) Officials and experts on mission shall not be actively associated with the management of , or hold a financial interest in , any profit-making , business or other concern , if it were possible for them or the profit-making , business or other concern to benefit from such association or financial interest by reason of their position with the United Nations . Officials or experts on mission who are in such a situation shall either dispose of that financial interest or formally excuse themselves from participating with regard to any involvement in that matter that has given rise to the conflict-of-interest situation . Commentary The first sentence of regulation 2 ( h ) is similar to staff regulation 1.2 ( m ) . The purpose of the provision is to put officials and experts on mission on notice that they cannot be actively associated with a profit-making , business or other concern , if either the concern or the official or expert on mission is to profit therefrom by reason of the association with the Organization . It will be for the Secretary-General or the appointing authority to judge whether a particular act has given rise to a conflict-of-interest situation . The second sentence of regulation 2 ( h ) is similar to the second part of staff rule 101.2 ( n ) , which deals with the consequences of a staff member 's having a possible conflict-of-interest situation . In such cases , the official or expert on mission shall dispose of the interests or , if practicable , shall excuse himself or herself from dealing with the matter on behalf of the Organization . Generally , experts on mission are appointed on a part-time basis , and it is therefore likely that they are engaged in other activities , including employment , when they are not performing services for the Organization . While there is no question that experts on mission may be so engaged , they must ensure that those activities are not incompatible with their status or functions as experts on mission . Regulation 2 ( i ) Officials and experts on mission shall file financial disclosure statements if requested to do so by the Secretary-General . The Secretary-General shall prescribe the format and information to be provided in such statements and shall establish procedures for filing them . The financial disclosure statements will remain confidential and will be used , as prescribed by the Secretary-General , only in making determinations pursuant to regulation 2 ( h ) . It will be for the Secretary-General , in due consultation with the appointing authority in the case of officials not appointed by the Secretary-General , to judge whether a particular fact has given rise to a conflict-of-interest situation . Commentary Regulation 2 ( i ) is similar to , but more general than , staff regulation 1.2 ( n ) , which requires all staff at the assistant secretary-general level and above to submit financial disclosure statements upon appointment and at intervals as prescribed by the Secretary-General , in respect of themselves and their dependent children , including any substantial transfers of assets and property to spouses and dependent children from the staff member or from any other source that might constitute a conflict of interest . This requirement is designed to minimize the risk of a perception of officials and experts on mission as using their position for personal gain . The regulation enables the Secretary-General to require officials and experts on mission to file financial disclosure statements , which will remain confidential and will be used only in dealing with conflict-of-interest situations ( for example , in assessing whether an official was in such a situation ) . Regulation 2 ( j ) Officials and experts on mission must comply with local laws and honour their private legal obligations , including , but not limited to , the obligation to honour orders of competent courts . Commentary Regulation 2 ( j ) , which is similar to staff rule 101.2 ( c ) , is really an amplification of regulation 1 ( e ) , which provides that the privileges and immunities of the Organization afford no excuse for non-performance of private obligations ( ibid . , paras . 32 , 54 and 55 ) . Regulation 2 ( j ) makes clear that private obligations must be honoured . It is the responsibility of those subject to the present Regulations , if they have a court order against them that they contest , to avail themselves of all means existing under the applicable national law to appeal the order and/or to secure relief from the obligation to comply with the order pending its appeal . Regulation 2 ( k ) Any form of discrimination or harassment , including sexual or gender harassment , as well as physical or verbal abuse , at the workplace or in connection with work , is prohibited . Commentary Regulation 2 ( k ) , which is similar to staff rule 101.2 ( d ) , reproduces the core of Secretary-General 's bulletin ST/SGB/253 of 29 October 1992 , which established United Nations policy on equal treatment of men and women in the Secretariat and also prohibited all forms of discrimination or harassment . Regulation 2 ( l ) Officials and experts on mission shall not intentionally misrepresent their functions , official title or the nature of their duties to Member States or to any entities or persons external to the United Nations . Commentary Regulation 2 ( l ) is similar to staff rule 101.2 ( f ) , which prohibits the intentional misrepresentation of an official title or duties to outside parties ( for example , by placing misleading titles on business cards ) . The use of the word “ intentional ” makes clear that this does not refer to careless or accidental acts . Regulation 2 ( m ) Officials and experts on mission participating , as part of their official functions , in activities organized by a Government , intergovernmental organization , non-governmental organization or other private source may receive from the Government , intergovernmental organization , non-governmental organization or private source accommodation and travel and subsistence allowance generally in line with those payable by the United Nations . In such cases , the travel and subsistence allowance that may otherwise be payable by the United Nations shall be reduced in the same manner as in respect of staff members of the Organization . Commentary Regulation 2 ( m ) , which is similar to staff rule 101.2 ( s ) , deals with the issue of participation at various official functions . Officials and experts on mission who as part of their official functions participate in activities organized by a Government , intergovernmental organization , non-governmental organization or other private source may receive from it accommodation and travel and subsistence allowance generally in line with those payable by the United Nations , and in such cases the allowances that may otherwise be payable by the United Nations shall be reduced in the same amount as in respect of staff members of the Organization . Such provisions are presently found in staff rule 107.15 ( a ) . It should be noted that accommodation and travel and subsistence allowance may be accepted only if their acceptance would be appropriate to the status of officials and experts on mission and to the integrity , independence and impartiality that are required by that status . There may therefore be situations in which it would not be appropriate to accept those allowances from a Government , intergovernmental organization , non-governmental organization or other private source . Regulation 3 Accountability Officials and experts on mission are accountable to the United Nations for the proper discharge of their functions . Commentary Regulation 3 , which is similar to staff regulation 1.3 ( a ) , makes clear that officials and experts on mission are accountable for their actions . The method of accountability may vary . For officials appointed by the General Assembly , that accountability would be a matter for the Assembly . For experts on mission , it would be the Secretary-General or the appointing authority who could terminate an assignment or otherwise admonish the expert . United Nations , Treaty Series , vol . I , No. 4 , p. 15. Hereinafter , references to staff regulations and rules denote the provisions contained in article I of the Staff Regulations and chapter I of the 100 series of the Staff Rules that came into effect on 1 January 1999 , pursuant to General Assembly resolution 52/252 . A/52/488 , annex III . iii </text>
<text id="un/TD_B_49_11">
Forty-ninth session Geneva , 7-18 October 2002 Item 2 of the provisional agenda HOW CAN THE POST-DOHA PROCESS WORK BEST FOR DEVELOPMENT ? Background note by the UNCTAD secretariat Executive summary This background note raises a number of questions that might usefully be considered in relation to the treatment of development-related concerns in the post-Doha work programme of the World Trade Organization . Apart from broader issues such as the ongoing concerns of developing countries about implementation of the results of the Uruguay Round and special and differential treatment for developing countries , the note touches on selected issues from a number of areas of work covered by the WTO Ministerial Declaration , examing these from a development perspective . The note should be read in conjunction with the document “ Developments and Issues in the Post-Doha Work Programme of Particular Concern to Developing Countries ” ( TD/B/49/12 ) , which contains additional considerations regarding the content and overall context of the post-Doha process . Introduction Development issues have been at the forefront of debate in the World Trade Organization for the last several years . The need to address these concerns was recognized at the WTO Fourth Ministerial Meeting in Doha in November 2001 , leading to a Ministerial Declaration and other decisions by Ministers that constitute a work programme with important development components . In many respects the post-Doha work programme offers important opportunities to promote development - but is a development-friendly outcome guaranteed ? How successful will the Doha texts be in re-orienting the WTO system towards development ? How is special and differential treatment ( SDT ) being implemented in the current work programme ? Are there any indications of how SDT is to be implemented in the outcome of the negotiations ? What progress has been made towards giving SDT a more secure legal base ? How can SDT provisions be reconciled with the concept of a “ Single Undertaking ” ? The Doha Declaration contains frequent references to technical assistance for developing countries , and technical cooperation and capacity-building are confirmed as “ core elements of the development dimension of the multilateral trading system ” . Are there sufficient resources to execute all the technical cooperation activities envisaged in the post-Doha work programme ? What role can other agencies , in particular UNCTAD , play in providing technical cooperation and capacity-building to developing countries in the current negotiations ? What is the appropriate balance between such support for developing countries in WTO negotiations , as well as other trade policy development and administration ( including within the context of the Integrated Framework ) and support for negotiations and building supply capacity in developing countries ? In a number of areas , such as investment , competition policy , government procurement and trade facilitation , provision is made for negotiations to take place after the Fifth Session of the Ministerial Conference on the basis of a decision to be taken , by explicit consensus , at that session on modalities of negotiations . What exactly does explicit consensus mean ? What progress is being made on such issues ? A number of areas , such as electronic commerce , trade , debt and finance , and trade and the transfer of technology are also an integral part of the post-Doha work programme ; work in these areas is important for ensuring an effective link between trade and development . A report is to be made to the Fifth Ministerial Session on the desirability of possible negotiations on certain aspects of trade and environment ( while other aspects are already subject to negotiation ) . What progress has been made in these areas ? Overall , what progress is being made in the WTO 's post-Doha work programme from a development perspective ? What needs to be achieved before the Fifth Ministerial Session from a development perspective ? Implementation of the results of the Uruguay Round How are developing countries ' concerns about implementation of the results of the Uruguay Round being met - for example , in relation to transition periods and technical assistance ? Can the liberalization targets - for example , for textiles and clothing - be met on schedule without being negated by alternative protectionist measures ? How are “ best endeavours ” clauses to take account of developing-country interests being implemented ? The post-Doha work programme holds out hope for gains by developing countries , but it may also be expected to lead to further commitments . What are the perceived gains , and how do they compare with the expected costs of implementation ? Is it reasonable or feasible to ask developing countries to take on new commitments at this stage ? Are developing countries capable of fully meeting the commitments from the Uruguay Round and at the same time starting a new trade negotiations round ? What can be done to strengthen their capacity ? Selected Issues covered by the Doha MInisterial Declaration Agriculture The Doha document provides that trade and non-trade concerns should be taken into account in the agriculture negotiations . Special and differential treatment ( SDT ) for developing countries is to be an integral part of all elements of the negotiations . How are conflicting objectives to be reconciled ? What are the prospects for a “ development box ” ? How can the interests of developing net food-exporters countries and net food-importing countries be made compatible ? Industrial products Negotiations on market access for industrial goods are aimed at reducing or eliminating tariff peaks , tariff escalation and non-tariff measures affecting all products , and in particular products of interest to developing countries . What should be the targets ( average cuts ) and modalities ( e. g. formulas or request and offer ) ? What transition periods should be allowed ? To what extent might developing countries have to make concessions that could limit their scope for industrial development programmes ? How can the Doha mandate on less than full reciprocity by developing countries in non-agricultural negotiations be given effect , as established in GATT Article XXVIII bis ? How can concerns about the erosion of preferences be addressed , and what kinds of development-oriented measures could be envisaged to compensate for that erosion ? How are non-tariff measures , including rules of origin , being handled ? Services In the GATS , how can Article IV on increasing participation by developing countries be operationalized ? What is being done to overcome obstacles to the liberalization of sectors or modes of supply of particular export interest to developing countries ? How can the negotiations ensure that national objectives for essential services are met ? How can it be ensured that disciplines on domestic regulation will not compromise developing countries ' flexibility to establish an appropriate regulatory framework ? What disciplines on subsidies would limit trade-distorting subsidies while providing for flexibility in relation to the development programmes of developing countries ? How can credit be granted for autonomous liberalization ? Trade-Related Intellectual Property Rights ( TRIPS ) The Doha Ministerial Declaration stresses the importance of protecting intellectual property rights while promoting access to existing medicines . How is it possible to provide incentives for research and , at the same time , give developing countries and least developed countries ( LDCs ) access to essential medicines ? The Doha Decisions reaffirmed that the provisions of Article 66.2 of the TRIPS Agreement are mandatory . What measures can promote the transfer of technology to developing countries ? Trade and environment At the recent World Summit on Sustainable Development in Johannesburg , the importance of achieving a sustainable model of development was emphasized . Consequently , linkages between trade and environment are expected to become more important . Will the outcome of the Johannesburg meeting affect the balance between environmental protection and the need to provide developing countries flexibility in achieving their development objectives ? How can synergies be promoted between environmental protection , economic development and trade ? Trade and investment In paragraph 20 of the Doha Ministerial Declaration , the importance of ensuring secure and predictable conditions for investment is underlined . However , paragraph 22 recognizes the importance of reflecting in a balanced manner the interests of home and host countries , paying attention to development policies and objectives as well as the countries ' right to regulate in the public interest . How can these two objectives be balanced ? In order to facilitate the use of legal investment measures and to provide guidelines for the use of measures for national development purposes , how can developing countries ensure that FDI promotion can be achieved while not causing disturbance to trade ? Trade and competition policy The following questions have been discussed in relation to trade and competition policy : What could a multilateral framework on competition ( MFC ) achieve that could not be achieved through a domestic competition law complemented as appropriate and feasible by bilateral or regional agreements as well as by a non-binding instrument such as the Set ? Is a MFC feasible , given the great disparities in countries ' market structures , economic development , institutional capacities and experiences in this area ? How could the development dimension best be catered to within a MFC ? What would be the relationship between a WTO-based MFC and other multilateral rules in this area , including existing WTO-based rules ) ? How would compliance with an MFC be verified or enforced ? Least-developed countries The Ministerial Declaration recognized “ that the integration of the LDCs into the multilateral trading system requires meaningful market access , support for the diversification of their production and export base , and trade-related technical assistance and capacity building ” . What has been done , and what can be done in the context of the post-Doha work programme in respect of these three priority areas ? Furthermore , how can negotiations with acceding LDCs be facilitated and accelerated ? Small economies How can the integration of small economies into international trade be promoted , taking into account the associated trade difficulties and investment difficulties ? </text>
<text id="un/TD_B_49_SC2_L1">
Forty-ninth session Geneva , 7-18 October 2002 Agenda item 5 Sessional Committee II draft report of the sessional committee Ii This draft report is a provisional text circulated for clearance by delegations . ( Agenda item 5 ) The Secretary General of UNCTAD said that Africa 's real per capita incomes were still 10 per cent below the levels reached in 1980. The HIV/AIDS pandemic , which was similar to a war of mass destruction , was going on without adequate attention from the rest of the world . Inadequate resources for accumulation and growth , and adverse terms-of-trade movements , remained major problems for Africa . African countries had been unable to attract foreign direct investment and official development assistance had fallen sharply , particularly in sub-Saharan Africa , while in many countries a debt overhang persisted . Despite welcome initiatives by the European Union and the United States in the area of trade the continent continued to face high tariff peaks , tariff escalation and various non-tariff barriers . The new emphasis by international financial institutions on poverty reduction did not imply a fundamental departure from previous policies . It should be underscored by a careful assessment of the impact of these policies on growth , income distribution and poverty , and any new policy prescription should be informed by social impact analysis . There were also concerns regarding governance-related conditionality . The adoption of the New Partnership for Africa 's Development ( NEPAD ) by Africa 's political leaders signalled their preparedness to assume clear responsibility for institution building and good governance , but the international community had to deliver concrete support to the continent , as promised at Monterrey and at the G-8 Meeting in Kananaskis . There was a need for a lasting solution to the debt overhang and for increased aid , combined with a reduction by Africa 's trading partners of the remaining barriers to trade . The Special Coordinator for Africa said that the international approach to policies for growth , development and poverty reduction continued to be based on liberalization and rapid and close integration into the world economy . However , it was not clear how policies emphasizing the primacy of market mechanisms could help to improve the access of the poor to productive assets . The freedom of action of developing country Governments in stabilization and structural adjustment programmes seemed to be severely constrained by conditionalities attached to multilateral lending and debt relief . The 6th Ministerial Meeting of the HIPC Finance Ministers had recently called for the design of more flexible , growth-oriented macroeconomic frameworks , focusing more on increasing growth and employment rather than on further reducing inflation . If poverty reduction strategies were to succeed , they should be based on a careful independent assessment of the effects of macroeconomic policies on growth , income distribution and poverty . Such policies , adapted to the structural problems and requirements of African economies , and the provision of greater space for agricultural , trade and industrial policy formulation , combined with a sustainable solution of the debt problem , adequate resources for investment in human and physical capital , and better access to markets , could constitute the main elements of a new comprehensive development strategy which was required in order to place Africa on the road to growth and development . The representative of Egypt , speaking on behalf of the Group of 77 and China , said that despite the great achievements of humanity , Africa was still lagging far behind in economic and social development . The development and social problems of the African continent , especially its LDCs , had been widely recognized . Recently , some countries had been suffering from drought and many more from the spread of HIV/AIDS . Extreme poverty had grown steadily in Africa 's poorest countries . Almost 65 per cent of the population were living on less than a dollar a day . The negative effects of an era of civil wars that had devastated many African countries were still hindering national development policies , and many countries were also suffering from unsustainable debt burden , lack of infrastructure and low school enrolment ratios . In adopting the New Partnership for Africa 's Development ( NEPAD ) , African leaders had recognized that Africans themselves had to play a substantive role in the development of their continent . However , the international community also had an important part to play in supporting the development process in Africa . Both the developed countries and the international organizations had a great deal of responsibility . UNCTAD had provided important assistance to Africa , and Africans showed a high level of commitment to that organization , repeatedly requesting that resources for the provision of such assistance be increased . Other organizations following a different policy approach , such as the World Bank and the International Monetary Fund , also had an important role . Considerable shifts in the economic thinking governing those institutions had taken place over the last two decades and the development aspect had begun to acquire an increasing place in their strategies . The latest report by the UNCTAD secretariat on economic development in Africa was an important document , not only for Africa but also for all developing countries . The debate on the issues raised in that document would greatly benefit from the views of countries that had already entered the Poverty Reduction Strategy Paper ( PRSP ) implementation phase . It would also be useful to have a reaction from the World Bank and the International Monetary Fund . The UNCTAD document could give the impression that it was challenging the new Poverty Reduction Strategy adopted by the Bretton Woods institutions ; however , the views presented in that document should be considered within the framework of a positive debate aimed at maximizing the benefits obtained from implementing such strategies in different regions and minimizing any side effects . UNCTAD 's role as a pioneer in presenting developmental approaches to tackling the developing countries ' concerns in different areas was widely appreciated . It was normal that the conclusions of its reports , including this year 's report on economic development in Africa , met with both agreement and disagreement from the different delegations . It was important , however , that developing and developed countries , as well as the relevant international organizations , continued working to face the development challenge that was threatening not only the developing countries but also the entire planet . The representative of South Africa , speaking on behalf of the African Group , said that the adoption of the Declaration on the New Partnership for Africa 's Development ( NEPAD ) signalled global support for Africa 's efforts to accelerate development and reduce poverty . UNCTAD had always proved a reliable partner of the African countries by providing necessary technical support and strengthening efforts for capacity building , but perhaps even more by breaking new ground in designing programmes that addressed trade efficiency and competitiveness . In the context of NEPAD , African leaders had committed themselves to social and economic development based on the principles of democracy , good governance and peaceful settlement of disputes . The peer review mechanism of NEPAD would also be helpful . Structural adjustment and stabilization policies over two decades had ignored the very basic needs of the African people and led to an increase of poverty . Therefore , the Poverty Reduction Strategy Papers ( PRSPs ) of the Bretton Woods institutions , an important step in forging real partnerships , should play a central role in setting appropriate and integrated policy frameworks , and in ensuring country ownership of development strategies . The design and implementation of PRSPs involved enormous resources , and their success depended on the alignment of policies , practices and procedures by both international institutions and donors . They also required solid institutional foundations and had to be linked appropriately to national budgetary processes . In March 2002 , the HIPC Finance Ministers had expressed the need to further streamline conditionality in the lending policies of the Bretton Woods institutions . It was necessary to ensure appropriate coordination of the national and the international approaches , and it was important that the policies agreed reflected the values of a modern society . Poverty reduction was a function of economic growth , which in turn would be possible only in the context of flexible and growth-oriented macroeconomic frameworks that did not overemphasize anti-inflation policies but focused more on anti-poverty social spending , and particularly on education and health care . The present debt overhang of African countries remained a cause of major concern since the HIPC Initiative had delivered less than satisfactory results . More innovative mechanisms beyond the HIPC had to be developed in order to enable HIPCs that reached completion point to implement long-term development strategies to promote productivity growth , human resource development and a viable enterprise base . The implementation of NEPAD required constant reappraisal of programmes and policies in a very dynamic global environment . In this light , the UNCTAD report on Africa was an important contribution to the debate on poverty reduction , demonstrating UNCTAD 's comparative advantage in policy analysis . The representative of Brazil , speaking on behalf of the Group of Latin American and Caribbean countries ( GRULAC ) , said that the serious and persistent economic and social problems faced by African countries , in particular those in sub-Saharan Africa , required vigorous measures by the international community . Poverty reduction was of particular relevance in Africa and required a common endeavour by all countries . It was important to help African countries to reduce the vulnerability of their economies , to internalize the process of development and to strengthen self-reliance . After two decades of policy reforms , progress in mitigating the suffering of the people of Africa and improving their economic and social indicators had been very limited , despite some positive signs that had emerged from the international community , in particular from the industrialized countries . The international financial institutions ' revision of their past approach to stabilization and structural adjustment gave rise to optimism . Since the question of poverty could not be dissociated from the globalization process , a solution could not be expected exclusively from a country 's individual efforts . The Poverty Reduction and Growth Facility ( PRGF ) and the Poverty Reduction Strategy Papers ( PRSPs ) , as an integral part of the HIPC Initiative and a precondition for Poverty Reduction Support Credit ( PRSC ) , had the potential to create some of the conditions for sustained growth , but needed to be enhanced . It was also necessary to ensure country ownership of the programmes and recognition of the policy aspirations of the poor . Recent trade initiatives by the European Union and the United States were important steps forward , but there was still scope for the industrialized countries to demonstrate their commitment to help the African people , especially in the context of the Doha Ministerial Meeting , by eliminating protectionism in agriculture and textiles , and by finding an adequate solution to implementation issues , including questions related to special and differential treatment . Concerted action by all stakeholders , at both the micro and macro levels , in an integrated and synergetic way was necessary for the promotion of structural adjustment in the context of globalization . For the efforts of individual countries aimed at achieving their development goals to succeed , they had to have a stable and development-friendly international financial and economic environment . Policy advice espoused under the “ Washington Consensus ” , including also the notion of good governance , had to be accompanied by an international setting that would guarantee financial stability , growing and predictable flows of capital , market access for products of primary export interest to African countries , provision of official development assistance in line with internationally agreed targets , and strengthening of international cooperation . The international community was facing a huge challenge as 1.2 billion people were living on less than a dollar per day . The results of the HIPC Initiative had been disappointing , and a fresh and bolder approach was needed in order to remove the debt overhang of the world 's poorest countries , including an independent reassessment of debt sustainability and a moratorium on debt service payments . GRULAC supported the conclusion of the secretariat 's report on economic development in Africa . Several GRULAC countries were facing economic and social problems similar to those of the African countries , such as external debt pressure , falling prices for agricultural commodities , low domestic savings and insufficient investment flows . The most effective key to the solution of the problems faced by the developing countries might be in the area of trade . Industrialized countries should take seriously the need to abolish protectionism , give meaning to their free trade convictions , and help build a fair and balanced multilateral trading system . The representative of Indonesia , speaking on behalf of the Asian Group and China , said that the secretariat had provided excellent documentation that facilitated the deliberations . It showed that African countries continued to be confronted with the severe problem of poverty while at the same time facing the complex challenge of globalization and liberalization of trade and finance . Slow and erratic growth was a major feature of African economies . Also , there had been regressive changes in income distribution , and both sluggish growth and a deterioration in income distribution had contributed to increasing poverty in Africa . Structural adjustment policies might temporarily have an adverse impact on the poor , which could become more permanent in the absence of proper safety nets . Social impact analysis of macroeconomic and structural reform measures was needed and , where necessary , policies should be adjusted accordingly . Flexibility and adequate space for policy-making were of critical importance for African countries . Participation and ownership in the Poverty Reduction Strategy Paper ( PRSP ) approach should be directed towards achieving greater autonomy for the African countries in the design of their own development policies , commensurate with their needs . While poverty alleviation required appropriate social policies , rapid and broad-based growth was indispensable . The solution to poverty could not lie solely , or even primarily , in redistributional policies , not only because of the well-known political and social difficulties involved in redistribution without growth , but also because of the impossibility of making much of a dent in poverty through redistribution at a very low level of income . The design of a strategy to combine growth with redistribution should be the responsibility of the African countries themselves ; policy prescriptions from outside and conditionality were not the solution . The African continent had seen the most intense and recurrent application of structural adjustment programmes over the past two decades without much progress being made in either poverty alleviation or development . For poverty reduction strategies to be successful , they had to be founded on a careful and frank independent assessment of the effects of macroeconomic and structural adjustment policies on growth , distribution and poverty . The support of the international community was also critical , as were the commitments by African leaders to do their utmost to pursue development as stipulated in the New Partnership for African Development ( NEPAD ) . The latter provided a sound framework for the international community to assist African countries , since it encompassed an integrated sustainable development initiative and ensured improved ownership of reforms by the African countries . International development cooperation had to be strengthened and to be geared towards efforts to solve the serious problems related to protectionism , reduced aid and the debt burden . An enabling international environment of trade and finance was critical for the success of NEPAD . In order to increase the probability of attaining poverty reduction goals in Africa , as reaffirmed at the Millennium Summit , it was necessary for both national authorities and the international community to discharge their respective responsibilities . Greater domestic policy effort and good governance could not make up for inadequate external financing and increasing protectionism in other parts of the world . The representative of Benin , speaking on behalf of the Least Developed Countries , said that beginning in the 1980s many African countries had initiated structural adjustment programmes in cooperation with the Bretton Woods institutions , with the aim of liberalizing the economy , gaining control over public spending , promoting economic growth and providing incentives for investment . The experience differed from country to country , but there were similarities . The structural weaknesses and economic constraints in the African countries had not been overcome . Moreover , poverty remained a major concern and in most countries weak and erratic growth had been accompanied by a deterioration of income distribution . In Africa about 291 million people were living below the poverty line of a dollar a day . This figure represented about 46 per cent of the world population which was facing a situation of extreme poverty . Despite efforts by Governments to improve the situation , social conditions remained precarious . There were important resource needs in order to improve the situation in many areas , such as health care , education , sustained food supply and means of communication . The Structural Adjustment Facility ( SAF ) , the Enhanced Structural Adjustment Facility ( ESAF ) and the new Poverty Reduction Strategy Paper ( PRSP ) framework provided options for the fight against poverty , which continued to be the principal challenge . Economic reforms aimed at sustained and rapid economic growth had to be accompanied by security systems designed at the national level . It was also necessary to recognize that the economic and social situation in African countries was strongly influenced by external factors . Barriers to African access to world markets ; low commodity prices ; insufficient capital inflows , particularly in the form of foreign direct investment ; decreasing official development assistance ; and the public debt burden were constraints on the development of Africa . Of the 49 LDCs , 34 were in Africa . Therefore , the international community should support Africa more effectively in its development efforts . The Group of the LDCs called upon their bilateral and multilateral partners in trade and development to take concrete action to honour their commitments under the Monterrey Consensus and the Brussels Programme of Action in Favour of LDCs , as well as the Action Plan of the G-8 summit adopted in Kananaskis in June 2002 in favour of Africa , and to support the implementation of NEPAD . The representative of Denmark , speaking on behalf of the European Union and the countries seeking accession to the European Union ( Bulgaria , Czech Republic , Estonia , Hungary , Latvia , Lithuania , Poland , Romania , Slovakia and Slovenia , as well as Cyprus , Malta and Turkey ) , said that the promotion of sustainable development in Africa was a top priority for the EU and its member States . The leadership shown by African leaders in establishing the African Union and by agreeing to the New Partnership for Africa 's Development ( NEPAD ) was a major step towards achieving sustainable development in African countries and a reduction of poverty . NEPAD linked the need for creating conducive conditions for development to the possibilities for poverty reduction , economic development and an expansion of trade . Strengthening regional economic communities , improving the macroeconomic framework and deeper integration , as well as improving regional trade by eliminating barriers to intraregional trade , were among the priorities established in the NEPAD plan of action . Regional integration and trade were also priorities of EU development policy and were at the heart of the ACP-EU Economic Partnership Agreements ( EPAs ) . The EU was committed to ensuring that EPAs would contribute to achieving the main objectives of NEPAD and the African Union . Increased trade flows were a precondition for the promotion of rapid growth , as were good governance and domestic policy reforms . The international financial institutions should play a supportive role . While the conditionality attached to their financial support was indispensable , it had to be considered carefully , and there was a need to focus further on a more coherent approach by all actors , including the financial institutions and organizations promoting international trade . There was also a need to increase the overall level of financing for international development cooperation . In the context of the International Conference on Financing for Development , held in Monterrey , the EU had reaffirmed its commitment to reaching the 0.7 target for official development assistance ( ODA ) . As a first significant step it had decided to increase its ODA over the next four years so as to reach collectively an EU average of 0.39 per cent . Although the HIPC Initiative would reduce the debt of 22 African countries that had followed sound economic policies and good governance , the EU was ready to consider additional debt relief for countries affected by extraordinary circumstances . </text>
<text id="un/TD_B_COM3_54">
Commission on Enterprise , Business Facilitation and Development Seventh session Geneva , 24-28 February 2003 Item 6 of the provisional agenda progress report on the implementation of the agreed conclusions and recommendations of the commission at its sixth session , including post-doha follow-up Prepared by the UNCTAD secretariat Executive summary The note on “ Improving the functioning and the structure of the intergovernmental machinery of UNCTAD ” ( TD/B/EX(24)/L.1 ) , re-endorsed by the Trade and Development Board at its twenty-sixth executive session on 10 April 2001 , stated inter alia : “ Starting with the second session of each Commission , the fifth day of the session will be used for policy reviews of implementation by member States and the secretariat of the outcome of previous sessions , on the basis of documentation produced by the secretariat ” . Accordingly , the secretariat has prepared the present report , which contains information on the implementation of agreed conclusions and recommendations adopted at the sixth session of the Commission on Enterprise , Business Facilitation and Development and addressed to UNCTAD . The report covers three areas : electronic commerce and international transport services , competitiveness of SMEs and gender . The section on international transport services and electronic commerce highlights best practices in these interrelated fields for enhancing the competitiveness of developing countries . The section on competitiveness of SMEs takes a closer look at financial innovations for improving SME access to finance , including e-finance . The section on gender looks at mainstreaming gender in order to promote opportunities . The report deals also with the implications for the work of the Commission following the Doha Ministerial Meeting . Electronic commerce and international transport services : Best practices for enhancing the competitiveness of developing countries 3 Improving the competitiveness of SMEs in developing countries : Role of finance , including e-finance , to enhance enterprise development 6 Mainstreaming gender in order to promote opportunities 10 Implications for the work of the Commission following the Doha Ministerial Meeting 13 The report of the Commission on Enterprise , Business Facilitation and Development on its sixth session ( TD/B/COM.3/46 ) contained a number of recommendations for action by UNCTAD . It also included agreed conclusions on the implications for the work of the Commission following the Doha Ministerial Meeting . These recommendations and agreed conclusions are set out below , together with the relevant action taken so far . Following the recommendations of the Commission at its fifth session , the secretariat undertook a series of actions . Recommendation UNCTAD should keep under review and monitor developments relating to economic , commercial , legal and infrastructure aspects of electronic commerce affecting international transport services , and analyse the implications thereof for developing countries , and furthermore collect and disseminate this information to member countries . Action The secretariat continued monitoring and analysing developments at the international level relating to economic , commercial and legal aspects of electronic commerce having a particular impact on international transport services , and disseminated the information to member countries through its recurrent publications such as the Review of Maritime Transport and the Transport Newsletter . In addition , information was disseminated through presentations at various regional and national seminars . One of the most important developments concerning legal aspects of electronic commerce is the on-going work in the United Nations Commission on International Trade Law ( UNCITRAL ) on the preparation of a new draft international instrument on transport law , which was reported in the Review of Maritime Transport 2002. The draft instrument envisages the use of “ electronic record ” as well as paper transport documents and grants equal legal status to electronic communications as paper documents . The draft is still in its preliminary stages and if/when agreement on a new international instrument is reached it will provide an important step in removing legal barriers to further development of international transport . The UNCTAD secretariat is continuing to make a major substantive contribution to the work carried out under the auspices of UNCITRAL . In particular , it has provided a detailed analytical commentary on the draft , which is published by UNCITRAL as one of the two working documents of its Working Group ( A/CN.9/WG . III/WP.21/Add.1 ; UNCTAD/SDTE/TLB/4 ) . Recommendation UNCTAD should undertake studies on the use of traditional transport documents in international trade , particularly the extent to which negotiable bills of lading are necessary for modern-day international trade , and the extent to which they can be replaced by non-negotiable transport documents , such as sea waybills , and by electronic alternatives . Action In order to implement this recommendation the secretariat is in the process of conducting a study concerning the use of various transport documents , including negotiable and non-negotiable documents as well as electronic alternatives . To that end , a questionnaire has been widely distributed to interested parties involved in international trade and transport , including providers and users of transport , intermediaries , banks , insurers and members of the legal profession . The replies received will be reflected in a report , which will be submitted to the Commission at its next session and will also be fed into ongoing discussions at the international level aimed at preparing the necessary framework conditions for paperless trading . Recommendation UNCTAD should develop and deliver training materials , where appropriate , and disseminate information on best practices in the field of electronic commerce and international transport services for developing countries in cooperation with relevant public and private sector organizations . Action In the context of the TrainForTrade regional project “ Capacity building in the fields of transport and international trade ” ( RAF/99/A09 ) , the secretariat has prepared a course on multimodal transport and logistics . This course covers various elements related to electronic commerce and international transport services . In particular , it contains a module on logistics that emphasizes the essential role of information in the context of freight transport management . New challenges are described , highlighting that proper cargo tracking is a prerequisite for efficient and secure cargo movement . The module introduces the basic features of logistics system management . It refers to the use of new technologies such as electronic data interchange , the Internet and modern operational planning techniques applied in supply-chain management . It shows that information management is becoming an essential part of any industrial development . The International Institute for the Management of Logistics ( IML ) of the Ecole Polytechnique Fédérale de Lausanne ( EPFL ) developed this module on logistics and one IML academic staff member participated in the first delivery of the course in Bamako ( June 2001 ) . This contribution is the first demonstration of the commitment made by the EPFL during the Transport Session of the Third United Nations Conferences on the Least Developed Countries ( Brussels , May 2001 ) . The EPFL had offered to contribute to transport management training for LDCs through special programmes , scholarships and dedicated research on topics proposed by LDCs ( See A/CONF.191/13 , P. 84 ) . In order to implement this recommendation the secretariat contacted a number of port authorities with experience in setting up electronic platforms to exchange data between members of the port community belonging to the public and private sectors . APEC , the training institution of the Antwerp Port Authority , hosted a two-day session in late March 2002 for a number of port experts to prepare an outline for a course on Information and communications technology in port communities . Experts from Indonesia and Spain complemented expertise from the port of Antwerp and the neighbouring port of Ghent . Two members of the UNCTAD secretariat also contributed to the session . The secretariat has continued with the next phase of the procedure for course development in collaboration with the port of Valencia ( Spain ) , which has features in common with those found in ports of developing countries . Information on best practices in electronic commerce and international transport services has been disseminated through UNCTAD 's recurrent publications , such as the E-commerce and Development Report and the Transport Newsletter . The importance of logistics for order fulfilment is discussed in chapter 8 of the E-commerce and Development Report . The development of Internet-based portals for shipping services , the use of mobile phones for transmitting SMS messages regarding vessel arrival and for trucking operators , and the use of an e-mart to reduce repositioning costs of empty containers are some of the developments discussed in the Transport Newsletter . Recommendation UNCTAD should prepare guidelines for the establishment of model port community systems and logistics platforms in developing countries . Action The secretariat analysed a number of port community systems and is in the process of preparing preliminary guidelines based on its findings . A port community system is one that allows the electronic exchange of information amongst the port community . This implies that the port community must have the capability to send , receive and process information electronically . Most of the port community systems have been developed and are operated by an independent organization specifically established for this purpose by the port community . In general , users pay an annual subscription fee plus a charge for each transaction . The core function of the system is to allow the exchange of information by EDIFACT or XML messages . Some systems maintain data files such as dangerous cargo lists . The port authority has been one of the key players . In Singapore , the community system has been developed and is operated by a fully owned subsidiary of PSA Corporation ; it focuses on services provided by the port as well as exchanging messages within the community . One of the most important actors in the community is the customs administration , as it controls the release of goods . Most community systems have been developed to interface with customs systems that imply that customs have a computerized system . UNCTAD 's technical cooperation work in customs reform is creating the capacity in customs administrations to exchange information electronically with the port community and thus facilitate the development of port community systems . IMPROVING THE COMPETITIVENESS OF SMEs IN DEVELOPING COUNTRIES : ROLE OF FINANCE , INCLUDING E-FINANCE , TO ENHANCE ENTERPRISE DEVELOPMENT Recommendation UNCTAD should , through its Intergovernmental Working Group of Experts on International Standards of Accounting and Reporting , complete its work on a user-friendly accounting framework for small and medium-sized enterprises ( SMEs ) that will allow them to produce transparent , reliable and uniform financial and business information , and report back to the Commission as soon as possible . Action Since the last session of the Commission , the Intergovernmental Working Group of Experts on International Standards of Accounting and Reporting has completed drafting its guidelines for accounting by SMEs . It deliberated on the proposed guidelines at its nineteenth session , held in Geneva from 25 to 27 September 2002. The final guidelines are expected to be issued in the near future once wider consultation on the drafts has been completed . Recommendation UNCTAD should strengthen its technical corporation programmes for entrepreneurship , including where appropriate in cooperation with the International Trade Centre in order to improve meaningfully the creditworthiness of SMEs by linking its business development services to financial services through partnerships between national programmes such as the Entrepreneurship Development Programme ( EMPRETEC ) and banks . Action During 2002 , UNCTAD responded to requests by countries for assistance in improving SME access to finance , including by combining financial services with business services . After the relevant stakeholders in the SME and financial communities had been interviewed , workshops were held or planned to permit a public-private sector dialogue on how market failure could be resolved . In the case of Uganda these activities resulted in the establishment of a plan of action and a task force headed by the Ugandan Bankers Association and the Bank of Uganda . A set of recommendations was sent to the Minister of Finance , Planning and Economic Development for immediate action . It is expected that Enterprise Uganda ( EMPRETEC ) , as a member of the task force , will pursue the idea of concluding partnerships with various banks , assisting them in identifying creditworthy SMEs . A request from the Romanian Minister for SMEs made possible an initial assessment of the situation of SMEs and the willingness of the banking community to service them . The European Commission will also begin to assist in facilitating SME access to finance . At the EMPRETEC Directors Meeting , held from 9 to 11 October 2002 , a session was devoted to experiences combining financial and non-financial services . EMPRETEC Ghana is the most advanced , with six different initiatives . Given the complex nature of these initiatives , it has decided to create a finance company - the EMPRETEC Finance Company - to manage them and is seeking a licence . Recommendation UNCTAD should monitor the development of new products and innovative financial mechanisms pertinent to the EMPRETEC programme so that participants can more easily access them , including environmentally and socially responsible investment funds . Action During 2002 , UNCTAD continued its research on best practices in financial innovations for SMEs , focusing more on mechanisms to finance technology . The results of this work are contained in the issues note “ Financing technology for SMEs ” and the background paper “ Providing finance for technology-based SMEs ” . For example , SMEloan Hong Kong ( China ) has introduced new appraisal and monitoring methods for lending based on information that is relatively easily obtained from SMEs , such as who their customers are , how much business they do and how much cash they will collect . The SMEloan model analyses the triangular relationship between cash flows , sales and accounts receivable . It uses the Internet to obtain cash flow information on a real-time basis , thus reducing loan-servicing tasks and costs . The Expert Meeting on Improving the Competitiveness of SMEs through Enhancing Productive Capacity : Financing Technology was held from 28 to 30 October 2002. The experts considered national policies and programmes in both the public and private sectors to finance the technology that SMEs need in order to compete in the global economy . EMPRETEC Ghana has developed a number of services to facilitate access to finance . Its most profitable service is training bank loan officers how to evaluate SME risks . It also has a $700,000 revolving loan programme funded by the United Nations Development Programme ( UNDP ) that does not require collateral . It started a mutual loan guarantee association ( MEGA ) with donor assistance support whereby Empretecos in the scheme can borrow up to six times what they have deposited with the bank . EMPRETEC is managing part of the national export development investment fund , thereby facilitating SMEs ' participation in it . It has signed a memorandum of understanding with a leasing company whereby it submits applications , provides consultancy services to those SMEs selected and receives a percentage of the leasing fee in return . It has set up credit sourcing services in four of its regional centres to assist Empretecos ; this lowers interest rates and increases loan maturities over what SMEs could obtain on their own . Another example is the EMPRETEC centre in Colombia , which has an agreement with the national credit guarantee agency whereby it certifies EMPRETEC business plans . When submitted to the participating banks , these business plans are accepted as the 80 per cent collateral requirement . Recommendation UNCTAD should continue its work on business linkages , including interfirm cooperation and partnerships , as one of the most efficient ways to access finance , technology , skills and markets . Actions UNCTAD has elaborated a project proposal to assist Governments that wish to start or strengthen linkage programmes in their countries . It consists of policy advice and capacity building so that SMEs are partnership-ready . It also describes the most effective mentoring and coaching programmes that would have to be put in place by the large enterprises . On the basis of this proposal , Uganda has obtained donor funding to start a pilot programme in 2003. In addition , a linkage component was added to the women entrepreneurs programme , funding for which was provided by the German Government at the Third United Nations Conference on the Least Developed Countries . UNCTAD also assisted Sebrae in organizing a roundtable on business linkages during the Inter-American Development Bank 's Micro Forum in Brazil , which was attended by over 3,000 SMEs , government officials and support agencies . The roundtable featured presentations by transnational corporations ( TNCs ) on their linkage programmes ; during the roundtable they committed themselves to working with Brazilian chief executive officers to help them design similar programmes . Lastly , as a follow-up to the World Investment Report 2001 , which featured linkage programmes in 14 countries , a video was produced on best practices in Penang , Malaysia . The purpose of the video is to demonstrate to the public and private sectors exactly how the process works and how to make it most effective in terms of its positive impact on growth , development and competitiveness . The video showcases the roles played by all the partners - Government , SME support agencies and the TNCs themselves . According to the Chief Minister of Penang , such partnerships have been an important component in Malaysia 's growth and development . During the annual meeting of the World Association of SMEs in Changzhou , China , held from 19 to 21 September 2002 , a member of the secretariat chaired a panel session and made a presentation on business linkages . The Committee of Donor Agencies for SME Development took up the topic of best practices in business linkages at its annual meeting in Turin , Italy from 16 to 18 September 2002. It decided to form a small working group headed by UNCTAD to discuss guidelines for donor interventions in this field . A number of multilateral and bilateral agencies have started programmes , and there is a huge diversity in the types of activities undertaken and their impacts . At the Symposium on the United Nations Global Compact and Swiss Business , held in Geneva on 29 October 2002 and co-organised by UNCTAD , the United Nations Global Compact Office and the Swiss Government , the issue of linkages was stressed as one important channel through which companies , particularly TNCs , can make a contribution to the development of host countries . During the seminar , which was attended by more than 200 representatives of Swiss business ( mostly SMEs themselves ) , one of the five parallel workshops in the afternoon was specifically dedicated to the subject of linkages . At the meeting of the Investment Advisory Council held in Johannesburg on 31 August 2002 during the World Summit on Sustainable Development , special attention was given to private sector development , especially SMEs . It was acknowledged that SME-TNC linkages could be powerful channels for diffusing knowledge and skills between firms . To achieve these linkages , UNCTAD was encouraged to help SMEs to become partnership-ready through its SME capacity-building programmes . Recommendation UNCTAD should incorporate the aspects of e-finance and e-commerce that are more relevant to the needs of SMEs into UNCTAD technical cooperation activities and ensure coordination and synergies with other international organizations active in this field . Action The results of UNCTAD 's research work and papers presented by e-finance experts at UNCTAD events are widely available to users worldwide through the UNCTAD website . Many other international organizations , including development banks , use those materials when organizing their training and other events in cooperation with UNCTAD . In December 2002 the World Bank organized a conference on “ new technologies for small and medium-size enterprise finance ” with the active participation of UNCTAD and with UNCTAD materials providing most of the background reading . Elements of e-finance are increasingly being incorporated into the activities of Trade Points . The Trade Point Programme was officially transferred to the World Trade Point Federation on 4 November 2002 , with UNCTAD still providing support to its secretariat , as well as capacity building for Trade Points . In October 2002 , the Federation signed a partnership agreement with one of the main credit insurance and credit rating providers , Coface . Under this agreement , Coface grants the Federation and its clients access to its international credit rating ( @rating ) services through the Federation 's website . This service aims at building trust in international trade transactions concluded by Trade Point client companies and increasing the international credibility of these companies . UNCTAD 's EMPRETEC programme is exploring the possibility of incorporating an e-commerce training module in its menu of products and services , but interest among users is low , as is the case for most SMEs . Recommendation UNCTAD should organize regular forums , including regional seminars and group training , to sensitize Governments , central banks , financial service providers and the corporate sector in developing and transition countries to the advantages of electronic finance at the local , regional and global levels . Action UNCTAD organized a side event entitled “ E-Finance for Development ” in the framework of the International Conference on Financing for Development , convened by the United Nations in Monterrey , Mexico , in March 2002. This side event was attended by many participants , including representatives of Governments , the private sector , non-governmental organizations and academia . Special e-finance-related sessions were organized at the UNCTAD regional e-commerce workshop in Curaçao , Netherlands Antilles ( June 2002 ) and at the UNCTAD-ESCAP Asia-Pacific regional conference on e-commerce strategies in Bangkok , Thailand ( November 2002 ) . UNCTAD prepared a study entitled “ E-finance for development : Global trends , national experiences and SMEs ” , which was reported at various forums . It became chapter 6 of UNCTAD 's E-commerce and Development Report 2002. The report is posted on the UNCTAD e-commerce website and is expected to be widely used , as the experience with previous reports has proved , by policy makers and business practitioners in developing and transition economies , thus sensitizing them to the importance of the correct policy choices and sequencing , as well as the adoption of best business practices to ensure better SME access to e-finance . Recommendation UNCTAD should encourage Governments , central banks and financial institutions to provide information on e-finance for the purposes of analysis , intergovernmental deliberations and technical cooperation . Action The importance of data on the state of e-finance and the need to undertake capacity building in information gathering and dissemination in that field have been constantly emphasized by UNCTAD publications , as well at the events organized by UNCTAD . Recommendation UNCTAD should mainstream gender in all areas of work , as appropriate . In doing so , a focal point on gender should be identified in each division of UNCTAD , with the responsibility to integrate the gender dimension in all substantive areas of the division , without prejudice to the work of the overall coordination of the focal point on women designated by the Secretary-General . Action Divisional focal points on gender have been nominated in each division of UNCTAD . To ensure that gender mainstreaming goes beyond establishing gender units and gender focal points , the secretariat 's follow-up activities have focused on designing , for pilot implementation , capacity-building technical assistance proposals in the areas of gender sensitization for trade policy makers and gender statistics . UNCTAD prepared a background paper for The Least Developed Countries Report 2002 on “ Trade liberalization , gender and rural poverty in African LDCs ” . Its key policy conclusion is that “ rural women will not necessarily benefit from trade liberalization unless there are a range of measures to address the gender-intensified disadvantages and gender-imposed constraints ” . The paper stresses the importance of access to capital in ensuring that women are not excluded from the benefits of economic growth . UNCTAD organized the pre-UNLDC III workshop in Cape Town in March 2001 on “ LDCs : Building capacities to mainstream gender in development strategies ” . Subsequently , UNCTAD with financial support from the Government of Japan and UNDP consolidated all the documentation and the outcome in a publication entitled “ LDCs : Building capacities to mainstream gender in development strategies ” , which was released recently and is being widely distributed . Since one of the major obstacles for rural women in LDCs concerns mobility and lack of access to transport , the secretariat is collaborating with the International Forum on Rural Transport Development in the design and development of a capacity-building technical assistance proposal on “ Making global bicycle markets work for the poor ” to contribute to greater mobility for girls in LDCs . Another example of UNCTAD 's work on gender is the close cooperation between the UNCTAD secretariat , which services the Commission on Science and Technology for Development , and the Commission 's Gender Advisory Board to ensure that gender remains a cross-cutting issue in the deliberation and outcome of this substantive theme . UNCTAD 's Science and Technology for Development Network ( STDev ) ( http://www.unctad.org/stdev ) has also created a space for “ Gender , Science and Technology ” . Here one can find information on the Gender Advisory Board , as well as links to relevant documents on gender . Activities carried out in accordance with more specific recommendations are described below . Recommendation UNCTAD should review its capacity-building programmes , particularly EMPRETEC and MED 2000 , so that they are gender-sensitive and can effectively provide training and advice to improve women entrepreneurs ' access to finance , e-finance and e-commerce . Action In the Expert Meeting on Improving the Competitiveness of SMEs in Developing Countries : The Role of Finance , Including E-Finance , to Enhance Enterprise Development ” held in Geneva from 22 to 24 October 2001 , the experts considered the problems faced by women entrepreneurs in obtaining credit and examined successful programmes for improving women 's access to finance . They concluded that it is vital to increase the number of women working as advisers and other staff in banks in order to improve banks ' awareness of and capability to work with women entrepreneurs . The UNCTAD secretariat has taken the initiative of compiling a database to promote networks of women entrepreneurs and business associations . Moreover , pursuant to paragraph 26 of the “ Report of the Expert Meeting on Mainstreaming Gender in order to Promote Opportunities ” ( TD/B/COM.3/40 ) , a specific training and mentoring programme targeted at women entrepreneurs has been prepared by EMPRETEC El Salvador , with the assistance of EMPRETEC Uruguay , under the supervision of the UNCTAD secretariat . The first workshop for women entrepreneurs took place during the first half of November 2002. In addition , UNCTAD , together with Enterprise Ethiopia and Enterprise Uganda , launched a project for women entrepreneurs , financed by the Government of Germany , in August 2002. It seeks to develop gender-sensitive training and business services for women entrepreneurs . It enhances their access to business development services in order to enable them to establish and/or strengthen their SMEs by overcoming obstacles to accessing finance and technology , so that they can survive and compete in increasingly global economies and participate in business linkages with larger companies , for example affiliates of transnational corporations . Recommendation UNCTAD should , in cooperation with the International Telecommunication Union ( ITU ) , ( i ) carry out analytical and case-study-based work on gender and information and communication technologies ( ICT ) , identifying the specific opportunities in the digital economy for women ; ( ii ) develop sex-disaggregated indicators and contribute to the collection of data on ICT and the telecommunications sector in order to identify the impact of ICT on women and women 's impact on ICT ; ( iii ) identify policies for mainstreaming gender in national ICT policy-making , including the telecommunications sector , with a view to enhancing the participation of women in the digital economy and thus contributing towards increasing the competitiveness of developing countries ; and ( iv ) develop recommendations on mainstreaming gender in ICT policy for inclusion in the outcome of the World Summit on the Information Society ( WSIS ) , to be held in Geneva in 2003 and in Tunisia in 2005. Action UNCTAD has prepared a study entitled “ Gender , E-commerce and development ” , which is included as a chapter in the E-commerce and Development Report 2002. It outlines different opportunities and challenges which women face in the digital economy . It illustrates how ICT enhance business opportunities for self-employed women in developing countries and how they create new employment in ICT-related services industries . It also discusses the main barriers which women have to overcome in order to benefit fully from the new technologies . The study makes a number of policy recommendations for mainstreaming gender in ICT policy , including in policy areas related to enhancing human capacity and training , improving access to telecommunications infrastructure , new technologies and the Internet , providing finance to SMEs and promoting new business opportunities or employment for women in the ICT sector . UNCTAD secretariat staff meet regularly with staff from the ITU secretariat working on ICT and gender . UNCTAD has participated in Geneva-based events on ICT and gender organized by ITU in preparation for the WSIS , and in this context has provided ITU with inputs to the preparation of recommendations on mainstreaming gender in ICT policy-making . As part of its ongoing work on e-commerce strategies , the UNCTAD secretariat included the topic of gender on the agenda of the Expert Meeting on Electric Commerce Strategies for Development ( held in Geneva from 10 to 12 July 2002 ) and the Asia-Pacific regional conference on e-commerce strategies ( held jointly with the United Nations Economic and Social Commission for Asia and the Pacific ( ESCAP ) in Bangkok from 20 to 22 November 2002 ) . Agreed conclusion in the field of trade facilitation With regard to the plan for “ Capacity Building and Technical Cooperation for Developing Countries , especially LDCs , and Economies in Transition in Support of their Participation in the WTO Doha Work Programme ” ( UNCTAD/RMS/TCS/1 ) , which reflects the specific requirements of the least developed and African countries , the secretariat has initiated a comprehensive work programme in the area of trade facilitation , building on UNCTAD 's accumulated experience without negatively affecting its ongoing activities . The work programme would provide , in line with paragraph 27 of the Doha Ministerial Declaration , enhanced technical assistance and capacity building with long-term sustainable impact to further expedite the movement , release and clearance of goods , including goods in transit . This programme would identify the major issues and address policy analysis and development , human resources development and institutional development . It would also identify trade facilitation needs and priorities to allow developing countries to better evaluate the implications of closer multilateral cooperation for their development policies and objectives . Actions Project proposals in the field of trade facilitation In addition to the project proposal included in Part C of document UNCTAD/TCS/RMS/1 , another project proposal has been prepared for financing by the 4th Tranche of the Development Account . This proposal covers analysis of potential impact of the adoption of binding rules on trade facilitation at WTO . The expected outcome of these projects is to assist in building a consensus among developing countries as to the modalities of future negotiations on trade facilitation rules . The approach underlying these proposals is that the application of international standards for trade facilitation requires tailor-made execution adapted to local frameworks . As opposed to traditional technical assistance based on foreign expertise , long-term capacity building should rely on local and regional know-how . The purpose of this new approach is to guarantee ownership by the beneficiaries and the formation of lasting learning and innovating trade and transport facilitation structures . Local , national and regional facilitation clusters , gathering together private and public sector participants , will be guided to monitor and improve trade and transport corridors , and supply and distribution chains . Capacity building is seen as a multi-layer process , combining institution-building , human resource development and collaborative networks . Extensive use of knowledge management schemes based on ICT is also foreseen where skills can be gained from direct on-the-job learning rather than through individual or group training . The above-mentioned projects will take advantage of the considerable experience accumulated by UNCTAD in trade facilitation through its wide range of analytical work and technical assistance activities that take into account the specificities of developing countries , as well as through the introduction of information technology tools in the areas of cargo tracking ( ACIS ) and customs automation ( ASYCUDA ) . Consensus building The secretariat organized , in November 2002 , an Expert Meeting on Efficient Transportation and Trade Facilitation in the post-Doha context . This meeting was aimed at contributing to a better understanding of current implementation and development issues related to trade facilitation , including security , capacity building and the consequences of the potential adoption of binding rules . Supporting documents for the meeting were prepared . Representatives of the secretariat regularly attend meetings of the WTO 's Council for Trade in Goods on trade facilitation , and make adhoc contributions as required ( e. g. the paper on transit issues , presented when Article V ( on freedom of transit ) was discussed ) . In the context of its post-Doha work , taking into account paragraph 27 ( on trade facilitation ) of the Doha Declaration , the secretariat will continue to assist developing countries in identifying their trade facilitation needs and priorities . Training activities The secretariat has undertaken various actions regarding the organization of training activities in the field of trade facilitation . At the request of Austria , a proposal has been formulated to organize - jointly with the United Nations Industrial Development Organization ( UNIDO ) - two workshops ( in Addis Ababa and Ouagadougou ) , plus one high-level meeting ( in Vienna ) , on trade facilitation and trade barriers to trade . For the regional South Asian and Andean Community , a joint proposal has been prepared to hold two workshops covering tariffs and trade facilitation issues . The organization of these workshops has been requested and will be funded by the European Union ( DG Trade ) . In cooperation with ESCAP , a series of seminars on trade facilitation are being designed and will be delivered through the International Institute for Trade and Development in Bangkok . Agreed conclusion in the field of electronic commerce The Commission recognizes the importance of creating and maintaining an environment that is favourable to the future development of electronic commerce , as provided for in paragraph 34 of the Doha Ministerial Declaration . Support is required in order to bridge the digital divide so as to create new opportunities for the expansion of trade . To this end , the Commission stresses the need for strengthened and adequately resourced assistance to respond to those needs , as outlined in document UNCTAD/RMS/TCS/1 . Actions Expert Meeting UNCTAD held the Expert Meeting on E-Commerce Strategies and Development ( 10-12 July 2002 ) . Up to 100 experts attended the meeting , including many from developing countries and also experts from international organizations such as ITU , the World Bank , the International Labour Organization , UNCITRAL and UNDP , and representatives of G-8 's DOT Force and the UN ICT Task Force . The meeting addressed the issue of strategies that developing countries could formulate and implement in order to promote e-commerce and the development of ICT generally . The experiences of developed and developing countries provided the major inputs into the discussion . The focus was on strategies relating to human resources development and training for e-commerce , legal and regulatory issues , and telecommunications , infrastructure and access . The experts recognized that strategies relating to other areas such as e-finance , transport and distribution were equally important . Emphasis was placed on the linkages and interactions between e-commerce strategies and other aspects of national development strategies . Regional seminars on e-commerce Two regional level events were held in 2002 - the High-level Regional Workshop on E-commerce and ICT for Central America and the Caribbean ( Curaçao , 25-27 June ) and the High-level Regional Meeting on E-commerce Strategies for Development , in cooperation with UN/ESCAP ( Bangkok , 20-22 November ) . The two meetings provided an opportunity for ( a ) raising awareness about various aspects of e-commerce and ICT strategies , ( b ) identifying policies and strategies that can create an enabling environment for e-commerce in developing countries , ( c ) supporting national capacity-building in e-strategy making , and ( d ) exchanging information about national and regional experiences regarding e-commerce and ICT . Attention was paid to the issue of developing a participatory approach to national e-commerce strategy making , as well as to regional and global initiatives in support of developing countries . Annual publication The secretariat published its E-commerce and Development Report 2002. This annual report provides information on major developments in e-commerce of particular interest to developing countries and policy recommendations . It is intended to allow developing countries greater access to knowledge about e-commerce issues and thus contribute to their capacity building and their ability to develop policies and strategies for e-commerce . Other activities The secretariat also carried out other activities , including participating as a member in the UN ICT Task Force and in preparations for the World Summit on the Information Society . Furthermore , it participated in a number of regional and national events in which it provided advisory services in areas such as legal and regulatory issues and e-finance . Agreed conclusion regarding cooperation with international organizations To maximize benefits in the fields of competence of this Commission , UNCTAD is encouraged to continue collaboration with other relevant international organizations , such as the World Trade Organization , the UN regional commissions and specialized institutions , as appropriate . Action The secretariat has been instrumental in the coordination within the UN system in the field of trade facilitation . The High Level Committee on Programmes ( HLCP ) of the UN Executive Board had requested UNCTAD to convene a meeting with a view to identifying trade facilitation issues to be dealt with in a coordinated manner within the agencies members of the HLCP . The meeting took place on 5 April 2002 and resulted in the creation of a cooperative network of multilateral agencies working on trade facilitation issues within the UN system - ILO , the World Trade Organization , the World Bank , the Food and Agriculture Organization of the United Nations , the International Monetary Fund , UNIDO , the Economic Commission for Europe on behalf of the Regional Commissions , the Chief Executives Board Secretariat and UNCTAD . Work on SME promotion is coordinated in the international community by the Committee of Donor Agencies for SME Development . It met in September 2002 in Turin , Italy . UNCTAD is an active member of this Committee and has driven its work forward in two areas : SME finance and business linkages . UNCTAD is also a member of the Working Group of the Organisation for Economic Co-operation and Development on SMEs and participates in it sessions . The Working Group met in December 2002 and is preparing for its ministerial meeting in 2004. It has two major themes to which UNCTAD is contributing : financing technology and ICT diffusion and use by SMEs . SIC Valencia , SEGHA Antwerp , DAKOSY Hamburg , PORTNET Singapore and TRADEGATE Australia . UNCTAD/ITE/TEB/Misc.8 . </text>
<text id="un/TD_B_EX28_L1">
Twenty-eighth executive session Geneva , 11-13 March 2002 National Programme to Prevent , Combat and Provide Humanitarian Assistance to the Victims of Natural Disasters ( PRONAPLUCAN ) Note by the UNCTAD secretariat The National Programme to Prevent , Combat and Provide Humanitarian Assistance to the Victims of Natural Disasters ( PRONAPLUCAN ) , a national non-governmental organization , has applied for inclusion in the Register of such bodies provided for under Board decision 43 ( VII ) , sections III and IV . After consultations with the member State concerned , the Secretary-General of UNCTAD has included PRONAPLUCAN in the Register in accordance with Board decision 43 ( VII ) . Information on this organization is annexed to this note . Annex PREVENT , COMBAT AND PROVIDE HUMANITARIAN ASSISTANCE TO History PRONAPLUCAN was founded on 31 March 1991 following a general assembly attended by experts on disaster prevention and management , with a view to determining the causes and consequences of calamities and enabling the Democratic Republic of the Congo to play an active part in activities related to the International Decade for Natural Disaster Reduction proclaimed by the General Assembly of the United Nations in its resolution 42/169 of 11 December 1987. Aims and objectives The overall aim of PRONAPLUCAN is to reduce the harmful effects of disasters with a view to achieving sustainable human development . Its specific objectives are to set up a disaster data bank containing geographical , geological , social , economic , medical and health information for the entire national territory ; to organize emergency programmes in disaster-stricken areas ; to protect and look after the environment ; and to combat poverty with a view to achieving sustainable human development . Membership PRONAPLUCAN is an association with more than 103 members , who abide by its rules , pay their subscriptions and take part in the organization 's activities . Structure PRONAPLUCAN has a general assembly , a board of directors , an oversight commission and a management team . The general assembly is the highest organ . It consists of active members , honorary members and supporters and meets in ordinary session once at the beginning of each year . The board of directors is responsible for ensuring that the decisions of the general assembly are carried out . It consists of eight members , of whom seven are elected from among the active members , and meets at least twice a year at the invitation of its chairperson . The oversight commission is responsible for managing PRONAPLUCAN resources and ensuring that the organization functions properly and that management observes the rules and regulations and the decisions taken by the general assembly and the board of directors . It consists of three members elected by the general assembly and meets once a year . The management team is the executive body . It is headed by a director-general elected by the general assembly from among the active members , and has four departments ( technical , administration and finance , cooperation , and coordination of women 's activities ) . The management team answers to the board of directors and manages material , human and financial resources . Financial resources The organization 's income comes from members ' subscriptions , gifts and bequests , membership fees , external grants and help from international bodies . Relations with other international organizations PRONAPLUCAN has consultative status with the United Nations Economic and Social Council . It works in partnership with the Food and Agriculture Organization of the United Nations ( FAO ) and the United Nations Development Programme ( UNDP ) . It also works together with several other organizations , including Caritas . Publications PRONAPLUCAN publications comprise : Five-year feasibility study on PRONAPLUCAN , by Mangala Babinga , February 1991 ; The Congo 's general disaster prevention policy , by Mangala Babinga and the International Labour Organization ( ILO ) , March 1999 ; PRONAPLUCAN four-year plan of action , 1999-2001 , February 1999. Liaison The President-General , Mr. Mangala Babinga , will be responsible for liaison with UNCTAD . Address Programme National de Prévention , de Lutte et d'Assistance Humanitaire aux Victimes des Catastrophes Naturelles ( PRONAPLUCAN ) 1 , avenue du Commerce Immeuble INA , rez-de-chaussée BP 13 714 Kinshasa Kinshasa/Gombe Democratic Republic of the Congo Fax : 00243 12 20 373 / 00243 12 21 188 e-mail : PRONAPLUCAN@hotmail . com The working language of the organization is French . </text>
<text id="un/TESTGVADUTY001">
Fifty-eighth session Agenda item 9 Note verbale dated 28 March 2002 from the Permanent Mission of Armenia to the United Nations Office at Geneva addressed to the secretariat of the Commission on Human Rights The Permanent Mission of the Republic of Armenia to the United Nations Office and other international organizations at Geneva presents its compliments to the secretariat of the Commission on Human Rights and has the honour to request that the attached* information be circulated as an official document of the fifty-eighth session of the Commission under agenda item 9 , “ Question of the violation of human rights and fundamental freedoms in any part of the world ” . * The annex is reproduced as received in the language of submission and in English only . Annex More than 14 years have passed since Sumgait . Sufficient time for a full appraisal of the gravity of this tragic event for the Armenian people . The events of Sumgait were a natural consequence of the atmosphere of total lawlessness , in which the Azerbaijani leaders spurred on the zealots in the country and incited them to further Sumgait-like atrocities . Whipped up into a state of nationalist histeria , the deceived masses perpetrated vicious crimes , burning people alive , demonstrating how easily entire multitudes could be reft of any semblance of humanity and many hundreds of people transformed into bloodthirsty sadists . Yet what is possibly still more monstrous than these barbarous acts is the way that the fine upstanding citizens entrusted with the reins of power in the republic and in the country did everything they could to conceal the truth about Sumgait and to shelter the culprits from justice . The impunity enjoyed by the instigators and organizers of the Sumgait pogrom is proof that the State itself took them under its wing . The way that events subsequently developed in Azerbaijan graphically demonstrated that the Sumgait approach to the settlement of ethnic scores was to be the chosen method . As early as May 1988 , on the initiative of the Shusha district Party committee , the process of deporting Armenians from Shusha was commenced . In September , the bloody events took place in the village of Khojaly and the last Armenians were driven out of Shusha . In November pogroms were being waged throughout Azerbaijan . Yet there was no response - neither political , nor legal - to any of these actions . An atmosphere of total impunity prevailed , in which there were repeated incitements to the perpetration of further Sumgait-like massacres . For its part , the Azerbaijani leadership only gave encouragement to those who showed the greatest zeal . The Sumgait events were organized with a view to hushing up and concealing the Nagorny Karabakh problem . A wave of anti-Armenian demonstrations swept across all Azerbaijan in February 1988 , but it was decided to deal the most decisive blow against the Armenians of Sumgait - as the most defenceless . Thugs were bussed into Sumgait from other regions and local officials drew up lists of all Armenians . Members of the country 's top brass - the first secretary of the Central Committee and the chairman of the Council of Ministers of Azerbaijan - also made their way to Sumgait . Every possible preparation was made : even supplies of cobblestones were brought into the city . The only thing which the organizers of the Sumgait events had not reckoned with was that there might be honest and courageous people among the Azerbaijanis themselves who would refuse to succumb to the hysteria being whipped up . Had it not been for them , the city 's entire Armenian population would have been mercilessly slaughtered . Sumgait was destined to transform the problem of Nagorny Karabakh and the will of its people - an essentially democratic issue - into one of the world 's implacable ethnic conflicts . Sumgait represented the focal point of the genocidal policies conducted by the Azerbaijani leaders against Armenians , one inevitable result of which was the “ cleansing ” of the Nakhichevan region and other historically Armenian territories of their Armenian populations . In the course of three days in February 1988 , virtually the entire territory of this city , with its population of a quarter of a million , became the arena for wide-scale , unrestrained pogroms against the Armenian population . Dozens were killed , a significant number of whom had been burned alive , after being beaten and tortured . Hundreds were wounded , many of them left disabled for life . Women and young girls were raped . More than 200 homes were wrecked and looted , scores of motor cars were set alight or smashed up , and dozens of workshops , shops , kiosks and other social facilities were smashed and plundered . Thousands of people became refugees . And yet is this the only measure of the tragedy - how many people were killed in this city or how many homes were wrecked and looted ? Immeasurable moral losses were suffered not only by the victims of the tragedy , but also by the people in whose name these atrocities were committed . “ After the barbarities of Stalinism ” , wrote Moscow academics in their “ Open letter to friends in Armenia ” , “ no single event has occurred in our country that has dragged us further back from civilization to savagery ” . Sumgait turned two neighbouring peoples - Armenians and Azerbaijanis - into unconcealed and irreconcilable enemies and had exceptionally severe consequences for their subsequent relations with one another . Sumgait demonstrated for the first time that , in a multi-ethnic State which upheld friendship among peoples as one of its most hallowed principles , people could be killed quite simply because they belonged to the wrong nationality . The first Sumgait “ rally ” was not particularly well supported but the second , organized the following day , 27 February , was attended by thousands of people , many of whom had been sent out on to the city square on the orders of their managers and supervisors . Among the rallying calls , uttered not only by the instigators , but also by such prominent citizens of Sumgait as the headmaster of secondary school No. 25 and a well-known actress from the Arablinksy Theatre , were references to Armenian “ atrocities ” and the “ martyrs ” of Kafan , the Karabakh issue , and the need to punish the Armenians , to kill them and to drive them from Sumgait and from Azerbaijan in general . The constant refrain of many harangues and the most often repeated slogan of those days was “ Death to Armenians ! ” . Besides words , other means of agitation were also used , such as vodka and drugs , dispensed directly from lorries to members of the crowd in great quantities and free of charge . In the evening of 27 February , the “ rallies ” had degenerated into wide-scale violence . The first beatings and pogroms continued late into the night and then , the following day , hundreds of people who had been directly involved in the perpetration of these crimes assembled for their next “ rally ” , just as if nothing untoward had happened . This is an extremely important point : the participants in the pogrom were thereby given definitive assurances of their impunity . The culmination of the “ rally ” on 28 February was reached when Muslim-zade , first secretary of the Sumgait city Party committee , took up the State flag of the Azerbaijani SSR and led the huge crowd which had gathered behind him on to Lenin Square . Thereupon the crowd scattered and , already equipped with weapons , launched their attacks against the homes of Armenians … The bloody tragedy which unfolded in Sumgait encompassed every imaginable human crime and suffering . We cannot but be astounded by the scale and impunity of the pogrom and the cynicism and brutality with which it was conducted . The crimes of those days seem quite inconceivable when we consider that the gangs perpetrating them were made up not of professional murderers and sadists , but of ordinary citizens , predominantly young people . For an explanation , we must look back in history and consider certain ideological and psychological realities . The massacre of Armenians in the city of Baku in 1918 , the massacre in Shusha in 1920 , the methodical expulsion , which ultimately achieved a 100 per cent success , of the indigenous Armenians from the Nakhichevan Autonomous SSR , countless crimes of an ethnic nature , the constant , virtually undisguised discrimination against the Armenian population throughout the Republic of Azerbaijan , the defiling of monuments to Armenian history and architecture , the hatred of Armenians instilled in children from their earliest years - all this must be taken into consideration if we are to understand how a student from a technical college or a factory worker who , prior to this , never did anything particularly reprehensible , entirely normal people with their own interests , family-oriented people , should suddenly prove capable of responding on the spur of the moment to incitations to kill their fellow citizens entirely innocent of any crime , to commit murders , and to perpetrate these acts with a pathological brutality that appalled even the forensic experts . And yet , however monstrous their offences , it is not they who are the prime culprits but those who were able so subtly and adroitly to transform them into monsters . Since no condemnation was expressed and no punishment handed down for the crimes committed at Sumgait , they were followed by dozens of lesser and greater pogroms of the Armenian population of the Azerbaijani SSR , including in the capital city , Baku , where more Armenian blood was spilled . And with the passing of time , even in Sumgait , where no Armenians remained , persecutions were mounted against those who had saved Armenians during the days of that February hell , while at rallies in Baku the butchers of Sumgait were hailed as nothing less than national heroes . The consequences of connivance are plain for all to see . “ Sumgait became a spur for new tragedies and bloodshed ” , wrote the academics in their “ Open letter to friends in Armenia ” . “ While the blood of Sumgait might be on the hands of those who organized and carried out this bacchanal , responsibility for what followed rests with all those who failed to respond to the scale of the tragedy , who failed to understand and to this day fail to understand that no one , be he or she Lithuanian or Jew , Bashkir or Russian , that no people and no single person can feel safe while the crimes of murderers are allowed to go unpunished ” . The organizers and the perpetrators of the Sumgait atrocities must be punished . The peoples of the world must know the truth about the cruelty and barbarity of the Azerbaijani authorities and the criminals responsible for this monstrous crime . </text>
<text id="un/UNEP_GC_22_8_ADD2">
Twenty-second session of the Governing Council/ Global Ministerial Environment Forum Nairobi , 3-7 February 2003 Item 6 of the provisional agenda∗ Outcome of the World Summit on Sustainable Development Discussion paper presented by the Executive Director Addendum Promoting sustainable consumption and production patterns The present document is a background paper intended to stimulate discussion and identify questions of concern to Governments to be addressed by ministers and heads of delegation during their ministerial-level consultations at the twenty-second session of the Governing Council/Global Ministerial Environment Forum of the United Nations Environment Programme ( UNEP ) . Global challenges call for integrated responses … Global environment trends continue to pose grave challenges and threats , as underscored by figures recently reported in UNEP 's third Global Environment Outlook report . For instance , concentrations of the greenhouse gas carbon dioxide continue to climb ; just under a third of the world 's fish stocks are now ranked as depleted , over-exploited or recovering ; and the world 's forest cover has declined by 2.4 per cent since 1990. On the social front , some important indicators have improved in recent years , such as school enrolment and literacy rates , but other threats worsened substantially , such as the human immunodeficiency virus/acquired immunodeficiency syndrome ( HIV/AIDS ) epidemic . Overall , poverty rates remain high , with 2.8 billion people—nearly half of humanity—living on less than $2 per day . Both the millennium development goals1 adopted by nearly 200 heads of State in 2000 and the World Summit on Sustainable Development Plan of Implementation2 call for decisive action to improve these critical social and environmental trends . Doing so will require addressing underlying unsustainable patterns of consumption and production , as recognized in the World Summit Plan of Implementation . The third chapter of the Plan ( Changing unsustainable patterns of consumption and production ) notes that " Fundamental changes in the way societies produce and consume are indispensable for achieving global sustainable development , " and calls for the development of a 10-year framework of programmes in support of regional and national initiatives to accelerate the shift towards sustainable consumption and production patterns that will " promote social and economic development within the carrying capacity of ecosystems . ” UNEP played an active role in the preparatory process for the World Summit on this issue , and will now concentrate on launching the programmes and initiatives called for in the Plan of Implementation . Current consumption and production trends threaten people and planet … The last half-century has been a time of unprecedented expansion in the global economy . The gross world product has expanded nearly seven-fold since 1950 , reaching $46 trillion in 2001 , while the number of people on the planet has more than doubled , rising to 6.2 billion in 2001. These underlying trends have led to rapid increases in the production and consumption of energy , materials and a broad range of consumer goods . For example , global oil consumption and paper production have both more than tripled since the early 1960s , while aluminium production has climbed more than five-fold . Without a dramatic change in existing patters , and their environmental and social consequences , consumption trends are expected to accelerate rapidly in coming decades , adding to the burdens on the environment ( see box below ) . These trends pose great challenges and opportunities for all countries . In the North , consumption patterns are clearly unsustainable , but tremendous intellectual and technological resources are available to change consumption and production patterns without reducing quality of life . In many parts of the South , there needs to be rapid and widespread increases in access to crucial goods and services in order to lift people out of poverty and improve human welfare . But these increases can and indeed must occur in a way that does not irrevocably damage the ecological health of the planet . The China Council for International Cooperation on Environment and Development , for one , recently noted that China 's remarkably low per capita consumption pattern was an opportunity to avoid the mistakes of many other countries that have developed very high levels of material and energy consumption , and pointed out that moving towards more sustainable consumption patterns could lead to more competitive domestic enterprises and greater access to international markets . Similar opportunities await other countries that move towards more environmentally and socially sustainable patterns of consumption and production . Facing the facts The money spent on overall household consumption worldwide increased 68 per cent between 1980 and 1998. 80 per cent of the total of $19.3 trillion in household consumption in 1998 took place in high-income countries , while low-income countries accounted for only 4 per cent of all private consumption . 200 million vehicles will be added to the global car fleet if car ownership in China , India , and Indonesia reaches the current world average of 90 vehicles per 1,000 people , roughly double the number of cars in the United States of America today . World energy production rose 42 per cent between 1980 and 2000 , and is projected under status quo conditions to grow 150-230 per cent by 2050. 70 per cent of all freshwater withdrawal is for use in agriculture , where inefficiency abounds ; over half of the water drawn for agriculture is lost to leakage and evaporation . A single semi-conductor plant uses between 500 and 1,000 different chemicals , and a computer monitor can contain 1.8 to 3.6 kilograms of lead , a heavy metal that damages the nervous system and poisons blood cell development . Television ownership increased five-fold in the East Asia and Pacific region between 1985 and 1997. The number of Internet host computers has exploded from 213 in 1991 to 147 million in 2001. The average citizen of the industrial world consumes 9 times as much paper as the average citizen of the developing world , although consumption is rising fast in many developing countries . Municipal solid-waste generation in Organisation for Economic Cooperation and Development ( OECD ) countries grew from 320 kilograms per capita annually in 1980 to more than 420 kilograms per capita in 1995. Packaging accounts for between 25 and 50 per cent of urban wastes in developing countries . The challenge is to increase efficiency in energy and water uses , reduce waste , stimulate the life-cycle economy and decrease externalization of cost , put into practice the polluter-pays principle , and inform and educate the consumers of today and tomorrow . Progress has been made … UNEP has been a leader in sustainable consumption and production efforts for many years . When its cleaner production programme was launched in 1989 , the challenge at the time was to build awareness of the concept of cleaner production , demonstrate its benefits , and strengthen institutional capacities to deliver it . Today , cleaner production is a flagship project not only for UNEP , but for many other businesses and organizations as well . Efforts have also been made to more fully integrate social issues such as labour conditions into cleaner production activities , in close cooperation with the International Labour Organization ( ILO ) . Significant results have been achieved . For example , over 150 cleaner production centres have been created , 23 of them national centres established jointly with the United Nations Industrial Development Organization ( UNIDO ) , and more than 1,000 demonstration projects have been launched . These and other similar initiatives are beginning to yield on-the-ground results . In Denmark , for example , five plants on an industrial estate have cooperated with one another , with local authorities and with local farms to utilize each other 's wastes , leading to savings in energy and water worth $12-15 million a year . And in Brazil , liquid effluent per ton of production from one particular factory is now less than 5 per cent of what it was in 1990—a 20-fold improvement . UNEP launched its programme on sustainable consumption in 1999 , addressing the demand side of the economy and responding to increasing awareness by consumers worldwide about “ the world behind the product . ” It also initiated work with the advertising and retail sectors , and with youth and consumer groups , and it has continued to work with a broad range of other important actors , including the financial sector . In 2002 , UNEP launched a new life-cycle initiative that is bringing together industry leaders , academics and policy makers to encourage the development and dissemination of practical tools for evaluating opportunities , risks and trade-offs associated with products over their entire lives . Governments , industries , consumers and other actors have experimented with many new strategies and initiatives over the last few decades ( see box below ) . These include preventive efforts such as cleaner production assessment , eco-efficiency , green productivity , reuse and recycling , and eco-design ; as well as awareness-raising campaigns and product testing by consumer groups and end-of-pipeline control strategies , such as waste treatment and disposal and emissions permits . New tools have been introduced , including life-cycle approaches , environmental management systems , eco-design , green supply chains , sustainable procurement and environmental reporting . The field of industrial ecology has begun to take hold , in which industrial production is designed as a closed loop , where the waste from one activity is used as input into another . Several countries have introduced requirements for extended producer responsibility , in which producers are required to take back packaging and sometimes also entire products such as automobiles and electronic equipment , creating a strong incentive to minimize waste generation . Some countries have also begun to introduce environmentally sensitive fiscal policies , including eco-taxation and subsidy reform . Signs of hope More than 80 per cent of Governments surveyed found the United Nations Guidelines for Consumer Protection useful , and the same number have initiated information campaigns related to sustainable consumption . Mauritius has launched awareness-raising campaigns on solar energy , paper reuse and prudent use of plastics . As at late 2001 , the Forest Stewardship Council had certified over 25 million hectares of commercial forest in 54 countries as meeting their standards for sustainable forestry , more than double the area in 1998. The global retail market for organic produce climbed from $10 billion in 1997 to $17.5 billion in 2000 , and an estimated 17 million hectares of agricultural land are now managed organically worldwide . At least 29 countries , 20 in Europe and 8 in Asia , have instituted “ take-back ” laws requiring companies to recycle or reuse packaging discarded by consumers . Carbon dioxide emissions in China fell by 6-14 per cent between 1996 and 1999 owing to improved energy efficiency and reduced coal use , while its economy grew by 22-27 per cent . In the United States , the Energy Star label for energy efficient products has helped save enough energy to power 10 million homes , and has reduced air pollution by an amount equivalent to taking 10 million cars off the roads . World wind energy generating capacity grew more than 37 per cent in 2001 , and production of photovoltaic solar cells climbed 36 per cent . Thai consumers have used information from an appliance-labelling programme to increase the market share of energy efficient , single-door refrigerators from 12 per cent in 1996 to 96 per cent in 1998. Another development of recent years has been the rise of consumer power as a powerful force for change , with eco-labelling and certification initiatives proliferating at a rapid rate . These initiatives aim to use consumer pressure to encourage producers to switch to more sustainable methods and practices . Many Governments have catalysed the development of labelling programmes at the national and regional level in recent years , including Germany , India , Singapore , and the Nordic countries . A wide range of international labelling initiatives also exist , including those of the Forest Stewardship Council , the Marine Stewardship Council , and the International Federation of Organic Agriculture Movements . All told , there are now hundreds of different labelling systems covering a broad range of products , including laundry detergents , paints and varnishes , sanitary items , wood , textiles , energy production and tourism . Although the rapid growth in eco-labelling programmes is in many ways a promising sign , the impact of these initiatives on environmental quality and international trade has yet to be fully assessed . But new challenges are emerging … Despite these successes , many large challenges remain . While cleaner production techniques and greener products are increasingly widespread , they are far from being universally implemented and adopted . Barriers to broader dissemination include ingrained resistance to change , difficulties in convincing financiers that cleaner production programmes generate rapid financial returns , weak capacities among some environmental managers to identify and implement cleaner production alternatives , and the danger that obsolete , second-hand technologies and products will be exported to the developing world . On the consumer side , while eco-labels hold great promise for providing purchasers with the information they need to shift their behaviour , rules on misleading and ambiguous claims are needed to ensure that labelling initiatives provide clear , transparent and reliable information on the environmental impacts of products and services . There is a need for non-legally binding guidelines for eco-labelling . Relationship trade should be considered in addressing these issues . It is also becoming more and more clear that environmental gains in production are increasingly being offset by rising resource consumption in response to a combination of population growth and economic expansion to alleviate poverty , improve living standards and satisfy growing consumer demand for goods and services . For example , the energy used to produce a ton of metallurgical alumina fell by 10 per cent globally between 1991 to 2000 , but total production increased by over 40 per cent over the same period , meaning that the total energy used for producing alumina has continued to increase . Similar trends prevail in other sectors . In addition , newly emerging or rapidly developing economic sectors pose new environmental threats that are not yet being effectively controlled , such as the growing problem of electronic wastes . Increasing quality of life , globalization and higher purchasing power have led to rapid increases in resource-intensive economic activities such as tourism and aviation , and technological innovations have brought about the development of new business sectors , such as computer manufacturing and mobile telephone production . The relationship between sports and the environment is another example of such issues to be addressed . Many of these new developments contribute greatly to communication and economic development , but they have also brought with them substantial environmental challenges . A fundamental underlying problem is the continuing failure to integrate environmental concerns sufficiently into economic and social decision-making , and vice versa . Governments continue to pursue economic and social development with a short-term perspective that fails to give due consideration to environmental problems . For example , a Government may decide to develop a tourist destination to attract foreign direct investment and increase employment , which may have serious long-term impacts on the ecosystem and the prevailing social structure . The same can be said for some environmental conservation programmes that try to stop logging in forests without implementing alternatives for local economic development . Similar challenges face other sectors of society . Businesses , for instance , do not always adequately factor in the environmental and social impacts of their production decisions . And consumers , particularly those in wealthy societies , do not always know or consider the environmental and social impacts of their consumption choices . One reason that efforts to date to redirect patterns of consumption and production in a more environmentally sustainable direction have been only partially successful is that they have often failed to address issues and challenges in a holistic manner . This compartmentalization has sometimes led to counterproductive results , such as environmental liabilities being shifted from one segment of the product chain to another , rather than being truly solved or consumers being asked to purchase environmentally friendly products before alternatives are widely available at competitive prices . Calling for new and innovative strategies and approaches … Achieving lasting success in redirecting consumption and production patterns in support of sustainability will require new and innovative approaches . An important step that UNEP has taken in recent years is to address cleaner production techniques and more sustainable consumption patterns in an integrated way . At first glance , cleaner production and sustainable consumption activities may appear to have little in common , except their shared goal of promoting sustainable development . However , a closer look reveals that the approaches are closely interrelated . The overall goal of cleaner production techniques is to manufacture products or provide services with minimum environmental impact . Sustainable consumption activities , on the other hand , aim to make possible the most efficient use of a product or service , thus combining the maximum satisfaction of consumer need with the least environmental impact . The two approaches thus converge on the same target , the product , but from opposite directions . UNEP is helping to build a framework for action in which producers and consumers can move together along the road to sustainable development , as called for in the World Summit on Sustainable Development Plan of Implementation . Embracing this new approach will require transcending traditional sectoral lines and engaging a broad range of stakeholders in the search for solutions . UNEP thus plans to build broad-based alliances for the shift to more sustainable patterns of production and consumption , including by helping to build capacity among key decision makers in developing countries . UNEP also intends to continue to work to improve production processes ; to accelerate innovations in product design ; to promote science-based , reliable tools for assessing the environmental impacts of products throughout their life-cycles ; and to encourage environmentally and socially sensitive purchasing decisions by individuals , industries and public institutions . To accomplish these goals , UNEP plans to shift its focus away from specific products and industrial sectors towards a more integrated approach that focuses on meeting human needs for critical services and fulfilling key functions , such as providing nutrition , shelter , clothes , health , knowledge , mobility , leisure and security . The World Summit Plan of Implementation details a number of specific areas where action is needed under the broader rubric of 10-year initiatives at the regional and national level to change unsustainable patterns of consumption and production . These specific initiatives include life-cycle analysis , awareness-raising programmes , increased investments in cleaner production and eco-efficiency , and providing training programmes to small and medium-sized enterprises ( see box below ) . Chapter III of the Plan of Implementation ( Changing unsustainable patterns of consumption and production ) also discusses ways to enhance corporate environmental and social responsibility , to encourage relevant authorities to integrate sustainable development goals into their decision-making , to promote energy and transport for sustainable development , and to encourage sound management of chemicals throughout their life cycle . UNEP is strengthening its efforts to support these initiatives at the regional and national levels in cooperation with other agencies and actors . Key elements of the World Summit on Sustainable Development 's Plan of Implementation on changing unsustainable patterns of consumption and production A 10-year framework of programmes in support of regional and national initiatives to accelerate the shift towards sustainable consumption and production to promote social and economic development within the carrying capacity of ecosystems . Adopt monitoring and assessment mechanisms , including , where appropriate , life-cycle analysis and national indicators for measuring progress . Apply polluter-pays principle . Improve the products and services provided , while reducing environmental and health impacts using , where appropriate , science-based approaches , such as life-cycle analysis . Develop awareness-raising programmes , particularly among youth and the relevant segments in all countries , through education , public and consumer information , advertising and other media , taking into account local , national and regional cultural values . Develop and adopt on a voluntary basis effective , transparent , verifiable , non-misleading and non-discriminatory consumer information tools . Provide financial support for capacity-building , technology transfer and exchange of technology . Increase investment in cleaner production and eco-efficiency , through incentives , support schemes and policies directed at establishing appropriate regulatory , financial and legal frameworks . Establish and support cleaner production programmes and centres . Provide incentives for investment in cleaner production and eco-efficiency . Collect and disseminate information on cleaner production and eco-efficiency , and promote the exchange of best practices and know-how on environmentally sound technologies . Provide training programmes to small and medium-sized enterprises on the use of information and communication technologies . Integrate the issue of production and consumption patterns into sustainable development policies , including into poverty reduction strategies . Enhance corporate environmental and social responsibility and accountability through voluntary initiatives , environmental management systems , codes of conduct , certification and public reporting . Encourage relevant authorities at all levels to take sustainable development considerations into account in decision-making , including on national and local development planning , business development and public procurement . Promote internalization of environmental costs , and the use of economic instruments . The Governing council may wish to consider the following questions : ( a ) What policies have been most effective to date in encouraging more sustainable patterns of consumption and production ? ( b ) How can the polluter-pays principle and other approaches be better utilized to ensure that prices of products reflect the full environmental costs of their production and use ? ( c ) How can we stimulate the development of new technologies that are far more efficient in their use of energy , water and materials and that minimize the creation of waste ? ( d ) How can we ensure that the shift to more sustainable patterns of consumption and production also contributes to poverty eradication and social progress ? ( e ) What should UNEP 's role be in the development of the 10-year framework of programmes on sustainable consumption and production ? For example , how can UNEP contribute to awareness raising activities , to the preparation of guidelines on eco-labelling and other consumer information tools , and to the establishment of regional programmes aimed at identifying priorities and promoting action ? The Governing council may wish to consider the following recommendations : ( a ) The Executive Director should strengthen UNEP 's sustainable consumption and production activities as part of the overall framework of programmes on sustainable consumption and production patterns in support of regional and national initiatives ; ( b ) The Executive Director should strengthen the existing Life-Cycle Initiative to identify life-cycle based policies and tools , including by preparing guidelines on establishing clear and reliable consumer information tools , thereby avoiding non-tariff trade barriers and encouraging the transfer of environmentally sound technologies ; ( c ) The Executive Director , in pursuing these recommendations , should take fully into account the regional characteristics , and in particular the situation in developing countries and countries with economies in transition , so that all countries can benefit from the process , by setting up or contributing to regional programmes , building upon existing networks and activities ; ( d ) The work should involve experts of Governments and local authorities , other United Nations organizations , multilateral environmental agreement secretariats , business and industry , civil society partners and in particular consumer organizations , workers and trade unions and environmental non-governmental organizations , to identify actions currently undertaken or planned and identify gaps to be addressed in the work programme ; ( e ) The Executive Director should regularly report to the Commission on Sustainable Development on the progress of the work done to implement the decisions related to changing unsustainable patterns of consumption and production taken at the World Summit on Sustainable Development in Johannesburg ; ( f ) The Executive Director should report to the next session of the Governing Council/Global Ministerial Environment Forum , in 2004 , on progress made in implementing the present recommendations . Key sources Consumers International and UNEP , Tracking progress : Implementing sustainable consumption policies - A global review of implementation of the United Nations Guidelines for Consumer Protection , May 2002 United Nations Development Programme , Human Development Report , 1998 UNEP , “ A function-based approach to sustainable consumption and production , ” discussion paper , December 2002 UNEP , Industry as a Partner for Sustainable Development - 10 years after Rio : the UNEP assessment , 2002 UNEP , Global Status 2002 : Sustainable consumption and cleaner production World Resources Institute , UNEP and the World Business Council for Sustainable Development , Tomorrow 's markets : Global trends and their implications for business , 2002 Worldwatch Institute , Vital signs 2002 , in cooperation with UNEP , and State of the World 2002 World Wide Fund for Nature ( WWF ) , in collaboration with UNEP-World Conservation Monitoring Centre ( WCMC ) , and Redefining Progress , Living planet report , 2000 and 2002 UNEP/GC.22/8/Add.2 UNEP/GC.22/8/Add.2 1 See General Assembly resolution 55/2 . 2 Report of the World Summit on Sustainable Development , Johannesburg , South Africa , 26 August - 4 September 2002 ( United Nations publication Sales No. E.03 . II . A.1 , chap . I , resolution 2 , annex . </text>
<text id="un/UNEP_GC_24_2">
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 . </text>
<text id="un/UNEP_POPS_INC6_22">
Sixth session Geneva , 17-21 June 2002 The sixth session of the Intergovernmental Negotiating Committee for an International Legally Binding Instrument for Persistent Organic Pollutants was held at the Geneva International Conference Centre , Geneva , from 17 to 21 June 2002. The session was opened by Mr. John Buccini ( Canada ) , Chair of the Committee , at 10.30 a. m. on Monday , 17 June 2002. An opening statement was made by Mr. Philippe Roch , State Secretary , Director of the Swiss Agency for the Environment , Forests and Landscape . In his statement Mr. Roch said that persistent organic pollutants ( POPs ) present a problem of global dimension which called for concerted efforts on a global scale . In that regard , several remaining problems needed to be discussed and resolved , such as the question of technical assistance for capacity-building . An efficient way had to be found to evaluate the specific needs of different regions and subregions and the transfer of technology required by developing country Parties and Parties with economies in transition . In order to respond to the needs of the Stockholm Convention on Persistent Organic Pollutants , and to those of the Convention to Combat Desertification , the Global Environment Facility ( GEF ) , which had been designated as the financial mechanism , must have the necessary funds at its disposal , without reducing its means of intervention in other areas , namely climate and biodiversity . He said that to enable both Conventions to enter into force it was necessary that contributions to GEF be increased . KMON On the issue of enhancing the synergies and linkages between multilateral environmental agreements , as a means of strengthening international environmental governance , Mr. Roch welcomed the fact that the Stockholm Convention called for the Conference of the Parties to collaborate closely with the competent entities of the Basel Convention to determine methods to ensure environmentally appropriate disposal . He singled out the excellent collaboration in Geneva between the Basel , Stockholm and Rotterdam Conventions , which strengthens the coordination of the activities taking place within the framework of those agreements . Turning to the issue of the permanent secretariat for the Stockholm Convention , Mr. Roch said that the existing infrastructure in Switzerland and the potential synergies with other international organizations directly related to chemicals would offer the future secretariat ideal working conditions that would be strengthened by the presence of 140 permanent missions and numerous environmental non-governmental organizations located in Geneva . He said that Switzerland would be honoured to welcome the seventh session of the Intergovernmental Negotiating Committee in Geneva . Mr. Jim Willis , Executive Secretary of the Stockholm Convention presented the opening statement on behalf of Mr. Klaus Töpfer , Executive Director of the United Nations Environment Programme ( UNEP ) . Mr. Willis conveyed the apologies of Mr. Töpfer , who was unable to attend the current meeting . He presented Mr. Töpfer 's address to the Intergovernmental Negotiating Committee , noting in particular the contribution of the Stockholm Convention to sustainable development ; the major issues to be addressed by the Intergovernmental Negotiating Committee at its sixth session ; and the budget shortfall of the secretariat . Mr. Töpfer also congratulated the 151 countries that had signed the Convention as well the 11 Governments that had thus far ratified or acceded to it . Attendance The session was attended by representatives of the following Parties : Algeria , Antigua and Barbuda , Argentina , Armenia , Australia , Austria , Azerbaijan , Bahamas , Bahrain , Bangladesh , Belarus , Belgium , Benin , Bhutan , Bolivia , Brazil , Bulgaria , Burkina Faso , Burundi , Cambodia , Canada , Central African Republic , Chad , Chile , China , Colombia , Comoros , Costa Rica , Côte d'Ivoire , Croatia , Cuba , Czech Republic , Denmark , Djibouti , Dominican Republic , Ecuador , Egypt , Ethiopia , Fiji , Finland , France , Gabon , Gambia , Georgia , Germany , Ghana , Greece , Guatemala , Guinea , Hungary , Iceland , India , Indonesia , Iran ( Islamic Republic of ) , Iraq , Italy , Jamaica , Japan , Jordan , Kazakhstan , Kenya , Kiribati , Kuwait , Kyrgyzstan , Latvia , Lesotho , Libyan Arab Jamahiriya , Liechtenstein , Lithuania , Madagascar , Malawi , Malaysia , Mauritania , Mauritius , Mexico , Monaco , Mongolia , Morocco , Mozambique , Myanmar , Netherlands , New Zealand , Nicaragua , Nigeria , Niue , Norway , Oman , Panama , Paraguay , Peru , Philippines , Poland , Portugal , Qatar , Republic of Korea , Republic of Moldova , Romania , Russian Federation , Rwanda , St. Lucia , Samoa , Saudi Arabia , Senegal , Seychelles , Singapore , Slovakia , Slovenia , South Africa , Spain , Sudan , Suriname , Sweden , Switzerland , Syrian Arab Republic , Tajikistan , Thailand , The former Yugoslav Republic of Macedonia , Togo , Trinidad and Tobago , Tunisia , Uganda , Ukraine , United Kingdom of Great Britain and Northern Ireland , United Republic of Tanzania , United States of America , Uruguay , Uzbekistan , Venezuela , Yemen , Yugoslavia , Zambia , Zimbabwe . The following United Nations bodies , specialized agencies and convention secretariats were represented : Food and Agriculture Organization of the United Nations ( FAO ) , United Nations Development Programme ( UNDP ) , United Nations Economic Commission for Europe ( UNECE ) , United Nations Industrial Development Organization ( UNIDO ) , United Nations Institute for Training and Research ( UNITAR ) , World Bank , World Health Organization ( WHO ) , World Meteorological Organization , World Trade Organization ( WTO ) , Global Environment Facility ( GEF ) , secretariat of the Basel Convention on the Control of Transboundary Movements of Hazardous Wastes and their Disposal , secretariat of the Convention on Biological Diversity , secretariat of the United Nations Convention to Combat Desertification in those Countries Experiencing Serious Drought and/or Desertification , particularly in Africa and the interim secretariat for the Rotterdam Convention on the Prior Informed Consent Procedure for Certain Hazardous Chemicals and Pesticides in International Trade The following intergovernmental organizations and other bodies were represented : European Commission ( EC ) , Intergovernmental Forum on Chemical Safety ( IFCS ) , League of Arab States ( LAS ) , South Pacific Regional Environment Programme ( SPREP ) , ABB Environmental Services , Aptechnologies , Dongbu Honnong Chemical ( DHC ) , Federation of Thai Industries ( FTI ) , Royal Entomological Society , Trent University The following non-governmental organizations and other bodies were represented : AC-DASSUR Africa Fighting Malaria ( AFM ) , American Chemistry Council ( ACC ) , Armenian Women for Health and a Healthy Environment ( AWHHE ) , ARNIKA , Berne Declaration , Center for International Environmental Law ( CIEL ) , Centro de Derecho Ambiental del Sur , AC-DASSUR , Climate and Development Initiative , s ( CDI ) , Comisiones Obreras , Comité Sahelien des Pesticides ( CSP ) , Eco-Accord Center for Environment and Sustainable Development , Environment Quality Protection Foundations ( EQPF ) , European Chemical Industry Council ( CEFIC ) , Federation of Thai Industries ( FTI ) , Greenpeace International , Indigenous Environmental Network ( IEN ) , International Council of Chemical Associations ( ICCA ) , International Council of Environmental Law ( ICEL ) , International POPs Elimination Network ( IPEN ) , Japan Chemical Industry Association ( JCIA ) , Japan Offspring Fund ( JOF ) , Mouvement pour les Droits et le Respect des Générations Futures , National Toxics Network ( NTN ) , Oekometric GmbH ( the Bayreuth Institute of Environmental Research ) , People 's Task Force for Bases Clean-up , Pesticide Action Network ( PAN ) , Physicians for Social Responsibility ( PSR ) , Thanal Conservation Action and Information Network , World Chlorine Council ( WCC ) , World Wide Fund for Nature ( WWF ) . Officers Introducing the item , the Chair informed the meeting of the death of Mr. Mir Jafar Ghaemieh who had served as Vice-Chair for the Asia and Pacific region . The Chair made particular reference to the constructive contribution made by Mr. Ghaemieh throughout the negotiations . The Chair also drew the Committee 's attention to the note prepared by the secretariat ( UNEP/POPS/INC.6/2 ) on the subject of Bureau issues , which contained a proposal submitted by the Group of 77 and China to the effect that rule 8 of the rules of procedure of the Intergovernmental Negotiating Committee should be revised with a view to increasing the membership of the Bureau to 10 members . Further to clarifications provided by the sponsors of the proposal , the Committee decided to amend rule 8 of the rules of procedure to state that : “ 1. The Committee shall elect from among the representatives of the State Parties a Bureau composed of one Chair and nine Vice-Chairs , one of whom shall act as Rapporteur . “ 2. In electing the officers , the Committee shall have due regard to the principle of equitable geographical representation . Each of the five regional groups shall be represented by two members . ” Decision INC-6/1 on the amendment of rule 8 of the rules of procedure for the meeting of the Intergovernmental Negotiating Committee is contained in annex I to the present report . A number of representatives stressed that they agreed to the expansion of the Bureau , on the understanding that it did not constitute a precedent either for the organizational structure of the Conference of the Parties or for other multilateral environmental agreements . It was also stressed that the increased number of Bureau members would not cause a budget increase . In view of the above-mentioned decision , and taking into consideration the absence at the current session of previously elected Bureau members for the Africa region and the Latin America and Caribbean region , as well as the recent demise of the Bureau member from the Asia and Pacific region , the elected members of the Bureau of the Intergovernmental Negotiating Committee at its sixth session were as follows : Chair : Mr. John Buccini ( Canada ) Vice-Chairs : Mr. Mahi Boumediene ( Algeria ) Mr. Manfred Schneider ( Austria ) Mr. Yue Ruisheng ( China ) Ms. Darka Hamel ( Croatia ) Ms. Fatoumata Jallow NDoye Ndoye ( Gambia ) Mr. Seyed Reza Tabatabaei ( Iran , Islamic Republic of ) Mr. Tomás Guardia ( Panama ) Ms. Natalia Karpova ( Russian Federation ) Mr. Gonzalo Casas ( Uruguay ) In accordance with rule 8 of the Committee 's rules of procedure , Ms. Hamel , Vice-Chair , also agreed to continue as rapporteur . C. Adoption of the agenda The Committee adopted the following agenda on the basis of the provisional agenda , which had been circulated as document UNEP/POPS/INC.6/1 : Opening of the session . Organizational matters : ( a ) Adoption of the agenda ; ( b ) Organization of work ; ( c ) Report by the secretariat on intersessional work requested by the Committee or the Conference of Plenipotentiaries on the Stockholm Convention on Persistent Organic Pollutants ; ( d ) Bureau issues . Review of ongoing international activities relating to the work of the Committee . Activities of the secretariat and review of the situation as regards extrabudgetary funds . Preparation for the Conference of the Parties . Other matters . Adoption of the report . Closure of the session . Organization of work At its opening session , the Committee decided to work in plenary and to establish contact groups on an as-needed basis . The Committee took note of the election of Ms. Anne Daniels ( Canada ) as the new chair of the legal drafting group . E. E. Report by the secretariat on intersessional work requested by the Committee or the Conference of Plenipotentiaries on the Stockholm Convention on Persistent Organic Pollutants The secretariat noted that , while no specific intersessional work had been requested by the Committee at its fifth session , considerable work had been undertaken intersessionally as a result of the resolutions ensuing from the Conference of Plenipotentiaries on the Stockholm Convention . In addition to the reports of both the fifth session of the Committee ( UNEP/POPS/INC.5/7 ) and the Conference of Plenipotentiaries ( UNEP/POPS/CONF/4 ) , the secretariat had produced a booklet containing the text of the Stockholm Convention and the documentation for the current session of the Committee . A full list of the documents available to the Committee is provided in annex IX to the present report . At its opening session , the Intergovernmental Negotiating Committee took up consideration of the above item . Introducing the item , the secretariat drew the Committee 's attention to the relevant documentation available ( see annex IX ) ) Mr. Willis , speaking as Executive Secretary , said that the fourth edition of the master list of actions on the reduction and/or elimination of the release of POPs ( UNEP/POPS/INC.6/INF/10 ) , prepared by the secretariat , contained input from over 100 countries . Because of the volume of material , and for reasons of economy , the document was being made available in CD-ROM format , which would be the practice for all such lengthy information documents in the future , perhaps with additional interactive features . Hard-copy versions would also be available to those who required them . Mr. Willis , speaking on behalf of UNEP Chemicals , briefly summarized some of the capacity-building activities of UNEP in the intersessional period , as set out in document UNEP/POPS/INC.6/INF/17 . He expressed appreciation to the Governments of Canada , Denmark , Germany , Sweden , Switzerland and the United States , as well as to GEF , World Bank and the Inuit Circumpolar Conference for their assistance in the financing of POPs-related workshops , and also thanked the countries that had hosted those workshops for their in-kind contributions and efforts . The representative of the United Nations Institute for Training and Research ( UNITAR ) described the relevant activities of UNITAR , as set out in document UNEP/POPS/INC.6/INF/27 , and highlighted its programmes to assist in : the development of national chemicals management profiles ; skills-building training for sound management of chemicals ; risk management decision-making for priority chemicals ; and developing integrated national programmes for the sound management of chemicals . The representative of the United Nations Industrial Development Organization ( UNIDO ) said that the UNIDO General Conference and the Industrial Development Board recognized the importance of priority action on POPs . UNIDO had received a number of requests for assistance from countries , which had been and were being submitted to GEF and other donors for funding , inter alia , for capacity-building and technical assistance on best available techniques ( BAT ) for POPs reductions and on substitutes for POPs . Ms. Sachiko Kuwabara-Yamamoto , Executive Secretary of the Basel Convention on the Control of Transboundary Movements of Hazardous Wastes and their Disposal , reporting on the status of preparation of the technical guidelines for the environmentally sound management of POPs as wastes , said that a first draft was expected in November 2002 , and work was continuing on the revised technical guidelines for PCBs , PCTs and PBBs . Concerning the regional centres for training and technology transfer of the Basel Convention on the Control of Transboundary Movements of Hazardous Wastes and their Disposal , the Working Group for Implementation had at its recent first session prepared , for the upcoming sixth meeting of the Conference of the Parties , a draft decision on strengthening their legal status . Welcoming the workshops organized by the Stockholm Convention at the Basel regional centres and the proposal to develop pilot regional and subregional centres to provide technical assistance under article 12 of the Stockholm Convention , she stressed that such involvement in the centres could strengthen their viability , avoid duplication and enhance the collaboration between the two Conventions . The representative of the United Nations Economic Commission for Europe ( UNECE ) , speaking on behalf of the Convention on Long-range Transboundary Air Pollution , reported on activities under its protocol on POPs , which was expected to enter into force by the end of 2002. Monitoring and evaluation activities under that protocol involved , inter alia , emissions inventories , methodologies and modelling work , and evaluation of the effects of POPs and their health risks . An expert group on POPs was focusing on issues of the scheduled reassessment of certain POPs , and attention was being given to potential candidate POPs . He underlined the continued interest of UNECE in furthering collaboration with UNEP . The representative of the World Health Organization ( WHO ) drew attention to document UNEP/POPS/INC.6/INF/26 which highlighted WHO activities to reduce or eliminate POPs . He drew special attention to the overall WHO policy regarding POPs , progress in POPs-related activities and programmes , and progress in implementing the WHO action plan for the reduction of reliance on DDT in disease vector control . The representative of the Food and Agriculture Organization of the United Nations ( FAO ) drew attention to document UNEP/POPS/INC.6/INF/24 which highlighted relevant FAO programmes and publications , including the “ International Code of Conduct on the Distribution and Use of Pesticides ; ” guidelines on Integrated Pest Management ( IPM ) and Integrated Vector Management ( IVM ) , produced with the Global IPM Facility , UNEP and WHO ; the “ Prevention and Disposal of Obsolete Pesticides ” programme ; and the new cooperative Africa Stockpile Programme . The representative of the secretariat of the Rotterdam Convention on the Prior Informed Consent Procedure on Certain Hazardous Chemicals and Pesticides in International Trade informed the Committee on the successful operation of the Interim Chemical Review Committee . He also reported that in response to country requests , a series of workshops had been held or were planned for 2002 to provide practical hands-on training in the operational elements of the Rotterdam Convention . Representatives of the Intergovernmental Forum on Chemical Safety ( IFCS ) drew attention to document UNEP/POPS/INC.6/INF/21 and outlined the Information Exchange Network on Capacity Building for the Sound Management of Chemicals ( INFOCAP ) . They explained that INFOCAP was a web-based information exchange network designed to enhance effective cooperation among countries and organizations providing and/or receiving assistance related to the sound management of chemicals , including information on : national profiles , priorities , plans of action and related needs ; sources of potential support ; past , ongoing and planned projects ; a reference library of existing training and guidance documents ; and contact points . A representative of the World Bank reported that under a trust fund established by the Government of Canada , the World Bank had undertaken work to help countries develop their capacity to implement the Convention effectively . The World Bank had also developed a number of related materials , including document UNEP/POPS/INC.6/INF/8 , prepared with UNEP , on the development of national implementation plans . With regard to international activity by other intergovernmental organizations , a representative of the secretariat drew attention to document UNEP/POPS/INC.6/INF/20 on the International Convention on the Control of Harmful Anti-fouling Systems on Ships of the International Maritime Organization and document UNEP/POPS/INC.6/INF/22 on the International Whaling Commission 's resolution on the Stockholm Convention on Persistent Organic Pollutants . Many representatives reported on activities within their countries relating to the work of the Committee and provisional implementation of the Stockholm Convention , including : signing and ratification of the Convention ; development of national implementation plans ; capacity-building ; stakeholder participation ; regulatory developments ; programmes to reduce or eliminate the use or release of specific POPs , eliminate obsolete stockpiles of pesticides , control and disposal of POPs contaminated wastes , and address contaminated sites ; regional and subregional workshops ; monitoring and assessment of POPs , their long-range transport and their impacts on the environment and human health ; identification and assessment of potential candidate POPs ; ensuring synergistic cooperation among the Stockholm , Rotterdam and Basel Convention secretariats ; the effective utilization of financial and technical assistance ; programmes developed in collaboration with bilateral donors , UNEP Chemicals , the Stockholm , Rotterdam and Basel Convention secretariats , Basel Convention regional technical centres , GEF , the World Bank and other institutions ; and financial contributions toward the work of the Committee and national and international implementation of the Convention . A summary of statements made by representatives of non-governmental organizations is contained in annex VIII to the present report . Introducing the item , the Executive Secretary drew attention to the documentation prepared on the subject ( see annex IX ) ) and elaborated on the main points raised therein . He expressed gratitude to those donors that had made pledges to the POPs Club . He stressed that , with the 29.3 per cent reduction in the allocation to UNEP Chemicals from the Environment Fund , the in-kind support provided by UNEP in the past now had to be costed and financed . The secretariat of the Stockholm Convention thus depends entirely upon the level of funding of the voluntary POPs Club , which currently displayed a downward trend compared with previous years . It was noted that UNEP expected that the outstanding balance of the loan from the Environment Fund reserve of US$ 818,241 would be repaid . The secretariat was not eligible to receive direct funding from GEF , and existing trust funds were usually earmarked for specific programme activities . Many representatives , expressing concern at the decline in the level of contributions to the POPs Club , called upon Governments and non-governmental organizations , including industry , to make a sustained effort and commitment towards supporting the POPs Club . A number of representatives , pointing to the 2003-2004 priorities listed in the proposed budget , called on the secretariat to prepare a more detailed breakdown of the activities coming under each priority area , including the proposed budgetary allocation for each activity . In addition , in light of the possibility of a budget shortfall , the secretariat was requested to prepare a paper to provide details of the impact on activities in the event that receipts are less than the 2002 budget . One representative saw merit in the budget proposed by the secretariat and supported its adoption . Another representative questioned where the funding would come from to underpin such a budget , if approved . The following representatives announced their Governments ' intention to make contributions to the POPs Club for 2002 : Australia , US$ 31,157 ; Finland , 20,000 Euros ; Japan , US$ 100,000 ; and Luxembourg , US$ 8,033 . The representative of the Inuit Circumpolar Conference also announced her organization 's donation of CAN $1,000 to the POPs Club , a sum which represented a large proportion of the Inuit communities ' funding for all POPs issues . Some representatives , noting the uncertain financial situation , considered that a draft budget only for 2003 should be approved , with purely notional proposals for 2004. In answer to a suggestion that Governments be called upon to offset secretariat staffing costs by means of staff secondments , the secretariat explained that , while such a practice was very welcome , seconded staff often came from one particular regional group , and that over reliance on secondments could affect the regional balance of the composition of the secretariat . In answer to a query , the secretariat clarified that the budgetary implications of the capacity assistance network , as set out in document UNEP/POPS/INC.6/19 , were not included in the budget proposed by the secretariat , and would need to be considered separately . The Committee agreed that , in the course of its consideration of the items on its agenda , the special financial implications of adoption or deletion of any of the proposed activities would be discussed . The outcome would then be reflected in a report of running costs to be prepared by the secretariat . The Executive Secretary introduced a conference room paper containing details of the proposed 2003-2004 budget and an overview of the potential impacts of funding shortfalls in 2002. He also reported on the additional impact of the decisions taken by the Committee at its current meeting , which were not yet reflected in the document . He noted that the cumulative impact of the decisions adopted at the current meeting was to increase the 2003 budget by US$ 300,000 . The Committee agreed to note the budget for the year 2003 , on the understanding that the budget for 2004 would be indicative only and would be further examined in detail by the Committee at its seventh session . The secretariat was requested to provide the Committee at its seventh session with a report on the actual expenditures on budget items , based on the figures set out in the current draft budget . The budget for 2003 and the indicative budget for 2004 are contained in annex VI to the present report . The Committee also agreed to establish a budget group at the seventh session of the Committee , which would also be able to examine the possible budgetary implications of the Committee 's decisions and report on them . The secretariat was requested to prepare , in advance of the seventh session of the Committee , an information paper compiling the reports used in other multilateral environmental agreements for dealing with their budgets . In light of the fact that a large proportion of the draft budget was a debt to the Environment Fund reserve , the Committee requested the Executive Secretary to request the Executive Director of UNEP to examine the possibility of retiring some or all of that debt . Noting that the draft budget also required a 13 per cent overhead charge to be paid to UNEP , the Committee called for an examination of the possibility of reducing those costs or of UNEP providing a Finance Officer under that allocation . Precedents for such a course of action existed under other multilateral agreements . One representative said that the future budget group should consider the high level of effectiveness of the secretariat in carrying out activities and its excellent budget management , and examine the advantages that could accrue to developing countries from interaction with the secretariat . The Committee took note of the detailed information on programme priorities and budget for 2003-2004 provided by the secretariat which may be found in annex VI to the present report . Measures to reduce or eliminate releases from intentional production and use and Register of specific exemptions ( Articles 3 and 4 , and Annex A and Annex B ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat drew attention to possible action by the Committee set out in the note by the secretariat on work on DDT ( UNEP/POPS/INC.6/5 , paragraphs 4 and 5 ) . Several representatives pointed to the efforts underway in their countries to reduce reliance on DDT and apply alternatives . One representative offered to exchange information on the experiences and problems encountered in that endeavour . It was stressed that alternative means of vector control needed to be analysed to determine whether they were easily applicable in developing countries and whether they cost no more than the current use of DDT . One representative said that , despite tremendous work , her Government had not been able to identify an economically viable substitute for DDT . She wondered whether WHO could work in close collaboration with her country to develop an economically viable alternative and a format for registering DDT , to be submitted to the Conference of the Parties at its first meeting . In light of the large quantities of DDT produced by her country , the identification of an alternative would have great repercussions . Another representative said that a national debate was underway in her country to determine whether it should revoke the 1996 ban on the use of DDT and revert to its use for vector control , since alternatives had not had the desired effect . She sought advice from WHO before such a major decision could be taken . Another representative requested WHO to start a process of communication and discussion with the countries with a DDT use exemption , to inform them of developments and progress in the identification and application of alternatives . One representative , speaking on behalf of a regional economic integration organization and its member States and supported by another representative , welcomed the proposals for possible action set out in the secretariat 's note on DDT and encouraged increased cooperation between UNEP and WHO . He also suggested that the secretariat consider all documents and work undertaken by non-governmental organizations on the subject . He believed that research activities in the field should be increased , in order to promote and develop alternative vector control methods and strategies and achieve the elimination of DDT . He proposed that the secretariat consider the information to be included in the DDT Register established in annex B , part II , paragraph 1 and prepare a format of the DDT Register , to be presented for discussion to the Committee at its seventh session . He also asked the secretariat and WHO to start work to develop the format for reporting by the Parties referred to under paragraph 4 of annex B , part II . The information to be gathered in a Party 's report might include , inter alia , monitoring data on human exposure to DDT ; public health impacts of DDT reduction ; production , storage and usage of DDT ; efficacy and appropriateness of DDT in areas where it continued to be used ; and efficacy and appropriateness of alternatives to DDT . On the basis of the deliberations the Committee agreed that further consideration of the matter was necessary and requested the secretariat to prepare a report on a possible format for reporting by Parties that use DDT on amounts used , conditions of such use and its relevance in disease management strategies , as well as a report on guidance and information needed to assist the Conference of the Parties in evaluating the continued need for DDT for disease vector control and submit both reports to the Intergovernmental Negotiating Committee for further consideration at its seventh session . Decision INC-6/2 on DDT , is contained in annex I to the present report . Register of specific exemptions In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat said that , in addition to the elements of the process as specified in the Convention , and listed in the note by the secretariat ( UNEP/POPS/INC.6/4 , paragraph 5 ) , there might be other possible elements . He also drew attention to the possible action by the Committee set out in the note by the secretariat ( UNEP/POPS/INC.6/4 , paragraphs 7 and 8 ) . One representative , speaking on behalf of a regional economic integration organization and its member States , underscored the need to eliminate the chemicals listed in annexes A and B of the Convention and hoped that , eventually , no exemptions would be required , except in extraordinary cases . While the rules and criteria for such exemptions should be as strict as possible , it was necessary to bear in mind the specific circumstances and needs of the developing countries and the countries with economies in transition . He suggested that the secretariat should prepare , for submission to the Committee at its seventh session , a set of guidelines and criteria for the granting of a temporary exemption to a Party and for the extension of exemptions . While one representative called for the establishment of a technical group to conduct the review process , another representative considered that the creation of a subsidiary body for the process was premature , since it was dependent on the number of requests for exemptions and renewals that were yet to be received . One representative observed that efforts to develop guidance should start with a request for input s from countries , which could be compiled by the secretariat and discussed at the seventh session of the Committee . Expressing the view that the Committee should not become involved in the policy aspects of the review process , since the need for and nature of any such criteria should be developed based on the experience and deliberations of the Conference of the Parties , he considered that the focus should be on the logistical and process aspects , such as those set out in the note by the secretariat , and including the timing of the submission of the exemption extension request to the secretariat . Annex F provided a good example of the kinds of information countries should include in their reports justifying an exemptionextension Another representative stressed the need for countries to provide information on the maximum quantities of the chemical substances that would be produced and used under the proposed exemption extension A number of representatives proposed amendments to the draft format of the Register of specific exemptions attached to document UNEP/POPS/INC.6/INF/6 . One considered that the footnotes thereto should not generate any extra legal obligations under the Stockholm Convention . Another representative , speaking on behalf of a regional economic integration organization and its member States , said that footnotes 4 and 8 should use the agreed terminology of the Stockholm Convention , and footnote 9 should be deleted . One representative said that the secretariat should develop a unified format for notifications pursuant to note ( ii ) of annexes A and B of the Convention . One representative , considering that the “ remarks ” column was useful for providing additional information on the scope of the exemption for countries , said that a footnote was needed to clarify the types of information to be put in that column . The Register should also contain specific information about the nature of the exemptions . The Committee decided to request the secretariat to further prepare a report on : a possible format for country reporting of requests for specific exemptions , a possible process that might be considered by the Conference of the Parties , as well as a possible format for a Register of specific exemptions to be submitted to the Intergovernmental Negotiating Committee for further consideration at its seventh session . Decision INC-6/3 , on the Register of specific exemptions ( Articles 3 and 4 and Annexes A and B ) , is contained in annex I to the present report . Measures to reduce or eliminate releases from unintentional production ( article 5 and Annex C ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the representative of the secretariat drew attention to the note on guidance on best available techniques ( BAT ) and best environmental practices ( BEP ) ( UNEP/POPS/INC.6/7 ) and enumerated the points raised therein . He also drew attention to a conference room paper containing the report of a regional workshop on national action on measures to reduce or eliminate the releases of by-products from unintentional production , held in Bangkok from 13 to 15 March 2002 and organized by the Governments of Germany and Thailand , in cooperation with UNEP Chemicals . Stressing the highly technical nature of the issues involved in providing guidance on BAT and BEP for the first meeting of the Conference of the Parties , which called for specialized expertise , he said that the Committee might wish to consider establishing a subsidiary body to assist it in that effort . Because of the budgetary implications , the costs of the different options within the process chosen would also need to be carefully assessed . One representative , speaking on behalf of a regional economic integration organization and its member States , welcomed the outcome of the regional workshop held in Thailand and pointed to a conference room paper on BAT and BEP for reducing and/or eliminating emissions of by-product POPs , submitted by his organization and its member States . He considered that there was a need to initiate the establishment of a process for the development of BAT and BEP that might include the creation of a technical working group and the organization of a workshop . Measures to reduce or eliminate release from unintentional production of chemicals listed in annex C of the Stockholm Convention , including measures to promote BAT and BEP , must be included in national implementation plans . He expressed the hope that the secretariat would emphasize the promotion of effective information exchange , which could be facilitated by the experience gained through his organization 's directive on integrated pollution and prevention control . Several representatives , referring to the possibility of establishing a contact group to consider how to proceed on the issue , stressed the need for all participants to have the opportunity to play an active part in its deliberations , particularly the developing countries , since BAT and BEP were directly linked to the subject of emissions and thus affected their industries . Some representatives noted that it was essential to have BAT and BEP guidelines that would be useful to countries at all levels of development , so it was necessary to ensure that a balance of countries at all levels of development participate in the guidance development process . One representative , pointing to a conference room paper submitted by his Government on the development of guidelines on BAT and BEP , considered that work on the issue was very timely and needed to be initiated soon . It was very important to have a contact group convene to discuss the terms of reference of any subsidiary body to be established on BAT and BEP . The Committee decided to establish an open-ended contact group , co-chaired by Mr. Sergio Vives ( Chile ) and Mr. Robert Kellam ( United States ) , with a mandate to address issues of guidelines on BAT and guidance on BEP pursuant to article 5 of the Stockholm Convention , as set out in the note by the secretariat ( UNEP/POPS/INC.6/7 ) . The contact group was to propose a way forward with regard to acquiring the expertise needed and formulating the guidelines and guidance for adoption by the Conference of the Parties . Mr. Robert Kellam , The co-chairs of the contact group , speaking also on behalf of co-chair Sergio Vives , reported to plenary on the results of the deliberations of the group , which were before the Committee in a conference room paper . He They drew particular attention to the need for a decision at the first meeting of the Conference of the Parties on whether to continue work on the subject using the current methodology or whether to establish another group . Following discussion on the item , the Committee adopted the terms of reference for the Expert Group on BAT/BEP contained in annex VII to the present report . The Committee selected Mr. Sergio Vives ( Chile ) and Mr. Robert Kellem Kellam ( United States ) to serve as interim co-Chairs of the Expert Group for the purpose of facilitating the first meeting of the Group . The Committee noted that Algeria , Chile , Gabon , Iran ( Islamic Republic of ) , Kenya , Mongolia , Nigeria , Saudi Arabia and Zambia would serve as nine of the 15 members of the Group from developing countries . For the remaining six positions , Iran would inform the secretariat of the identities of two countries from the Asia and Pacific region and the Dominican Republic would inform the secretariat of the identities of four countries from the Latin American and Caribbean region . The Committee noted that Kazakhstan , Poland and Yugoslavia would serve as the three members from countries with economies in transition . The Committee noted that Australia and the country occupying the presidency of the European Union would inform the secretariat of the identities of the 18 countries that would serve as members from developed countries . In its deliberation of guidance on the evaluation of current and projected releases of chemicals listed in annex C , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat noted the UNEP Standardized Toolkit for Identification and Quantification of Dioxin and Furan Releases . This Toolkit was now being used by 14 countries , with funding being identified for its use in a further three countries . The generous financial and other support of the Governments of Canada , Denmark , Germany , Switzerland and the United States as well as the Arctic Council Assessment Programme was acknowledged . A number of representatives spoke very favourably on the usefulness of the Toolkit . Representatives observed that the Toolkit was a good basis for provisional guidance but ultimately needed to be more detailed and that a strategy for proper identification of all sources should be included . It was further noted that currently emissions factors should be useable by developed countries , developing countries and countries with economies in transition . Representatives noted that the Toolkit would perhaps need to address new sources , as well as all of the unintentionally produced POPs in annex C of the Convention . It was noted that more references and more detail would also be useful . The Committee agreed that an update of the Toolkit should be prepared by the secretariat taking into account comments and input to be received from Governments and others by 31 December 2002 as well as the experiences of those countries using the Toolkit . That update would be presented for discussion at the seventh session of the Intergovernmental Negotiating Committee and then forwarded as appropriate to the Conference of the Parties to serve as guidance once the Convention entered into force . Decision INC-6/4 , on the evaluation of current and projected releases of chemicals listed in annex C is contained in annex I to the present report . C. Measures to reduce or eliminate releases from stockpiles and wastes ( Article 6 ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) . Introducing the item , the secretariat observed that the Committee might wish to take note of the information papers before it , and might further wish to comment on the cooperative activities undertaken with the Basel Convention and on possible further areas of cooperation . A number of representatives welcomed the progress made by the Technical Working Group of the Basel Convention in the preparation of technical guidelines for the environmentally sound management of POPs wastes and encouraged cooperation with the Basel Convention secretariat in the process of their finalization , considering this activity to be of high priority . One representative was of the view that technical experts from the Stockholm Convention should be enabled to participate in the process of drafting these guidelines to the same extent as Parties to the Basel Convention , and through their attendance at its technical meetings , despite the fact that not all interested countries were Parties to the Basel Convention . It was noted that advantage should be taken of the possibility for stakeholders to submit comments on the technical guidelines by 15 September 2002. One representative , speaking on behalf of a regional economic integration organization and its member States said that , once the technical guidelines had been finalized , the secretariat should study them to see their implications for the Stockholm Convention , and should draft recommendations for the first meeting of the Conference of the Parties concerning those elements of the guidelines that could be adopted as legal provisions under the Convention . He also encouraged cooperation with the Basel Convention in the revision of the technical guidelines on PCBs , PCTs and PBBs . Pointing to the recently approved Basel Convention technical guidelines for the dismantling of ships , which were to be submitted to the Conference of the Parties at its sixth meeting , in December 2002 , he noted the possibility that such activities could involve releases of POPs , and said that his organization would monitor the situation to see if the safeguards were at the level required by the provisions of the Stockholm Convention . Many representatives welcomed the current cooperation at the institutional level between the secretariats of the Basel Convention and the Stockholm Convention and encouraged an increase in such cooperation in other areas , particularly capacity-building , implementing and reporting . Several representatives said that such cooperation should also be extended at the national level on matters related to the two Conventions . One representative , pointing to the evidence of good cooperation to date between the Basel Convention and the Stockholm Convention , expressed strong support for the clustering of the secretariats of chemicals and wastes-related multilateral environmental agreements . The Committee invited the Conference of the Parties of the Basel Convention to consider inviting experts from the Intergovernmental Negotiating Committee to participate in the process related to preparing the technical guidelines on POPs waste . The Committee also invited the secretariat to make an analysis of the compiled technical guidelines on POPs and prepare a report for the first meeting of the Conference of the Parties , with guidance on what elements of the technical guidelines should be adopted as legal provisions of the Stockholm Convention . Decision INC-6/5 on measures to reduce or eliminate releases from stockpiles and wastes : development of technical guidelines on the environmentally sound management of persistent organic pollutant wastes , is contained in annex I to the present report . National implementation plans ( Article 7 ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat suggested that the Committee might wish to consider whether there was a need , first , to prepare guidance relevant to review and updating , as appropriate , of national implementation plans for consideration by the Conference of the Parties and , second , to prepare interim guidance to countries to assist in the development of those national implementation plans in the interim period . In the latter context , the secretariat referred to a guidance document being developed in the context of a GEF-supported pilot project executed in 12 countries by UNEP with in-kind support from the World Bank and the Government of Denmark . In addition , guidelines for enabling activities had been prepared by GEF prior to the adoption of the Stockholm Convention and recent decisions of the GEF Council , and which had been used as a basis for developing national implementation plans to date . Further clarification on the guidelines prepared for enabling activities was provided by the GEF representative who noted that the guidelines would be revised to take into account the final text of the Stockholm Convention . He added that there were 64 developing countries or countries with economies in transition receiving or about to receive funding to prepare national implementation plans . Representatives noted the importance of having national implementation plans that would ensure efficient compliance with the obligations of the Convention . While guidance for preparing those plans would ensure consistency and inclusion of key elements , representatives emphasized that it should not be prescriptive but rather flexible and dynamic , taking into account the different environmental , economic and political commitments of countries . The necessity of considering both developing and developed country situations and the need for a transparent process was also stressed . The Committee wished to see incorporated into the guidance the experiences of countries that were preparing or had implemented national implementation plans , including the 12 pilot countries , as well as experiences gained from other multilateral environmental agreements , especially chemical agreements . The Committee requested the secretariat to prepare guidance relevant to the review and updating of national implementation plans for consideration by the Conference of the Parties . The Committee also requested the secretariat to prepare interim guidance to assist countries to develop their national implementation plans and take into account written comments from Governments that should be received no later than 31 October 2002. A revised interim guidance document would be submitted to the Committee for consideration at its seventh session . Decision INC-6/6 the development of interim guidance to assist countries in the preparation of national implementation plans and guidance for reviewing and updating national implementation plans , is contained in annex I to the present report . E. Listing of chemicals in annexes A , B and C ( Article 8 , annexes D , E and F , and paragraph 6 of article 19 ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat , pointing to the anticipated rapid rate of ratification of the Convention , underlined the need for clear guidance to be given at the current meeting on the draft rules of procedure , composition and operational guidelines for the functioning of the Persistent Organic Pollutants Review Committee . Although it was possible to request the secretariat to prepare a set of such draft elements for future submission to the Committee , in light of the time factor , it was perhaps more desirable to establish a contact group at the current meeting to develop relevant recommendations concerning the POPs Review Committee , for consideration by the Conference of the Parties at its first meeting . One representative , speaking as Chair of the Interim Chemical Review Committee of the Rotterdam Convention , underlined the importance of ensuring that suitably qualified experts were selected by the Intergovernmental Negotiating Committee . Under the Rotterdam Convention , the experts worked mainly intersessionally , through e-mail , and in English only , in order to draft the decision guidance documents . Transparency was ensured by attaching to the translated reports of the Interim Chemical Review Committee the rationale behind a decision to list a chemical , and submitting the translated draft decision guidance documents to Parties six months prior to a meeting of the Intergovernmental Negotiating Committee . One representative , speaking on behalf of a regional economic integration organization and its member States , considered that the Interim Chemical Review Committee of the Rotterdam Convention was an appropriate starting point for the development of the rules of procedure , which could be amended according to the needs of the Stockholm Convention , ensuring the efficient , timely and effective operation of the POPs Review Committee and its conduct of a step-wise procedure . In order to ensure flexible and transparent procedures , the meetings of the POPs Review Committee should be open to observers and the Committee should be able to establish subgroups to provide specialist advice to assist its work . The POPs Review Committee should be able to make recommendations to the Conference of the Parties regarding its own functioning , as well as guidance which might be established by the Conference of the Parties . He expressed a readiness to start work to enable the adoption of the rules of procedure by the Conference of the Parties at its first meeting . Another representative , expressing support for that position , noted that the list of examples of technical subsidiary bodies contained in the information paper prepared by the secretariat ( UNEP/POPS/INC.6/INF/4 ) was not exhaustive , and that the operational aspects of other bodies could also be taken into account , such as the Technology and Economic Assessment Panel under the Montreal Protocol on Substances that Deplete the Ozone Layer . In addition , he considered that , while the secretariat 's paper provided a quantitative analysis of the operations of the subsidiary bodies listed , what was needed was a qualitative analysis , setting out the advantages and disadvantages that had been encountered as they performed their functions . The Committee decided to establish an open-ended contact group , to be co-chaired by Mr. Reiner Arndt ( Germany ) and Ms. Fatoumata Jallow NDoye Ndoye ( Gambia ) , with a mandate to consider issues of the terms of reference , operational guidelines and rules of procedure for the POPs Review Committee , and to report to plenary on the results of its work . Reporting to plenary on the results of the deliberations of the contact group , co-chair Reiner Arndt pointed to a conference room paper containing the report of the contact group and noted that it had not reached agreement on the question of what was meant by “ equitable geographical distribution ” , which the contact group agreed to put to the UNEP legal counsel/legal drafting group . Co-chair Fatoumata Jallow NDoye Ndoye highlighted the contact groups ' group 's view that , due to the expected workload , either co-chairs or vice-chairs could be used . On that issue , the group had considered that the Conference of the Parties be given flexibility to decide , and the issue could be raised with the legal drafting group in its consideration of the draft rules of procedure for the Conference of the Parties . The Committee took note of the report of the contact group and requested the secretariat to use the report as the basis to propose a brief description and draft terms of reference for the subsidiary body to review candidate POPs for further consideration by the Committee at its seventh session . The report of the contact group is contained in annex V to the present report . Information exchange ( Article 9 ) In its deliberations the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat observed that guidance was sought from the Committee on the process for the design , development , operation and scope of the clearing-house mechanism , as well as on the possible operation of that mechanism on a pilot basis . Some representatives noted the need to explore synergies with other information exchange systems such as those of the Intergovernmental Forum on Chemical Safety , UNEP Chemicals and other organizations as well as with information exchange activities that were being discussed in the context of the capacity assistance network . Further to a request for clarification , the secretariat informed the Committee that while US$ 250,000 was estimated per annum for 2003 and 2004 to maintain the current web site and clearing house , as well as begin design of a future clearing house , US$ 1-1.3 million would be required per annum to establish a clearing house at the same level as some other multilateral environmental agreements . Some representatives questioned the appropriateness of assigning such a budget to the development of a clearing-house mechanism when resources were limited . The Committee noted the valuable and excellent information contained in the UNEP POPs web site and wished to see the current commitment to that web site maintained . The Committee considered that it was premature to embark on a pilot project on a clearing-house mechanism and that prior to initiating a process for the design , development , operation and scope of a clearing-house mechanism , a more detailed work programme should be prepared by the secretariat based on comments to be received from Governments . Decision INC-6/7 on a clearing-house mechanism for information exchange on persistent organic pollutants is contained in annex I to the present report . The Committee agreed to further consider this item at its next session . Technical assistance ( Article 12 ) In its deliberations the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing this item , the secretariat observed that the Committee might wish to consider three central issues : whether to establish a process for developing the guidance called for in paragraph 3 of article 12 for consideration by the Conference of the Parties at its first meeting , as well as the timing and modalities for that work ; whether to request the secretariat to undertake a feasibility study on ways and means of establishing and ensuring the functioning of regional and subregional centres called for in paragraph 4 of article 12 for capacity-building and transfer of technology within the framework of the Stockholm Convention ; or whether to request the secretariat to develop and conduct , in cooperation with the secretariat of the Basel Convention and the Basel Convention regional centres , a pilot initiative of regional and subregional centres for the purpose of facilitating technical assistance , subject to the availability of extrabudgetary resources . Representatives noted the important role that technical assistance , including technical assistance for capacity-building , would play in assisting developing country Parties and Parties with economies in transition to fulfil their obligations under the Stockholm Convention . A rapid start to the provision of effective assistance was thus desirable . To focus efforts on the most important areas , it was necessary to evaluate the specific needs of different regions , subregions and countries regarding capacity-building and the transfer of technology . That information could be provided through written submissions from countries and other stakeholders ; experience gained in the development of national implementation plans under article 7 ; broader relevant experience gained developing and implementing action plans under other multilateral environmental agreements ; and proposals and other information gathered during the negotiation process that led to the Stockholm Convention , particularly article 12 on technical assistance . To enhance the provision of technical assistance in accordance with article 12 , representatives noted the value of seeking and utilizing efficiencies and synergies between the institutional arrangements provided for under the Stockholm Convention and other multilateral environmental institutions . Particular attention was placed on possible utilization of the regional and subregional centres created under the Basel Convention . At the same time , it was recognized that other potential arrangements existed , including : utilizing regional and subregional centres associated with other multilateral environmental institutions ; using some but not necessarily all of the Basel Convention centres , based on their comparative effectiveness and location , among other factors ; and creating new centres to address geographic or substantive gaps among existing regional and subregional centres . In examining potential arrangements , many factors needed to be taken into account , including : the comparative operational and economic efficiencies and synergies ; the consequences of co-locating centres for conventions with different memberships , mandates and implementation requirements and for which different government agencies are often responsible ; the experience of other multilateral environmental institutions with regard to the effective utilization of regional and subregional centres ; various mandates to increase synergies amongst multilateral environmental agreements and institutions ; relevant differences across regions and subregions with regard to implementing the Stockholm Convention ; the necessity and uncertainty of securing agreement with the Conference of the Parties to the Basel Convention and/or other multilateral environmental agreements ; and the various budgetary impacts . The Committee noted the potential value that a pilot initiative could have for determining the value of utilizing Basel Convention regional and subregional centres for facilitating the provision of technical assistance in accordance with article 12 of the Stockholm Convention . At the same time , important issues and concerns regarding the scope of the pilot initiative , the proper sequencing of the various studies , and the availability of extrabudgetary resources were recognized . In its deliberations on the capacity assistance network , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) . Introducing the item , the secretariat invited the Committee to consider the appropriateness of requesting the secretariat to begin preparatory work on the potential establishment of a capacity assistance network , as well as the possible timing and modalities for that work . Representatives noted the valuable role that some type of capacity assistance network could play to better facilitate and coordinate the provision of technical assistance to developing country Parties and Parties with economies in transition . Such a network might also serve to link , with respect to the provision of technical assistance , various entities created under the Convention , such as the national focal points , regional and subregional centres and secretariat . Many uncertainties remained , however , including : the relevant options for the precise goals , design , operation , management , timing and funding of such a network ; the ability of any proposed network to take full account of the specific needs and special situation of least developed countries and small island developing States with regard to technical assistance , as required in paragraph 5 of article 12 ; the overall relationship between a capacity assistance network and the provision of technical assistance under article 12 or the clearing-house mechanism established under article 9 ; its relationship with other institutional entities involved in the provision of financial and technical assistance or the exchange of information , such as GEF and IFCS- INFOCAP ; its relationship with the broad issue of technology transfer ; the proper role for regional and subregional centres ; and the involvement of the private and non-governmental sectors . The Committee then decided to establish an open-ended contact group co-chaired by Mr. Jozef Buys ( Belgium ) and Mr. Christopher Corbin ( Saint Lucia ) with a mandate to address the draft decisions relating to technical assistance prepared by the secretariat . The outcome of the deliberations as adopted by the Committee are decisions INC-6/8 , INC-6/9 , INC-6/10 and INC-6/11 contained in annex I to the present reportnote H. Financial resources and mechanisms ( Article 13 ) Interim financial mechanism ( Article 14 ) The Committee took up its consideration of the above items concurrently . Introducing these items , the secretariat drew the Committee 's attention to the documentation prepared on the subject ( see annex IX ) ) Representatives of the GEF secretariat then provided an overview of the structure and operation of GEF as well as details of the action taken by GEF since May 2001 in response to the resolutions of the Conference of Plenipotentiaries on the Stockholm Convention and the steps taken to facilitate early implementation of the Convention , particularly in relation to building capacity in eligible countries . Of particular note wereere the decision by the GEF Council in May 2002 to recommend to the GEF Assembly the creation of a new focal area for POPs and the progress made in facilitating simpler and more expeditious access to funding , including new approval procedures for project proposals under US$ 500,000 . To date , 64 countries representing all regions and levels of preparedness had already submitted proposals for national implementation plans funding to GEF and 45 proposals had already been approved under the expedited procedures . In addition , 12 countries were receiving GEF funding for their national implementation plans as part of the project - Development of National Implementation Plans for the Management of persistent organin organic pollutants - which was approved by the Council in May 2001 and which was being executed by UNEP Chemicals . In their presentations and in response to questions , the representatives of GEF outlined the formal relationships GEF had developed with the governing bodies of other conventions . They also outlined the proposed amendments to the GEF Charter that would reflect a new focal area for POPs as well as the status of GEF as the principal entity , on an interim basis , entrusted with the operation of the financial mechanism for the Stockholm Convention . Noting that GEF activity in the area of POPs was in its initial phase , they emphasized that GEF would respond to guidance from the Committee and , eventually , the Conference of the Parties , while continuously evolving its activities to suit the needs of the Stockholm Convention as far as possible . The Committee welcomed the efforts made by GEF to facilitate early implementation of the Convention , particularly the decision to recommend the creation of a new focal area for POPs , the proposed amendments to the GEF Charter , and the progress made in facilitating the application , approval and funding of projects to develop national implementation plans . The Committee noted the desirability of a memorandum of understanding between the Conference of the Parties and GEF to define the relationship between , and the respective responsibilities of , the two entities . To facilitate the development of the memorandum of understanding , the Committee noted that it would be advantageous to incorporate useful elements of similar agreements between GEF and other conventions , views of Governments regarding elements to be included , as well as the results of consultations between the secretariat and GEF , the secretariats of other conventions , and other bodies and experts regarding the experience gained in other conventions . Decision INC-6/12 on a draft memorandum of understanding with the Global Environment Facility , is contained in annex I to the present report . During the adoption of this decision , the Committee noted that the secretariat would compile any comments received from Governments , prior to its seventh session regarding the draft memorandum of understanding and make these available to the Committee at that session as an information document . The Committee acknowledged the need for the first Conference of the Parties to provide guidance to the financial mechanism , as required under paragraph 7 of article 13. It was recognized that such guidance would be most useful if it were geared toward substantive issues related to specific implementation requirements under the Convention , and that it would be open to revision or expansion by subsequent meetings of the Parties . To facilitate their further deliberation , the Committee requested the secretariat to solicit views from Governments regarding elements they believed should be included in such guidance and to develop a document for consideration at the next meeting of the Committee . Such a document should also include elements drawn from consultations , as appropriate , between the secretariat and GEF , the secretariats of other conventions , and other bodies and experts regarding the experience gained in other conventions . The Committee acknowledged the potential value of developing for consideration by the Conference of the Parties draft terms of reference for use in the review of the financial mechanism called for under paragraph 8 of article 13. It was noted that subparagraphs ( a ) through ( e ) of paragraph 7 of article 13 established much of the basis of such a review , although a number of other potential elements and processes were also discussed . With regard to the need to initiate preparations for a possible decision to be taken by the Conference of the Parties on the financial mechanism under article 14 , the Committee concluded that it was premature for it to discuss the issue at that time or for the secretariat to prepare any documentation for its next meeting . The secretariat then drew the Committee 's attention to a document on the possible collection of information from relevant funding institutions on the ways in which they could support the Stockholm Convention ( UNEP/POPS/INC.6/13 ) . The secretariat referred to resolutions of the Conference of Plenipotentiaries and , in particular , paragraph 5 of its resolution 2 , as the background to the paper . In this regard the Committee was invited to consider whether it wished to provide advice to the secretariat on the timing and the types of information to be collected , the process of doing so , and the type of funding institutions to contact . The Committee noted that gathering and synthesizing such information would be most useful but should be done in a judicious manner . It was also important not to limit the survey to intergovernmental organizations . Rather , the secretariat should gather information , as appropriate , from the full array of international , regional , national , private sector , non-governmental and private foundation-based funding institutions . On the basis of its deliberations , the Committee adopted decisions INC-6/13 , INC-6/14 and INC-6/15 , contained in annex I to the present report . J. Reporting ( Article 15 ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat said that the Committee might wish to consider the initiation stage or developing a process for format and timing of Party reporting obligations . The Committee noted that in preparing a reporting format effort should be placed on ensuring compatibility with provisions for reporting in other multilateral environmental agreements . The secretariat was encouraged to steer that format towards simplicity to facilitate efficient and effective reporting and to avoid making reporting an onerous burden to countries . In addition , a delineation should be made between reporting requirements that were mandatory and those that were not . The Committee requested the secretariat to prepare a paper on a possible format and timing for Party reporting obligations taking into account comments received from Governments as well as reporting obligations under other multilateral environmental agreements . The Committee also requested the secretariat to prepare a draft model format on reporting for consideration at its next session . Decision INC-6/16 , on format and timing of Party reporting is contained in annex I to the present report . Effectiveness evaluation ( Article 16 ) Introducing the item , the secretariat drew the Committee 's attention to the documentation prepared on the subject ( see annex IX ) ) as well as a written proposal submitted to the Committee during the meeting . The Committee welcomed the continuing efforts of UNEP Chemicals in two major assessment and monitoring related activities , the Regionally Based Assessment of Persistent Toxic Substances project , funded by GEF and the Global Network on the Monitoring of Persistent Organic Pollutants in the Environment . The Committee noted the importance of activities that provided high quality , comparable , long-term , national , regional and global monitoring data on the substances controlled under the Convention . To be most useful for the purposes of evaluating the effectiveness of the Convention , the acquisition and evaluation of monitoring data would need to follow particular sequencing and procedures . It was recognized that capacity to obtain , compare and utilize such data varied across countries and regions . There were also opportunity , cost and budgetary implications of the different approaches to this issue . Following its initial deliberations , the Committee established a drafting group to draft text for a possible draft decision on this item . Decision INC-6/17 on effectiveness evaluation is contained in annex I to the present report . L. Non-compliance ( Article 17 ) In its deliberations the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat invited the Committee to consider initiating the process of developing a procedure and institutional mechanism for determining non-compliance with the Stockholm Convention as well as elements to be included in that regime . All representatives were of the view that the documentation prepared by the secretariat was a useful basis on which to initiate work . It was noted that article 17 of the Stockholm Convention provided that the Conference of the Parties would develop and approve procedures and institutional mechanisms for determining non-compliance “ as soon as practicable ” . Some representatives stated that the Committee should focus efforts during the interim period on activities that would facilitate the implementation of the Convention and its speedy entry into force . As such it was considered premature to precipitate the process for developing and approving non-compliance procedures and institutional mechanisms that would most likely not be presented to the Conference of the Parties at its first meeting . Other representatives stated that a compliance mechanism should be established at the first meeting of the Conference of the Parties or shortly thereafter . They also noted that the resolution on interim arrangements adopted at the Conference of Plenipotentiaries in Stockholm to facilitate the rapid entry into force and effective implementation of the Convention provided for work on non-compliance by the Intergovernmental Negotiating Committee . It was stressed that an effective mechanism to examine non-compliance was essential and that when developing that regime emphasis should be placed on a non-confrontational , facilitative and flexible regime that would encourage and assist countries to achieve and maintain compliance rather than be punitive . Some representatives also emphasized the importance of appropriate measures for addressing non-compliance . It was also noted that reporting on non-compliance should not place an undue burden on Parties and that provisions for technical assistance , technology transfer , financial resources and capacity-building should be taken into account while ensuring the territorial integrity and sovereignty of countries . Some representatives also emphasized the importance of appropriate measures for addressing non-compliance . Some representatives requested the secretariat to prepare , based on written comments from Governments , a draft model for a compliance mechanism for consideration by the Intergovernmental Negotiating Committee at its seventh session , while others proposed that the secretariat , based on those comments prepare a synthesis . Other representatives wanted the secretariat to only compile the written comments received from Governments . As an initial step , Governments would submit comments and proposals in writing , and preferably in electronic format , to the secretariat based on the provisions of article 17 of the Convention , on the elements provided in the draft text submitted by the secretariat in document UNEP/POPS/INC.6/17 , or regarding any other relevant aspects or national concerns . Those comments were to reach the secretariat no later than 31 December 2002. The Committee requested the secretariat to prepare a full compilation of comments and proposals received from Governments for submission to the Committee at its seventh session . The secretariat would also provide a synthesis by issue of the comments and proposals to accompany that document . The Committee further requested the secretariat to prepare an analysis of non-compliance procedures included in other multilateral environmental agreements , taking into account pre-existing work on the subject , and to submit that analysis to the Committee at its seventh session . Decision INC-6/18 on non-compliance is contained in annex I to the present report . Settlement of disputes ( Article 18 ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat drew attention to the draft rules on arbitration and conciliation prepared by the secretariat . One representative , referring to articles 10 and 16 of the draft arbitration rules , noted that a precedent existed under the International Court of Justice to the effect that a decision of the court had not been binding on a third party intervening in a dispute . It was thus necessary to consider further whether the language of article 16 was appropriate to the Stockholm Convention . Another representative , referring to article 13 of the arbitration draft rules , considered that provision should be included for proper adequate notification of parties that did not appear before the tribunal , as well as guidance or warning concerning the consequences of continued non-appearance . The Committee agreed to forward the draft rules on arbitration and conciliation , as contained in the annex to the note by the secretariat on settlement of disputes ( UNEP/POPS/INC.6/18 ) , to the legal drafting group for consideration , taking into account the comments made in the plenary . Reporting back to plenary on the draft rules on conciliation , the Chair of the legal drafting group noted in particular one policy issue that had been flagged for consideration at the seventh session of the Committee which was that for budgetary reasons , the group had examined the possibility of reducing the number of members of the Conciliation Commission of the Stockholm Convention from five members , as is standard in most other conciliation commissions , to three members . The Chair of the legal drafting group further reported that the group had not had sufficient time to consider the draft rules on arbitration at the current session but that it would return to that item at the seventh session of the Committee . The draft rules on arbitration and conciliation as reviewed by the legal drafting group are contained in annex II to the present report . Conference of the Parties ( Article 19 ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) ( i ) Draft rules of procedure of the Conference of the Parties and its subsidiary bodies Introducing the item , the secretariat drew attention to the draft rules of procedure for the Conference of the Parties and its subsidiary bodies , as prepared by the secretariat and contained in the annex to document UNEP/POPS/INC.6/14 . It was explained that , while the rules of procedure of the Intergovernmental Negotiating Committee had been taken into account in the preparation work , they did not constitute a precedent for the rules of the Conference of the Parties . A number of representatives expressed appreciation for the work of the secretariat , which was considered to be a good basis for discussion . Others pointed out that they would be bringing specific concerns and proposals directly to the attention of the legal drafting group . In the course of the debate in plenary , proposals and comments addressed the following specific rules : Rule 6 ( Participation of United Nations , specialized agencies and non-Parties ) Rule 7 ( Participation of other bodies or agencies ) Several representatives proposed an amendment to the above rules to the effect that Parties are informed on the participation of observers in the meeting 60 days in advance of the meeting . That would allow developing countries , countries with economies in transition and non-governmental and other organizations to have time for adequate planning and coordination for their effective participation . Several other representatives drew attention to a potential policy issue of having to provide such notice to non-governmental organizations . Some representatives and expressed a reservation to the proposed amendment . The Committee requested the legal drafting group , in its consideration of the draft rules of procedure , to take fully into account the issues raised in the discussion on rules 6 and 7. Rule 46 ( Majority required ) A number of representatives highlighted the need for further consideration of the different kinds of procedures required for decisions under the Stockholm Convention , and the different options available for the question , particularly considering the types of solutions applied under other multilateral agreements . One representative expressed a reservation at the concept of a two-thirds majority . Another representative stressed the need for the procedure chosen to be obstacle-free and to facilitate decision-making . One other representative offered to make available a conference room paper containing an analysis of the types of decisions to be adopted by the Conference of the Parties . Attention was also drawn to the link between rule 46 and rule 60 ( Amendments to the rules of procedure ) . Another representative considered that the provision in paragraph 4 , by which a proposal would be rejected after a second inconclusive vote , needed to be amended to provide for more time and , perhaps , an alternative method . It was observed that it might be necessary to see whether any precedent for such a method existed . The Committee requested the legal drafting group , in its consideration of the draft rules of procedure , to take fully into account the issues raised in the discussion on rule 46. Rule 47 ( Order of voting on proposals ) One representative proposed deletion of the sentence “ The Conference of the Parties may , after each vote on a proposal , decide whether to vote on the next proposal ” . The Committee requested the legal drafting group , in its consideration of the draft rules of procedure , to take fully into account the issues raised in the discussion on rule 47. The chair of the legal drafting group reported that the group had examined the draft rules of procedure of the Conference of the Parties . The chair indicated that there were several items relevant to rules 6 ( Participation of United Nations , specialized agencies and non-Parties ) , 7 ( Participation of other bodies or agencies ) , 22 ( Election of officers ) , 31 ( Voting in subsidiary bodies ) , 46 ( Majority required ) , and 47 ( Order of voting on proposals ) and 60 ( Amendments to the rules of procedure ) that would require policy decisions by the Committee . Those items were identified either by footnotes or by square brackets in the draft text of the legal drafting group that is contained in annex III to the present report . With regard to paragraph 4 of rule 46 , the last line sentence of rule 47 and a question raised on rule 60 , the chair of the legal drafting group confirmed that those were standard rules that could be found in other multilateral environmental agreements . The draft rules of procedure of the Conference of the Parties and its subsidiary bodies as reviewed by the legal drafting group are contained in annex III to the present report . ( ii ) Draft financial rules for the Conference of the Parties , its subsidiary bodies and the Convention secretariat Introducing the item , the secretariat drew attention to the draft financial rules for the Conference of the Parties , its subsidiary bodies and the Convention secretariat , as prepared by the secretariat and contained in the appendix to document UNEP/POPS/INC.6/15 . It was noted that several paragraphs of the draft rules contained bracketed text , and that in some cases those would require further consideration . It was suggested that , following comments and proposals from the floor , the draft financial rules would be forwarded to the legal drafting group for examination , which would report to plenary on the results of its deliberations , bringing to its attention any areas where policy , rather than technical , matters required a decision . Several representatives expressed a reservation with regard to the reference in paragraph 12 ( a ) of the draft rules to the application of the indicative scale of assessments of the United Nations as a basis for the calculation of contributions to the Stockholm Convention . One representative pointed out that , in the General Assembly resolutions pertaining to the scale of assessments , it was noted that the scale of assessments and its adjustments did not automatically apply to specialized agencies and other intergovernmental organizations , and he called upon the secretariat to verify the General Assembly resolutions on application of the scale of assessments to members . One representative supported the current text in paragraph 12 ( a ) and requested the removal of the square brackets around the figures 0.001 , 22 and 0.01 . Attention was also drawn to the need to clarify how the member States ' contributions to the Stockholm Convention were to be calculated . Several representatives pointed to the need to assess the options and methods used by other conventions and multilateral agreements for calculating the distribution of contributions , and one of them asked the secretariat to prepare for the seventh session of the Committee a reference document compiling information on the subject . The secretariat agreed to collect additional information and make it available to the Committee . One representative drew attention to the link between paragraph 1 of rule 46 of the draft rules of procedure , concerning decision-making by the Conference of the parties , and paragraph 4 of the draft financial rules . The Committee requested the legal drafting group , in its consideration of the draft financial rules for the Conference of the Parties , its subsidiary bodies and the Convention secretariat , to take fully into account the issues raised in the discussion in plenary . The chair of the legal drafting group reported that the group had had a first reading of the draft financial rules for the Conference of the Parties , its subsidiary bodies and the Convention secretariat . Some issues had been noted for review at the seventh session of the Committee and these had been highlighted in square brackets . The chair of the legal drafting group wished to have the assistance of a financial officer in that group during its deliberations second reading of the rules in order to refer them to the Committee for consideration on the item at the its seventh session of the Committee The draft financial rules for the Conference of the Parties to the Stockholm Convention on Persistent Organic Pollutants , its subsidiary bodies and the Convention secretariat as reviewed by the legal drafting group are contained in annex IV to the present report . Issues relating to the Stockholm Convention not covered above No issues were raised under this agenda item . P. Other issues for consideration by the Conference of the Parties at its first meeting ( i ) Location of the secretariat ( Resolution 6 of the Conference of Plenipotentiaries ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat invited the Committee to consider document UNEP/POPS/INC.6/21 on the location of the secretariat , which in its appendix set out the categories of information to be provided by potential host countries in support of their tenders , in order to ensure some comparability of the offers made . The Committee was invited to also consider the question of a deadline for the submission of such information , in order to allow for its adequate compilation by the secretariat in time for consideration by the Committee at its seventh session . The representatives of Germany , Italy and Switzerland reaffirmed the offers made by their Governments to host the secretariat . The Committee discussed and amended the information contained in the appendix to UNEP/POPS/INC.6/21 and requested that candidate countries base their proposals to offer to host the secretariat on the information contained therein . The Committee agreed to invite interested countries to submit , by 30 November 2002 , the information called for in the appendix as amended by the Committee and contained in the appendix to decision INC-6/19 referred to below , for consideration by the Committee at its next session . Further to its deliberation , the Committee adopted decision INC-6/19 on consideration of offers to host the permanent secretariat of the Stockholm Convention , contained in annex I to the present report . ( ii ) Liability and redress ( Resolution 6 of the Conference of Plenipotentiaries ) In its deliberations , the Committee had before it the documentation on the subject prepared by the secretariat ( see annex IX ) ) Introducing the item , the secretariat invited the Committee to take note of the information submitted by countries and others on the subject of liability and redress , in response to the invitation by the Conference of Plenipotentiaries , which was compiled in an information paper prepared by the secretariat ( UNEP/POPS/INC.6/INF/5 ) . Attention was drawn to a workshop on liability and redress in the context of the Convention , to be hosted by the Government of Austria in Vienna from 19 to 21 September 2002. The report of the workshop would be considered by the Conference of the Parties at its first meeting with a view to deciding what further action should be taken . Several representatives said that further comments on the subject of liability and redress should be solicited from those that had not yet provided information . Several representatives expressed gratitude and appreciation to the Government of Austria for hosting the upcoming workshop on liability and redress , which was considered to be very useful in helping the Conference of the Parties to take a decision on that question . Some disappointment was voiced that there had not been an opportunity at the current meeting for an exchange of views on liability and redress , since it was considered that such a discussion could have provided guidance for the agenda of the workshop . One representative , recalling that experience in other multilateral agreements had shown that liability and redress regimes involved lengthy and detailed negotiations , considered that , without greater justification , such a regime should not be developed for the Stockholm Convention . He thus proposed that the Vienna workshop should focus on examining such justification , rather than on the details of a liability and redress mechanism . The Committee called upon those that had not already done so to provide their comments on liability and redress to the secretariat by 31 July 2002. The Committee also noted with gratitude Austria 's hosting of the workshop on liability and redress in Vienna in September 2002. The Group of Latin American and Caribbean Countries expressed their interest to host the first meeting of the Conference of the Parties of the Stockholm Convention at the opening of the sixth session of the Intergovernmental Negotiating Committee . A presentation was made by the representatives of Uruguay and Switzerland on preparations under way towards the possible holding of the first meeting of the Conference of the Parties in Uruguay . The Committee welcomed the news of those discussions . The secretariat drew attention to the list of those that had signed and/or ratified , acceded to , accepted or approved the Stockholm Convention as at 11 June 2002 , as contained in document UNEP/POPS/INC.6/INF/12 , pointing out that there had been no additions to that list to date . The secretariat referred also to the invitation of the Secretary-General of the United Nations to Governments , requesting those intending to sign or ratify multilateral agreements to endeavour to do so on the occasion of the World Summit on Sustainable Development , to be held in Johannesburg from 26 August to 4 September 2002. In order to assist countries to ratify or accede to the Convention , the Committee recommended that the secretariat , in consultation with the United Nations Treaty Section , prepare a checklist that would identify the general steps that a sovereign nation should complete before it deposits its instruments of ratification or accession to the United Nations . The representative of the United States informed the meeting that his Government would contribute $100,000 to support the convening of the first meeting of the expert group on BAT and BEP . The Committee agreed to review the process for reporting on its work early on in the agenda of the seventh session of the Intergovernmental Negotiating Committee . The Committee adopted its report on the basis of the draft report contained in documents UNEP/POPS/INC.6/L.1 and L.1/Add.1 which had been circulated during the meeting , as amended , and on the understanding that finalization of the report would be entrusted to the Rapporteur , working in conjunction with the secretariat . Following the customary exchange of courtesies , the Chair declared the session closed at 7.25 p. m. on Friday , 21 June 2002. Annex I ITS SIXTH SESSION , HELD IN GENEVA FROM 17 TO 21 JUNE 2002 Decision INC-6/1 : Amendment of rule 8 of the rules of procedure for the meetings of the Intergovernmental Negotiating Committee The Intergovernmental Negotiating Committee Decides by consensus , in accordance with rule 56 of the rules of procedure for its meetings , to amend rule 8 of the rules of procedure in order to increase the membership of the Bureau of the Committee to ten members ; Decides that the amended rule 8 shall read as follows : “ 1. The Committee shall elect from among the representatives of the State Parties a Bureau composed of one Chair and nine Vice-Chairs , one of whom shall act as Rapporteur . In electing the officers , the Committee shall have due regard to the principle of equitable geographical representation . Each of the five regional groups shall be represented by two members . ” Decision INC-6/2 : DDT The Intergovernmental Negotiating Committee Requests the secretariat , in cooperation with the World Health Organization , to prepare a report on a possible format for reporting by Parties that use DDT on amounts used , conditions of such use and its relevance in disease management strategies as required under paragraph 4 of part II of annex B to the Stockholm Convention on Persistent Organic Pollutants ; Further requests the secretariat , in cooperation with the World Health Organization , to develop a report on guidance and information needed to assist the Conference of the Parties in evaluating the continued need for DDT for disease vector control as required under paragraph 6 of part II of annex B ; Invites the World Health Organization to actively participate in the development of the above reports ; Requests the secretariat to provide the above reports to the Intergovernmental Negotiating Committee for further consideration at its seventh session . Decision INC-6/3 : Register of specific exemptions ( Articles 3 and 4 and annexes A and B ) The Intergovernmental Negotiating Committee Requests the secretariat to prepare a report on : ( a ) A possible format for country reporting of requests for specific exemptions ; ( b ) A possible process , including alternative approaches , that might be considered by the Conference of the Parties in deciding upon the review process for the entries in the Register called for in paragraph 5 of article 4 of the Stockholm Convention on Persistent Organic Pollutants ; ( c ) A possible format for a Register of specific exemptions ; The secretariat report shall be based upon input from countries and the meeting documents UNEP/POPS/INC.6/4 and UNEP/POPS/INC.6/INF/6 ; Invites Governments to provide the secretariat with their views on a possible reporting format , process and format for the Register before 31 October 2002 ; Further requests the secretariat to submit the report to the Intergovernmental Negotiating Committee for further consideration at its seventh session . Decision INC-6/4 : Evaluation of current and projected releases of chemicals listed in annex C The Intergovernmental Negotiating Committee Notes that the “ Standardized Toolkit for Identification and Quantification of Dioxin and Furan Releases ” ( Toolkit ) of the United Nations Environment Programme provides a basis for the development of provisional guidance on the evaluation of current and projected releases of chemicals listed in annex C of the Stockholm Convention on Persistent Organic Pollutants ; Notes further that it may be appropriate to update the Toolkit and to include additional chemicals , emissions factors , levels of detail and other elements to enhance its usefulness ; Invites Governments and others to provide the secretariat with comments on how the Toolkit can be updated and expanded before 31 December 2002 ; Requests the secretariat to develop an updated and expanded version of the Toolkit , taking into consideration the comments received as well as experience in field-testing the Toolkit in countries , for consideration by the Intergovernmental Negotiating Committee at its next session . Decision INC-6/5 : Measures to reduce or eliminate releases from stockpiles and wastes : development of of technical guidelines on the environmentally sound management of persistent organic pollutant wastes The Intergovernmental Negotiating Committee Welcomes progress made by the Technical Working Group of the Basel Convention on the Control of Transboundary Movements of Hazardous Wastes and their Disposal in developing technical guidelines on the environmentally sound management of persistent organic pollutant wastes , and affirms the high priority attached by the Intergovernmental Negotiating Committee to the guidelines , particularly as they relate to the issues outlined in paragraph 2 of article 6 of the Stockholm Convention on Persistent Organic Pollutants ; Welcomes the cooperation to date between the secretariat of the Stockholm Convention and the secretariat of the Basel Convention ; Encourages continuing and strengthened collaboration between the secretariat of the Stockholm Convention and the secretariat of the Basel Convention related to activities of mutual interest to the two Conventions , in particular capacity-building ; Encourages countries to ensure close coordination at the national level between authorities responsible for the Stockholm Convention and those responsible for the Basel Convention ; Invites the Conference of the Parties to the Basel Convention to consider inviting members of the Intergovernmental Negotiating Committee to participate in partnership in activities under the Basel Convention relating to persistent organic pollutants ; Requests the secretariat to prepare a report for the Conference of the Parties to the Stockholm Convention on such guidelines relating to persistent organic pollutants as may be adopted by the Conference of the Parties to the Basel Convention , including an analysis of implications of those guidelines for the Stockholm Convention and an indication of elements that might be considered suitable for adoption under paragraph 2 of article 6 of the Stockholm Convention . Decision INC-6/6 : Development of interim guidance to assist countries in the preparation of national implementation plans and guidance for reviewing and updating national implementation plans The Intergovernmental Negotiating Committee Recalling the need for each Party to develop and endeavour to implement a plan for the implementation of its obligations under the Stockholm Convention on Persistent Organic Pollutants , Noting the guidance document prepared by the United Nations Environment Programme and the World Bank with the support of the Government of Denmark for the pilot project to support 12 countries in the preparation of their national implementation plans , Further noting guidelines prepared by the Global Environment Facility for enabling activities , Invites Governments to provide their comments on the full document referred to in UNEP/POPS/INC.6/INF/8 and other views on guidance for the preparation of national implementation plans to the secretariat by 31 October 2002 ; Requests the secretariat to : ( a ) Prepare , based on those comments and relevant existing guidance material , interim guidance to assist countries to develop their national implementation plans , taking into account the different situations , needs and experiences of countries ; ( b ) Submit a draft interim guidance document for consideration by the Intergovernmental Negotiating Committee at its seventh session ; ( c ) Prepare guidance relevant to the review and updating of national implementation plans for consideration by the Intergovernmental Negotiating Committee at its seventh session . Decision INC-6/7 : Clearing-house mechanism for information exchange on persistent organic pollutants The Intergovernmental Negotiating Committee Recognizing the importance of having a clearing-house mechanism for information exchange on persistent organic pollutants that would assist countries in the implementation of the Stockholm Convention on Persistent Organic Pollutants , Invites Governments to submit , by 31 October 2002 , questions and comments related to the design , development , operation and scope of a clearing-house mechanism for information exchange on persistent organic pollutants ; Requests the secretariat to prepare , taking into account those submissions , a detailed work plan and budget on the initiation and maintenance of such a clearing-house mechanism for consideration by the Intergovernmental Negotiating Committee at its seventh session . Decision INC-6/8 : Guidance on technical assistance The Intergovernmental Negotiating Committee Decides to initiate a process for developing the guidance on the provision of technical assistance called for in paragraphs 3 and 4 of article 12 of the Stockholm Convention on Persistent Organic Pollutants and all possible arrangements for providing technical assistance for consideration by the Conference of the Parties at its first meeting ; Invites Governments to provide the secretariat , by 31 October 2002 , with the following , relating to implementation of the obligations under the Stockholm Convention : For developed countries and other countries in accordance with their capabilities , views and information on priorities and arrangements for their provision of technical assistance to developing countries and countries with economies in transition ; For developing countries and countries with economies in transition , views and information on priorities and arrangements regarding technical assistance from developed countries and other countries in accordance with their capabilities ; Requests the secretariat to prepare a report on priorities and arrangements for technical assistance , to be based on : The views and information received from countries ; The relevant experience gained from the development of the implementation plans under article 7 ; Information gathered and proposals developed throughout the negotiating process that relate to technical assistance ; Information gathered from regional and subregional consultative workshops ; Further requests the secretariat to submit the report to the Intergovernmental Negotiating Committee for its consideration at its seventh session . Decision INC-6/9 : Feasibility study on regional and subregional centres The Intergovernmental Negotiating Committee Requests the secretariat to undertake , in consultation with the secretariat of the Basel Convention on the Control of Transboundary Movements of Hazardous Wastes and their Disposal , as appropriate , a feasibility study on regional and subregional centres for capacity-building and transfer of technology . The study shall include : ( a ) An identification of the needs of countries in the area of capacity-building and transfer of technology that might be facilitated by regional and subregional centres ; ( b ) An assessment of the capacity of all relevant regional and subregional centres , in particular , but not limited to Basel Convention regional centres , to facilitates capacity-building and transfer of technology . Such an assessment shall include , but not be limited to , a review of mandates , functions , performance , institutional arrangements and the needs identified in paragraph 1 ( a ) above ; ( c ) An assessment of the gaps and limitations of existing arrangements , including the availability of technology to be transferred , and the means to address these constraints ; ( d ) A review of the experiences gained by other international agreements in capacity-building and transfer of technology ; ( e ) An identification and analysis of the potential synergies between the Stockholm Convention on Persistent Organic Pollutants and other multilateral environmental agreements regarding the provision of capacity-building and transfer of technology ; Further requests the secretariat to communicate terms of reference for the feasibility study to Governments for comments prior to its commencement , and to present the intermediate or final report of the study to the Intergovernmental Negotiating Committee at its seventh session . The final report should be presented no later than 31 December 2003 , unless otherwise decided by the Intergovernmental Negotiating Committee at its seventh session . Decision INC-6/10 : Case studies on regional and subregional centres The Intergovernmental Negotiating Committee Requests the secretariat to develop and conduct , in cooperation with the secretariat of the Basel Convention on the Control of Transboundary Movements of Hazardous Wastes and their Disposal and the Basel Convention regional centres , as appropriate , one or more case studies of regional and subregional centres for the purpose of facilitating capacity-building and transfer of technology in accordance with article 12 of the Stockholm Convention on Persistent Organic Pollutants and with a view to contributing to the feasibility study provided for in decision INC-6/ on the feasibility study on regional and subregional centres ; Invites Governments , intergovernmental organizations , non-governmental organizations , the private sector and international financial institutions to provide information to the secretariat on how they might contribute to the case studies . Such information should be submitted to the secretariat by 31 October 2002 ; Requests the secretariat to report to the Intergovernmental Negotiating Committee at its seventh session on progress made in implementing the case studies ; Agrees that implementation of the case studies should be subject to the availability of extrabudgetary resources , and invites developed countries and other countries in accordance with their capabilities , intergovernmental organizations , non-governmental organizations , the private sector and international financial institutions who are in a position to do so , to contribute resources . Decision INC-6/11 : Capacity assistance network The Intergovernmental Negotiating Committee Invites intergovernmental organizations , non-governmental organizations , the private sector and international financial institutions to provide the secretariat with information on how they might contribute to facilitating and coordinating access to financial and technical assistance . Such information should be submitted to the secretariat by 31 October 2002 ; Requests the secretariat , based on the views and information gathered by the secretariat in pursuance of paragraph 1 above and decision INC-6/ on guidance on technical assistance , to include in the feasibility study referred to in decision INC-6/ on the feasibility study on regional and subregional centerscentres , arrangements for developing possible modalities for a capacity assistance network as agreed upon in resolution 3 , paragraph 2 of the Conference of Plenipotentiaries and taking into consideration the work done in document UNEP/POPS/INC.6/19 . Decision INC-6/12 : Draft memorandum of understanding with the Global Environment Facility The Intergovernmental Negotiating Committee Recognizing the designation of the Global Environment Facility as the principal entity entrusted , on an interim basis , with the operation of the financial mechanism for the Stockholm Convention on Persistent Organic Pollutants , Decides to initiate a process for developing a draft memorandum of understanding between the Conference of the Parties to the Stockholm Convention and the Global Environment Facility ; Requests the secretariat to submit to the Intergovernmental Negotiating Committee at its seventh session a review of similar agreements between the Global Environment Facility and the governing bodies of other multilateral environmental agreements , including the relevant experience gained from the use of these agreements between the Global Environment Facility and the governing bodies of other multilateral environmental agreements ; Further requests the secretariat , in consultation with the secretariat of the Global Environment Facility , to prepare a draft memorandum of understanding for consideration by the Intergovernmental Negotiating Committee at its seventh session and to make available to the Committee at that session any comments thereon by Governments . Decision INC-6/13 : Guidance to the financial mechanism The Intergovernmental Negotiating Committee Decides to initiate a process for developing , for consideration by Conference of the Parties , draft guidance to the financial mechanism , as required under paragraph 7 of article 13 of the Stockholm Convention on Persistent Organic Pollutants ; Draws the attention of Governments to the elements contained in subparagraphs ( a ) through ( e ) of paragraph 7 of article 13 ; Invites Governments to provide to the secretariat by 30 November 2002 their views on elements that might be included in such guidance ; Requests the secretariat to submit a report on possible elements of such guidance to the Intergovernmental Negotiating Committee for its further consideration at its seventh session . The report is to comprise : A compilation of the views received from countries ; A synthesis of the views received from countries ; A review of the relevant experience gained from the provision of guidance given to the Global Environment Facility by the governing bodies of other multilateral environmental agreements . Decision INC-6/14 : Draft terms of reference for the review of the financial mechanism under paragraph 8 of article 13 The Intergovernmental Negotiating Committee Decides to initiate a process for developing draft terms of reference for consideration by the Conference of the Parties for use in the review of the financial mechanism called for under paragraph 8 of article 13 of the Stockholm Convention on Persistent Organic Pollutants ; Requests the secretariat to submit elements of such draft terms of reference to the Intergovernmental Negotiating Committee for its further consideration at its seventh session . In developing the draft terms of reference , the secretariat should : ( a ) Use paragraphs 7 and 8 of article 13 of the Stockholm Convention on Persistent Organic Pollutants as the primary basis for the draft terms of reference ; ( b ) Seek the input of relevant experts regarding potential options for conducting such reviews , as appropriate . Decision INC-6/15 : Collection of information from relevant funding institutions on the ways in which they can support the Stockholm Convention on Persistent Organic Pollutants The Intergovernmental Negotiating Committee Takes note of paragraphs 5 and 6 of resolution 2 , on interim financial arrangements adopted by the Conference of Plenipotentiaries on the Stockholm Convention on Persistent Organic Pollutants , held in Stockholm , Sweden , from 22 to 23 May 2001 ; Invites Governments to provide the secretariat with relevant information on ways in which their funding institutions may support the objectives of the Convention ; Invites intergovernmental organizations , non-governmental organizations and other observers , as appropriate , to provide the secretariat with relevant information on ways in which they can support the objectives of the Convention ; Requests the secretariat to begin collecting information from relevant funding institutions on the ways in which they can support the Convention , and to submit a preliminary draft report of the information received to the Intergovernmental Negotiating Committee for consideration at its next session . Draft decision INC-6/16 : Format and timing of Party reporting The Intergovernmental Negotiating Committee Invites Governments to provide the secretariat , by 30 November 2002 , with comments on timing and format of Party reporting under the Stockholm Convention on Persistent Organic Pollutants ; Requests the secretariat , taking into account the submissions received , to prepare : ( a ) A draft model format on reporting for consideration by the Intergovernmental Negotiating Committee at its seventh session ; ( b ) A report that reviews obligations , processes and formats for reporting under other multilateral environment agreements and the reporting obligations under the Stockholm Convention for consideration by the Committee at its seventh meeting , and for possible consideration by the Conference of the Parties at its first meeting following any further work on the report by the Committee . Decision INC-6/17 : Effectiveness evaluation The Intergovernmental Negotiating Committee Requests the secretariat to begin to address the environmental monitoring and evaluation needs as described in article 16 of the Stockholm Convention on Persistent Organic Pollutants for chemicals included in annexes A , B , and C of the Convention and in doing so to : Develop guidance on the nature of the effectiveness evaluation ; Identify the basic data needed to support the effectiveness evaluation ; Assess the capacity of existing monitoring programmes to make available necessary monitoring data and then begin making arrangements for the provision of comparable monitoring data for the effectiveness evaluation . This can be assisted by continuing the work initiated by UNEP Chemicals for the substances listed in annexes A , B , and C ; Identify where suitable monitoring data are not available ; Compile guidance for the collection of data and , subject to the availability of additional external funding , test the guidance by developing a pilot project in one or more regions ; Facilitate arrangements to obtain appropriate monitoring information on annexes A , B , and C substances for regions where such information would not otherwise be available , taking into consideration that cost effectiveness in other regional evaluations has been achieved by using a tiered approach ( e. g. one which centralizes the most advanced laboratory capacity at regional nodes ) ; Report on progress to the Intergovernmental Negotiating Committee at its seventh session . Decision INC-6/18 : Non-compliance The Intergovernmental Negotiating Committee Invites Governments and the secretariats of multilateral environmental agreements to provide the secretariat with their views on non-compliance addressed in article 17 of the Stockholm Convention on Persistent Organic Pollutants by 31 December 2002 ; Requests the secretariat to prepare and submit to the Intergovernmental Negotiating Committee at its seventh session : ( a ) A report that provides a compilation of views submitted pursuant to paragraph 1 and a synthesis of those views ; ( b ) A report on the existing non-compliance regimes under multilateral environmental agreements , taking into account a study on the subject prepared for the Intergovernmental Negotiating Committee for an International Legally Binding Instrument for the Application of the Prior Informed Consent Procedure for Certain Hazardous Chemicals and Pesticides in International Trade , in connection with the Rotterdam Convention . Decision INC-6/19 : Consideration of offers to host the permanent secretariat of the Stockholm Convention on Persistent Organic Pollutants The Intergovernmental Negotiating Committee Invites interested countries to provide to the secretariat , by 30 November 2002 , detailed information on the conditions and advantages attached to their offers to host the permanent secretariat of the Stockholm Convention on Persistent Organic Pollutants , with special focus on the items listed in the appendix to the present decision ; Requests the secretariat to compile the offers received and submit them to the Committee for consideration at its seventh session . Appendix to decision INC-6/19 Legal framework Privileges and immunities that would be conferred on the permanent secretariat and its staff members , as well as government representatives and other persons engaged in official business of the Convention . Legal framework for ensuring equal treatment of premises and staff of the United Nations and its specialized agencies . Rules , including any restrictions , applicable to the employment of dependants of staff members . Nature of the headquarters agreement ( e. g. , stand-alone agreement , incorporated into another existing agreement , etc. ) . Features of the office site and related financial issues Main features of the building to house the permanent secretariat , including office space and scope for its expansion , facilities for conferences and availability of general services ( security , maintenance , etc ) . Basis for placing the office facilities at the disposal of the permanent secretariat , such as : ( a ) Ownership by the permanent secretariat ( through donation or purchase ) ; ( b ) Ownership by the host Government without rent ; ( c ) Host Government ownership with rent , and amount of such rent . Responsibility for : ( a ) Major maintenance and repairs to the office facilities ; ( b ) Normal maintenance and repair ; ( c ) Utilities , including communication facilities . The extent to which the office facilities would be furnished and equipped by the host Government . Duration of the arrangements regarding office space . Local facilities and conditions Description of the following facilities and conditions : ( a ) Diplomatic representation in the host city ; ( b ) Presence of international organizations ; Determinants of synergies of chemicals-related multilateral environmental agreements and agencies in the proposed location ; Availability of international conference facilities and the conditions for their use ( free of charge , rental , etc. ) ; Access to qualified conference servicing staff , e. g. , interpreters , translators , editors and meeting coordinators familiar with United Nations conferences and practices ; International transport facilities ; Local transport facilities and their proximity to the office facilities at the disposal of the permanent secretariat ; Local availability of trained personnel for possible employment in the permanent secretariat , taking account of language and other skills ; Health facilities and access to them by staff members of the permanent secretariat ; Availability of suitable housing , including information on housing prices and vacancy rate and the proximity of this housing to the office facilities at the disposal of the permanent secretariat ; Availability of schools at all levels , including those providing classes in languages other than the local language ; Facilities for the transfer of funds to and from foreign countries for the permanent secretariat and its staff members ; The time needed for processing entry requirements and ability to ensure that participants in meetings organized by the permanent secretariat in the territory of the host Government are granted visa entry permits , where necessary , in expeditious manner . Other relevant information Any additional contributions to be made by the host Government to meet the operating costs of the permanent secretariat or to defray conference-servicing expenses . These contributions must be divided into contributions that : Are not earmarked ( i. e. are provided to the secretariat without any restricitions placed on their expenditure by the host country ) ; Are earmarked for certain purposes , together with an explanation of the nature of the restrictions . Information on potential synergies from cooperation and coordination with other international chemical management organizations in proposed locations . Any other information that the potential host country may deem relevant . Annex II The arbitration procedure for purposes of paragraph 2 ( a ) of aArticle 18 of the Stockholm Convention on Persistent Organic Pollutants shall be as follows . Article A Party may initiate recourse to arbitration in accordance with aArticle 18 of the Convention by written notification addressed to the other party to the dispute . The notification shall be accompanied by a statement of the claim , together with any supporting documents , and state the subject-matter of arbitration and include , in particular , the articles of the Convention , the interpretation or application of which are at issue . The claimant party shall notify the sSecretariat that the parties are referring a dispute to arbitration pursuant to aArticle 18. The notification shall be accompanied by the written notification of the claimant party , the statement of claim and the supporting documents referred to in paragraph 1 above . The sSecretariat shall forward the information thus received to all Parties . Article In disputes between two parties , an arbitral tribunal shall be established . It shall consist of three members . Each of the parties to the dispute shall appoint an arbitrator and the two arbitrators so appointed shall designate by common agreement the third arbitrator who shall be the President of the tribunal . The President of the tribunal shall not be a national of one of the parties to the dispute , nor have his or her usual place of residence in the territory of one of these parties , nor be employed by any of them , nor have dealt with the case in any other capacity . In disputes between more than two parties , parties in the same interest shall appoint one arbitrator jointly by agreement . Any vacancy shall be filled in the manner prescribed for the initial appointment . If the parties do not agree on the subject-matter of the dispute before the President of the arbitral tribunal is designated , the arbitral tribunal shall determine the subject-matter . Article If one of the parties to the dispute does not appoint an arbitrator within two months of the date on which the respondent party receives the notification of the arbitration , the other party may inform the Secretary-General of the United Nations who shall make the designation within a further two-month period . If the President of the arbitral tribunal has not been designated within two months of the date of the appointment of the second arbitrator , the Secretary-General of the United Nations shall , at the request of a party , designate the President within a further two-month period . Article The arbitral tribunal shall render its decisions in accordance with the provisions of the Convention and international law . Article Unless the parties to the dispute otherwise agree , the arbitral tribunal shall determine its own rules of procedure . Article The arbitral tribunal may , at the request of one of the parties , recommend essential interim measures of protection . Article The parties to the dispute shall facilitate the work of the arbitral tribunal and , in particular , using all means at their disposal , shall : ( a ) Provide it with all relevant documents , information and facilities ; and ( b ) Enable it , when necessary , to call witnesses or experts and receive their evidence . Article The parties and the arbitrators are under an obligation to protect the confidentiality of any information they receive in confidence during the proceedings of the arbitral tribunal . Article Unless the arbitral tribunal determines otherwise because of the particular circumstances of the case , the costs of the tribunal shall be borne by the parties to the dispute in equal shares . The tribunal shall keep a record of all its costs , and shall furnish a final statement thereof to the parties . Article A Party that has an interest of a legal nature in the subject-matter of the dispute which may be affected by the decision in the case , may intervene in the proceedings with the consent of the tribunal . Article The tribunal may hear and determine counterclaims arising directly out of the subject-matter of the dispute . Article Decisions both on procedure and substance of the arbitral tribunal shall be taken by a majority vote of its members . Article If one of the parties to the dispute does not appear before the arbitral tribunal or fails to defend its case , the other party may request the tribunal to continue the proceedings and to make its award . Absence of a party or a failure of a party to defend its case shall not constitute a bar to the proceedings . Before rendering its final decision , the arbitral tribunal must satisfy itself that the claim is well founded in fact and law . Article The tribunal shall render its final decision within five months of the date on which it is fully constituted unless it finds it necessary to extend the time-limit for a period which should not exceed five more months . Article The final decision of the arbitral tribunal shall be confined to the subject-matter of the dispute and shall state the reasons on which it is based . It shall contain the names of the members who have participated and the date of the final decision . Any member of the tribunal may attach a separate or dissenting opinion to the final decision . Article The award shall be binding on the parties to the dispute . It shall also be binding upon a Party intervening under aArticle 10 above insofar as it relates to matters in respect of which that Party intervened . It shall be without appeal unless the parties to the dispute have agreed in advance to an appellate procedure . Article Any controversy which may arise between those bound by the final decision in accordance with aArticle 16 above , as regards the interpretation or manner of implementation of that decision , may be submitted by any of them for decision to the arbitral tribunal which rendered it . The conciliation procedure for purposes of paragraph 6 of article 18 of the Stockholm Convention on Persistent Organic Pollutants shall be as follows . Article 1 A request by a party to a dispute to establish a conciliation commission in consequence of paragraph 6 of article 18 shall be addressed in writing to the secretariat . The secretariat shall forthwith inform all Parties to the Convention accordingly . The cConciliation cCommission shall , unless the parties otherwise agree , be composed of [ five][three ] members , [ two][one ] appointed by each party concerned and a President chosen jointly by those members . Article 2 In disputes between more than two parties , parties in the same interest shall appoint their members of the cCommission jointly by agreement . Article 3 If any appointments by the parties are not made within two months of the date of receipt by the secretariat of the written request referred to in article 1 , the Secretary-General of the United Nations shall , upon request by a party , make those appointments within a further two-month period . Article 4 If the President of the cConciliation cCommission has not been chosen within two months of the fourth member of the cCommission being appointed , the Secretary-General of the United Nations shall , upon request by a party , designate the President within a further two-month period . Article 5 The cConciliation cCommission shall , unless the parties to the dispute otherwise agree , determine its own rules of procedure . The parties and members of the cCommission have are under an obligation to protect the confidentiality of any information they receive in confidence during the proceedings of the commission . Article 6 The cConciliation cCommission shall take its decisions by a majority vote of its members . Article 7 The cConciliation cCommission shall render a report with recommendations for resolution of the dispute within twelve months of being established , which the parties shall consider in good faith . Article 8 Any disagreement as to whether the cConciliation cCommission has competence to consider a matter referred to it shall be decided by the cCommission . Article 9 The costs of the cCommission shall be borne by the parties to the dispute in shares agreed by them . The cCommission shall keep the record of all its costs and shall furnish a final statement thereof to the parties . Annex III Scope Rule 1 The present rules of procedure shall apply to any meeting of the Conference of the Parties to the Convention convened in accordance with article 19 of the Convention . Definitions Rule 2 For the purposes of the present rules : ( a ) " Convention " means the Stockholm Convention on Persistent Organic Pollutants , adopted at Stockholm , on 22 May 2001 ; ( b ) " Party " means a Party as defined in article 2 ( a ) of the Convention ; ( c ) " Conference of the Parties " means the Conference of the Parties established by article 19 of the Convention ; ( d ) " Meeting " means any ordinary or extraordinary meeting of the Conference of the Parties convened in accordance with article 19 of the Convention ; ( e ) " Regional economic integration organization " means an organization as defined in article 2 ( b ) of the Convention ; ( f ) " President " means the President of the Conference of the Parties elected in accordance with rule 22 , paragraph 1 ; ( g ) " Secretariat " means the secretariat established by article 20 , paragraph 1 of the Convention . ( h ) " Subsidiary body " means the body established pursuant to article 19 , paragraph 6 of the Convention , as well as any body established pursuant to article 19 , paragraph 5 ( a ) of the Convention . ( i ) " Parties present and voting " means Parties present at the meeting in which voting takes place and casting an affirmative or negative vote . Parties abstaining from voting shall be considered as not voting . Place of meetings Rule 3 The meetings of the Conference of the Parties shall take place at the seat of the secretariat , unless the Conference of the Parties decides otherwise or other appropriate arrangements are made by the secretariat in consultation with the Parties . Dates of meetings Rule 4 Unless otherwise decided by the Conference of the Parties , the second and third ordinary meetings of the Conference of the Parties shall be held yearly and , thereafter , ordinary meetings shall be held every two years . At each ordinary meeting , the Conference of the Parties shall decide on the date and duration of the next ordinary meeting . The Conference of the Parties should endeavour not to hold such meetings at a time that would make the attendance of a significant number of delegations difficult . Extraordinary meetings of the Conference of the Parties shall be held at such times as may be decided either by the Conference of the Parties at an ordinary meeting or at the written request of any Party , provided that , within ninety days of the request being communicated to the Parties by the secretariat , it is supported by at least one third of the Parties . In the case of an extraordinary meeting held at the written request of a Party , it shall be held not more than ninety days after the date on which the request is supported by at least one third of the Parties in accordance with paragraph 3. Notification of meetings Rule 5 The secretariat shall notify all Parties of the dates and venue of ordinary and extraordinary meetings at least sixty days before the meeting in question is due to commence . Participation of United Nations , specialized agencies and non-Parties Rule 6 The United Nations , its specialized agencies , the International Atomic Energy Agency , as well as any State not Party to the Convention , as well as entities operating the mechanism referred to in paragraph 6 of article 13 of the Convention , may be represented at meetings as observers . [ At least 30 days before the meeting the secretariat shall notify the Parties of those who have indicated they will be so represented . ] Such observers may , upon invitation of the President , participate in the proceedings of any meeting without the right to vote , unless at least one third of the Parties present at the meeting object . Participation of other bodies or agencies Rule 7 Any body or agency , whether national or international , governmental or non-governmental , which is qualified in matters covered by the Convention and which has informed the secretariat of its wish to be represented at a meeting as an observer may be so admitted . [ At least 30 days before the meeting the secretariat shall notify the Parties of those who have indicated they will be so represented . Those bodies or agencies should be entitled as observers unless at least one third of the parties present at the meeting object . ] Such observers may , upon invitation of the President , participate without the right to vote in the proceedings of any meeting in matters of direct concern to the body or agency they represent , unless at least one third of the Parties present at the meeting object . Notification by secretariat Rule 8 The secretariat shall notify those entitled to be observers and those which have informed the secretariat of their wish to be represented , pursuant to rules 6 and 7 , of the dates and venue of the next meeting . Preparation of provisional agenda Rule 9 In agreement with the President , the secretariat shall prepare the provisional agenda for each meeting . Items on provisional agenda for ordinary meeting Rule 10 The provisional agenda for each ordinary meeting shall include , as appropriate : Items arising from the articles of the Convention , including those specified in its article 19 ; Items the inclusion of which has been decided at a previous meeting ; Items referred to in rule 16 ; The proposed budget as well as all questions pertaining to the accounts and financial arrangements ; Any item proposed by a Party and received by the secretariat before the provisional agenda is circulated . Distribution of provisional agenda Rule 11 For each ordinary meeting , the provisional agenda , together with supporting documents , shall be distributed in the official languages by the secretariat to the Parties at least six weeks before the opening of the meeting . Supplementary items Rule 12 The secretariat shall , in agreement with the President , include any item that is proposed by a Party and has been received by the secretariat after the provisional agenda for an ordinary meeting has been produced , but before the opening of the meeting , in a supplementary provisional agenda . Addition , deletion , deferment or amendment of items Rule 13 When adopting the agenda for an ordinary meeting , the Conference of the Parties may decide to add , delete , defer or amend items . Only items that are considered by the Conference of the Parties to be urgent and important may be added to the agenda . Agenda for extraordinary meeting Rule 14 The agenda for an extraordinary meeting shall consist only of those items proposed for consideration by the Conference of the Parties at an ordinary meeting or in the request for the holding of the extraordinary meeting . It shall be distributed to the Parties at the same time as the notification of the extraordinary meeting . Report on administrative and budgetary implications Rule 15 The secretariat shall report to the Conference of the Parties on the administrative and budgetary implications of all substantive agenda items submitted to the meeting , before they are considered by it . Unless the Conference of the Parties decides otherwise , no such substantive agenda item shall be considered until at least forty-eight hours after the Conference of the Parties has received a report of the secretariat on its administrative and budgetary implications . Incomplete consideration of item Rule 16 Any item of the agenda of an ordinary meeting , consideration of which has not been completed at the meeting , shall be included automatically in the provisional agenda of the next ordinary meeting , unless otherwise decided by the Conference of the Parties . Composition of delegation Rule 17 Each Party participating in a meeting shall be represented by a delegation consisting of a head of delegation and such other accredited representatives , alternate representatives and advisers as it may require . Alternates and advisers Rule 18 An alternate representative or an adviser may act as a representative upon designation by the head of delegation . Submission of credentials Rule 19 The credentials of representatives as well as the names of alternate representatives and advisers shall be submitted to the secretariat if possible not later than twenty-four hours after the opening of the meeting . Any later change in the composition of the delegation shall also be submitted to the secretariat . The credentials shall be issued either by the Head of State or Government or by the Minister of Foreign Affairs or , in the case of a regional economic integration organization , by the competent authority of that organization . Examination of credentials Rule 20 The Bureau of any meeting shall examine the credentials and submit its report to the Conference of the Parties . Provisional participation Rule 21 Representatives shall be entitled to participate provisionally in the meeting , pending a decision by the Conference of the Parties to accept their credentials . Election of officers Rule 22 At the first ordinary meeting of the Conference of the Parties , a President and [ nine][four ] Vice-Presidents , one of whom shall act as Rapporteur , shall be elected from among the representatives of the Parties present at the meeting . These officers shall serve as the Bureau of the Conference of the Parties . Each of the five United Nations regional groups shall be represented by [ one ] [ two ] Bureau member[s ] . The Bureau shall remain in office until the closure of the second ordinary meeting of the Conference of the Parties , including for any intervening extraordinary meeting . At the second and subsequent ordinary meetings of the Conference of the Parties , the election of officers from among the Parties to serve as the Bureau for the following meeting of the Conference of the Parties shall take place before the end of the meeting . These officers shall commence their term of office at the closure of the meeting and shall serve until the closure of the following ordinary meeting of the Conference of the Parties , including for any intervening extraordinary meeting . The offices of the President and Rapporteur shall normally be subject to rotation among the United Nations regional groups . No elected officer may serve on the Bureau for more than two consecutive terms . The President shall participate in meetings of the Conference of the Parties in that capacity and shall not at the same time exercise the rights of a representative of a Party . The Party concerned shall designate another representative who shall be entitled to represent the Party in the meetings and to exercise the right to vote . The Chairpersons of the Persistent Organic Pollutants Review Committee and any other subsidiary bodies shall be members ex-officio of the Bureau . General powers of the President Rule 23 In addition to exercising the powers conferred upon the President elsewhere by the present rules , the President shall declare the opening and closing of the meeting , preside at the meetings , ensure the observance of the present rules , accord the right to speak , put questions to the vote and announce decisions . The President shall rule on points of order and , subject to the present rules , shall have complete control of the proceedings and over the maintenance of order thereat . The President may propose to the Conference of the Parties the closure of the list of speakers , a limitation on the time to be allowed to speakers and on the number of times each representative may speak on a question , the adjournment or the closure of the debate and the suspension or the adjournment of a session . The President , in the exercise of the functions of that office , remains under the authority of the Conference of the Parties . Acting President Rule 24 The President , if temporarily absent from a meeting or any part thereof , shall designate a Vice-President to act as President . The President so designated shall not at the same time exercise the rights of a representative of a Party . A Vice-President acting as President shall have the powers and duties of the President . Replacement of an officer Rule 25 If an officer of the Bureau resigns or is otherwise unable to complete the assigned term of office or to perform the functions of that office , a representative of the same Party shall be named by the Party concerned to replace the said officer for the remainder of that officer 's term . Application of rules to subsidiary bodies Rule Save as provided in rules 28 to 34 , the present rules shall apply , mutatis mutandis , to the proceedings of any subsidiary bodies , subject to any modifications decided by the Conference of the Parties . Establishment of subsidiary bodies Rule 27 The Conference of the Parties may establish , in accordance with article 19 , paragraph 5 ( a ) of the Convention , such subsidiary bodies , as it considers necessary for the implementation of the Convention , in addition to the subsidiary body established under article 19 , paragraph 6. Meetings of subsidiary bodies shall be held in public unless the Conference of the Parties or the subsidiary body concerned decides otherwise . Quorum for non open-ended subsidiary bodies Rule 28 In the case of a subsidiary body that is not open-ended , a simple majority of the Parties designated by the Conference of the Parties to participate therein shall constitute a quorum . Dates of meetings Rule 29 The Conference of the Parties shall decide on the dates of the meetings of the subsidiary bodies , taking note of any proposals to hold such meetings in conjunction with the meetings of the Conference of the Parties . Election of officers for subsidiary bodies Rule 30 The Chairperson of the Persistent Organic Pollutants Review Committee shall be elected by the Conference of the Parties . Unless the Conference of the Parties decides otherwise , the Chairperson of any other subsidiary body shall be elected by the Conference of the Parties . Each subsidiary body shall elect its own officers other than the Chairperson . The officers of such subsidiary bodies shall be elected with due regard to the principle of equitable geographical representation and shall not serve for more than two consecutive terms . [ Voting in subsidiary bodies Rule 31 With respect to decisions taken by a subsidiary body , the Chairperson of that subsidiary body may exercise the right to vote . ] Matters for consideration Rule 32 Subject to article 19 , paragraph 6 ( b ) , of the Convention , the Conference of the Parties shall determine the matters to be considered by each subsidiary body and the President may , upon the request of the Chair of the subsidiary body concerned , adjust the allocation of work . Duties of the head of the secretariat Rule 33 The head of the secretariat , or the representative of the head of the secretariat , shall exercise the functions of that office in all meetings of the Conference of the Parties and of its subsidiary bodies . The head of the secretariat shall arrange for the provision of staff and services required by the Conference of the Parties and its subsidiary bodies , within available resources . The head of the secretariat shall manage and direct such staff and services and provide appropriate support and advice to the Bureau of the Conference of the Parties and its subsidiary bodies . Functions of the secretariat Rule 34 In addition to the functions specified in the Convention , in particular in article 20 , the secretariat shall , in accordance with the present rules : ( a ) Arrange for interpretation at the meeting ; ( b ) Collect , translate , reproduce and distribute the documents of the meeting ; ( c ) Publish and distribute the official documents of the meeting ; ( d ) Make and arrange for keeping of sound recordings of the meeting ; and ( e ) Arrange for the custody and preservation of the documents of the meeting . Sessions Rule 35 Sessions of the Conference of the Parties shall be held in public , unless the Conference of the Parties decides otherwise . Quorum Rule 36 The President shall not declare a session of the meeting of the Conference of the Parties open or permit the debate to proceed unless at least one third of the Parties to the Convention are present . The presence of two thirds of the Parties to the Convention shall be required for any decision to be taken . For the purposes of determining a quorum for a decision to be taken on a matter within the competence of a regional economic integration organization , that organization shall be counted to the extent of the number of votes it is entitled to cast in accordance with paragraph 2 of article 23 of the Convention . Procedures for speaking Rule 37 No one may address a meeting without having previously obtained the permission of the President . Subject to rules 38 , 39 , 40 and 42 , the President shall call upon speakers in the order in which they signify their desire to speak . The secretariat shall maintain a list of speakers . The President may call a speaker to order if the speaker 's remarks are not relevant to the subject under discussion . The Conference of the Parties may , on a proposal from the President or from any Party , limit the time allowed to each speaker and the number of times each representative may speak on a question . Before a decision is taken , two representatives may speak in favour of and two against a proposal to set such limits . When the debate is limited and a speaker exceeds the allotted time , the President shall call the speaker to order without delay . Precedence Rule 38 The Chairperson or Rapporteur of a subsidiary body may be accorded precedence for the purpose of explaining the conclusions arrived at by that subsidiary body . Points of order Rule 39 During the discussion of any matter , a representative may at any time raise a point of order , on which the President shall immediately rule in accordance with the present rules . A representative may appeal against the ruling of the President . The appeal shall be put to the vote immediately and the ruling shall stand unless overruled by a majority of the Parties present and voting . A representative may not , in raising a point of order , speak on the substance of the matter under discussion . Decisions on competence Rule 40 Any motion calling for a decision on the competence of the Conference of the Parties to discuss any matter or to adopt a proposal or an amendment to a proposal submitted to it shall be put to the vote before the matter is discussed or a vote taken on the proposal or amendment in question . Proposals and amendments to proposals Rule 41 Proposals and amendments to proposals shall normally be introduced in writing , in one of the official languages , by the Parties and handed to the secretariat , which shall circulate copies to delegations . As a general rule , no proposal or amendment to proposal shall be discussed or put to the vote at any session unless copies of it have been circulated to delegations not later than the day preceding that session . The President may , however , permit the discussion and consideration of proposals , of amendments to proposals or of procedural motions even though such proposals , amendments to proposals or motions have not been circulated or have been circulated only the same day . Order of procedural motions Rule 42 Subject to rule 39 , the following motions shall have precedence in the order indicated below over all other proposals or motions : ( a ) To suspend the meeting ; ( b ) To adjourn the meeting ; ( c ) To adjourn the debate on the question under discussion ; ( d ) To close the debate on the question under discussion . Permission to speak on a motion falling within paragraph 1 ( a ) to ( d ) shall be granted only to the proposer and , in addition , to one speaker in favour of and two against the motion , after which it shall be put immediately to the vote . Withdrawal of proposals or motions Rule 43 A proposal or motion may be withdrawn by its proposer at any time before voting on it has begun , provided that the proposal or motion has not been amended . A proposal or motion thus withdrawn may be reintroduced by any other Party . Reconsideration of proposals Rule 44 When a proposal has been adopted or rejected , it may not be reconsidered at the same meeting , unless the Conference of the Parties , by a two-thirds majority of the Parties present and voting , so decides . Permission to speak on a motion to reconsider shall be accorded only to the mover , to one speaker in favour of and two against the proposal , after which it shall be put immediately to the vote . Right to vote Rule 45 Each Party shall have one vote , except as provided for in paragraph 2. A regional economic integration organization , on matters within its competence , shall exercise its right to vote with a number of votes equal to the number of its member States that are Parties to the Convention . Such an organization shall not exercise its right to vote if any of its member States exercises its right to vote , and vice versa . Majority required Rule 46 [ 1. The Parties shall make every effort to reach agreement on all matters of substance by consensus . If all efforts to reach consensus have been exhausted and no agreement has been reached , the decision shall , as a last resort , be taken by a two-thirds majority vote of the Parties present and voting , ] unless otherwise provided by the Convention , by the financial rules referred to in Article 19 , paragraph 4 of the Convention or by the present rules of procedure . ] Decisions of the Conference of the Parties on matters of procedure shall be taken by a majority vote of the Parties present and voting . [ 3. If the question arises whether a matter is one of procedural or substantive nature , the President shall rule on the question . An appeal against this ruling shall be put to the vote immediately and the President 's ruling shall stand unless overruled by a majority of the Parties present and voting . ] If on matters other than elections a vote is equally divided , a second vote shall be taken . If this vote is also equally divided , the proposal shall be regarded as rejected . Order of voting on proposals Rule 47 If two or more proposals relate to the same question , the Conference of the Parties , unless it decides otherwise , shall vote on the proposals in the order in which they have been submitted . The Conference of the Parties may , after each vote on a proposal , decide whether to vote on the next proposal . Division of proposals and amendments Rule 48 Any representative may request that any part of a proposal or of an amendment to a proposal be voted on separately . The President shall allow the request unless a Party objects . If an objection is made to the request for division , the President shall permit two representatives to speak , one in favour of and the other against the request , after which it shall be put immediately to the vote . The President may limit the time allowed to each speaker . If the request referred to in paragraph 1 is allowed or adopted , those parts of a proposal or of an amendment to a proposal that are approved shall then be put to vote as a whole . If all operative parts of a proposal or amendment have been rejected , the proposal or amendment shall be considered to have been rejected as a whole . Amendment to a proposal Rule 49 A motion is considered to be an amendment to a proposal if it merely adds to , deletes from , or revises parts of that proposal . An amendment shall be voted on before the proposal to which it relates is put to the vote , and if the amendment is adopted , the amended proposal shall then be voted on . Order of voting on amendments to a proposal Rule 50 If two or more amendments to a proposal are moved , the Conference of the Parties shall first vote on the amendment furthest removed in substance from the original proposal , then on the next amendment furthest removed therefrom , and so on , until all amendments have been put to the vote . The President shall determine the order of voting on the amendments under this rule . Method of voting for general matters Rule 51 Voting , except for elections , shall normally be by show of hands . A roll call vote shall be taken if so requested by any Party . The roll call shall be taken in the English alphabetical order of the names of the Parties , beginning with the Party whose name is drawn by lot by the President . If at any time , however , a Party requests a secret ballot , that shall be the method of voting on the issue in question . When the Conference of the Parties votes by mechanical means , a non-recorded vote shall replace a vote by show of hands and a recorded vote shall replace a roll call . The vote of each Party participating in a roll call or recorded vote shall be included in the relevant documents of the meeting . Conduct during voting Rule 52 After the President has announced the beginning of voting , no representative shall interrupt the voting except on a point of order in connection with the actual conduct of the voting . The President may permit the Parties to explain their votes , either before or after the voting . The President may limit the time to be allowed for such explanations . The President shall not permit the proposer of a proposal or of an amendment to a proposal to explain his/her vote on his/her own proposal or amendment , except if it has been amended . Method of voting for elections Rule 53 All elections shall be held by secret ballot , unless otherwise decided by the Conference of the Parties . Absence of majority Rule 54 If , when one person or one delegation is to be elected , no candidate obtains in the first ballot a majority of the votes cast by the Parties present and voting , a second ballot restricted to the two candidates obtaining the largest number of votes shall be taken . If in the second ballot the votes are equally divided , the President shall decide between the candidates by drawing lots . In the case of a tie in the first ballot among three or more candidates obtaining the largest number of votes , a second ballot shall be held . If a tie results among more than two candidates , the number shall be reduced to two by lot and the balloting , restricted to them , shall continue in accordance with the procedure set forth in paragraph 1. Election to two or more elective places Rule 55 When two or more elective places are to be filled at one time under the same conditions , those candidates , not exceeding the number of such places , obtaining in the first ballot the largest number of votes and a majority of the votes cast by the Parties present and voting shall be deemed elected . If the number of candidates obtaining such majority is less than the number of persons or delegations to be elected , there shall be additional ballots to fill the remaining places , the voting being restricted to the candidates obtaining the greatest number of votes in the previous ballot , to a number not more than twice the places remaining to be filled , provided that , after the third inconclusive ballot , votes may be cast for any eligible person or delegation . If three such unrestricted ballots are inconclusive , the next three ballots shall be restricted to the candidates who obtained the greatest number of votes in the third of the unrestricted ballots , to a number not more than twice the places remaining to be filled , and the following three ballots thereafter shall be unrestricted , and so on until all the places have been filled . Official languages Rule 56 The official languages of the Conference of the Parties shall be Arabic , Chinese , English , French , Russian and Spanish . Interpretation Rule 57 Statements made in an official language shall be interpreted into the other official languages . A representative of a Party may speak in a language other than an official language if the Party provides for interpretation into one such official language . Languages of official documents Rule 58 Official documents of the meetings shall be drawn up in one of the official languages and translated into the other official languages . Sound recordings of meetings Rule 59 Sound recordings of the meetings of the Conference of the Parties , and whenever possible of the subsidiary bodies , shall be kept by the secretariats , consistent with the practice of the United Nations . Rule 60 The present rules of procedure may be amended by consensus by the Conference of the Parties . Precedence of Convention Rule 61 In the event of any conflict between any provision of the present rules and any provision of the Convention , the Convention shall prevail . Annex IV STOCKHOLM CONVENTION ON PERSISTENT ORGANIC POLLUTANTS , Rule Scope The present rules shall govern the financial administration of the Conference of the Parties to the Stockholm Convention on Persistent Organic Pollutants , its subsidiary bodies and the Convention secretariat . In respect of matters not specifically provided for by the present rules , the Financial Regulations and Rules of the United Nations shall apply . Financial period Rule The financial period shall be a biennium , of which the first calendar year shall be an even-numbered year . Budget Rule The head of the Convention secretariat shall prepare the budget estimates for the following biennium in United States dollars showing projected income and expenditures for each year of the biennium concerned . The head of the Convention secretariat shall dispatch the estimates [ , as well as the actual income and expenditure for each year of the previous biennium , ] to all Parties to the Convention at least ninety days before the opening of the meeting of the Conference of the Parties at which the budget is to be adopted . The Conference of the Parties shall , prior to the commencement of the financial period that the budget covers , consider the budget estimates and adopt a budget by consensus authorizing expenditures , other than those referred to in paragraphs 9 and 10. Adoption of the budget by the Conference of the Parties shall constitute authority to the head of the Convention secretariat to incur obligations and make payments for the purposes for which the appropriations were approved and up to the amounts so approved , provided always that , unless specifically authorized by the Conference of the Parties , commitments shall be covered by related income . The head of the Convention secretariat may make transfers within each of the main appropriation lines of the approved budget . The head of the Convention secretariat may also make transfers between such appropriation lines up to limits that the Conference of the Parties may set . Funds Rule A General Trust Fund for the Convention shall be established by the Executive Director of the United Nations Environment Programme and managed by the head of the Convention secretariat . Contributions made pursuant to paragraph 12 ( a ) , ( b ) and ( c ) , with the exception of the earmarked funds referred to in paragraph 9 , shall be credited to this fund . All budget expenditures that are made pursuant to paragraph 5 shall be charged to the General Trust Fund . Within the General Trust Fund there shall be maintained a working capital reserve at a level to be determined from time to time by the Conference of the Parties by consensus . The purpose of the working capital reserve shall be to ensure continuity of operations in the event of a temporary shortfall of cash . Drawdowns from the working capital reserve shall be restored from contributions as soon as possible . A Special Trust Fund shall be established by the Executive Director of the United Nations Environment Programme and managed by the head of the Convention secretariat . This fund shall receive contributions pursuant to paragraphs 12 ( b ) and ( c ) that have been earmarked to support the participation of representatives of developing countries and countries with economies in transition in meetings of the Conference of the Parties and its subsidiary bodies . Subject to the approval of the Conference of the Parties , the Executive Director of the United Nations Environment Programme may establish other trust funds , provided that they are consistent with the objective of the Convention . In the event that the Conference of the Parties decides to terminate a trust fund established pursuant to the present rules , it shall so advise the Executive Director of the United Nations Environment Programme at least six months before the date of termination so decided . The Conference of the Parties shall decide , in consultation with the Executive Director of the United Nations Environment Programme , on the distribution of any uncommitted balances after all liquidation expenses have been met . Contributions Rule The resources of the Conference of the Parties shall comprise : [ ( a ) Contributions made each year by Parties on the basis of an indicative scale adopted by consensus by the Conference of the Parties[ , and based on such a scale of assessments of the United Nations as may be adopted from time to time by the General Assembly , ] adjusted so as to ensure that no Party contributes less than [ 0.001 ] [ 0.01 ] per cent of the total , that no one contribution exceeds per cent of the total and that no contribution from a least developed country Party exceeds [ 0.01 ] per cent of the total ; ] ( b ) Contributions made by Parties in addition to those made pursuant to paragraph ( a ) , including those made by the Government hosting the Convention Secretariat ; ( c ) Contributions from States not Parties to the Convention , as well as governmental , intergovernmental and non-governmental organizations , and other sources ; ( d ) The uncommitted balance of appropriations from previous financial periods ; ( e ) Miscellaneous income . The Conference of the Parties shall , in adopting the indicative scale of contributions referred to in paragraph 12 ( a ) , make adjustments to take account of contributions of Parties that are not members of the United Nations , as well as those of regional economic integration organizations that are Parties . In respect of contributions made pursuant to paragraph 12 ( a ) : ( a ) Contributions for each calendar year are [ due][expected ] on 1 January of that year ; ( b ) Each Party shall , as far in advance as possible of the date due for the contribution , inform the head of the Convention secretariat of the contribution it intends to make and of the projected timing of that contribution . Contributions made pursuant to paragraph 12 ( b ) and ( c ) shall be used in accordance with such terms and conditions , consistent with the objectives of the Convention and the Financial Regulations and Rules of the United Nations , as may be agreed between the head of the Convention Secretariat and the contributor . Contributions made pursuant to paragraph 12 ( a ) from States and regional economic integration organizations that become Parties to the Convention after the beginning of a financial period shall be made pro rata temporis for the balance of that financial period . Consequent adjustments shall be made at the end of each financial period for other Parties . All contributions shall be paid in United States dollars or the equivalent in a convertible currency . They shall be paid into a bank account to be designated by the Executive Director of the United Nations Environment Programme in consultation with the head of the Convention secretariat . [ In conversion into United States dollars , the United Nations operational rate of exchange shall be used . ] The head of the Convention secretariat shall acknowledge promptly the receipt of all pledges and contributions and shall inform the Parties , [ once ] [ twice ] a year , of the status of pledges and payments of contributions . Contributions not immediately required shall be invested at the discretion of the Executive Director of the United Nations Environment Programme , in consultation with the head of the Convention secretariat . The resulting income shall be credited to the related Convention trust fund . Accounts and audit Rule The accounts and financial management of all funds governed by the present rules shall be subject to the internal and external audit process of the United Nations . An interim statement of accounts for the first year of the financial period shall be provided to the Conference of the Parties during the second year of the period , and a final audited statement of accounts for the full financial period shall be provided to the Conference of the Parties as soon as possible after the accounts for the financial period are closed . Administrative support costs Rule [ 22. The Conference of the Parties shall reimburse the United Nations Environment Programme for the services provided to the Conference of the Parties [ , ][and ] its subsidiary bodies [ and the Convention secretariat ] from the funds referred to in paragraphs 7 , 9 and 10 under such terms as may from time to time be agreed upon between the Conference of the Parties and the United Nations Environment Programme or , in the absence of such agreement , in accordance with the general policy of the United Nations . ] Amendments Rule Any amendment to the present rules shall be adopted by the Conference of the Parties by consensus . Annex V REPORT OF CONTACT GROUP ON ARTICLE 19 , PARAGRAPH 6 : ESTABLISHMENT OF A SUBSIDIARY BODY TO REVIEW CANDIDATE POPS Co-chairs : Ms. Fatoumata Jallow Ndoye ( The Gambia ) Mr. Reiner Arndt ( Federal Republic of Germany ) Participants : More than 40 participants from all United Nations regions including intergovernmental organizations and non-governmental organizations The following issues were discussed : A Task of the Committee The Conference of the Parties shall at its first meeting , establish a subsidiary body to be called the Persistent Organic Pollutants Review Committee ( POPRC ) for the purposes of performing the functions assigned to that Committee by this Convention . The tasks of the Committee are outlined in article 8. In brief , the Committee will examine information submitted by a Party in support of a proposal for listing of a chemical in annexes A , B or C. The outcome of the screening evaluation will be communicated to all Parties and observers for comments and input of additional information . A draft risk profile will then be prepared and addressed by the Committee , which will also request further information on socio-economic factors from Parties and observers . The Committee will subsequently discuss options for measures and prepare a draft report for the Conference of the Parties including recommendations for listing . In conclusion the process can be described as a scientific evaluation followed by a risk management evaluation . B Selection of Committee members and invited experts Expertise The expertise will be provided as laid out in article 19 , paragraph 6 ( a ) , by experts in chemicals assessment or management . It was agreed that procedures for designation should be sufficiently flexible to allow participation of government-designated experts with different types of expertise . To ascertain the qualifications of the experts , relevant curriculum vitae should be provided by Governments and be accessible to the Conference of the Parties . Some members considered that it was clear from the annexes that this involves among other disciplines experts from health and environment areas and that it is important that the different types of expertise needed for the Committee are balanced . It was agreed , however , that guidance given to Governments should not be too prescriptive . Length of term It was agreed that four years would be a reasonable minimum term . It was considered necessary to develop a flexible system that would ensure continuity as well as sufficient turnover , bearing in mind equitable geographical distribution , and a strategy of overlapping terms was suggested . Conflict of interest The PIC model ( Decision INC-8/1 ) was acknowledged as a good starting point on how to resolve the conflict of interest issue for Pollutant Organic Pollutants Review Committee members . Invited experts to the Committee and the role of such experts It was agreed that the Committee would need to invite external experts to support it in its work . Criteria would need to be set for the selection of such experts . A pool or roster of external experts might be established by inviting Governments to designate experts , e. g. for areas of expertise or specific substance knowledge . The Committee would normally invite experts from this pool/roster . Consideration should be given to developing processes by which such a pool could be created . Costs of travel and other costs related to participation would be expected to be covered for invited experts from developing countries and countries with economies in transition according to normal United Nations practice . In addition , if specific expertise is not available for a certain issue from this pool , POPRC could identify other non-government-designated experts as necessary . The way of funding their participation needs to be addressed . Committee members might bring additional experts to the meeting , as appropriate . Conflict of interest issues for experts invited by POPRC would be evaluated and decided by POPRC , while those of the POPRC members would be evaluated and decided by the Conference of the Parties . Some experts could come from industry and other non-governmental organizations . In such a case , it would be important for POPRC to identify through conflict of interest procedures where the potential conflict of interest lies in order to decide on their participation . Composition and size of the Persistent Organic Pollutants Review Committee Composition and regional balance It was agreed that the number of POPRC members should be approximately 30 to 40. It was suggested by several countries that the Convention should follow the five United Nations regions in achieving equitable geographical distribution and that seven members per region might be a starting point for discussion . Other members could not agree on this point . It was agreed that the question of what is meant by “ equitable geographical distribution ” should be put to the UNEP legal counsel/legal drafting group . Some members suggested that concepts used in other instruments , e. g. , the Montreal Protocol should also be studied . Nominations At the first meeting of the Conference of the Parties , the Parties will establish the Persistent Organic Pollutants Review Committee pursuant to article 19 , paragraph 6. This means that Governments need to be prepared to designate experts for POPRC at the first meeting of the Conference of the Parties . This implies the need for a timely start of preparations on a process that would encompass and address this issue . Replacements This would have to be looked at in the context of how experts are designated by Governments for POPRC . Frequency of meetings Due to the technical nature of work to be accomplished it was agreed that POPRC should normally meet once a year , subject to availability of funds and work requirements . The meetings should take place between meetings of the Conference of the Parties and be scheduled so that proposals for listing chemicals could go forward to the following Conference of the Parties . D Operational guidelines Ad hoc and intersessional groups It was agreed to have operational procedures that facilitate establishment of ad hoc working groups , such as chemical specific groups during meetings , and also to work intersessionally to support the expeditious work of the Committee . These groups should be chaired by at least one of the Committee members but they could consist of POPRC members as well as experts selected by the Committee . Formal subcommittees should be avoided . Transparency of procedures The Convention provides for transparency at all stages of the process for adding candidate POPs as described in article 8. It was agreed that the reports from POPRC should be publicly available and easily accessible . Any recommendation from the Committee should provide the reasons for the decision , as well as dissenting views . The decisions and meeting reports would be available as the Conference of the Parties meeting documents in all six United Nations languages . Observers The Committee should be open to observers and Parties that are not members of the Committee . The role of observers will be addressed in the rules of procedure for the Conference of the Parties and is also described under article 8. It was noted that one of the major roles of observers was to increase transparency and provide additional information . It was agreed that the Party which submits a proposal for listing a chemical should be invited as an observer to POPRC meetings . Work plan with time frames It was agreed that the Committee should work in an efficient and timely manner and would also need to set priorities on substances in case of a large workload . For each chemical under consideration a work plan with time frames would be needed for its work . Such work plans would need to be flexible , determined by the workload and by the need to acquire information from all stakeholders and should be submitted to the Conference of the Parties . Preparations of meetings The Convention states that the Committee shall prepare the risk profiles and risk management evaluation for its meetings . In practice this usually means that members of the Committee would lead the preparation of these documents , drawing upon existing peer reviewed material in the first instance . The group encouraged nominating Party or Parties to speed up the process by submitting a proposal for listing of a chemical together with a draft risk profile and a draft risk management proposal . This could substantially facilitate the work of the Committee . Recommendations and reports to the Conference of the Parties The Committee could make recommendations to the Conference of the Parties on its functioning and operational procedures . Recommendations to list chemicals in annexes A , B or C are sent to the Conference of the Parties . Confidentiality of data It was agreed that if the Committee received confidential information it should ensure that article 9 , paragraph 5 was respected . It was agreed that confidentiality arrangements should be codified by POPRC as a matter of priority . E Rules Status of the Chair and Bureau It was suggested that due to the expected workload , besides the Chair , a co-Chair for POPRC might also be elected . Alternatively , vice-chairs may be used . The Conference of the Parties should be given enough flexibility to decide . This might be raised with the legal drafting group when it addresses the draft rules of procedure of the Conference of the Parties . Rules of procedure of the Conference of the Parties concerning subsidiary bodies It was agreed that some of the rules of procedure of the Conference of the Parties might not be applicable to POPRC . The working language for POPRC and its working groups as well as for the documentation for the meetings should be English only , but the outcome of the meetings should be available in all United Nations languages . Concerning rule 11 in the draft rules of procedure of the Conference of the Parties , it was suggested that six weeks would be insufficient for the distribution of some very technical and complicated documents to POPRC and that three months would be more appropriate . It was agreed , however , that this should be left to POPRC to decide as part of its operational guidelines . F Budget Support for members of the Persistent Organic Pollutants Review Committee from developing countries and countries with economies in transition It was agreed that financial support , i. e. , travel and daily subsistence allowance , to members of POPRC from developing countries and countries with economies in transition should be made available for participation in POPRC meetings . Budgeting and costs for various parts of the work The issue of total costs for the functioning of POPRC was raised . The cost of a workshop-like meeting with 40 participants ( about 30 being paid for ) for one week would amount to approximately $100,000-150,000 depending on the amount of preparation made outside the secretariat . Annex VI Budget for 2003 and indicative budget for 2004 ( in US$ ) Table 1 Additional information : Budget breakdown by work area Annex VII An Expert Group on best available techniques/best available practices ( BAT/BEP ) is hereby established by the Intergovernmental Negotiating Committee of the Stockholm Convention on Persistent Organic Pollutants to develop guidelines on best available techniques and to develop provisional guidance on best environmental practices relevant to the provisions of article 5 of the Convention , for consideration by the Conference of the Parties upon entry into force of the Convention . The guidelines and guidance to be developed should be practical and general in nature but with reference to more detailed and specialized technical information to achieve a realistic and meaningful level of release reduction or source elimination . These should also help assist decision-making at the country level . To enhance the practicality of the guidelines and the guidance , the Expert Group should provide commentary on issues and approaches relevant to their implementation . For example , the guidelines and guidance to be developed should take into consideration : The problems and opportunities that might be encountered in implementing BAT and BEP ; The particular circumstances of developing countries and some countries with economies in transition ; Available mechanisms for information exchange of BAT and BEP measures . The work of the Expert Group is technical in nature . Therefore , to enhance the efficiency of the Group and taking into account budgetary constraints , the number of participants in the meetings of the Expert Group should be kept to a manageable number ( a maximum of 50-55 ) in the following proportions : The Expert Group 's meetings shall be open to government-designated experts . Representation from developing countries ( 15 ) , from countries with economies in transition ( three ) and from developed countries ( 18 ) shall be ensured . Representation of all regions should be encouraged ; Intergovernmental ( two ) and non-governmental organizations ( four from environmental non-governmental organizations and four from industrial non-governmental organizations ) may participate as observers . A balanced representation of developing and developed countries is encouraged ; Additional experts shall be invited as needed for each meeting with the status of observer . In order to promote an open and transparent process , regional networking should be encouraged to ensure the input of a broad representation of views and to offset differences in expertise available to countries at varying stages of development . Further , all documents under consideration by the Expert Group shall be made available to all interested parties ( to the extent feasible ) who shall be encouraged to provide written comments . Participants should have expertise in one or more of the following areas : Specialized technical issues or technological overview ; Relevant environmental policy ; or The functioning and provisions of the Stockholm Convention . Funding will be provided for 15 participants from developing countries and three participants from countries with economies in transition ; Funding will be provided for one participant from an environmental non-governmental organization in consultation with the non-governmental organizations . The following meetings are envisaged : First meeting of the Expert Group ( prior to the seventh session of the Intergovernmental Negotiating Committee ) : Possible reference materials : UNEP/POPS/INC.6/CRP.1 - Regional workshop held in Bangkok , Thailand , from 13 to 15 March 2002 , on national action on measures to reduce or eliminate the releases of by-products from unintentional production as requested by the Stockholm Convention on Persistent Organic Pollutants ; UNEP/POPS/INC.6/CRP.6 - Best available techniques ( BAT ) and best environmental practices ( BEP ) for reducing and/or eliminating emission of POPs by-products ; Proceedings of the “ Regional Workshop on National Action on measures to reduce or eliminate the releases of by-products from unintentional production as requested by the Stockholm Convention on Persistent Organic Pollutants ” , Bangkok , Thailand , 13-15 March 2002 ; Proceedings of the “ Workshop for South American Countries on BAT/BEP to Support the Stockholm Convention on Persistent Organic Pollutants ” , Buenos Aires , Argentina , October/November 2002 ( tentatively ) ; Other reference material submitted no later than two months before the meeting ; Seventh session of the Intergovernmental Negotiating Committee : Discussion and adoption of report of the Expert Group of its first meeting ; Second meeting of the Expert Group ; Third meeting of the Expert Group , if necessary ; First meeting of the Conference of the Parties . The Intergovernmental Negotiating Committee shall identify two interim co-Chairs of the Expert Group for the purpose of facilitating the first meeting of the Expert Group . The Expert Group shall at its first meeting elect , from among government representatives , officers to serve as the two co-Chairs . The secretariat of the Stockholm Convention will provide the secretariat for the Expert Group . The Expert Group shall apply , mutatis mutandis , the rules of procedure of the Intergovernmental Negotiating Committee except as otherwise provided in these terms of reference . The secretariat , in consultation with the officers of the Expert Group , shall prepare a provisional agenda for each meeting of the Group . The provisional agenda shall be communicated to all participants of the Expert Group and all interested parties at least six weeks before the start of the meeting . English shall be the working language of the Expert Group . All documents adopted by the Expert Group shall be translated into Arabic , Chinese , French , Russian , and Spanish . The Expert Group shall consider and adopt a report at each meeting to inform the Intergovernmental Negotiating Committee of the results of its discussion ; The reports shall be circulated to all participants of the Expert Group meetings and the Intergovernmental Negotiating Committee at least six weeks in advance of the Intergovernmental Negotiating Committee ; The Expert Group shall present its report on guidelines and provisional guidance for consideration by the Conference of the Parties upon entry into force of the Convention . The Expert Group shall make every effort to reach agreement by consensus among participating Governments on the guidelines on BAT and provisional guidance on BEP that it presents to the Conference of the Parties for its consideration . Should consensus not be reached , all proposals by participating Governments shall be reflected in the report to be submitted to the Conference of the Parties . Annex VIII Statements by representatives of non-governmental organizations The representative of the International POPs Elimination Network ( IPEN ) highlighted activities by IPEN , including specific cases of participation by organizations in more than 40 countries to help reduce and eliminate POPs . He encouraged Governments to involve non-governmental organizations in enabling activities and the preparation and implementation of national implementation plans . The representative of the Worldwide Fund for Nature ( WWF ) reported on its work with a number of intergovernmental organizations to establish the Africa Stockpile Programme which seeks to clean up stockpiled pesticides and pesticide contaminated waste in Africa ; to catalyse development of prevention measures ; and to provide capacity-building and institutional strengthening on important chemicals-related issues . AAnnex IX The underlined subheadings are included in the draft rules for the convenience of work of the Committee and , consistent with rules of procedure of other multilateral environmental agreements , will not be included in the draft rules of procedure to be adopted by the Conference of the Parties . Consideration may be given to staggered terms of office , where the term of office of the President runs from the beginning of the Conference of the Parties to the beginning of the next Conference of the Parties , and the term of office of the Vice-Presidents runs from the closure of the Conference of the Parties to the closure of the next Conference of the Parties . This approach would accommodate the situations where offers to host the Conference of the Parties are made intersessionally or where the host country Party changes during the intersessional period . The Committee may also wish to consider whether to stagger the terms of office of the Vice-Presidents of the Conference of the Parties to enhance continuity and expertise . The following additional rule 26 bis was suggested for further consideration by the legal drafting group : “ Unless otherwise decided by the Conference of the Parties , the present rules shall apply , mutatis mutandis , to the proceedings of any working group or committee established by the Conference of the Parties or by a subsidiary body . ” Precedents for this rule may be found in rules of procedure of Conferences of the Parties of the Convention on Biological Diversity , the Montreal Protocol and the Basel Convention . It was not included in the draft rules of procedure of the Conference of the Parties of the Rotterdam Convention . It is used to make it clear that for subsidiary bodies rule 22 ( 4 ) of the overall rules of procedure , which does not allow the President of the Conference of the Parties to vote at Conference of the Parties meetings , may not be appropriate to apply , mutatis mutandis , to the powers of Chairpersons of subsidiary bodies . The matter can also be dealt with in drafting the rules of procedure and terms of reference for individual subsidiary bodies . As precedent is divided , the Committee may wish to : a ) keep the rule here in the Conference of the Parties rules of procedure , or b ) follow the precedent of the Rotterdam Convention and remove the rule from the Conference of the Parties rules and deal with the issue of voting powers of Chairpersons of subsidiary bodies when drafting their terms of reference and rules of procedure , for example , in the current Persistent Organic Pollutant Review Committee process . There are various procedural rules for decision-making by the Conference of the Parties in the Convention where efforts to reach consensus have been exhausted and consensus could not be reached . These include variations providing for decisions by a three-fourths majority of the Parties present and voting ( see , e. g. , Convention article 20 ( 3 ) and article 21 ( 2 ) and ( 3 ) ) , and variations providing for decisions by consensus ( see , e. g. Convention articles 19(4 ) and 22 ( 5 ) and ( 6 ) ) . With respect to the Conference of the Parties decisions on which the Convention is silent as to procedure , there are various voting options that could be considered ( e. g. , consensus then two-thirds or three-fourths majority , consensus , double majorities , etc. ) . It would also be possible to provide for a single rule of decision that would apply to all such decisions ( as in the current draft formulation of this paragraph ) or to provide and specify that different types of the Conference of the Parties decisions would be subject to different rules of decision ( e. g. , some specified decisions subject to a two-thirds majority vote , while others would be subject to consensus or to some other rule of decision ) . Although this provision is well precedented in other multilateral environmental agreements , a request was made to consider different precedents from other fora . Precedents for this rule exist in the rules of procedure of Conferences of the Parties of the following multilateral environmental agreements : the Convention on Biological Diversity , the Convention to Combat Desertification , the Rotterdam Convention ( draft rules ) and the Basel Convention . One delegation raised a question about the second sentence . The legal drafting group studied the issue and noted that this sentence appears in the rules of procedure for the following multilateral environmental agreements : the Convention on Biological Diversity , the Convention to Combat Desertification , the Rotterdam Convention ( draft rules ) and the Basel Convention . Cross reference with rule 7 shall be revisited by the legal drafting group and examined in order to prevent any potential conflict with the present rule . Different views were expressed in the Committee on whether to use the United Nations scale of assessment . The legal drafting group considered that the issue was a policy question for the Committee to decide . The percentage in the square brackets is the current minimum rate of contribution on the United Nations scale of contributions . If the percentage changes by the time of the first meeting of the Conference of the Parties , the figure will be adjusted accordingly . Precedents for this figure exist in the financial rules of other multilateral environmental agreements . The percentage in the square brackets is the current maximum rate of contribution on the United Nations scale of contributions . If the percentage changes by the time of the first meeting of the Conference of the Parties , the figure will be adjusted accordingly . The legal drafting group noted that , while the majority of the financial rules for multilateral environmental agreements use the word “ due ” , the financial rules of the Convention to Combat Desertification use the word “ expected ” . The legal drafting group requests the secretariat to consult with financial experts on this provision and report back to the legal drafting group . The legal drafting group requests the secretariat to inform it on the practical operation of the present rule . Precedents for this rule and the word “ related ” are found in the financial rules for the following multilateral environmental agreements : the Convention on Biological Diversity , the Montreal Protocol , the Framework Convention on Climate Change and other agreements . Average local cost of conducting an Intergovernmental Negotiating Committee session is approximately US$ 150,000 . This includes equipment rental , paper , facility related expenses , hospitality , etc. Such as exemption register ( UNEP/POPS/INC.6/4 ) , and formats for reporting required under the Convention including those listed in document UNEP/POPS/INC.6/9 . Ref . UNEP/POPS/INC.6/6 and UNEP/POPS/INC.6/7 . This includes maintaining a current and up-to-date list of national focal points , exchange of information with these focal points , and responding to requests for assistance in technical and other matters . Ref . : Decisions INC-6/9 , INC-6/10 and INC-6/11 contained in annex I to the present report . This is a one-time charge . Alternatively , a staff member , including support costs , may be engaged for a two-year period . This also includes developing training and outreach materials , organization and conduct of as well as participation in workshops , and selected training for developing countries and countries with economies in transition . Ref . The Committee 's decision was to maintain the status quo for 2003. No decision was taken for 2004. This mandate is referred to in paragraphs 4 and 7 of resolution 1 on interim arrangements adopted at the Conference of Plenipotentiaries on the Stockholm Convention and under article 5 and annex C of the Convention . </text>
<text id="ndi" url="http://www.stockportmbc.gov.uk/secondary/offerton/pages/SchemesofWork/KS4/skillswl.htm">
Skills for Working Life What is the course about ? These courses are all Work Related and are more hands on than the GCSE courses at school . The idea is to prepare students for the world of work and to give them a platform to further work related courses or training at 16 . The courses require students to attend North Area College for one full day a week and there is a requirement to catch up on any school work missed during that day . Good attendance , punctuality , motivation and the ability to work independently are all important for success these courses . What will students be studying ? The following courses are available for study : - Hairdressing - Beauty - Sport and Recreation - Health and Social care All these courses follow Skills for Working Life qualification in year 10 . In year 11 most students move onto an NVQ Level 1 ( National Vocational Qualification ) or a VRQ ( Vocational Related Qualification ) or equivalent . How will I be assessed ? Students are assessed by their tutor at college at regular intervals . Although most of the assessments are practical , there are some written tests . E. g . Health and Safety . Students build up a portfolio of work as they progress through the course . A teacher from school will come to college every week to help students and to look at their work . </text>
<text id="odv" url="http://www.find-me-a-gift.co.uk/gifts-for-men/unusual-gadgets/mood-light-tile.html">
The Mood Light Tile really does takes atmospheric lighting in the home or office to unprecedented levels of sophistication and versatility . The mesmeric mood light tile is similar to the classic mood light but it is specially designed to be used on its own or with one or more mood light tiles . So instead of having an aluminium frame the colour changing lens continues to the edges so that when two or more are placed together they join seamlessly . The mood light tiles also have a data link socket and a ribbon cable so that they can be linked together and work in unison . The mood light pulsates in every sequence imaginable . The Mood Light is a perfect work of art for bedrooms , living rooms , dining rooms , modern interiors , company foyers , offices , boardrooms , bars , restaurants , exhibition stands , night clubs ... it really is that special . The Mood light tile has 4 large flat light changing panels which measure 50 cm square , each of the 4 panels has integral banks of light emitting diodes that sweep and pulses in an almost infinite variety of colours . Mood Lights Technical Specifications ... LED illumination matrix - The Mood Light has continuous lens for seamless joining with other mood light tiles - Display diffusion globes - Dimensions of the Mood Light : 50 x 50 x 3 cms - Wall mount suspended installation . The Mood Lights Features - Color mode selector blends red , green and blue primaries to produce unlimited color combinations . ( Four user-selectable memory options ) - Three preprogrammed , animated light sequences : Chill , Motion , Action . - Four active light functions with speed control : Pulse , Random , Rainbow , Fusion . Cool silver radio wave remote control ( which means that it does not even have to be in the same room as the mood light ) , it includes on/off button , 3 primary colour adjusters , pulsating speed adjuster , multiple memory and mode setting buttons . Dimensions of Mood Lights remote control : 20 x 4.5 x 2 cms The external Mood Light power supply is styled to look just like the Mood Light itself . Dimensions of the Mood Light power supply : 10 x 10 x 4 cms </text>
<text id="rfk" url="http://www.environment.bham.ac.uk/extindex.htm">
Welcome to the University of Birmingham Environment homepage . The University recognises that in pursuing its educational and research objectives , it has a responsibility and it should take the opportunity to protect and nurture its immediate environment . By exercising proper control over its activities the University will promote the use of sustainable resources and discourage wasteful or damaging practices . The University 's Environmental Policy Statement sets out the University 's aims and objectives for safeguarding the environment . Further information , including Current Responsibilities at University Level , may be found on these web pages . For guidance on making requests for information under the Freedom of Information Act/Environmental Information Regulations please go to The University of Birmingham Freedom of Information Act Website . Staff and students should follow the Information for Staff and Students links on these pages . The University of Birmingham has an impressive record in environmental research and teaching , with around 130 academic staff actively engaged in a broad range of disciplines relating to this field . A Centre for Environmental Research and Training has been established to provide a focus for this environmental expertise and to enhance the University 's reputation as a centre of excellence . This page is maintained by the Health and Safety Unit </text>
<text id="tlg" url="http://www.ourpartnership.org.uk/newspub/story.cfm?id=353&sid=123">
Latest salvos in public service delivery debate - 28/06/05 A new book by Association of Chief Executives of Voluntary Organisations ( acevo ) and the Social Market Foundation ( SMF ) calls for substantial increase in vol sector delivery of public services . But their views have not been universally welcomed . The publication ' Communities in Control : the new third-sector agenda for public service reform ' says that the government will fail to meet its manifesto commitments on public service reform unless it makes better use of the third sector . It says in terms of delivery of public services Children 's services , health services , services to prisoners , even running a prison should n't be ruled out . Acevo head of strategy Nick Aldridge ( pictured ) said : " We want to see the state transferring substantial sums of money to third sector organisations to enable them to take over the delivery of public services as happened with housing associations in the 1980s . ' The advantages of using the voluntary sector are that they ' personalise their services in a way that government finds very difficult through monolithic , unresponsive , one-size-fits-all public services . ' SMF acting director Ann Rossiter said : " It will have the benefit of building social capital and building a robust civil society " . Acevo are clear that the voluntary sector should n't just turn into a mirror image of the public sector and there would be no point transfering services if services do n't improve . NCVO however are wary . While they believe the sector can and does play a significant role in shaping and delivering public services , they say charities must engage in public service delivery only if it helps further their mission . The sector has various role such as advocacy , campaigning , advisory services , information and acting as social glue ' . The public perception of the sector may be warped by an over emphasise on public service delivery . Ben Kernighan , Services and Development Director at NCVO said : " It is important to remember that voluntary organisations have a really important role in bringing communities together . " While the publication holds Housing Associations as the model to follow , NCVO warn that the stock transfer of council housing has been met with a mixed response and that supply is currently not meeting demand . However Clare Tickell of National Children 's Hospital ( NCH ) was full of enthusiasm for public service delivery . NCH provide early education and day care , family support and outreach to parents , and child and family health services . She said : " We want to play an even bigger role in service provision in the future to ensure people receive better public services . " </text>
<text id="xqf" url="http://www.macintyrecharity.org.uk/our_services/inclusive_care/worcestershire/easemore_road.html">
The bungalow is within walking distance of the town centre and its amenities , and is also on the bus route to town . Redditch is a new town , 15 miles south of Birmingham , with public transport links to other towns in the area and good access to the motorway system . The Bungalow Easemore Road is a Registered Care home with sleep-in facilities . It is set back from the road in large gardens shared with another house . There are four single bedrooms , each with a TV aerial point . As a bungalow it can accommodate people with some mobility difficulties , although it is not suitable for people who need to use a wheelchair indoors . There is a shower room with a toilet , and a large bathroom with a toilet . There is a communal lounge , large dining room and utility room . The people who live at Easemore Road The bungalow is suitable for people with moderate to severe learning disabilities requiring 24-hour support but not on a one-to-one basis . Currently Easemore Road is home to four men aged from early thirties to early sixties . There is often the opportunity to take part in leisure activities . The staff who support the people living at Easemore Road The staff team consists of a Head of Service , a Senior Support Worker and four and a half full-time equivalent Support Workers . The staffing ration is 2:1 . There is always one sleep-in member of staff overnight , plus an emergency on call member of staff . Contact Details Area Manager : Margaret Jukes Contact Number : 01527 524722 </text>
<text id="bdat" url="http://www.snh.org.uk/nnr-scotland/news_detail.asp?newsID=79">
TENTSMUIR - FUN FOR ALL THE FAMILY 23rd June 2006 The Tentsmuir NNR celebration is suitable for all but families are especially welcome . Booking is essential as places go fast , but places are free ( no dogs please ) . The activities , which are also all free , include : · Mini-beast hunts for children over 8 · Curly caterpillar needs your help activity for under 5s · Nature One for the under 7s · Nature sculptures on the beach · Sketch and paint for adults and the older child · Viewpoint binoculars and telescopes - SNH staff on hand to answer questions · Guided walk - find out why the reserve is so special , from butterflies to seals · Storyteller - Amu Logtse and his amazing drums The reserve is a large area of grassy sand dunes and the huge Abertay Sands sand bar which stretches eastward from the landward tip of Tentsmuir . Sediment from the sand bar dries and blows westwards on the wind adding to the land . This is then stabilised by plants such as sea rocket , lyme grass and marram grass and becomes new land . There are free refreshments , including a free picnic lunch , and a free coach from the Forest Enterprise operated car park through the forest to the reserve . The Forest Enterprise car park costs one pound for parking . To book places for the day phone 01382 553704 and leave a name , address and telephone number and the number of places to be booked . Places are only secured if the reserve manager phones callers and confirms the booking . Tom Cunningham , SNH 's Tentsmuir reserve manager , said : ' A visit to Tentsmuir is a chance to find out about the history , flowers , birds and animals here and to have a really good day out . I hope that people will book early for the day as it will be lots of fun with plenty to do and well worth coming to . ' The reserve is home to large groups of wildfowl and waders such as pink footed geese , bar tailed godwits , grey plovers and the largest gathering of eider ducks in Britain . It is also used by thousands of grey and common seals . Plants on the dune grassland include yellow bird 's foot trefoil , pink ragged robin , violets , purple northern marsh orchid and white grass of Parnassus . Among the plants are hundreds of butterflies and moths such as day flying burnet moths . Further information Further information : Heather Kinnin , press & public relations officer , Scottish Natural Heritage 0131 446 2274 or email heather . k innin@SNH . g ov . u k Tom Cunningham , reserve manager , Scottish Natural Heritage 01382 553704 . Notes for editors Notes for editors : 1. S cottish Natural Heritage is the government body with respect to conservation , enhancement , enjoyment , understanding and sustainable use of Scotland 's natural heritage . It works for and with Scotland 's people . Website www . s nh . o rg . u k 2. T entsmuir NNR is 1.5 miles east of Tayport or 1.2 miles north of the Forest Enterprise car park at Kinshaldy off the B945 Tayport/Leuchars road . 3. Scottish Natural Heritage 's National Nature Reserve website is at www . n nr-scotland . o rg . u k | © Scottish Natural Heritage 2005 | Send to a friend | Copyright and terms of use </text>
<text id="bnqe" url="http://www.ecodyfi.org.uk/commfirstactionplanpr.htm">
Residents and businesses in the Powys part of the Dyfi Valley are being invited to help create an action plan that will improve the quality of life and vitality of the area . Each of the four public events planned for July will focus on a specific theme and will bring together the two community organisations that have been researching local needs . Each meeting will also discuss the relevant section of the draft Powys Community Strategy . The Communities First process in Machynlleth , Cadfarch , Glantwymyn and Llanbrynmair is entering a new phase . A lot of suggestions concerning the future of the Dyfi valley have been gathered during the community consultations . Equally , many people in the same area have contributed their ideas during the events organised by the Local Community Forum ( part of the community strategy process in Powys ) . Andy Rowland is the Chair of the Forum . " All these ideas have been sorted into a number of themes " , he explained , " but now we need to turn them into a draft action plan for the area . " This means deciding which ones will make a real difference , who will bring them about and how soon , as well as seeing what kind of vision they add up to . " The first meeting will be held at Llanbrynmair Community Centre on Monday 5th July . It will consider education and training , including overcoming barriers to learning . On Wednesday 7th July the meeting at Machynlleth Care Centre will discuss the economy and employment . Key items will include sustainable activity tourism , childcare and creating a distinctive local economy based on local resources . On Monday 12th July , an event at Glantwymyn Community Centre , Cemmaes Road will turn its attention to the countryside and environment , including such issues as waste and recycling . Transport will take centre stage at the Owain Glyndwr Institute on Wednesday 14th July , when the results of the recent Transport Needs Survey will be made available . This event will cover cycling , walking and community transport as well as public transport provision . All meetings start at 7.30 p. m . Further information : Andy Rowland , ecodyfi Manager 01654 703965 Cyril Evans , Bro Ddyfi Communities First Facilitator 01654 700315 </text>
<text id="bofv" url="http://www.sefton.gov.uk/page&3630">
The Department commissions research and pilot projects to gain a better understanding of the local economy , and generate more effective interventions . On behalf of the Borough Partnership , we hold a budget from Neighbourhood Renewal Fund to operate a Research and Development programme ( see below ) . Reports from the programme will be published as they are completed . Research commissioned in 2003/04 Description Sefton 2003 Publication on the SBP Portal and on CD-ROM of a wide range of contextual measures and performance indicators to underpin the review of the Community Strategy . Merseyside Economic Model A consortium of local authorities , TMP , LSC and GoNW led by Liverpool CC has acquired a licence to the Local Economic Forecasting Model from Cambridge Econometrics/IER Warwick . It produces a range of output , value added , sectoral and employment forecasts , for both Sefton as a whole and for Atlantic Gateway SIA . LSC National Employer Skill Survey Acquired a booster sample from the national bi-annual survey for three growth sectors in Sefton : construction , maritime , and ICT . The Survey produces information on hard-to-fill vacancies , skill shortages , skill needs , training infrastructure , and the use of training providers . Sefton ICT Cluster Survey Telephone survey of ICT companies in Sefton to build a capacity register of named companies and identify key issues . Local Labour in Construction An important feasibility and options study into how Sefton can maximise the employment and other benefits of upcoming construction expenditure in the region . Jobwatch A survey by the Low Pay Unit of Jobcentre vacancies in Bootle , Crosby and Southport . Supplies information on pay rates , hours , and compliance with the National Minimum Wage . Southport Works Contribution to a major labour market study undertaken by Sefton CVS for Southport Partnership . Recommends a specialised recruitment and training intermediary for the visitor industries . </text>
<text id="brcu" url="http://www.motheratwork.co.uk/Health/default.asp?article=135">
Thanks to Jamie Oliver our children will soon be getting more nutritious food at school , but it 's time we thought more about what we are feeding them at home and how . Author of parenting bible ' Yes , Please . Thanks ! ' Penny Palmano gives us the low down on family eating . Penny ( centre ) with children Francesca ( 16 ) , Katherine ( 19 ) and Sam ( 17 ) Not only are all our children going to end up obese with diabetes and heart problems but they will have all the social skills of a whelk unless we start to do something about it . And poor nutritional food does not only affect their health but their behaviour as well . We know most children eat far too many fast food products , pre-prepared meals , processed foods , fizzy drinks , snacks , sweets , biscuits , cakes , etc and almost all these products may contain some type of food colouring , preservative , hydrogenated fat , salt and sugar . The additives are a kind of ' food cosmetic make-over ' , disguising poor nutritional food with colour and artificial flavour to make it more attractive to children . But the increased consumption of these foods and the decline in the foods which are good for children , such as fresh vegetables , fruit , fish , meat and cheese , has sadly begun to take its toll . Hyperactivity , moodiness , obesity , long-term health problems and poor intellectual performance can all be connected to a poor diet . Sugar An excess of white sugar can change the normal biochemical ' pathways ' of both , resulting in moody , unmanageable and disruptive children who make everyone 's life a misery including their own . Products made mainly from pure white flour will also convert into pure sugar in the body with the same effect . A can of a popular well-known fizzy drink contains both sugar and caffeine , combining two stimulants . If children drink a can at lunchtime the caffeine will still be in their system by the evening and we know what that means , T-R-O-U-B-L-E . These poor children will not be able to sit still at school or around the dinner table and will find it difficult to fall asleep . Help children to cut down their sugar intake by removing the sugar bowl off the table and administering it yourself ( less and less each time ) and replacing fizzy drinks with water or unsweetened fruit juice . Fats Much has been written about fats in the body . It is now widely recognised and accepted that the body does need fat and that there are good and bad fats . Good fats The brain is composed of 60 % fat and needs an abundance of fatty acids from our diet to function effectively . Essential fatty acids are the good fats . They are found in oily fish such as mackerel , tuna , herring , sardines and salmon and nuts , seeds and cold-pressed oils . These fatty acids are essential for the normal development of the brain , eyes and nervous system . Three very good reasons why parents should not put their children on low-fat or fat-free diets . New research from Oxford university has shown that many children suffering from dyslexia , dyspraxia and ADHD ( attention deficit hyperactive disorder ) which affect children 's ability to listen , think , speak , sit still and write are suffering from a dietary deficiency of fatty acids . We all want what is best for our children so let 's avoid contributing to their future health problems , hyperactivity , moodiness , poor behaviour and under-performing brain by changing their poor diet . Bring back the family meal Processed ' fast'foods are not only responsible for these problems . Because children eat them with their fingers they are partly responsible for the demise of the family meal around a table . Now the odd thing is that ever since evolution we have been educating ourselves away from eating with our fingers and grunting . But since the arrival of fast finger foods combined with TV , video , DVD , computer games , we seem to have come full circle and children are again eating with their fingers and grunting ! Funny old world . The break down of the family meal together around a table has sadly taken its toll in many ways . Firstly , children do not know how to hold conversations with adults , they are having no supervision on how to eat or behave correctly at the table , and finally , it is now reported that the absence of the family meal is causing depression and mental-health problems . All this because we eat pizza in front of the telly ? ? ! ! Sadly , the lack of family meals together has also been connected to rising crime , depression , stress and mental-health problems among adolescents . And I always thought it was the family meal that caused these problems , with the over-powering father , the stressed out mother and the arguing children . Well , it is up to you to create a happy and harmonious atmosphere at the table , so the children and yourselves will actually look forward to this time . With so many parents both working , time with their children has been greatly reduced . So the family meal is the perfect way of combining talking with them and continuing their social education and really bonding ' as a family ' . By enjoying regular family meals together and having the opportunity to talk , the family will become very close . How to achieve the modern day family meal Under no circumstances have the television on ! It is very unlikely that both parents will be around early enough during the week to eat with toddlers or young children as a family , so make the effort at the weekend . Children are far less likely to be fussy eaters if their parents are eating with them . Never let children eat on their own at a table , always sit and talk to them and encourage their table manners . Rather than saying , ' Do n't hold/talk/eat etc. . ' use the term ' Remember '. . ' it 's far less reprimanding and much more cajoling . Table manners are just another learning curve . When it is possible , all eat together in the evenings and re-introduce Sunday lunch . Depending on your children 's ages and homework load , it is very easy to remain at the table after supper and all play cards or a short board game , which keeps the family together and cuts down on TV and computer time . A double whammy ! Always get a child , whatever age , to help lay the table and , if you have more than one child , let them take it in turns . The meal Whoever is cooking should prepare something that does n't take a great deal of last minute attention , so that the majority of time is spent at the table rather than standing at the cooker . But if the thought of having to prepare a meal and cook it sends you rushing for the bottle , prepare something simple like a salad with a ready-roasted chicken and a baked potato . The last thing the family needs is a gin-sodden cook having a nervous breakdown or the children losing their entire set of milk teeth on the first mouthful . Stay calm , have fresh fruit for dessert , followed by cheese and biscuits . Offer children water or unsweetened fruit juice , as high-sugar fizzy drinks will make it harder for them to sit still . Relax The key to a happy time at the table , which is the most beneficial for the children , is for the parents to be relaxed , happy and getting along . So do n't bring up any issues that might spark an argument . If siblings are likely to squabble , do not let them sit next to each other . Tell your children amusing stories and encourage them to do the same . Laughter is great for bonding and relieving stress . Always listen and stay interested in your children 's stories and opinions , after all it 's very demoralising for a child ( or adults ) while recounting a story , to watch their audience rapidly losing the will to live . But do n't worry , just because you have started to eat and talk together as a family does n't mean that you ca n't all enjoy a weekly take-away pizza with your feet up in front of the TV together . Penny Palmano is the author of the parenting bible , ' Yes , Please . Thanks ! ' . Visit the mother@work members Book Club to read a review and take advantage of the member discount . Archives Username : Password : Did you know that if you were a registered user you could add this article to your clipped articles folder ? Editor Denise Tyler tries out the scientific new way to reduce tummy fat - by walking in a vacuum suit . Sounds weird ? It feels a bit weird too , but it does work ! Putting the suit on is harder work than the actual session as it is like a wet suit . You have to strip off and put a thin liner suit on first , then pull on the outer suit which has to fit snugly as the entire thing becomes a vacuum that you then walk on the treadmill in . Tubes are attached to the front of the suit that creat the vacuum and you do get the vague feeling that you now know how cows must feel when they get linked up to a milking machine ! The machine is programmed according to your weight and fitness levels and then you walk opn the treadmill to varying degrees of incline and speed . The idea is to get your heart rate up while the vacuum inside the suit pulls blood into areas it does n't usually get into , i. e . t he tumy and hip areas . Normally when you work out , blood gets diverted into your muscles and that 's why it can be difficult to shift stubborn fat on the stomach and hips . This method , strange though it may seem , actually encourages the blood into those areas , thereby using up the fat . And it does work . I 'm just three quarters of the way though my twelve sessions and I 've already lost just over 4cm off my waist and I feel trimmer . My jeans have gone down a belt hole - clear proof that it works ! You have to be prepared to stick with it as you will book up for twelve sessions , three a week of 40 minutes each . By the time you have changed and showered at the end , expect the whole process to take an hour each time . Contact Lisa at SCUK in Brighton on 01273 688830 for further information or visit www . v acunauttraining . c om to find your nearest centre . If you are a fan of Yoga or are curious to know more about it but have n't the time to attend classes , the this DVD could well be enjoyable and a time saver . Fenella Lindsell and her husband , co-founders of The Art of Health and Yoga Centre South-West London , opened the centre to offer complementary health treatments and related classes to everyone . They had 3 children during the 7 years at the premises and as a result many of the classes and therapies offered were directed at babies , infants and small children . One of the most successful activities was YogaBugs . YogaBugs classes are targeted at children aged 2 ½ to 7 years old . Fenella integrated postures into adventures and creative stories which children love . Since YogaBugs was created at The Art it has developed further to help children from all walks of life and is committed to the on going development of Yoga for Children . I tried the new DVD ( pictured ) with my 3 year old and although I had my doubts she would actually be interested or pay attention long enough , we did in fact manage to follow quite alot of the story telling and integrate some of the moves . The nice thing was , we missed bits because we were laughing so much . She has asked to do it again several times and I enjoy taking part with her . I can see that the benefits would increase with age as children learn to replicate the Yoga positions and understand the breathing techniques . I found it actually quite relaxing to simply spend time doing an activity in my own home with my daughter that did n't involve driving anywhere or needing special kit but that left her happy and me feeling like I had actually stretched out a bit . YogaBugs is now a trade marked company and has taught teachers ' nation-wide as well as Europe , America , Australia and Asia . Classes are also run as after school activities or integrated into the school day . To apply for a discounted copy of the YogaBugs DVD , see our </text>
<text id="ccnl" url="http://www.esporta.co.uk/Clubs/Mids+%26+East+Anglia/Oxford/Promotions/Member%27s+Forum/!+!/CLASS/Advert/DBID/17ea4c66d7bd2c0aeb4513c89cb01afd">
What is the Member 's Forum ? The Forum is a meeting of Esporta Department managers and a representation of the club 's membership . It meets bi-monthly to discuss issues important members , to float new ideas and to consult over changes in club policy . The Forum deals with issues head on , and sets specific action points to be completed . Real improvements happen as a result of member 's feedback ! How do I attend the Forum ? We already have our six positions filled at the moment . However we are will be looking in the future . Please check the Forum Boards to see when spaces are available . If you can represent a wide selection of members , can work with the management team in a constructive way and have the time to spare . Let us know , what your areas of interest are and how you best represent our membership . Who are the currents reps ? Helen Beard : Mobile 07768 474516 Jacqui Cook : Email ctcook2@aol . c om Richard Morgan : Mobile 07710 763474 Kate Adamas : Contact TBC Clyde Britton : Contact TBC Anna Obolenska : Contact TBC We are particularly interested in members who use the studio classes , the children 's Zone , and who represent our younger members . Email addresses and more details of your reps to follow shortly ! Members ' Forum MeetingMonday 4th September 2006 Esporta Team Present : Simon Stokes - General Manager ; Rob Brownsword - Member Services Manager , Adam Curzon - Fitness Manager . Forum Members Present : Richard Morgan , Helen Beard , Kate Adams , Anna Obolensky 1. Attendance Apologies for Jacqui Cook and Clyde Britton who are both on holiday . Simon welcomed our new Member 's Forum member - Anna Obolensky . Anna has been a member of the club since we opened in 2000 and is happy to talk to any members who have concerns they 'd like her to raise . 2. General Manager Update · Large amount of recruitment in last 2 months . Many open vacancies have now been filled : o Emma Halbert is new Children 's Activity Manager and has a wealth of experience with children . She has already started making improvements in the crèche and has big plans for children 's activities throughout the club . o Blair Wilson is the new Food & Beverage Manager . He has managed several restaurants and we should see an improvement in standards in the coming months . o Adam Curzon is our new Fitness Manager , previously working at David Lloyd and Fitness exchange . o Paul Buckingham is the new Maintenance manager and has already got stuck into the role , tackling several problems that have been outstanding . o Jamie Owen is the new Sales Manager and completes the new management team . He is currently completing his training at head office . · New St Edwards Timetable has been agreed and we hope this will cause less friction with members . The controversial swimming times have been fixed for the entire academic year at 2pm to 3:30pm Mon-Fri . This will remain constant and should enable members to plan their schedules to avoid these times . The outdoor pool will remain open as usual . 3. Last Month 's Issues · Despite requests we were unable to recruit a female maintenance manager . However Paul is amply qualified and will be taking on Duty Manager shifts . We should starts to see him as a real presence within the club . · As part of the ongoing parking problem we are trying to crack down on members parking in the family parking spaces . As well as disabled parking stickers on cars we have new notices written by one of the child members . The Forum members thought we should be more harsh but we will try the notices first and see If they work . · There is some concern that some elderly members may be intimidated by the Gym . The area can be off putting even if a program has been written . It was highlighted how important a reassuring staff presence is . Adam was tasked to recruit more Fitness Instructors and improve coverage . He will be trying split shifts as an added tool . The instructors need to be more interactive . · Fitness instructors will be taking PT clients . However all members get free On-Track consultations when joining and any member can book a free program review at any point . This is not advertised enough . It is Important for members to vary their programs . Adam is implementing a new way of managing the fitness staff , we should see results soon . We would like to receive extra feedback on this . · Tap in toilet in the health and beauty area has been fixed . The nails area is starting to look drab and does n't fee plush enough . Members suggested Flowers . There is the potential for a second art exhibition by Sarah Twomey to liven the area . · The suggestion to put more swim steps in has been rejected as impractical at the time being . The far side of the outdoor pool will be an ' adults only ' seating area from next year . It was decided that the outdoor classes did not go down favourable . · Some members are interested in starting water polo . Adam will cost equipment and Rob will collate an interest list . If enough people come forward will hold a match soon . · More storage space for body pump bars is needed in the studio · Changing Room consumables e. g Molton Brown being topped up correctly . Blue centre feed would be useful in the toilet area . The lavatory paper is being stacked too high in the dispensers and is almost impossible to remove . Lockers are again in use overnight . These will be cleared out regularly and rental lockers will be launched . £ 75 or £ 125 locker rental 4. New Issues · People are repeatedly turning up mid way through classes . Janette has spoken to all the instructors about this a few days ago . Some members would appreciatea pilates class mid afternoon . Some studios have been untidy with peoples lunch left there , cakes etc . This is to be stopped . The question was raised as to whether mats get cleaned . Anti bacterial wipes will be sourced for studio two . · The morning opening hours were again questioned and it was reiterated that the doors now stay locked until opening as a security issue . · Toning room is used frequently although it sometimes appears deserted . It is of particular use for rehabilitation and for the elderly . · There should be a separate kids menu In the restaurant . These may need reprinting . 5. Social Events There are several large events planned for the last few months of the year . · We hope to arrange a Christmas party for the start of December . We are currently looking for appropriate locations . More details to follow . · We would like to take a major group to see Creation Theatre Company 's ' 1001 Arabian Nights ' in November . They annually produce a show in a huge tent on the BMW car park . It was decided to try and get a mix of standard and premium tickets for their opening night if possible . Rob is to look into this . </text>
<text id="cgzy" url="http://www.offthetelly.co.uk/interviews/markwright.htm">
Mark Wright is an accomplished writer " currently scraping out a living as a freelance " contributing to various magazines , writing for Big Finish 's range of Doctor Who audio dramas and turning out the odd book along the way ( he 's currently planning to write a guide to the Indiana Jones adventures ) . OTT caught up with Mark as he battled with deadlines to complete his latest book , 1001 DVDs You Should Own , to ask him about his recent publication 24 : Season 2 : The Unofficial Guide , published by Contender Books . OTT : So , how come you did n't write the 24 book for Contender last year ? MARK WRIGHT : I first came to work for Contender when I was commissioned to write the production notes and booklet for the first box set of The Professionals on DVD . Lee Binding , who commissioned me for that work , recommended me to the company 's book division when they were keen to do a guide to the first season of 24 . I was asked to write the book , but unfortunately in the time scale they wanted the finished manuscript , I was working on a Doctor Who script whilst still holding down a 9 - 5 job at What DVD , so it just was n't possible . This was a real shame , as books was a direction I really wanted to go in . Jim Sangster is a mate , and as he had written some highly successful episode guides himself , I happily recommended him . As it was , I was commissioned to write a guide to CSI : Crime Scene Investigation , so I got to do my book after all ( although that never saw the light of day for reasons I sha n't bore you with - but I 've got a fully typeset manuscript sitting on my desk ) . OTT : What was the brief this time around ? Were you looking to follow up on what Jim had done , or take a different direction for the second book ? MARK WRIGHT : When it came to season two , naturally Jim was the first choice to handle it , but he had just got a commission for the official Spooks book , so the project was handed to me . I had just gone freelance , so was incredibly keen . I wanted to keep intact a lot of what Jim had done with the first volume , but take some of the elements into a more humorous direction . The strength of the first book is the mini-essays that discuss a related theme from the episode in detail , and Jim is so good at doing those and basically , I 'm not , so I decided to lose that aspect and expand the categories of the guide . So we get analysis of Jack 's character , and Kim 's dumbness , and I went for sections like " Fashion Police " , that kind of thing . I also wanted some sort of episode review and rating system ( which also satisfies the legal angle of unofficial publishing of this nature ) , so hence the " Debrief " and " Pulse Rate " sections . OTT : What were the actual mechanics of writing the book ? MARK WRIGHT : I was commissioned to wrote the book in October , and had a delivery date of late May to tie in with the transmission of the final episode in the US . So , of course , I did n't start writing until April ! It was easy to write the up front sections as that was all to hand , researchable material like actor profiles and synopsis of the first season . I also had interviews with Dennis Haysbert and Leslie Hope from the publicity rounds for the first season DVD , so that really strengthened the front section . The most difficult thing to write was the actual synopsis of the episodes . The plots are so involved with 24 that you really have to include everything and that can take a couple of hours . It 's very dry writing , and you always wonder if you should be spicing it up with comments and off the cuff lines , but that would probably get in the way . Those are the sections that make the writing process arduous . The fun bits are the categories where you can actually be creative and put your own voice into the writing . I did drag my heels a little bit , so I think I 'd watched the first 10 episodes by the time I started writing . But that was a good idea as the general feel of the season was established by then , all the conventions and characters were in place , so I could work with running jokes by that point . I wrote the main block of the episode guide section at my parents ' in Yorkshire over Easter . I was house-sitting so I had the place to myself and just got my head down . At that stage I was doing around three episodes a day , which is about nine hours work . I ca n't really say how long the book took to write as I dragged my heels so much . Writers can probably get work done in half the time it actually takes them , but we wait until the last possible second before having to do it . There are far too many cups of tea , trips to the shop for a bun , computer-games to play and episodes of Doctors to watch before getting on with any work . OTT : Presumably you came to 24 series two with some preconceptions . What had you thought of the first series ? Were you a hardcore fan ? And what were your hopes for series two ? MARK WRIGHT : Like most people , I thought that season one was highly disjointed , however entertaining . That 's even more apparent when you watch the season back to back on DVD , which was my first experience of 24 . I actually interviewed Leslie Hope when I 'd seen just the first episode ! I would n't say I was a hardcore fan at this point . I thought the real-time aspect got in the way of good storytelling , especially when you watch in the UK and it blatantly is n't in real-time . But the performances were compelling all round , and TV is rarely this entertaining , which will always be 24 ' s virtue . The gimmick is secondary . OTT : How did you think series two compared to the first ? This time around the whole 24 episodes were plotted in advance - do you think that made a difference ? MARK WRIGHT : I thought it was much more polished and confident . There was an air of pushing the envelope a bit , of a team who 'd had chance to play and beat out the main points . At first I thought it was a mistake to detonate the bomb when they did , and was n't sure if they could pull the narrative back from such a high point of adrenaline . But then I realized that the final act was much more contemplative , having the courage to examine the ramifications of that event . OTT : What 's your take on the slightly gratuitous torture sequences this time around , and the continuing plot device of people being locked in rooms ? MARK WRIGHT : Anyone who has heard my Doctor Who plays will know that I 'm never averse to a bit of torture , but perhaps things were taken a little far . It 's a debate that could go on and on . There are bad people in the world who do bad things , and good people in the world who have to do bad things to bad people to get information . I think it 's well within Jack 's character to act in the way he did towards Ali and Marie , and to have our central character die at the hands of torturers made for one of the best cliffhangers in that real adventure serial style . We know Jack will survive , but it 's damn exciting ! I do think that the torture and murder of Paul Koplin in front of Kate Warner was a bit much though , especially when the poor bloke had his old man chopped off . Now that was just cruel . As for the constant turnaround of people being locked in rooms , I think it 's good fun actually . It 's a convention of the series in the same way that running up and down corridors is part of Doctor Who and red shirts dying is part of Star Trek . I do think Palmer should have phoned out for pizza and watched a movie when he was locked up - that was a lovely widescreen TV he had in that room . OTT : Likewise , how do you view Kim 's storylines ? An annoying distraction from the main plot , or a welcome second layer ? MARK WRIGHT : I 'm in two minds about this one . On the one hand , the constant need to have Kim in danger was a bit silly . But then there are moments when she absolutely breaks your heart . Her reaction to Jack 's apparent sacrifice with the bomb was beautifully played by Elisha Cuthbert . I loved the plotline with Kevin Dillon as the loony survivalist , but I think all of Kim 's adventures were justified in that one moment when she guns down Gary Matheson . Jack must force his daughter to become a killer , and it 's a wonderful character moment that really pays off . OTT : What do you think have been this year 's stand-out moments ? Do they compare to the highpoints from series one ? MARK WRIGHT : George Mason was a joy throughout . I cried when he went down with the bomb . That was the best episode by far . The return of Nina Myers was handled well and I was a big fan of the team-up between Jack and Yusuf Auda . It was like a different show , and I suspect that might form something of a blueprint for season three . The cliffhanger ending felt too tacked on to be truly successful , but still fun , although you have to be a real fan to realize the connection back to season one . I had to look twice . I do n't think season one had that many standout moments , aside from Terri 's death . I think the team wanted more " events " this time round , almost playing to the crowd a little too much , but I reckon they pulled it off . OTT : Earlier this year you guested on BBC3 's 24 " fanzine " , Pure 24 . How was the experience of doing live TV ? Do the studio audience collectively watch the episode together as the show suggests ? And what 's your take on this kind of programme ? MARK WRIGHT : Pure 24 was a blast . I was very surprised to be on there , but it was great fun . At the end of the day , I 'm a hack , and then I 'm being flown to Manchester to do some telly . Very bizarre . I 've done TV and radio before from my days working on What DVD magazine so the live aspect was n't too daunting , and I love the atmosphere of a TV studio . The Pure 24 team are lovely , and everybody has a laugh . It was great being on that first show with Lennie James as I 'd seen him in so many things , and he gave me a couple of suggestions for the book , like the drinking game . All in all it was a great experience and one that I 'd love to do again . As far as I know the audience watch the episode together , but the couch guests are across the road discussing the episode with Zara the Assistant Producer . I think shows like this are good if the fan base is there , and 24 seems to have that kind of fan who do want to discuss the episode over the watercooler on Monday morning . Pure 24 sort of preempts that , and I tend to think if the BBC feel there 's an audience for shows like this , then why not ? It 's been successful enough to warrant a third series next year . OTT : How important do you think the real time format is to 24 ' s success ? MARK WRIGHT : I think it might become a hindrance for season three and get in the way of telling a good story . It was fine for the first two as it was almost believable , but I 'm not sure about it for season three . It was a great hook for the audience to begin with , but now we know the characters so well , do we really need it ? Having said that , take away the real-time aspect , and I guess you lose what makes the show so unique . OTT : Where next for the series ? Is there anything left for it to do ? MARK WRIGHT : I think we 'll get a more personal story for season three . You ca n't really get any bigger than a nuclear bomb going off , there 's nowhere else to go , unless you want to do 24 hours of an alien invasion ( now that might work ! ) I think we 'll see things much more from Jack 's perspective , see him happier and back at work , maybe in the field . I would n't like to say if any of the hanging plot strands from season two will be picked up , but from what I 've been hearing it will take place a couple of years later during Palmer 's campaign for re-election ( so it seems he survives ) . And as for Kim being gay ? I think that might be too many people listening to internet gossip ! WITH THANKS TO MARK WRIGHT </text>
<text id="cuua" url="http://www.swcc.org.uk/caving/expeditions/jura05/jura_circ1.php">
The South Wales Caving Club Expedition to The Franche Comte ( The Jura and the Doubs ) 23rd July to 6th August 2005 Franche-Comté is the name given to the vast area of woodland which lies to the north of the French Alps in Eastern France , and stretches southward along the Swiss border for 250km , from Vosges to the Jura . The region is divided into four different départements , the Haute-Saône , Doubs , Jura and Territoire de Belfort , the first three of which all contain important cave systems . The Franche-Comte is brimming with sites of outstanding natural beauty , including Alpine meadows , lakes , cirques , waterfalls , thick forest and some of the most beautiful rivers in France . Glaciation , high rainfall and copious Spring snowmelt has encouraged plentiful erosion on the predominant Jurassic limestone landscape , resulting in a full range of karst features , including of course , several thousand cave systems . Where is it ? ... As you can probably appreciate from the map extract , the area is quite a large one . It nestles up against the Franco Swiss border immediately east of Dijon . We will be based roughly in the middle in a picturesque little town called Ornans which is located on the D67 about 20km south of Besancon . The area is probably best reached using the Dover - Calais or Folkstone - Calais crossings . A route is available which cuts south east around Reims and Dijon which negates the need to get tangled up with Paris . An alternative more elongated route swings up into Belgium and down across Luxembourg to drop back into France at Nancy . The auto routes are all free of toll on this route but it does take a little longer . A little about the local geology . . . . . The region can be divided into three major zones , the Mountains , the Plateau Ridges and the Lowlands . The mountains are located in the east and follow a NE-SW axis along the Swiss border . They are quite small mountains for the area , the highest peak being Cret de la Neige , at 1718m high . A few Alpine style shaft systems can be explored in this zone . Parallel with the mountains lies an extensive series of Plateau Ridges , which range in height from 900m to 400m , stepping down gradually from East to West . These gently undulating agricultural regions , are home to the majority of the caves ( including most of the major systems ) , particularly around the spectacular river gorges separating the ridges . The final region , the lowlands , occupies the north of the region , but includes only a few notable caves , formed in isolated ridges . The waters drain North-West from the eastern mountains to the Saone valley . To get there they have to cross the plateau ridges , for which there are only two possible options , via Cluses ( narrow gorges cutting through the ridges ) or via caves , which is why the majority of cave systems are found within the Plateau Ridges region . The whole region has been subject to quite severe folding and faulting , and this has had a powerful effect on cave development . Underground drainage is predominantly directed along the axis of the folds . Since the dip is generally shallow , underground streams can travel very large distances and the separation from sinks to resurgence can be considerable ( the longest positive trace is from Seignes de Passonfontaine to Source du Maine , a distance of 28km over a vertical range of nearly 500m ) . However , the narrow widths of the synclinal folds acts as a limit on overall catchment areas and consequently many major systems consist of single streamways , albeit of great length . The resurgences are often large and impressive , but almost invariably flooded for a considerable distance . The feeders to these Collecteurs are predominantly vertical , simple shaft systems , of not very great depth ( commonly between 100m and 300m ) . Most peter out in mud chokes and impenetrable cracks , but a few utilise tectonic fractures to connect directly into the Collecteurs . There are probably many more of these , hidden beneath a blanket of alluvium . A third type of cave passage is found in ancient , fossil remnants , located in the higher beds . Due to the relative youth of the Jurassic formation , these are quite scarce , but typically feature large , dry tunnels , often adorned with huge , muddy formations . So what are the caves like ? . . . . . . . The caves of the Franche-Comte are generally simple in plan , with a series of vertical Dales like pots feeding long , linear streamways . This is partly due to the geology and partly due to the relative youth of the Jurassic formations . The caves are commonly wet , muddy and well-decorated , often with large formations . Jurassic limestone can be thinly-bedded and brittle , so care should be taken when climbing or traversing . The weather is generally sunny , but punctuated by sudden and severe thunderstorms . This can create real problems , for the water tends to flash through the caves very quickly . Pitch heads should be rigged as far out of potential flood water as possible and long trips into streamways are best timed to avoid the late afternoons . The vast majority of caves in the Franche-Comte are prone to flooding of one degree or another , so it is best to take some food and survival kit on most trips . On the plus side , the water is likely to drop as fast as it rises , so a few hours wait will normally allow for a safe exit . Choice of personal kit can also be difficult . Many of the dry caves can be very warm , requiring only the lightest of clothing . On the other hand , the wet caves often require full wetsuits . Over 5000 caves have been mapped , the majority of which are horizontal systems . Approximately 100 caves exceed 1km , 50 exceed 2km , and no less than 15 exceed 5km in length . No very deep caves exist , but of the vertical systems , three exceed 300m in vertical range , and more than 50 exceed 100m . The region is equally famous for cave diving and includes some of the most extensive submerged networks in Europe . Here is a short list of the sort of thing available . . . . . Reseau de la Verneau Traverse ( Bief-Boussets to Baudin ) - 9km long , 345m deep . One of the classic French through trips . Big stream , very flood-prone . 12 hour + trip . 4th longest cave in France ( 30km ) . In same class as PSM , Dent de Crolles , Diau , Felix Trombe i. e about as good as it gets . Includes pitches up and down and a 5m free-diveable sump ( do n't worry , can be bypassed ) . Grotte de Chauveroche - 6 km to sump with lots of swimming ( 204 pools ! ! ! ) . Then 6 km back out . Julian Walford , who found Claonaite and Pollballiny reckons it 's the best stream cave he 's ever done . A wet-suit trip . Another French classic . Hard . Gouffre de Pourpeville - 9 km long . Entrance pitches drop into big well-decorated galleries . La Borne Aux Cassots - 15 km horizontal cave with good formations . Combination lock . Part streamway , part big pretty stuff . Gouffre de Granges-Mathieu - 25m pitch to bizarre gate ( climb over ) then lots of pretty passage to fantastically decorated final chamber . Gouffre de la Baume St Anne - Basically a big 85m deep daylight shaft much like Alum Pot . Not much else ( much like Alum Pot ) . The Dutch think it 's fab . Gouffre de Montaigu - Deepest cave in area . Impressive pitches . Gouffre de Vauvougier - Sporting . Over 200 meters deep , its pits and meanders provide numerous surprises . No pretties or big passages though . 10 hr+ hard trips . Baume de la Faviere - Basically Vertical to - 229 metres Caborne de Menouille - Through trip from Gouffre du Cernon possible - but very polluted . Vertical round trip possible from resurgence , including 60m shaft . Gouffre du Mont Ratey - Superb cave . Beautiful and deep but very flood prone . Grotte du Cul de Vau - 4 km long . Underground river . Lots of swimming . . which should be enough to keep everyone going for a while . Plus - Via Ferrata adjacent to Verneau resurgence . Camping ... The campsite is booked ! We have reserved 8 pitches in the area of the site that projects out to the west ( look for 14B on the map ) . Mr Clipstone kindly carried out a reconnaissance of the site and informs us that these are the best ones with a good deal of shade and nice flat pitches . The site itself had been recommended by several well respected cavers and to boot it turns out that the Wessex mega trip this year ( 50 plus attendees ) used the same site . The url for the site is http://www.lechanet.com / . It seems to be a very tidy site with loads of amenities including ' Le Snack Bar ' and of course La Piscine . Camping on the site gives you complimentary access to the Piscine Municipal which is a few hundred metres up the road . Money , Money Money . . . Until we get a better idea of numbers we have only reserved 8 pitches . We are working on the basis that people may want to share pitches and hence reduce the cost . If you would like to reserve a complete pitch then would you be so good as to forward a cheque for £ 40.00 . If you would like to share a pitch would you please forward a cheque for £ 20.00 . Cheques should be made payable to ' Cantabria Expeditions ' Pitches will obviously go on a first come first served basis . If numbers require further pitch reservations I will make these reservations as and when it becomes obvious that we need them . I 'm not guaranteeing that we will get more pitches but it sounds like the area where the Wessex camped ( northernmost triangle ) is pretty open plan and although quite steep and devoid of shade will probably accommodate last minute bookings . One or two of the families have booked the mobil home accommodation available on the site ( no prizes for guessing who ! ) . If you would like to reserve one of these do let me know or speak to the campsite direct . Any further questions answered free of charge on 01202 743632 or thesydney AT btinternet . c om or gary AT dorsetland . c o. u k Gary Vaughan , The Sydney , 6 Frankland Crescent , Poole , Dorset BH14 9PX This page is © 2004-5 South Wales Caving Club . Last updated 25 August 2005 22:00 Contact the webmasters Site map Website history Opinions expressed on the Website are not necessarily those of the Club , Author or Webmasters - or anyone else ! </text>
<text id="eizz" url="http://www.royalhigh.edin.sch.uk/content/subject/modernlanguages/course_s1s2.htm">
Modern Languages S1/S2 Course All pupils at the Royal High School follow a common course in either French or German in S1 and S2 . It is expected that all pupils continue with the foreign language they started in the primary school . The Modern Languages dept has regular contact with each of our associated primaries and we endeavour to acknowledge prior learning at all times . Self and family House and home Hobbies and interests My daily routine Meals / food and drink School and school subjects Travel and transport My town and home area In addition , pupils will learn about the culture and background of the foreign country . Use is made of listening posts , TV and video , internet and the department benefits from having a foreign language assistant from both France and Germany each year . Teaching takes place in whole class groups , which are , where possible , set according to ability and aptitude . The foreign languages assistants can work with smaller groups and can also work within the classroom alongside the class teacher . Pupils are assessed regularly and their progress is recorded as a progression within the 5-14 national guidelines . Pupils can anticipate an assessment at the end of each unit or topic which will allow both themselves and their teacher to measure the progress they have made . Tests are made in all skill areas - reading , listening , speaking and writing . </text>
<text id="fodw" url="http://www.law.warwick.ac.uk/ltj/4-1m.html">
Web Journal of Current Legal Issues in association with Blackstone Press Ltd Bruce Grant and Mike Allen , University of Newcastle upon Tyne http://webjcli.ncl.ac.uk / The Web Journal of Current Legal Issues is the first United Kingdom general law journal to be published purely electronically using World Wide Web . The journal is refereed and published bi-monthly . The first issue was mounted on the Web on 17 March 1995 and the second issue will be mounted in mid-May . Notes for Contributors may be obtained directly from the journal site or from Mike Allen at Newcastle Law School . The journal is the brainchild of Mike Allen and Bruce Grant of Newcastle Law School , at the University of Newcastle upon Tyne . Mike is the journal 's editor and drew together a strong Editorial Board of fourteen members from a number of law schools around the country comprising a Committee of seven members responsible for the editing of the journal supported by seven advisory members . Refereed electronic journals have received recognition from HEFCE for the purposes of the next Research Assessment Exercise , the approach of which has helped generate material for the journal . The journal is published in association with Blackstone Press who are under-writing the venture and who will publish the Blackstone Yearbook of Current Legal Issues which will contain all the articles which appear in the journal . Design and presentation of the journal has been the responsibility of Bruce Grant . Contributions are accepted in data form only , whether by e-mail or on disk . After assessment by the relevant member of the editorial committee and refereeing , the contribution is marked up with HTML tags for browsing on the Web and also converted to rich text format to facilitate printing . The use of postcript files for printing was considered , and may yet be adopted in addition to rtf , but on the whole rtf was felt to be the more commonly acceptable format . Because the journal is first published electronically , it has not been thought sensible to provide page numbers . Traditionally a page-count has been used as a rough measure of the length of articles , but perhaps , as e-journals become established , a word-count will be seen as a better , and universally applicable method of comparison . One of the major advantages of electronic publishing is that articles and comments accepted for publication will be published promptly in the next issue as an electronic law journal does not suffer from space constraints . Too often , long delays between submission of articles and their publication has served to rob many of their topicality and much of their potential impact . This factor of speed of publication has helped provide the focus for the journal which is on current legal issues in judicial decisions , law reform , legislation , legal research , policy related socio-legal research , legal education , information technology and practice . While the focus of the journal is on current legal issues in the United Kingdom ( including European Union matters ) , the editors are keen to receive contributions which adopt a comparative approach . The editors are also keen to encourage academic debate and will welcome responses to articles or comments previously published . Undoubtedly electronic publishing will increase in the future as the potential of the medium is realised . In the first issue of the journal a taster of this potential was provided in an article by Robin Widdison , Director of the Centre for Law and Computing at the University of Durham , which contained links to other sites on the Internet . As more materials are published in this way such links will become more frequent and will totally alter the way in which we write articles or , for that matter , read them . Published in the Law Technology Journal : Vol 4 , No 1 Original publication date : May 1995 Web publication date : April 1997 </text>
<text id="fvms" url="http://www.citizenshipfoundation.org.uk/main/news.php?n20">
News Item : 3 February , 2003 Citizenship to stay at Key Stage 4 Citizenship remains a statutory subject at Key Stage Four under the government 's recently published outline strategy for 14-19 education . The Citizenship Foundation welcomes Citizenship 's inclusion alongside Maths , English , Science , Religious Education and PE in a slimmed down National Curriculum . The essential theme of the proposals is to establish a new coherence and more flexibility from 14 , an approach we hope will see statutory Citizenship provision extended to 19 . New compulsory ' work-related learning ' programmes for all will also be introduced as part of the proposed changes . The Citizenship Foundation 's First Friday seminar on 7 February , hosted by the TUC , will focus on the links between work-related learning and citizenship , with speakers from Middlesex University , the Nuffield Foundation , Ealing LEA and Lambeth Education-Business Partnership . </text>
<text id="guzs" url="http://www.arnside-online.co.uk/care.htm">
High Class Residential Care Home In Beautiful Surroundings Holly Bank Care Home The Promenade Arnside LA5 0AA Telephone 01524 761277 DUE TO RECENT REFURBISHMENT WE NOW HAVE SUPERIOR SINGLE AND COMPANION ROOMS AVAILABLE This well established residential care home is situated on the sea front in the picturesque village of Arnside in the heart of the Lake District Professional , sensitive care is constantly at hand from our friendly and highly qualified care team all of whom contribute to the family atmosphere that make our home so appealing Individual needs are respected and catered for and residents are encouraged to maintain their independence where possible Recent refurbishment of superior single rooms available Spacious lounges with large flat screen T. V . Recently created ultra modern hairdressing room Separate dining room Permanent or short stays available For further details or a brochure contact The Home Manager Holly Bank Residential Care Home The Promenade , Arnside LA5 0AA Tel 01524 761277 </text>
<text id="hhvw" url="http://www.oarsport.co.uk/products/leatherman_micra.php">
Leatherman Micra Stainless Spring-action scissors and personal care features that fit on your key chain are just part of what make the Micra truly unique . Ten useful tools are packed into this tiny classic Leatherman , making it a favorite allover the world . We 've improved the durability on our colored finishes and added a variety of colors to choose from . Covered by our 25-year warranty . The Micra provides unmatched convenience with the precision and durability of a genuine Leatherman . Supplied with sheath . </text>
<text id="hkay" url="http://www.bnp.org.uk/columnists/docdiary2.php?docId=103">
New BNP Councillor Sunday May 14th the Rev Robert West , a Conservative councillor on South Holland District council in Lincolnshire , ' phoned to say he had finally decided to join the BNP , whilst still retaining his council seat . Rob had previously addressed the demonstration outside Leeds Crown court on the opening day of the recent Griffin/Collett trial , and was featured on the BBC TV regional news after being subsequently suspended by Tory central office . In a Press Release Rev . West said : " I have decided to seek refuge from Political Correctness this day by applying for asylum with the British National Party - Britain 's finest and most decent party - in our country 's hour of need . I have done so on the anniversary of the foundation of the state of Israel , and of the secure frontiers needed to uphold the security of the Jewish people . The British people likewise require secure frontiers to uphold their freedoms . We all do . Hell is a place where there are no frontiers or boundaries as anyone who enters a modern class room now knows . Mass immigration and our submersion in the EU has now reached the stage where we must do something . David Cameron has failed to address these issues and has instead defamed those who do . The colonisation of the UK is a Far Right policy of which he should be ashamed . The local Conservative association dealt with an issue of me addressing the BNP - I was tried locally by my peers and with the opportunity to speak in my own defence . I was acquitted as a Christian of all wrong doing , by the local Conservative branch . I was then at once sentenced by the Far Right central office to a lengthy suspension . Central Office has said I should have nothing to do with the Far Right and so that is why I am now having nothing to do with them . If they cannot understand and observe English justice then they are not to be trusted with English governance . The Conservative Party 's list of candidates which deliberately exclude white male candidates in favour of women , non white and homosexual or lesbian candidates , is discrimination of the worst kind . Whilst David Cameron and his merry men pose as saving the planet , they have left their own house in disorder " Council Meeting Rob tells me that at the council meeting days after his defection to the BNP he was voted onto two committees , had respect from colleagues , and was working well with political opponents , many of whom supported his views on race and immigration . He added that so many people on South Holland district council were " fed up " with Tory central office control . There could be more defections soon ... . . See good media coverage on the local BBC site and in The Times From the Sublime to the Ridiculous Content to insult the increasing number of their readers who support , vote for , or are even members of the BNP , newspaper hacks are apoplectic with rage and hatred over our progress . Typical is Richard Stott ( known affectionately as " Stotty " ) writing in the ghastly Sunday Mirror - Under the headline " GOD'S GIFT TO RACISTS " he refers to " the smarmy fruitcakes of the British National Party " and " Nick Griffin 's BNP thugs " . He even predicts " They have been handed all the material [ through Home Office incompetence ] they need to preach their odious brand of hatred , fear , lies and bigotry [ not to be confused with Snotty 's odious brand of hatred , lies and bigotry - Ed ] . They will peddle it to the poor and dispossessed and find fertile ground . Distrust and disillusion have always been the stock in trade of those who seek to sell the all-white Little England false dawns of the BNP . " Snotty proclaims loftily that " This country needs immigrants , all wealthy first world societies do . All civilised countries should offer a haven to those who are oppressed and in danger at home . " He concludes " The only winners from this will be Griffin 's rabble . The men who wrap themselves in hate , masquerading the red white and blue of the Union Jack " . Good old Snotty - tell us , how much do you get paid for writing this crap ? Boycott the Daily Mirror and Sunday Mirror Meanwhile , BNP supporters should stop buying the Mirror , say , once a week at first , then see how much Snotty 's wages will have to be cut as the circulation of Britain 's worst newspaper falls even further . See silly Snotty 's piece here . Even worse ? And finally - mentioning the Mirror as Britain 's worst newspaper , reminds me there is another as bad ( or probably worse ) - the Sun . Readers will be pleased to know that I have taken the Sun to the Press Complaints Commission ( PCC ) over their poisonous centre page fantasy ( May 3rd ) about how , apparently , they think the England football team would look if the BNP " was in power " . The story was originally made up by the Searchlight gang , who are even selling postcards featuring the " England football team " minus black players and minus Beckham ( " quarter Jewish " ) and Rooney ( " part Irish " ) . Under PCC codes on accuracy , papers are not to publish material which is " distorted , misleading or inaccurate " . Seems pretty straightforward to me , but I will keep you up to date at the way I expect the PCC and the editors to wriggle and squirm their way out of this one . The press have been drinking at the last chance saloon for far too long . See here . Do you have a comment to make about this article ? If so write to the usual email address . All material published on these pages represents the personal views of the individual columnists and should not be taken to represent official BNP policy , which is decided by the Chairman after a period of ongoing consultation and discussion at the annual conference each November . </text>
<text id="hzbi" url="http://www.familiesonline.co.uk/article/articleview/1733/1/153">
An Epsom mum has recently set up her own party planning company to help make children 's birthday dreams come true . Marina Chalke , decided to start her business - called Littlepartyplanner - after the birth of her youngest son last year . ' Having organised my older children 's parties in the past , I understood the importance of getting it just right for them ' explains Marina . ' I always wanted something special , but juggling work , a busy mum schedule and organising a party often meant I had bitten off more than I could chew ' . ' There is always so much to organise - did I go for a disco , an entertainer or bouncy castle ? What about the cake ? What about invites ? And where was I going to hold it ? Home was n't always a good option ! ' ' What I needed back then was an expert , who could offer advice on organising a successful party and deciding what kind of theme it should take , but there never seemed to be anyone in my local area to help with the intricate details ' . After having her little boy , Luca , in 2005 she wanted to help other busy mums so that they did not go through the same pressure . So she decided to become the expert herself . Under the guidance of national franchise company Mums in Control , she set about creating a business that meant she could work from home . ' Little Party Planners offers other busy parents the chance to hand over all the hard work that goes into organising a party for the kids , ' says Marina . ' I have a huge list of contacts in the local area , from musicians and venues to cake decorators and bouncy castles , this means the planning can be left to me . ' Parents let me have an idea of what they want and leave it to myself to organise . They just have to turn up with their children and their friends and know everything will be sorted for them . It takes so much pressure out of something that can cause so much anxiety . ' Unfortunately after all her initial hard work starting up her new venture , she stumbled across an obstacle . ' I wanted to approach mums after school , at the school gate where I could speak to them and hand out my leaflet ' she explains ' but as soon as I stepped out of my front door I could n't do it , my confidence had gone and I just did n't know how to conquer this fear ' . This is when the BBC came into play . They were putting together four , 6 minute programmes on going back to work after having a baby and were interested in talking to Marina . ' I was desperate to sort this glitch in my new business venture . I did n't know what had happened to me and needed guidance on how to get my confidence back ' . So with the help of TV Presenter Melinda Messenger and Careers Coach , John Lees she went ahead with the filming to help her readdress her confidence issues . ' John offered me some really good advice ' she says ' In my previous job roles I have been used to endorsing a product , this time the product was me and I was using the wrong approach ' . This realisation has helped Marina to get over the first hurdle of speaking to groups of mums and dads that she did n't know . ' I have since used Johns approach and everything is falling into place . ' Marina could n't be happier about how things are turning out . Being able to work from home has meant that she has been able to spend valuable time with her children . ' It 's the ideal business for anyone , like me , who wants to work but also wants to spend precious time with their children . I am able to fit in much of my planning around them , so I do n't feel I miss out on the important things , ' Marina adds . · For more details on Little Party Planners contact Marina Chalke on 0208 394 0702 or email : marinachalke@littlepartyplanner . c o. u k . Little Party Planner is part of the Mums in Control Franchise network . For details on MiC visit the website : www . m umsincontrol . c o. u k , or call : 0870 0622212 . </text>
<text id="kbmr" url="http://www.ladybird-survey.pwp.blueyonder.co.uk/P_mugo.htm">
( Two varieties : mugo , eastern and uncinata , western ) Dwarf mountain pine This shrub is a native of the mountains around the Mediterranean basin . It has been widely planted in parks and gardens throughout northern Europe and America Like most pines it is host to many phytophagous species such as the pine sawfly . It also hosts adelgids - woolly aphids which are eaten by several species of ladybird . Thus the interest on this site ! All pine ( Pinus ) species have their attractions including our native P. sylvestris . Ladybirds on pines include the eyed , striped , cream-streaked and 18-spots . They are often quite numerous but are not very commonly observed since tend to stay up in the foliage at the tops of trees . Impressive , even beautiful things they may be , but only the most dedicated entomologist would be willing or able to climb a mature pine tree ( right ) . Pinus mugo has the advantage that it is seldom over 2m tall and the non-athlete can examine branch tips with ease . This shrub in Sheffield bore five species during 2004 - the best ladybird plant in the garden . This included the conifer specialist eighteen-spot and cream-streaked ladybirds as well as more generalist species . The most numerous ladybird was the cream-streaked ladybird Harmonia quadripunctata . The sixteen-spotted form ( left ) is hardly cryptic against pine needles although perhaps more so against developing cones and branch tips ( right ) ? In sunlight , the spotless form ( below far right ) seems to fit in better ? However , the larvae and pupae ( below and below left ) seem to blend much better with their environment . This year ( 2005 ) merely a seven-spot has been seen from early September . Not moving and clearly visible - presumably it is just seeking shelter from the weather under a developing cone . Will it stay there all winter - the protection is not great ? </text>
<text id="kjkq" url="http://www.free-internet.co.uk/email/sendmail.htm">
To send a message to someone , you will need to know their exact E-mail address . It is typically the person 's " UserID@their_provider's_name " . E-mail addresses generally do not contain the following - commas , parentheses , or spaces . If you do not know someone 's e-mail address , your best bet would be to simply ask them , or you can try to find them in an Internet Directory such as WhoWhere . c om How do I attach files to E-Mail messages ? You can attach just about any file to an e-mail message and send it anybody on the Internet . The person receiving the file will need the appropriate application to open the file when they get it . For example , the recipient will not be able to view a PowerPoint file if they do not have Power Point Viewer on their system . To attach a file with Outlook Express , click the paperclip icon in the new message window . Enter the location or browse for the file on your system . The attached file will be displayed along with your new message . What is a signature file ? Signature files are text files that are automatically added to the end of e-mail messages . To create one , simply use any text editor such as Notepad . A signature file can be your name , your title , or a hyperlink to your web page . Save the file as a . t xt file . In the Outlook Express window , click on Tools at the top and go to Stationary . Click on the Signature button . You can either enter the text in the window or point to the text file on your system . </text>
<text id="kzix" url="http://www.cs.bham.ac.uk/resources/ums/PythonDoc/api/threads.html">
8.1 Thread State and the Global Interpreter Lock The Python interpreter is not fully thread safe . In order to support multi-threaded Python programs , there 's a global lock that must be held by the current thread before it can safely access Python objects . Without the lock , even the simplest operations could cause problems in a multi-threaded program : for example , when two threads simultaneously increment the reference count of the same object , the reference count could end up being incremented only once instead of twice . Therefore , the rule exists that only the thread that has acquired the global interpreter lock may operate on Python objects or call Python/C API functions . In order to support multi-threaded Python programs , the interpreter regularly releases and reacquires the lock -- by default , every ten bytecode instructions ( this can be changed with sys . s etcheckinterval( ) ) . The lock is also released and reacquired around potentially blocking I/O operations like reading or writing a file , so that other threads can run while the thread that requests the I/O is waiting for the I/O operation to complete . The Python interpreter needs to keep some bookkeeping information separate per thread -- for this it uses a data structure called PyThreadState . This is new in Python 1.5 ; in earlier versions , such state was stored in global variables , and switching threads could cause problems . In particular , exception handling is now thread safe , when the application uses sys . e xc_info( ) to access the exception last raised in the current thread . There 's one global variable left , however : the pointer to the current PyThreadState structure . While most thread packages have a way to store ` ` per-thread global data , ' ' Python 's internal platform independent thread abstraction does n't support this yet . Therefore , the current thread state must be manipulated explicitly . This is easy enough in most cases . Most code manipulating the global interpreter lock has the following simple structure : Save the thread state in a local variable . Release the interpreter lock . ... Do some blocking I/O operation ... Reacquire the interpreter lock . Restore the thread state from the local variable . This is so common that a pair of macros exists to simplify it : Py_BEGIN_ALLOW_THREADS ... Do some blocking I/O operation ... Py_END_ALLOW_THREADS The Py_BEGIN_ALLOW_THREADS macro opens a new block and declares a hidden local variable ; the Py_END_ALLOW_THREADS macro closes the block . Another advantage of using these two macros is that when Python is compiled without thread support , they are defined empty , thus saving the thread state and lock manipulations . When thread support is enabled , the block above expands to the following code : PyThreadState *_save ; _save = PyEval_SaveThread( ) ; ... Do some blocking I/O operation ... PyEval_RestoreThread(_save ) ; Using even lower level primitives , we can get roughly the same effect as follows : PyThreadState *_save ; _save = PyThreadState_Swap(NULL ) ; PyEval_ReleaseLock( ) ; ... Do some blocking I/O operation ... PyEval_AcquireLock( ) ; PyThreadState_Swap(_save ) ; There are some subtle differences ; in particular , PyEval_RestoreThread( ) saves and restores the value of the global variable errno , since the lock manipulation does not guarantee that errno is left alone . Also , when thread support is disabled , PyEval_SaveThread( ) and PyEval_RestoreThread( ) do n't manipulate the lock ; in this case , PyEval_ReleaseLock( ) and PyEval_AcquireLock( ) are not available . This is done so that dynamically loaded extensions compiled with thread support enabled can be loaded by an interpreter that was compiled with disabled thread support . The global interpreter lock is used to protect the pointer to the current thread state . When releasing the lock and saving the thread state , the current thread state pointer must be retrieved before the lock is released ( since another thread could immediately acquire the lock and store its own thread state in the global variable ) . Reversely , when acquiring the lock and restoring the thread state , the lock must be acquired before storing the thread state pointer . Why am I going on with so much detail about this ? Because when threads are created from C , they do n't have the global interpreter lock , nor is there a thread state data structure for them . Such threads must bootstrap themselves into existence , by first creating a thread state data structure , then acquiring the lock , and finally storing their thread state pointer , before they can start using the Python/C API . When they are done , they should reset the thread state pointer , release the lock , and finally free their thread state data structure . When creating a thread data structure , you need to provide an interpreter state data structure . The interpreter state data structure hold global data that is shared by all threads in an interpreter , for example the module administration ( sys . m odules ) . Depending on your needs , you can either create a new interpreter state data structure , or share the interpreter state data structure used by the Python main thread ( to access the latter , you must obtain the thread state and access its interp member ; this must be done by a thread that is created by Python or by the main thread after Python is initialized ) . PyInterpreterState This data structure represents the state shared by a number of cooperating threads . Threads belonging to the same interpreter share their module administration and a few other internal items . There are no public members in this structure . Threads belonging to different interpreters initially share nothing , except process state like available memory , open file descriptors and such . The global interpreter lock is also shared by all threads , regardless of to which interpreter they belong . PyThreadState This data structure represents the state of a single thread . The only public data member is PyInterpreterState * interp , which points to this thread 's interpreter state . void PyEval_InitThreads ( ) Initialize and acquire the global interpreter lock . It should be called in the main thread before creating a second thread or engaging in any other thread operations such as PyEval_ReleaseLock( ) or PyEval_ReleaseThread( tstate ) . It is not needed before calling PyEval_SaveThread( ) or PyEval_RestoreThread( ) . This is a no-op when called for a second time . It is safe to call this function before calling Py_Initialize( ) . When only the main thread exists , no lock operations are needed . This is a common situation ( most Python programs do not use threads ) , and the lock operations slow the interpreter down a bit . Therefore , the lock is not created initially . This situation is equivalent to having acquired the lock : when there is only a single thread , all object accesses are safe . Therefore , when this function initializes the lock , it also acquires it . Before the Python thread module creates a new thread , knowing that either it has the lock or the lock has n't been created yet , it calls PyEval_InitThreads( ) . When this call returns , it is guaranteed that the lock has been created and that it has acquired it . It is not safe to call this function when it is unknown which thread ( if any ) currently has the global interpreter lock . This function is not available when thread support is disabled at compile time . void PyEval_AcquireLock ( ) Acquire the global interpreter lock . The lock must have been created earlier . If this thread already has the lock , a deadlock ensues . This function is not available when thread support is disabled at compile time . void PyEval_ReleaseLock ( ) Release the global interpreter lock . The lock must have been created earlier . This function is not available when thread support is disabled at compile time . void PyEval_AcquireThread ( PyThreadState *tstate ) Acquire the global interpreter lock and then set the current thread state to tstate , which should not be NULL . The lock must have been created earlier . If this thread already has the lock , deadlock ensues . This function is not available when thread support is disabled at compile time . void PyEval_ReleaseThread ( PyThreadState *tstate ) Reset the current thread state to NULL and release the global interpreter lock . The lock must have been created earlier and must be held by the current thread . The tstate argument , which must not be NULL , is only used to check that it represents the current thread state -- if it is n't , a fatal error is reported . This function is not available when thread support is disabled at compile time . PyThreadState* PyEval_SaveThread ( ) Release the interpreter lock ( if it has been created and thread support is enabled ) and reset the thread state to NULL , returning the previous thread state ( which is not NULL ) . If the lock has been created , the current thread must have acquired it . ( This function is available even when thread support is disabled at compile time . ) void PyEval_RestoreThread ( PyThreadState *tstate ) Acquire the interpreter lock ( if it has been created and thread support is enabled ) and set the thread state to tstate , which must not be NULL . If the lock has been created , the current thread must not have acquired it , otherwise deadlock ensues . ( This function is available even when thread support is disabled at compile time . ) The following macros are normally used without a trailing semicolon ; look for example usage in the Python source distribution . Py_BEGIN_ALLOW_THREADS This macro expands to " { PyThreadState *_save ; _save = PyEval_SaveThread( ) ; " . Note that it contains an opening brace ; it must be matched with a following Py_END_ALLOW_THREADS macro . See above for further discussion of this macro . It is a no-op when thread support is disabled at compile time . Py_END_ALLOW_THREADS This macro expands to " PyEval_RestoreThread(_save ) ; } " . Note that it contains a closing brace ; it must be matched with an earlier Py_BEGIN_ALLOW_THREADS macro . See above for further discussion of this macro . It is a no-op when thread support is disabled at compile time . Py_BEGIN_BLOCK_THREADS This macro expands to " PyEval_RestoreThread(_save ) ; " i. e . it is equivalent to Py_END_ALLOW_THREADS without the closing brace . It is a no-op when thread support is disabled at compile time . Py_BEGIN_UNBLOCK_THREADS This macro expands to " _save = PyEval_SaveThread( ) ; " i. e . it is equivalent to Py_BEGIN_ALLOW_THREADS without the opening brace and variable declaration . It is a no-op when thread support is disabled at compile time . All of the following functions are only available when thread support is enabled at compile time , and must be called only when the interpreter lock has been created . PyInterpreterState* PyInterpreterState_New ( ) Create a new interpreter state object . The interpreter lock need not be held , but may be held if it is necessary to serialize calls to this function . void PyInterpreterState_Clear ( PyInterpreterState *interp ) Reset all information in an interpreter state object . The interpreter lock must be held . void PyInterpreterState_Delete ( PyInterpreterState *interp ) Destroy an interpreter state object . The interpreter lock need not be held . The interpreter state must have been reset with a previous call to PyInterpreterState_Clear( ) . PyThreadState* PyThreadState_New ( PyInterpreterState *interp ) Create a new thread state object belonging to the given interpreter object . The interpreter lock need not be held , but may be held if it is necessary to serialize calls to this function . void PyThreadState_Clear ( PyThreadState *tstate ) Reset all information in a thread state object . The interpreter lock must be held . void PyThreadState_Delete ( PyThreadState *tstate ) Destroy a thread state object . The interpreter lock need not be held . The thread state must have been reset with a previous call to PyThreadState_Clear( ) . PyThreadState* PyThreadState_Get ( ) Return the current thread state . The interpreter lock must be held . When the current thread state is NULL , this issues a fatal error ( so that the caller need n't check for NULL ) . PyThreadState* PyThreadState_Swap ( PyThreadState *tstate ) Swap the current thread state with the thread state given by the argument tstate , which may be NULL . The interpreter lock must be held . </text>
<text id="lfwv" url="http://www.thisismoney.co.uk/news/columnists/article.html?in_article_id=405873&in_page_id=50002">
ALEX BRUMMER , DAILY MAIL CITY EDITOR Ratcatcher poisons pensions Alex Brummer , Daily Mail 21 December 2005 THE attempt by Rentokil to abrogate its contract with employees inside its defined salary pension scheme should be fiercely opposed . If the workers concerned are well enough organised then they could almost certainly mount a legal challenge . They could also follow the example of workers in the public sector and at Centrica , and threaten to bring the company to a halt by withdrawing their labour . The attempt to end accruals to defined benefit pension plans could ride roughshod over contract law and the rights of trustees . Senior business figures also believe that the employees concerned may well have a challenge to make under employment law , arguing that the change in pension arrangements is such an important part of their compensation package that it amounts to constructive dismissal . Efforts by second-line firms like Iceland to abolish defined benefit pensions for the existing workforce met with stiff resistance . When chairman Brian McGowan of Rentokil was seeking to fend off the unwanted attentions of Sir Gerry Robinson neither he nor his executives mentioned plans to poison the future retirement of its workforce . Paradoxically , employees might have been better protected had Robinson succeeded , since a change of control would have required approval by the Pensions Regulator . Each successive move by Labour to reform pensions has served to undermine private schemes . In addition to the 1997 tax raid , the government has added to the cost of pensions by imposing new reporting requirements and most recently through the Pensions Protection Fund . Moreover , the Turner report , by floating the idea of automatic enrolment for workers and lower compulsory contributions for employers , in many ways encourages companies to think about a future in which they can cut their pension costs . The private pensions crisis becomes more serious by the day . Whereas it is possible for the Royal Mail to solve its pension shortfall by loading up the price of a first class stamp to 39p , most companies operating in competitive markets do not have that option . Broker Citigroup has downgraded the shares of ICI ( in which I hold shares ) because of an estimated rise in its pensions deficit of £ 200m to £ 350m . If it sought to raise the price of paint or perfume ingredients to cover the cost it would be slaughtered . The Rentokil decision should not be seen as a signal to FTSE 100 companies that they should follow the same route . All parties need to play a greater part in saving private pensions . Companies and employees need to increase contributions . The government needs to rethink the new rules imposed and offer much more generous tax incentives to Footsie firms willing to resolve their own pension deficits , rather than shuffle the responsibility off to the state . Card retreat LLOYDS TSB having stonewalled our inquiries about the impending sale of Goldfish to Morgan Stanley , has now announced the deal to the market . No doubt the £ 1bn raised will be useful at a time when the bank has had to raise provisions for endowment mis-selling by its Scottish Widows arm . The Goldfish sale does not make a great deal of sense for a leading retail bank . The economics of credit cards are all about scale and if the 800,000 Goldfish customers are useful to Morgan Stanley they would have been just as helpful to Lloyds which already has 5m credit card customers . It is always very nice to make a turn and Lloyds TSB has come out of Goldfish with a modest profit estimated at £ 70m having originally bought the brand from Centrica . But the return can hardly be considered stellar . Indeed , it could have made as much by simply deploying the capital in the money markets . Terri Dial 's first major decision as head of retail banking is to retreat from a business which rivals like HSBC - which bought the M&S credit card book - still believe has a future . Lloyds TSB has more explaining to do . HBOS hit HBOS , the Halifax Bank of Scotland group , prides itself on the brilliance of its corporate banking teams . It was among the main financial backers of Philip Green in his conquest of the High Street and was ready to back the Arcadia boss in taking over Marks & Spencer in 2004 . Now , however , Bank of Scotland will take an estimated £ 5m hit from the closure of 160-year-old off-licence chain Unwins , where the family was bought out earlier this year . It could also suffer as a result of the accounting mess at music group Sanctuary . Not every entrepreneur is a Philip Green . Other stories : Rentokil chief urges competition shake-up Rentokil axes 1,700 jobs US pest firm takes Rentokil bait LATEST NEWS AND SHARE DATA FOR COMPANIES IN THIS REPORT </text>
<text id="ljrm" url="http://www.learningservices.gcal.ac.uk/synergy/03/scwbl.html">
The eLearning Innovation Support Unit GCU Digital Video Project Knowledge , Work & Learning OCL International Exchange Programme Cisco networking academy Listen & learn through the web 10 rules of IT security The other September 11th ( 1973 ) C&IT Help Column : Meeting Maker Breaking through the walls It 's a fair cop : The Scottish Centre for Work Based Learning The Scottish Centre for Work Based Learning ( SCWBL ) has just had an arresting encounter with Strathclyde Police . No , it is not what you think . The Strathclyde Police Training College , based in Jackton near East Kilbride , has just agreed to a work based learning programme in training and learning for its staff of police trainers . This will be entirely designed and delivered by the SCWBL . The college recruits police officers who are at the leading edge of their specialism to train other police officers - in ICT , for example . These trainers stay on average three years in the college before returning to normal duties . So there is constant movement of officers ( or students as we would now like to call them ) . The intention is to make the work based learning programme compulsory guaranteeing a healthy supply of students . The officers have a qualification up to level two , so by undertaking six modules at level three with Glasgow Caledonian University over their stay at Jackton , they will be able to graduate with a general degree . The curriculum will cover : Personal and Professional Development ; Teaching and Learning ; Leadership , Motivation and Group Dynamics ; Curriculum Development including Training Needs Analysis ; Quality and Evaluation and Organisational Culture and Change . Supporting materials will be available in paper based format for use during workshops . However , for those unable to attend workshops , or perhaps as well as for use during workshops , materials will also be available on the University 's online managed learning environment system - Blackboard . The online materials will also include additional materials such as websites , further reading , student activities and formative assessments . One important aspect of the course from the Police Force 's point of view is that Diversity - equal opportunities awareness - will run through all the materials and all the assessments . John Queen who has been working with the Strathclyde Police for some time on the TLTM programme and Alison Nimmo who provided exemplar materials for the discussions with the police force are delighted with the decision of the police . They are looking forward to supporting the first cohort of students/officers when they begin the course in April this year . Next article : Caledonian Programme : one year on Credits Writer : Vince Mills Senior Lecturer , The Scottish Centre for Work Based Learning E : v. m ills@gcal . a c. u k </text>
<text id="lptf" url="http://www.nisp.co.uk/pooled/articles/BF_NEWSART/view.asp?Q=BF_NEWSART_95582">
The Science Park has announced that it will start construction early next spring on a new facility at its Queen 's Island headquarters , Belfast . The four-story , 40,000 sq ft building will join the Innovation Centre , ECIT and a 20,000 sq ft building due to open in summer 2005 . The new facility will be known as White Star House in recognition of the shipping line which commissioned Harland & Wolff to build the Titanic at Queen 's Island over 90 years ago . Project architects on the scheme are Ferguson McIlveen . Commenting on the announcement , Norman Apsley , CEO of the Science Park said : ' This is another landmark stage in the Science Park 's development . With 75 % of the Innovation Centre already let or committed , White Star House is a logical progression in the workspace package we can offer . ' While the Innovation Centre has units available in multiples of 2,000 sq ft , White Star House will provide larger units - from c. 5,000 sq ft up to a maximum 35,000 sq ft - providing space for ventures which outgrow the Innovation Centre as well as larger businesses . ' As with all the facilities being developed by the Science Park , the emphasis is upon providing flexible and sustainable space that adapts easily to occupants ' changing needs . According to John Beattie , the Science Park 's Operations Manager and concept designer of the facility , White Star House represents advanced building design thinking . ' This is an intelligent building with several innovative features that will help White Star House meet the requirements of the Carbon Trust 's ' Low Carbon Design ' initiative and make it one of the Province 's most environmentally friendly facilities . ' We 're planning to make use of ground water with a constant temperature of around 12°C to cool the building in summer and pre-heat the air for ventilation during the winter . ' Raised floors will provide a generous service void and a flexible method of providing heating and ventilation throughout the work areas . The intentionally exposed underside of the floor slabs will enable occupants to customise their space with the minimum of disruption . ' John Beattie also believes that White Star House will give occupants and the wider Science Park an exciting built environment : ' Although this is very much a working building , extensive use of glass will make it an interesting experience for both those within and without . Apart from stunning views of the Thompson Graving Dock and Belfast Lough , the building 's occupants will also appreciate internal reflections of changing weather conditions outside . ' It 's also anticipated that the external appearance of White Star will change throughout the day as the glass reacts to different light conditions . The external view will be further enhanced by the building 's translucent design which will provide emerging views of the interior as night falls . ' Heritage Michael Graham , Director of Real Estate , emphasised that sustainability and heritage considerations also helped shape the plans : ' Although White Star House is n't going to save the planet , it does represent an environmentally friendly approach to building design which will hopefully become the norm rather than the exception . ' Despite this very modern approach , we 're also conscious of the site 's historical legacy . To reinforce the Titanic memory , its entrance will be flanked by three exposed bow-shaped support pillars housing the building 's elevators - each the same height as the bows of the Titanic and her sister ships , Britannic and Olympic . ' White Star Line will forever be associated with Belfast and the Olympic class ships built here . The building will be a permanent reminder of the technological excellence associated with Queen 's Island and I 'm looking forward to it hosting a new generation of innovators when it opens in 2006. ' </text>
<text id="lqyu" url="http://www.mountainsoftware.co.uk/printpage.asp?REF=/group.asp">
Mountain Software has been supplying software products since the mid 1970 's when a Partnership was formed by six individuals with a range of expertise in the computer industry . The team worked on an array of projects and in 1978 won their first legal client following an IT show . With IT being an emerging science in the legal market place , there were few packages available for small practices to differentiate between the Client Account and General Office funds . For this first client , the software that was produced created that differentiation , thus sowing the seeds of the early PMS ( Practice Management System ) . Building on this , Mountain Software developed its accounting package , time recording systems and case management modules . As the market requirements changed , modules were added , with 14 now in existence . Mountain Software still has that very first client as a loyal user who plays an active role in its continuing development by being Chairman of the User Group . As the company grew , it established itself in the supply of hardware and supporting services . Mountain Software is now able to offer full IT services , from networks , cabling , internet & web services , hardware - PCs , servers , telephony , as well as software . To support its clients , Mountain Software offers comprehensive training services , helpdesks as well as consultancy to ensure that each client understands what is available to him and how best to set up and maintain his IT infrastructure . In 2000 , Mountain Software entered the Coroners ' market and now has over 92 % of the market in England and Wales . In 2002 , it entered the Barristers ' market with two significant acquisitions and now has over 95 % of the market in England and Wales . In 2004 , it acquired G. B . Systems giving it a 25 % share of the Solicitors ' market in Scotland . This is in addition to its 500 existing clients . </text>
<text id="mail" url="http://www.dba.org.uk/aboutdba/chriswood.asp">
Chris Wood graduated from Oxford with an honours degree in Politics , Philosophy and Economics , and started his career as a graduate trainee at Ogilvy ( Benson ) and Mather . In 1976 he joined Craton Lodge and Knight , the specialist innovation and brand development consultancy . He became a director in 1982 and Managing Director in 1984 . Meanwhile the company had floated on AIM , and subsequently became part of the Princedale Goup . In 1997 Chris engineered a successful management buy-out of both CLK and Michael Peters Limited with the backing of 3i , and became the Chief Executive of the new company . Synthesising the UK 's original branding consultancy with one of the great names in design created a company that genuinely embodied both strategic rigour and creative excellence . Following significant organic growth and various acquisitions , the new company re-branded as Corporate Edge in 2001 . In August 2004 a new CEO ( Simon Lake ) was appointed from within and Chris became Chairman . His role is now split between consultancy and business development . In terms of the former he works across the spectrum of branding , innovation and communications assignments , with clients including Cadbury Schweppes , Freeplay , Pfizer , Travelodge and Williams F1 . He also speaks on the various topics above . His wider business development role embraces both the acquisition of new clients and the forward development of Corporate Edge , currently the UK 's leading independent branding consultancy . </text>
<text id="mpxl" url="http://www.surefish.co.uk/culture/books/0804/110804_food_books.htm">
' The sooner we dispatch the snobbery that " West is best , " the better . ' You must have had your head buried in a mountain of Big Macs this year not to know that obesity is killing us . Accusations are piling up alongside our collective fat mountain . Politicians , schools , hospitals and food manufacturers are to blame . And those of us not of broom handle stature are lazy , uneducated or just plain greedy . Such irresponsibility is threatening the very heart of our nation . The war on fat is upon us , as are weapons of mass hysteria . Diet this , fit club that . But is anybody actually tackling the real issues ? Why do we have such a problem with food ? What is a healthy body image ? How come we are overeating when millions die from food shortages ? Well the good news is , there are actually a fair number of books to help us savour all issues regarding food . Here are five to give you some fibre to chew on . Fat is a Feminist Issue Susie Orbach , Arrow £ 7.99 Rightly , Orbach 's classic has been selling for over 25 years . It blows from the table the myth that if only we remembered the millions starving in Africa we would n't over indulge . Rather , she suggests that parents chastising children for leftovers on their plate and reminding them of starving children , are the problem . Accordingly our society has become obsessed with engulfing all in our way and incapable of telling when our bodies are full . Not convinced ? Try her exercise of leaving a mouthful of food on your plate and throwing it away - not for the faint stomached ! Add to that , psychological pressures leading to " comfort eating " and it 's no wonder we are in a mess . The expectations on women especially , to smile passively , lead us to swallowing our anger and depression . Again there are numerous exercises to help us take control of our bodies and minds . A far more useful book than those proscribing foods , which often lead to cravings followed by guilty bingeing . What Would Jesus Eat ? Dr Don Colbert , STL £ 16.99 WWJD bracelets are out . What you really need is a WWJE fridge magnet . Well you do if you go along with Dr Don Colbert anyway . If you want a decent book on the whys and wherefores of healthy food then this is as good as any . There is nothing too groundbreaking however with the mantra of wholegrains - good , French Fries - bad , forming the general advice . The Christian physician also takes a welcome look at the need for free range cattle and kosher meats rather than intensive farming . But , and with such a title there has to be a but , to justify good eating Colbert relies on the often spurious use of bible verses . For example , Jesus referring to God being like a mother hen , points to the fact that he ate chicken - apparently . What is in essence a useful book , becomes a sad reflection of the fact that some Christians will only follow common sense if preceded by " Jesus said . . . " PS . If you are really keen there is an accompanying cookbook . Fat Land Greg Critser , Penguin £ 6.99 Critser like so many of us , was overweight . It was only when he nearly caused an accident and was called " fatso " he decided to do something about it . This decision led to a journey into the world of fat reduction and a discovery of some of the real causes behind America 's obesity problem . Critser was quick to realise that obesity is intricately linked to class and wealth . The book is full of frightening figures showing how poor communities are more likely to suffer obesity related health problems than the rich . The availability of decent education that is not sponsored by Pizza Hut , MacDonalds or other such health aficionados is limited . As is good proactive , preventative healthcare . These are not exactly revolutionary claims but Crister 's exploration of how " bad foods " such as sugar and fats are subsidised more than healthy foods is illuminating . Do n't be put off by the American slant as much of the book has relevance in the UK too ; not least because we are fast following in their footsteps , both culturally and in body shape . We are provided with a well researched , readable book that exposes some of the real causes of Western obesity . It is not just individual greed and lack lustre will power that is to blame . So We Shall Reap Colin Tudge , Penguin £ 8.99 Highly critical of the short termism and lack of diversity in our food production , Tudge argues that instead of starvation being a reality for the majority world , all people should be able to eat for time immemorial . That is , if we change our attitudes . Tudge , a zoologist and a Research Fellow at the Centre of Philosophy at LSE does not eschew science . He is not an organic fetishist with simplistic answers , but he does rigorously examine the need for more regional farming and learning from traditional methods . The sooner we dispatch the snobbery that " West is best , " the better . Alongside his historical account of humanity 's ability to farm , he writes that we are spiritual beings and therefore have a need to look after the land and wildlife around us . Our status as intelligent beings also brings with it the compunction to design sustainable farming methods that will provide food for tens of thousands of years . Sadly he does not examine fully these claims . I passionately believe he is right , but on a daily basis , humanity refuses to live its responsibility . Let 's just hope that some people may start to act on this important book . The Apologist Jay Rayner , Atlantic Books £ 10 After discovering one of his columns has led to the suicide of a restaurateur , food critic Marc , decides to apologise . This leads to an all-consuming desire to apologise to everybody he has sinned against - ever . The UN are quick to pick up on his passion and make him Chief Apologist and task him with leading countries to apologise to each other for historical hurts . A new life starts for this man who has struggled with the meaning of a healthy body image since childhood . As weight is lost , Marc discovers that gluttony and greed affect far more than a person 's feeding cycle . Is love of good food a crime ? Do we assume that only rich people have sophisticated taste buds ? How do we learn to love one another and ourselves ? All these questions and more are tackled with dark humour interspersed with descriptions of food , which are almost erotic in detail . Forget diets , forget health gurus , Jay Rayner has the answer to our obesity ; we are broken human beings . We might sort out one problem but are just too good at simply causing another . A superb morality tale for all those who think greed is simple issue . </text>
<text id="mtps" url="http://www.newtsnni.gov.uk/actionplan/04b.htm">
4.3.1 A major priority for the New TSN Unit during the first year of the policy was to ensure that Departments and others had the guidance and advice they needed effectively to implement New TSN ; and that appropriate arrangements were in place to enable Departments effectively to work together . 4.3.2 The Unit worked with trainers from across Departments to explain the importance of New TSN training . It produced core training materials , for use by all Departments which explained New TSN principles and their implementation . It provided seminars to guide Departmental trainers and policy makers on the use of the material and on adopting these to suit individual needs . These were followed up with training ' clinics ' , small intensive group sessions to discuss issues arising from the delivery of training across Departments . 4.3.3 The Unit gained ' hands on ' experience of training by providing training sessions within OFMDFM . The Unit also provided additional advice and support to individual trainers from a number of Departments . The content of the core training materials have been kept under review , and , where necessary , amendments made in the light of their use . 4.3.4 An important aspect of the Unit 's work is to advise , and where necessary , challenge Departments on their implementation of New TSN . The Unit fulfills this role by developing and nurturing an understanding of each Department 's responsibilities and range of business . Undertaking bilateral meetings and assisting in the consideration of issues concerning the implementation of New TSN . 4.3.5 The New TSN Unit reviewed the cross-Departmental groups on New TSN Action Plans and Promoting Social Inclusion Priorities , which had been established under Direct Rule . It concluded that , in the Devolved context , a single New TSN Steering Group whose terms of reference amalgamated the responsibilities of both these groups would ensure greater cohesion in delivering all aspects of work on New TSN . The New TSN Steering Group was established in September 2000 . 4.3.6 OFMDFM also had a crucial role in ensuring that New TSN was fully taken into account in cross-Departmental reviews on initiatives led by other Departments . This role is exercised primarily through membership of cross-departmental Working Groups . However , the Department also contributed advice and information on an ad hoc basis , for example , the Taskforce on Employability and Long Term Unemployment established by the Minister for Employment and Learning in March 2001 and the review of public procurement initiated by the Minister for Finance and Personnel . </text>
<text id="mtqb" url="http://www.hummersknott.org.uk/Stud_Res/Info_Tec/Info_ICT/KS3/databases/relational_databases.htm">
What is a relational database ? A relational database consists of two or more tables whose records are related to each other . The relationship is created by linking a field in one table with a field in another table . Both these fields must be exactly the same datatype . In one of the tables it must be a Primary Key . Key fields are the heart of relational database management . The value in a key field uniquely identifies a particular occurrence of a given record type . For example a customer record might have a key field called Account and a particular customer 's Account field might have a value of 123 to distinguish it from others . Storing copies of the value 123 in order records generated by that customer lets us relate the customers and order records . Only one customer record can have an account number of 123 but many order records can have the value 123 , relating them to the same customer . This is called a one-to-many relationship . The golden rule of relational database design : Never store the same information twice unless there is a very good reason The advantage of a relational database is that there is no more duplication , other than the link fields . The following diagram illustrates this . The Primary Keys for each table are in blue . ( Only a few fields are shown . ) Looking at the customers table , if we want to know more about the rep for each customer , all the data is contained in the Sales Rep table . The sales rep for customer accounts 123 and 124 is AJ and this links to the Primary key AJ in the sales Rep table , so we see his name is Andy Jordan . If we want to know what orders Ronalds has placed , the details can be found in the orders table , linked via the Primary Key Accounts . Relationships in Access Let us see how Access displays relationships . Lets also use an application which you may have had experience of yourself - a library . Here are the relationships in a simple library system . How it works There are two basic tables in a library - the Books table contains all the details of the books in the library . If there a many copies of a book , then only way you can tell them apart is the Accession Number . This is the Primary Key for the table . The second table is the Members table . This contains all the details about the members . There may be two people with the same name etc . so a different membership number is assigned to each member . This is the Primary Key for this table . These two tables become linked , when you take out a book , by means of a third table - the Transaction table . This assigns a separate number to every transaction . This is the Primary Key for this table . When you go to a library all you do is give the librarian your library card ( which has a barcode number on it ) . The librarian scans the card and scans the barcode on the book you are taking out . The two numbers are being linked together in this transaction . The computer assigns the day 's date and the number of the transaction . This completes a new record in the transaction table . If they need to find out your phone number , the link will take them to the Members table and your record . If they need to find out the title of the book you took out , the link will take them to the Books table and the record for that book . Imagine how long it would take if they had to write down your details and the book details ( or even just the name and the title of the book ) every time ! How to set up relationships Firstly , you must plan the tables very carefully . It is essential that each table contains a Primary Key The fields to be related are the same datatype and the same format Once you have created your tables you should set up the relationships before you enter any data . It can be done later , but there are often problems with data not matching etc . If the relationships are created first , the computer will not allow you to enter data that breaks the rules . </text>
<text id="omzz" url="http://www.swindon-speedway.co.uk/modules.php?op=modload&name=News&file=article&sid=175&mode=thread&order=0&thold=0">
It has been almost a year since the sad passing of Rafal Kurmanski . We would like to mark the occassion of remembering Rafal , by posting up again , his rider profile from our 2004 web-site . Gone but not forgotten . Rafal Kurmanski was born in Zielona Gora , Poland on 22 August 1982 and his was a much sought-after signature in Britain , having performed so well for his hometown club . Terry Russell finally clinched a deal to bring the youngster to these shores in 2004 , making the upcoming star a full club asset of Swindon Speedway in the process . Kurmanski duly arrived at the expense of the ' doubling-up ' reserves and made his Pebley Beach Robins ' debut at Poole on 12 May , when scoring a single point from four starts . The following evening , his first home appearance against the same opponents was quite remarkable inasmuch as after running two lasts , he featured in successive 5-1s with Leigh Adams and Andy Smith to finish with a tally of 5+1-points . Prior to joining Swindon , a career highlight was 10-points and sixth place in the World Under-21 Final at Slany , Czech Republic on 7 September 2002 . Then , last season , he was given a wildcard entry into the European Grand Prix , held in Poland at the Slaski Stadium on 17 May . Kurmanski started quietly with a third place finish in heat two , but then facing elimination he held his nerve to win heat six from compatriot Sebastian Ulamek , while both Bjarne Pedersen and Peter Karlsson headed out . That took Kurmanski on to heat twelve , but he was unable to repeat his earlier heroics and a last place behind Krzysztof Cegielski , Rune Holta and Tomasz Bajerski meant an early shower . Later that year , he again reached the World Under-21 Final , staged at Kumla , Sweden on 13 September , when he netted 8-points to occupy seventh position overall . </text>
<text id="oojb" url="http://www.engender.org.uk/justice.htm">
Women in focus : Crime and justice The police returned details on 26,000 incidents of domestic abuse recorded between April and December 1999 . However , the majority of incidents recorded ( 57 % ) comprised behaviour that did not lead to the recording of a crime or offence . If an incidence of domestic abuse did lead to a crime or offence being recorded , the most common occurrence was a recording of an offence of petty assault ( 21 % of all incidents ) or breach of the peace ( 18 % of all incidents ) . Crimes which are generally regarded as more serious than offences , were only recorded in respect of 5 % of all incidents . Where a crime was recorded , it was likely to be vandalism ( 1.6 % of all incidents ) or , a non-sexual crime of violence ( 1.5 % of all incidents ) . Males accounted for 87 % of all convictions in 1999 : more males than females were convicted for almost all crime and offence categories . The main exception to this was " other " crimes of indecency , where females accounted for 82 % of what are mainly offences related to prostitution . The other categories where females formed a higher than average proportion of those convicted included shoplifting ( 28 % ) , " other theft " ( 21 % ) , and the " other " miscellaneous offences category ( 15 % ) . The latter category mainly relates to non-payment of a television licence . These three categories accounted for 13 % , 7 % and 7 % respectively of all ; convictions for females : the corresponding proportions for males were 5 % , 4 % and 6 % . </text>
<text id="opab" url="http://www.heros.org.uk/home_sub.asp?page=2">
to view a press release issued on behalf of the East Yorkshire PCT and Yorkshire Wolds & Coast PCT , which concerns their last ever AGM and annual report . the East Yorkshire PCT and the Yorkshire Wolds & Coast PCT are merging together , and from the 1st October 2006 they will collectively be known as the East Riding of Yorkshire PCT . 31 st August 2006 Give YOUR views on Local Mental Health Services Humber Mental Health Teaching NHS Trust and the East Riding of Yorkshire Council provide an integrated service to adults with mental health problems . They need your views and ideas to enable them to further develop this service . Your responses will help shape local community mental health services over the next 3 years . Please complete this questionnaire about services in the East Riding for people of working age with mental health problems . downlo ad here Return it via FREEPOST to the address given on the front of the questionnaire - they can receive your comments until the end of September 2006 . For help completing the questionnaire , more information or to request a copy of the questionanire in a different format , please telephone : 01482 389 110 30 th August 2006 Free Chlamydia Testing for Under 25 's Reminder that pharmacists in Hull offer free chlamydia testing for young adults aged under 25 years Both men and women can pick up kits from independent pharmacies in the city , then send a urine sample for free testing . Results can be posted or sent via e-mail or text . The Chlamydia Awareness Screening Programme Hull & East Riding ( CASPHER ) launched this service almost 2 years ago . For more information contact CASPHER on 01482 336336 or via Conifer House 4 th July 2006 Disability Equality Scheme - Consultation Process Hull & East Yorkshire Hospitals NHS Trust is about to start drafting a Disability Equality Scheme and would like your help . What is a Disability Equality Scheme ? In 2005 the Disability Discrimination Act ( DDA ) came into force and included a disability equality duty for the public sector . This new duty will accelerate the pace of change on disability equality aiming to end the discrimination which can currently occur when institutions fail to take into account the impact upon disabled people when developing services . The scheme must lead to real outcomes and practical improvements in the day to day life and experience of disabled people . What should a Disability Equality Scheme include ? The essential elements which the scheme must include are : How disabled people have been involved in developing the scheme . The action plan . Arrangements for gathering information about performance of Trust on disability equality . Arrangements for assessing the impact of the activities of the trust on disability equality and improving these when necessary . Details of how the Trust is going to use the information gathered , in particular in reviewing the effectiveness of its action plan and preparing subsequent schemes How to get involved We would like to invite you to get involved ; in particular we would like to hear from disabled people , carers and voluntary and community organisations which represent the interests of disabled people . The consultation process will start in July and the scheme will be published , together with a 3 year delivery plan , in December 2006 . To get involved in this process please contact our PALS office on 01482 623 065 quoting ' Disability Equality Consultation ' and leave your name and number , alternatively contact Kirsty Edmondson-Jones -- Clinical Effectiveness Manager via email </text>
<text id="orle" url="http://www.bsg.org.uk/clinical_prac/mar_05/mar05_08.htm">
Carcinoid tumours can occur in the colon , but are usually in the right colon/appendix , and are asociated with flushing , diarrhoea , wheeze and telangectasia . Carcinoid syndrome rarely occurs in the absence of liver metastases . Carcinoid is associated with chylous ascites . Carcinoid metastasising to bone marrow is rarely described . Lymphoma can involve the GI tract , liver , and , bone marrow , but the histology does not support this diagnosis . Myelofibrosis ( MF ) is associated with hepatosplenomegaly and portal hypertension . Portal colopathy is decribed . Colonic mucosal abnormalities are not associated with MF , although impaired immunity could predispose to infective colitis . Langerhans cell histiocytosis is a group of idiopathic granulomatous disorders characterized by the proliferation of specialized bone marrow-derived Langerhans cells and mature eosinophils . In addition to lytic bone lesions which can be painful , multiorgan involvement can affect skin , lymph nodes , spleen and liver . Diffuse colonic involvement is described in children . </text>
<text id="osor" url="http://www.cdp.bham.ac.uk/About_CDP/methods.htm">
In producing a signlist and analysing its contents , it is obviously very important to consider the question of what actually constitutes a " sign " . Much has changed since the traditional Assyriological signlists were first produced , both in Assyriology and in the description and analysis of writing and writing systems in general . The minimal unit of written language - and this applies equally to logo-syllabic scripts such as cuneiform as it does to alphabetic scripts - is the grapheme . One might describe this as the smallest contrastive unit of writing . By substituting one such unit for another , a significant change in meaning ( using the term in its broad sense ) occurs . Grapheme is not an unproblematic term ( notice , for instance , that there is no one-to-one relationship between graphemes and phonemes ) but it is both defensible and useful , as far as the present study of cuneiform is concerned , at least . There are many and various indications of what ancient scribes considered units in cuneiform ; in light of these , a set of criteria is being drawn up to allow the identification of signs . The CDP project will catalogue and analyse these units , these graphemes . Thus for the signlist , the sign is a grapheme . There are two further levels at which cuneiform signs can be described . Graphemes may appear in several different , yet equally valid , forms ; these are labelled allographs . Each instance - the actual mark or set of marks one sees in the clay - is an example of an allograph of a grapheme ; these are labelled graphs . To illustrate the difference between graph , allograph and grapheme , consider alphabetic writing . Readers of alphabetic writing , as they look at what they are reading , see a long string of graphs . Effortlessly they identify each graph as a valid instance of a particular letter or mark of punctuation , that is , as a depiction of a grapheme . Even in the highly controlled graphic environment of print there is still a lot of allographic variation : the grapheme /a / , for instance , may be a roman ' a ' or an italic ' a ' , ( in most typefaces a completely different form ) . All of these are recognised without hesitation by skilled readers as being different versions of the same thing , allographs of the grapheme /a / , and therefore , in our alphabetic script , inviting the same range of phonological realisation . We see those different graphic shapes , and in our head appears the noise ' a ' or ' ay ' or whatever else the context dictates . For a more detailed discussion , see the terminology section . In the study of cuneiform , work has been concentrated at the graphemic level . Great efforts have been made to identify the cuneiform signs , and there are standard lists that name and illustrate them . But little work has been done at the allographic level , which is the level of a truly useful sign list , nor at the graphic level , the level at which the identifying characteristics of individual scribes are to be found . The reasons for this are partly </text>
<text id="pabf" url="https://www.cambs-police.co.uk/caminfo/blueprint/articles.asp?ID=807">
A true picture of how busy we are IT IS a common and justifiable complaint by police forces across the country - they only get the credit for half the work they do . Scores of incidents each day , many of them reports of anti-social behaviour , go unaccounted for because they are not classed as crime . The result is a false picture of just how busy the police service is . Now , thanks to Cambridgeshire and 10 other forces , all that could be about to change . From the start of next month ( April ) , the 11 will take part in a pilot scheme aimed ultimately at the introduction of a National Standard for Incident Recording ( NSIR ) . NSIR is widely seen as a natural progression from the controversial National Crime Recording Standard , enabling performance management to also focus on the non-crime work which occupies so much of police time . The pilot scheme , and a second pilot which is intended to include all forces from October this year , is aimed at the national adoption of NSIR in April next year . That will give the first comprehensive and accurate picture of police work at local and national levels , catering for all performance information needs . Cambridgeshire and the 11 other chosen forces ' role in the first pilot scheme will be to test and challenge the design of NSIR to assess its value , including its ability to provide a customer- focused approach . The Home Office , which is driving NSIR , has identified 57 incidents to target during the pilot . These are split into four categories - road related , anti-social behaviour , public safety and crime related . It is demanding compliance with a minimum data standard which ' does create a major impact on our current recording systems , ' says the force 's NSIR Pilot Support Officer , Sgt Gordon Lilley . His objectives include identifying all sources of information ; analysing the procedure for information capture and reviewing them for compliance with NSIR - and identifying information that is not yet captured . ' NSIR must not be viewed as yet another layer of bureaucracy , ' says Gordon . ' Our job as a force involved in the pilot scheme is to truly and thoroughly test it to ensure that it works properly and performs two vital functions - to give us the information we need to resource tasks and to demonstrate just how busy we are . ' For the first time , once NSIR is properly up and running , everyone will have a complete picture of the many and various demands on the police service . ' Just another day . . . SO JUST how busy is the force ? Our CC3 system records more than 250,000 incidents every year . Under NSIR , many of those incidents will meet the criteria for recording as anti-social behaviour - one of the main target areas identified by the Government for action . A snapshot survey in England and Wales on September 10 last year recorded 66,107 such incidents in 24 hours . In Cambridgeshire , the tally for the day was 203 , and included reports ranging from drug dealing to rubbish dumping . Top of the league in the county that day were reports of intimidation or harassment . There were 35 . </text>
<text id="pkbn" url="http://www.hmso.gov.uk/legislation/scotland/acts2002/20017--b.htm">
This Part of this Act constitutes a scheme ( to be known as the " debt arrangement scheme " ) under which individuals may arrange for their debts to be paid under debt payment programmes . 2 Debt payment programmes ( 1 ) A debt payment programme is a programme which provides for the payment of money owed by a debtor . ( 2 ) The Scottish Ministers may , on an application by a debtor , approve any debt payment programme set out in the application . ( 3 ) Such an application shall be signed by the debtor and shall- ( a ) specify , to the best of the debtor 's knowledge and belief , in relation to each debt which the debtor is proposing to be paid under the debt payment programme- ( i ) the amount outstanding ; ( ii ) the creditor to whom the debt is due ; and ( iii ) the period for which the debt has been due ; ( b ) set out the arrangements under which those debts are , in accordance with the provisions of the programme , to be paid , in particular specifying- ( i ) the amounts which the debtor proposes to pay under the programme ; ( ii ) the proposed regularity of those payments ; ( iii ) the manner in which those payments are to be made ; and ( iv ) the manner in which , and period over which , each of the debts included in the programme is to be paid ; ( c ) specify the name and address of the person ( the " payments distributor " ) who is to- ( i ) receive payments from the debtor ; and ( ii ) pay , on behalf of the debtor , the debts included in the programme , in accordance with the provisions of the programme ; and ( d ) contain such other information ( including information relating to the debtor 's financial circumstances ) , and be in such form , as may be prescribed . ( 4 ) Such an application shall , subject to any contrary provision in regulations made under section 7(1 ) below , incorporate the consent , indicated in the prescribed form , of all the debtor 's creditors . ( 5 ) A person 's name and address shall not be specified in an application for approval of a debt payment programme as a payments distributor unless that person has been approved by the Scottish Ministers as a person suitable to carry out the functions of a payments distributor . 3 Money advice ( 1 ) A debtor is not entitled to make an application for the approval , or the variation , of a debt payment programme unless the debtor has obtained the advice of a money adviser in relation to- ( a ) the debtor 's financial circumstances ; ( b ) the effect of the proposed programme or , as the case may be , the proposed variation of the programme ; and ( c ) the preparation of the application . ( 2 ) Such an application shall- ( a ) contain a signed declaration by the money adviser who provided the advice referred to in subsection ( 1 ) above that such advice has been given ; and ( b ) specify the name and address of the money adviser . 4 Effect of debt payment programmes ( 1 ) Where a debt payment programme has been approved or varied , the debts specified in the application for the approval or , as the case may be , the variation shall be paid in accordance with the programme . ( 2 ) It is not competent- ( a ) to serve a charge for payment in respect of ; or ( b ) to commence or execute any diligence to enforce payment of , any debt owed by a debtor who has debts which are being paid under an approved debt payment programme . ( 3 ) A creditor is not entitled to found on any debt owed by such a debtor in presenting , or concurring in the presentation of , a petition for the sequestration of the debtor 's estate . ( 4 ) There is to be disregarded , for the purposes of the exercise by a creditor of any rights to enforce a debt or remedies to like effect , any period during which the debtor 's debts were subject to an approved debt payment programme . ( 5 ) The debts referred to in subsections ( 2 ) to ( 4 ) above are restricted to- ( a ) those to which the debtor 's debt payment programme relates ; and ( b ) any other debts owed to creditors who have been given notice , in the prescribed form , of the approval of the debt payment programme . 5 Variation of debt payment programmes ( 1 ) The Scottish Ministers may , on an application by the debtor or by any creditor , approve the variation of a debt payment programme . ( 2 ) The Scottish Ministers may not consider an application for approval of a variation under subsection ( 1 ) above unless- ( a ) where the application is made by the debtor , a copy of the application has been given to each creditor who is owed a debt which is being paid under the debt payment programme ; or ( b ) where the application is made by a creditor , a copy of the application has been given to the debtor and to each other creditor who is owed such a debt . ( 3 ) Such an application may seek the variation of any condition which is attached to the approval of the programme or , as the case may be , a previous variation of the programme . ( 4 ) An application for the variation of a debt payment programme shall- ( a ) contain such information , and be in such form , as may be prescribed ; and ( b ) be signed by the debtor or , as the case may be , the creditor . 6 Deduction from earnings ( 1 ) Where an approved debt payment programme requires sums to be paid to the payments distributor by way of deduction of the debtor 's earnings from employment , the debtor shall provide an instruction , in the prescribed form , to the person by whom the debtor is employed to make- ( a ) deductions from the debtor 's earnings ; and ( b ) payments of the amounts deducted to the payments distributor , in accordance with the provisions of the debt payment programme . ( 2 ) It is the duty of the employer to comply with any instruction so provided . 7 Debt payment programmes : power to make further provision ( 1 ) The Scottish Ministers may , by regulations , make such further provision as they think fit in connection with- ( a ) applications for the approval , or for the variation , of debt payment programmes ; ( b ) the manner in which such programmes are to operate , including conditions with which debtors , creditors , payments distributors or money advisers must comply ; ( c ) the effect of such programmes ; and ( d ) the effect of the failure of an employer to comply with the duty under section 6(2 ) above . ( 2 ) The regulations may , in particular , make provision about- ( a ) the class of person who may or may not make an application for the approval , or the variation , of a debt payment programme ; ( b ) the class of debt in respect of which such an application may or may not be made ; ( c ) the matters to which the Scottish Ministers are to have regard in determining whether to approve such an application ; [ a ] ( d ) the conditions which may or may not be attached to an approval of such an application ; ( e ) circumstances in which such an application will not be approved ; ( f ) appeals against determinations by the Scottish Ministers on such applications ; ( g ) circumstances in which the consent for the purposes of section 2(4 ) above of a creditor or creditors generally may be dispensed with ; ( h ) circumstances in which a creditor may object to- ( i ) the dispensation of the creditor 's consent ; or ( ii ) the approval of such an application , and the manner in which such objection may be made ; ( i ) the remitting of any such application in respect of which a creditor has made an objection to the sheriff for determination ; ( j ) the manner in which a debt payment programme may be varied ; ( k ) the priority in which debts are to be paid under a debt payment programme ; ( l ) the ingathering and sale or other disposal of assets and the distribution to creditors of amounts so realised ; ( m ) the period for which a debt payment programme is to remain in operation ; ( n ) circumstances in which , and the procedure under which , any such period can , in relation to a particular debt payment programme , be shortened or extended ; ( o ) circumstances in which a debt payment programme is to cease to have effect ; ( p ) subject to section 4 above , the manner in which a debt payment programme affects the rights or remedies of a creditor or other third party ; ( q ) circumstances in which creditors are to notify debtors of the right to make such an application and the effect of the failure of a creditor to provide that notice ; ( r ) the class of person who may act as a payments distributor ; ( s ) the class of person who may act as a money adviser ; ( t ) the functions of a payments distributor ; ( u ) the functions of a money adviser ; ( v ) the establishment and maintenance by the Scottish Ministers of a register of debt payment programmes and applications for the approval , and variation , of such programmes ; ( w ) the information which is to be kept in such a register ; ( x ) the manner in which that information is to be kept and in which it , or any part of it , is to be made available to the public ; and ( y ) the determination , and charging , by the Scottish Ministers of fees in respect of- ( i ) the consideration of applications for the approval , or the variation , of a debt payment programme ; and ( ii ) the provision of information recorded in the register of debt payment programmes . ( 3 ) The regulations may also- ( a ) make different provision in relation to such different types of debtors , debts or other matters as may be described by the Scottish Ministers ; ( b ) provide that such different provision is to have effect only for such period as is specified by the Scottish Ministers ; and ( c ) provide that , on the expiry of that period , the Scottish Ministers may determine that the different provision to which they relate is to- ( i ) continue to have effect without limit of time ; ( ii ) continue to have effect for such further period as may be determined by the Scottish Ministers ; or ( iii ) cease to have effect . ( 4 ) The regulations may also modify any enactment ( including this Act ) , instrument or document for the purposes of making such further provision as is mentioned in subsection ( 1 ) above . 8 Functions of the Scottish Ministers ( 1 ) The Scottish Ministers may by order provide that their functions under this Part of this Act may be performed on their behalf by such other person as may be specified in the order . ( 2 ) Such an order does not allow regulations under this Part of this Act or any further order under this section to be made by any person other than the Scottish Ministers . ( 3 ) Such an order may make different provision for different functions . 9 Interpretation of Part ( 1 ) In this Part of this Act- " money adviser " means any person who has been approved by the Scottish Ministers as a person who may give advice to a debtor for the purposes of section 3(1 ) above ; and " prescribed " means prescribed by regulations made by the Scottish Ministers . ( 2 ) The references in this Part of this Act to a debtor are references to a debtor who is a natural person . </text>
<text id="pxnz" url="http://www.dog-pictures.co.uk/dog-pictures/shiba_inu.shtml">
Shiba Inu - Guide The Shiba Inu has an alert noble look on whatever he gazes upon . This lends him an air of dignity and beauty . He is good natured , intelligent and rather curious about everything around him . He is rather independent and much like a cat will usually not come to you when called . When around strangers he is at first aloof but then usually warms up fast . Shibas are affectionate with members of their own family and people whom they trust and respect . We welcome any additions to this description of this lovely dog breed . Please , let us know ! Click here ! Click below to see or submit your own ... . Shiba Inu Pictures Comments from proud Shiba Inu owners " We have had a Shiba Inu for about 6 years . We got our Sheeba when she was a puppy . She has been a great dog . She was easily house broken , and sits well , but any trick training was a waste of time , as she did n't want anything to do with it . She is very home protective ( howling and licking anyone who comes in the door ) , although when someone comes close to her fence line she barks and backs away . She has been a very good dog but would have been better without the semi-annually shedding . The girls weight about 18-21 lbs and the males weigh about 22-27 lbs . The biggest male recorded is 29 lbs . They are smaller versions of Akitas . They LOVE the weather . Sheeba loves to play in the rain and snow . She would spend all day outside if we let her . " " Our female ( Shiba Inu ) loves it when her pack is home alone . When other ' humans ' are visiting , she gets very needy and wants to be very close to us , and will actually get up on the chair with us . Of course , she just tolerates our affection and will allow us to hold her if she is in the mood . This independence is an advantage , as she can be left alone for long periods of time . " Subscribe to our dog newsletter below and get dog tips , pictures and more delivered to your inbox : </text>
<text id="qsym" url="http://www.strawbale-building.co.uk/index.php?page=faq">
DONATIONS WELCOME This website is run with money from my own pocket , and to keep me from relying on adverts and promotions please feel free to give a monetary donation if this website has been useful to you . Please click on the button below to make your donation . STRAWBALE BUILDING FREQUENTLY ASKED QUESTIONS Most people have grown up through childhood and beyond into adulthood with the tale of the Three Little Pigs , so when first faced with the notion of building with straw the immediate reaction is to say , " surely you cant build a house out of straw , we all know what happened to the little pigs straw house " and then they usually huff and puff a little . I usually say , " that 's what you get if you let a pig build your house " HOW ABOUT FIRE ? loose straw does burn , but when compressed tightly and tied into a bale it is almost impossible to burn , just as loose paper will burn , but try setting fire to a telephone directory , and when straw bales are covered in render their performance is even better ! Straw bales have been fire tested beyond any doubt and have even satisfied the Australian Bushire Tests , QUOTE " Brian Menadue from SA Country Fire Service stated that it was important for the strawbale industry to test this new material and he was satisfied that rendered strawbale would be an acceptable wall material . The testing has proved that used in wall construction , rendered strawbales are suitable for use in bushfire-prone areas . They are non-combustible to the stringent tests that were carried out by the CSIRO . Rendered strawbale walls now stand together with mudbrick and rammed earth as alternative building materials " Check out the full story by following the link . Bushfire tests WHAT ABOUT MOISTURE ? moisture is the only real enemy of straw bales , if your bales get wet and have a moisture content above 20 % then they will rot . BUT with careful attention there is no need for your bales to get wet , a few simple rules can prevent this . Build your foundation a minimum of 6-8 inches above ground level and make sure that you have good damproofing and give the roof a generous(2ft ) overhang . This is the equivalent of a good hat and boots , along with regularly limewashing the exterior render , should prevent moisture from entering your bales . WHAT ABOUT RATS AND MICE ? Rats and mice usually like to run around in the cavities between walls , with strawbale walls there are no cavities for them to lurk in , also the walls are usually lime rendered which rats and mice cannot chew through as the lime will soon dry their mouths out . I have never come across an owner of a strawbale house that has a problem with rats and mice . ARE STRAWBALE BUILDINGS STRUCTURALLY SAFE ? Strawbale buildings are as safe if not safer than any conventional building , they have been thoroughly tested for load bearing and are capable of structural loading far in excess of any accepted requirements , it has even been noted that when loaded to failure point that they fail in an unspectacular fashion when compared to conventional building materials . ARE STRAWBALE BUILDINGS CHEAP TO BUILD ? The cost of building a 3-4 bedroom strawbale house will not really be any cheaper than a conventional build , there is possibly a slight saving on the cost of the walls but everything else , foundation , roof , doors , windows , services etc is the same , BUT for the same costs as a conventional build you end up with a superinsulated house . Many people who build with strawbales manage to lower their building costs by becoming dedicated recyclers and scroungers and by using friends and family for labour , in this way it is possible to build fairly cheaply . DO I NEED PLANNING PERMISSION FOR A STRAWBALE BUILDING ? In most cases the answer is yes you do need planning permission , however some buildings ( in back gardens etc ) fall under the Generally Permitted Development Order and if they are built within certain guidelines require no planning permission . Planning authorities are only interested in whether a building is allowed in the actual area , and the size and shape and actual location , they are not concerned with the materials you use to build with , this is a matter for the Building Control Officer . Check out the full story by following the link . Planning Index HOW LONG WILL A STRAWBALE BUILDING LAST ? Here in the UK we have only been building with straw bales since the mid 1990 's , so have no real precedent for longevity , however there are SB buildings in the USA that are almost a hundred years old SB historic buildings and at least one in France Historic SB building France that dates back to 1921 . Like all buildings if it is regularly maintained a SB building should last indefinately . </text>
<text id="qvpo" url="http://company.monster.co.uk/londonunderuk/tfl_our_careers.asp">
Our Careers As you 'd expect from an organisation of our size , we 've got any number of potential careers on offer . Whatever your personal area of expertise - and however much experience you can demonstrate - we 're virtually guaranteed to have a role that reflects it . Of course , we have endless opportunities for customer-facing staff such as Customer service assistants and train drivers . But that 's only the tip of the iceberg . As we continue enhancing the capital , we also employ lawyers , engineers , marketing professionals , IT experts , administrators and every other profession you can think of . We 're central to the life of one of the world 's most exciting cities , and are keen to reflect that diversity in the makeup of our own staff . We select new recruits on merit irrespective of gender , age , marital status , ethnic origin , sexual orientation , disability or religion . As an employer , we 're also an accredited Investor in People , demonstrating a real commitment to training , development and career progression . Click here to see all Transport for London opportunities </text>
<text id="rfkm" url="http://www.artshole.co.uk/exhibitions/Aug%2006%2004/James%20Cauty.htm">
The Aquarium in association with Blacksmoke proudly present a new edition of prints . 4th , 5th and 6th Class by James Cauty A set of three prints featuring the Queen 's bust wearing a gas mask . 26 " x 24 " pigment prints on 260 gsm semi-gloss archival paper in a limited edition of £ 150 signed and numbered by the artist . £ 195 inc . VAT each Also available soon : BLACKOFF size , media & limitation to be confirmed Images are available on request . A version of 4th Class will be making an appearance at the Port Elliot Literary Festival . For further information click here www . p orteliotlitfest . c om/pages/framepic . h tm Born in Liverpool , the artist & musician James Cauty - cofounder of legendary bands The Orb and KLF , and art activists K-Foundation - created Blacksmoke in 2003 . It is an occasional art collective and musical group , focusing on issues of global environmental concern . The first release was a series entitled ' Blacksmoke Stamps of Mass Destruction ' in response to the war on Iraq . That artwork appeared dramatically on the front cover of The Times newspaper on the 4th June 2003 due to the fuss the Royal Mail made over an alleged breach of copyright . More recently the Royal Mail have used legal muscle to force a small London gallery to withdraw their set of prints from sale . Their request that the prints be either destroyed or given to them is still under dispute . In conjunction with the publication of this new set of prints The Aquarium will also be offering for sale a set of prints created by STOT21stCplanB . Individually titled ' Lick My Arse ' , ' Lock Him Up & Throw Away the Key the Thieving Talentless Cunt ! ' and ' We Always Hurt the Ones We Love ' these images have been badly copied from the Blacksmoke Stamps of Mass Destruction and are collectively known as the 3rd Rate Jimmy Cauty Rip-off Stamps . Little is known about STOT21stCplanB . Images available on request . For further information , images or to arrange an interview with James Cauty contact Steven Lowe - steve@aquariumgallery . c o. u k - tel : 0207 387 8417 The Aquarium 10 Woburn Walk London WC1H 0JL United Kingdom Tel : +44 ( 0 ) 20 7387 8417 </text>
<text id="rivm" url="http://www.sincuser.f9.co.uk/050/lastwrd.htm">
The Last Word THERE'S no getting away from it , The Last Word , from Saga Systems is different from any other word processor I 've seen - and that includes Amstrad Locoscript and Wordstar on CP/M . It has all the functions required of a word processor and includes commands which you may need when you 've got to know the package better . You do not , however , have to know all the commands to write simply structured documents . The main control keys are symbol shift and extended mode so the program is easiest to use on the Spectrum Plus , or 128 , rather than the old 48K machine . Of course , the system will also work well with the Saga Systems keyboard - but then it would , would n't it ? The screen is split into the usual status bar sector - at the top - and the document window , which takes up most of the page . Text can be printed on the screen in a number of sizes ranging from 40 to 80 characters a line . Margins can be set to cope with any paper width . If your printer copes with 100 characters a line , so will The Last Word . However , unlike other word processors with this facility , everything is displayed on screen . For instance , if you set the screen to 60 characters a line and your margins to 100 characters a line , then the left-over characters would be put on the next line of the screen window . Tabulation positions are also simple to set but slightly inflexible as you can only set one width of margin . You could put a tab marker every eight characters along the screen width . You can clear all those tabs by entering ' one ' as the specification , but you cannot set up odd tabs at varying distances along a line . Once you 've set the tabs and margins for your document you can type in the text . Unlike a typewriter , however , you do not have to worry about the end of a line . It will simply split the last word on the line in half or , if the word wrap is in operation , the word which would be split is taken onto the next line . The four cursor arrow keys are used when editing text line-to-line or character-to-character . Using the extended mode and symbol shift , you can also move through a document word by word , or sentence - not line - by sentence . Movement around the text file is made simpler with a Goto command using extended mode . That type of command is best used when you need to go to the end or beginning of a file and will do it quickly without panning through the remainder of the document . Copy can be manipulated in blocks - paragraphs - or whole documents . Lines can be justified against the left , right or both margins , and even centred . If you make an error in layout , blocks of text or even the whole document can be reformatted so that more characters can be put on a page , lines can be made shorter by moving in the margins , and text can be centred . Blocks of text can be copied from one area of the document to another . You can also delete paragraphs and find words or phrases in the text . The latter option looks at each group of characters , which it deems to recognise as a word , and that can cause problems . If you wanted to find every recurrence of the word ' Gilbert ' then The Last Word would find it with no problems unless the word had a comma after it - Gilbert , - in which case it would not recognise it . To be fair , this is a fault shared by other word processors . You will often want to know how many words are in your document . The Last Word not only gives the number of words but also the number of bytes used to store the text file . Files can be up to 24K long which allows you to put almost 25,000 characters in your documents . Words have an average length of six characters , so the program can hold roughly 4,000 words - enough for the most ardent writer . The Last Word has a unique way of handling printer and file compatibility . You can exit to Basic and produce routines to drive the printer , transfer files from other machines or storage devices , and set up text within strings such as names and addresses , which can then be inserted in your documents . All those functions are called when the program reaches a special mark in the text . Print parameters , such as setting the type of text you require - bold , italic or double sized - can also be set up using those marks . The markers can be set anywhere within a document and several of them can be run together . If you put two or three in a row you will notice a strange , but appealing attribute of the word processor . You can put hundreds of markers one after the other but they will take only one space in your document . Once set you can see what effect the markers are meant to achieve by passing the cursor over the black marker blob and pressing the right cursor key . Each marker 's job will be displayed in the status window , one at a time , as you page through them . When you 've encountered all the markers you have set , the cursor will start to move down the line again . You can dump your text to a wide variety of printers using Centronics and RS 232 interfaces . Setting up the program to cope with your particular printer interface will cause no problems . It includes an interactive menu on which is displayed all the control codes for interfaces . Just turn to the code appendix for your interface . The Last Word is the friendliest word processor I have used . It has everything you require with a host of extras - a remarkable programming feat given the memory available . The program even includes a calculator and an alarm clock . The calculator manipulates numerical data within documents - such as lengthy formulae - and the alarm can be set to remind you when to save your files . The manufacturer recommends that you back up your work every half an hour-very sound advice too . The author has spent two years writing the program . He had no experience of word processors , but merely an idea of what he would want a text manipulator to achieve . He has succeeded in surpassing the quality of all word processors on the Sinclair market , and many in the MS-DOS and CP/M markets . Whether The Last Word is the last word in word processing , only time - and the other manufacturers who take it up - will tell . As for Saga , it intends to produce a 128K version and updates for the Spectrum . It has no plans to launch it on other machines so , you lucky Spectrum people , you are part of a growing minority which can enjoy the power of The Last Word </text>
<text id="rkwj" url="http://www.ocdaction.org.uk/skin-picking.htm">
The primary characteristic of Compulsive Skin Picking ( CSP ) is the repetitive picking at one 's own skin to the extent of causing bleeding or damage to the skin to relieve anxiety or urges . Skin-picking is often preceded by a strong itch or urge , which the sufferer believes can only be relieved by picking . Then , of course , a feeling of depression or hopelessness follows when the damage caused by the picking is realised . Paradoxically a kind of compulsive perfectionism may convince the sufferer at the time that picking is a necessary means to achieving a clear complexion . In this way a vicious circle arises that is hard to break . Thus CSP may be seen to have obsessive-compulsive aspects that are similar to OCD , Body Dysmorphic Disorder ( BDD ) and trichotillomania . In fact research has shown that around a quarter of those diagnosed with OCD or BDD also have CSP . CSP is thus sometimes described as an Obsessive Compulsive Spectrum Disorder , along with , for example , BDD , eating disorders such as anorexia nervosa , and movement disorders such as Tourette 's Syndrome ( TS ) . Skin-pickers often feel the need to camouflage their blemishes with make-up or cover bad areas with clothing . Social embarrassment can lead the sufferer to stay indoors , avoid friends , be late for work as their picking and make-up routine takes so long , or even to take sickness leave from work when their skin is in a very bad state . What treatment is available ? The best advice initially is to consult your GP . Many sufferers are very embarrassed by their symptoms and not all doctors are well-informed , so one idea would be to write down your problem , without minimising it , or print out this webpage for your doctor to read . Very often patients are referred first of all to a dermatologist , which may be appropriate if there is a skin disorder that needs treating but may also delay treatment of the compulsive psychological element . There is evidence that skin-picking may be caused by biological factors such as brain structure and you may be prescribed serotonin enhancing drugs such as Prozac or one of the other SSRIs . This may be augmented with one of the neuroleptics , for example Risperdal , as these often suppress the tic-like behaviour that may be involved in picking . The second and very important treatment for Compulsive Skin-Picking is Cognitive Behavioural Therapy ( CBT ) . If your case is severe you may be referred to a trained therapist who will teach you a technique of CBT called Habit Reversal . Habit Reversal was developed in the 1970s by psychologists Nathan Azrin and Gregory Nunn for treating nervous habits such as tics , stammering and skin-picking which are done automatically . Therapy should focus initially on developing Habit Awareness and patients may be asked to keep records of when , where and under what circumstances they normally pick . Many people believe that if they stop one bad habit it will be replaced with another bad habit . However , one of the key ideas of habit reversal is to replace the harmful habit with another harmless habit that makes the bad habit impossible . This new behaviour is known as a competing response . A suitable competing response for skin-picking might be clenching one 's fist , as this is incompatible with skin-picking . Another important part of habit reversal training is practising a suitable method of relaxation such as meditation , abdominal breathing or progressive muscle relaxation . Successful CBT will also involve stimulus control . Once the sufferer has identified the particular environmental factors or mood states that lead to picking , steps can be taken to deal with such triggers . For instance this might mean avoiding or covering mirrors or challenging automatic thoughts and emotions connected with picking and replacing them with less negative responses . Further ideas on breaking the habit of skin-picking : - Get advice on skin care . If you have a skin complaint see a dermatologist . - When tempted to pick , care for your skin by applying a moisturising lotion instead - Stimulus control : cover or remove mirrors if they act as a trigger and get rid of all implements such as tweezers and pins used for picking . - Consider the use of artificial nails to make picking more difficult - it may work for some . - Wear rubber fingertips or cotton gloves whenever possible if you feel the urge to pick . - Try replacing some of the sensory aspects of skin-picking with a more desirable alternative . For example , keep an object by you that you can manipulate ( squeeze or pull ) such as a soft rubber ball or some Blu Tak . - Keep your hands busy with something else such as a puzzle or knitting . - If you bite the inside of your cheeks try eating crunchy snacks when you feel the urge to bite . - Reward yourself for making progress with some kind of treat . - As you gain more confidence gradually begin to expose your hands , arms , face or legs to others starting with family and friends . You will no doubt benefit from their support but at the same time the negative consequences of engaging in your habit will be increased . Source : This article was written for OCD Action by Louise with the assistance of Dr James Claiborn co-author of The Habit Change Workbook </text>
<text id="rlwz" url="http://www.greenparty.org.uk/news/2033">
Green MEP Calls for Climate Change ' Revolution ' 30th Jun 2005 Top Green challenges Bush and Blair at alternative G8 Summit WORLD leaders gathering in Gleneagles next week must embrace a ' climate change revolution ' and slash military spending if they hope to make real progress on tackling extreme poverty in Africa , according to Euro-MP Caroline Lucas . The South-East England MEP and Green Party principal speaker will make her comments during an alternative G8 counter-summit at venues around Edinburgh next Sunday ( July 3rd ) . " Tony Blair has promised to make tackling climate change and extreme poverty in Africa his two priorities during his presidency of the G8 , " she will say at the ' G8 Corporate dream ... Global Nightmare ' conference . " But if he is to have any success he will have to accept - and persuade George Bush and other G8 leaders to accept - that these challenges are simply different sides of the same coin . " Both extreme poverty in the developing world and runaway greenhouse gas emissions which are fuelling climate change - which Tony Blair has himself describes as ' the greatest threat we face ' - are inevitable consequences of the G8 countries ' relentless pursuit of ever freer international trade and economic globalisation . " If the G8 leaders are serious about tackling these problems they will have to accept that social and environmental protection require stepping back from the goal of forcing open ever-more developing markets to unfettered free trade - and replacing their goal of increased economic growth with the pursuit of increased economic , social and environmental security . " Dr Lucas will join a roll-call of green and progressive thinkers - including George Monbiot , Trevor Ngwame , Walden Bello and ' The Yes Men ' - at the conference , which has been organized by the World Development Movement , Friends of the Earth , War on Want and People & Planet . She will address the conference on ' Challenging Climate Change ' and promote efforts by Green Members of the Scottish Parliament to win support for a Climate Change Bill . Greens today ( June 29^th ) launched a consultation with their MSP colleagues about the proposed Bill , which would make Scottish Ministers legally responsible for setting emission reduction targets and delivering changes in policy across areas that include transport , housing , education and agriculture . " In the lead up to G8 , the Scottish Parliament is being encouraged to set an example to the rest of the world and be part of the climate change solution , rather than part of the problem . I hope that MSPs show they have more courage and a greater sense of responsibility than the G8 leaders who , it is rumored , have already watered down the action they plan to take . " Dr Lucas will then join a panel discussion on ' Militarism and Nuclearism ' with CND chair Kate Hudson . " Ever freer international trade will not tackle extreme poverty or climate change - we must ' tame the beast ' of economic globalisation and allow poorer nations to do what the US and EU have always done : to intervene in their foreign trade to set their own priorities , " added Dr Lucas . " The challenge facing the G8 leaders is to set binding targets for reducing emissions reductions and to slash military expenditure , which is diverting funds from development aid . " ENDS For more information please contact Cath Miller on 020 7407 6281 or George Baxter on 07909 933074. / From Green Party press office , 020 7561 0282 . Published and promoted by Matt Wootton for the Green Party , both at 1a Waterlow Road , London N19 5NJ Related news - Climate Change Climate Change a UK Presidency Priority ? Greens condemn Lords Economic Affairs Committee report Green Victory on Climate Change-But Executive Proposals Do n't Go Far Blair faces new EU bruising on climate change </text>
<text id="rnce" url="http://www.lel.ed.ac.uk/linguist/issues/17/17-229.html">
Tue Jan 24 2006 Jobs : Arabic & Computational Linguistics : Dean , Sohar U Editor for this issue : Vanessa Manion vanessa linguistlist . o rg The LINGUIST List strongly encourages employers to use non-discriminatory standards in hiring policy . In particular we urge that employers do not discriminate on the grounds of race , ethnicity , nationality , age , religion , gender , or sexual orientation . However , we have no means of enforcing these standards . Job seekers should pay special attention to language in ads regarding employment requirements and are encouraged to consult our international employment page http://linguistlist.org/jobs/jobnet.html . This page has been set up so that people can report on the employment standards of various countries . To post to LINGUIST , use our convenient web form at http://linguistlist.org/LL/posttolinguist.html . Directory 1. Mark Pedersen , Arabic & Computational Linguistics : Dean , Sohar University , Oman Message 1 : Arabic & Computational Linguistics : Dean , Sohar University , Oman Date : 24-Jan-2006 From : Mark Pedersen mj . p edersen gmail . c om Subject : Arabic & Computational Linguistics : Dean , Sohar University , Oman University or Organization : Sohar University Department : Faculty of Applied Science Job Rank : Dean Specialty Areas : Computational Linguistics Required Language(s ) : Arabic , Standard ( arb ) Description : Sohar University seeks applications from suitably qualified academic staff for the position of Dean of the Faculty of Applied Science . The Faculty of Applied Science offers undergraduate degrees in a range of fields of computer science and is active in postgraduate research . Sohar University was the first private university in Oman and is affiliated with the University of Queensland in Australia . The curriculum for the Sohar University undergraduate degrees is modelled on the curriculum of equivalent degrees at the University of Queensland , and all courses at Sohar University are quality assured by the University of Queensland biannually . All courses in the Faculty of Applied Science are taught in English . Under the leadership of the former Dean , Professor Joachim Diederich , the faculty developed an internationally recognized research profile in the areas of machine learning , natural language processing and distributed systems . Faculty research and teaching activity includes a focus on Arabic Natural Language Processing . A fourth year undergraduate course on Natural Language Processing seeks to develop students with skills relevant to information processing in the Gulf region , and final year research projects may also focus on topics in this area . Research projects include development of a wide-coverage Lexical Functional Grammar of Arabic as part of the Parallel Grammar project in collaboration with the Palo Alto Research Centre ( PARC ) , and affiliated international and regional institutions . Related work includes the development of Arabic question answering systems ; development of techniques for the automated creation of transfer lexicons ; techniques for the creation of semantic resources for Arabic in the style of WordNet ; statistical and machine learning techniques for morphological analysis and parsing of Arabic ; the application of machine learning to text classification and tasks related to classification of mental health and medical data . The new Dean would be expected to provide leadership in further developing these and other areas of research . Sohar is rapidly becoming the largest chemical industrial city in the Gulf States with over USD13 billion being invested in new industries . The Faculty of Applied Science already has strong research links with industries in Sohar , and the new Dean would be expected to strengthen these links with industry . Applicants for the position of Dean of the Faculty of Applied Science would be expected to have an extensive teaching and research profile at the professorial level . Remuneration is set at a base salary of 1800-2000 O. R per month , with a living allowance of 350 O. R per month and a transport allowance of 175 O. R . per month . Salaries and allowances are tax exempt . Expatriates are entitled to 49 days of annual leave including a return airfare to the country of origin for the Dean , his wife and two children under the age of 18 years . Applicants are requested to forward a comprehensive curriculum vitae , and the names of at least four academic referees to Professor Michael Irving , Vice-Chancellor of Sohar University , P. O . Box 44 Sohar , 311 Sultanate of Oman . Applications close on 31 January 2006 . For further information , contact : Professor Michael Irving , Vice-Chancellor of Sohar University . m. i rving soharuni . e du . o m Address for Applications : Prof Michael Irving Sohar University PO Box 44 Sohar PC311 Oman Application Deadline : Open until filled . Contact Information : Prof Michael Irving Email : m. i rving soharuni . e du . o m Phone : +968 2670101 ext 404 Respond to list| Read more issues | LINGUIST home page | Top of issue </text>
<text id="sbdw" url="http://sccplugins.sheffield.gov.uk/press/news/aRelease.asp?akey=2026&Mon=01/07/2004">
02 July 2004 YOUNGSTERS GOING FOR GOLD IN SHEFFIELD The Olympics will come to Sheffield a month early when youngsters from across the city stage a high-octane dance tribute to the Games part of this year 's Sheffield Children 's Festival . Elite 04 will be performed at Ponds Forge International Sports Centre on Thursday 8 July 7.00pm . Where else could be more appropriate ? Elite 04 is a dynamic dance collaboration of all male groups from secondary schools and mixed groups from primary settings . The performance is an energetic interpretation of the sporting events associated with the 2004 Olympic Games , set to a pumping soundtrack . Dancers Diane Harris , Wendy Harrison and Wayne Sables have taught youngsters from ; Fox Hill , Hallam , St Mary 's CE and Woodhouse West Primary Schools as well as Handsworth Grange , King Edward VII , Myers Grove & Parkwood High Schools . Elite 04 is at Ponds Forge , Sports Hall on Thursday 8 July 7.00pm . Tickets priced £ 3.00 are available from the Festival Office on 0114 281 4050 . Elite 04 is supported by Awards for All . Contact : Toby Oliver , Marketing & Comms Service ( Tel : 0114 2039076 ) </text>
<text id="sbqp" url="http://www.lpt.nhs.uk/service5.php">
In Patient Services Long Leys Court is an NHS inpatient unit , which provides assessment and treatment services for people with learning disabilities and associated needs , including problems with mental health , challenging behaviours and epilepsy . We have four bungalows , each offering single accommodation with shared living and dining areas and provide extensive research based assessments and structured care plans together with regular progress evaluations . Through our service user group we encourage service users to participate in their daily living and to comment on their environment etc . There is a dedicated team of Registered Nurses and Nursing Assistants who along with Therapists and Psychiatrists care for the service users . We also provide a nurse led day care programme according to individuals needs including some social activities . Clinics Clinics are held by four Consultant Psychiatrists and their junior medical staff across the County who are employed by Lincolnshire Partnership NHS Trust . They can be contacted through Long Leys Court on 01522 577404 . Community Services Community Services are provided and managed by Lincolnshire Social Services with input from Psychiatry , Psychology , Physiotherapy , Occupational Therapy and Speech and Language Therapy . They are accessible through local teams , whose telephone numbers are as follows : - West Area : Gainsborough Tel : 01427 677405 Lincoln Tel : 01522 550710 Market Rasen Tel : 01673 844544 North Hykeham Tel : 01522 555010 East Area : Louth/Horncastle Tel : 01522 554702 Skegness Tel : 01754 899310 Boston Tel : 01205 361788 Spalding Tel : 01775 711551 South Area : Bourne/Stamford Tel : 01778 422171 Grantham Tel : 01476 584500 Sleaford Tel : 01529 414144 Ext 4482 </text>
<text id="seaz" url="http://www.panos.org.uk/resources/reportdetails.asp?id=1039">
Southern African countries are set on a collision course with conservationists over an almost total ban on international trade in elephant ivory . Zimbabwe , Botswana and Namibia intend to press for the eight-year-old ban to be overturned at the 10th full meeting of the Convention on International Trade in Endangered Species of Fauna and Flora ( CITES ) , to be held in Zimbabwe 9-20 June . All three will claim that , with the region 's elephant population now restored to over 150,000 and rising , there is no ironclad reason for barring them from profiting once more by the trade . Their dissent comes amid claims that legitimate conservation concerns have been hijacked by animal rights activists . And it will focus attention on a world-wide rash of " park wars " , arising from moves by former inhabitants to reclaim the right to hunt , farm and occupy customary homelands fenced off for wildlife or habitat conservation . Western-style conservation has , according to many of its practitioners , become increasingly hard to justify in the face of such disputes . On the plains of Africa , in the tiger reserves of Asia and the rainforests of South America , hunters have been outlawed as poachers and themselves hunted down . Suspicion is growing , too , that repressive governments are using conservation as an excuse for land-grabbing . Some observers believe that a new conservation scenario is slowly emerging from such clashes , in which people rediscover ways to live in harmony with wildlife , rather than be totally separated from it . They reason that wildlife has a rightful economic as well as biological and cultural value . The more that economic value can be harnessed to aid local communities , the greater the likelihood that conservation will be successful . Advocates of this pragmatic approach include a former head of the World Conservation Union ( IUCN ) . They picture a 21st century in which national parks and nature reserves as we know them could all but disappear . Instead , protected areas would become commonly owned resources managed so that local people earn material benefits from the wildlife in their midst , by harvesting meat , ivory and other wild produce , and by claiming revenues from safari tourism and controlled trophy hunting . The debate over ivory goes to the heart of how wildlife in developing countries can best be preserved : by sustainable and profitable use , or by protection behind the fences and armed game warden patrols of National Parks . There are many local voices calling for national responses to national problems . They claim that CITES is a ' sledge-hammer to crack a nut ' . But its defendants say that on the whole it is working , and that there are few alternatives . </text>
<text id="smar" url="http://www.arctech.co.uk/siemens_hosted_exchange.htm">
Hosted Microsoft Exchange 2003 from Siemens Solution1 Scalable and Managed Corporate-grade Microsoft Exchange 2003 Hosted Microsoft Exchange 2003 Overview Are you using a free e-mail service from your ISP , looking to move to a corporate grade messaging environment or thinking about upgrading from previous versions of Microsoft Exchange ? Siemens Solution1 delivers a real alternative to implementing in-house Microsoft Exchange 2003 infrastructure , offering fast implementation and low commercial risk . The service is secure , delivering the availability you require to run your business today . Siemens do n't just offer you a superior technology solution ; all aspects are covered under a managed service for hosted Microsoft Exchange 2003 . Solution1 guarantees a fully maintained secure solution including upgrades , on-going support and daily resilient data back up , with added anti virus protection , anti spam filters , back office and help desk services all for a fully monthly fee . The service delivers an affordable and highly efficient alternative to deploying a solution in-house enabling you to focus on your business . Features Full Microsoft Exchange 2003 : Desktop Outlook 2003 Client . Full Outlook 2003 client access over HTTPS removing the need for a VPN . Outlook Web Access over any internet connected terminal . Outlook Mobile Access for your PDA or phone . Highly Secure - All data is managed within Siemens twin Hewlett Packard data centres . Carrier grade Juniper firewalls and security systems make sure that your solution runs at optimum performance . All data is backed up at to resilient SAN 's and tape storage systems daily Scaleable Storage - Siemens offer storage solutions as part of our Exchange offering . Whether you require 100mb per account or 10gb for your business Siemens storage offers mirrored disks on a dual resilient SAN ( Storage Area Network ) including daily tape back up Virus Free - Sybari Antigen running 5 different real time virus engines included Easy to Manage - Ensim Unify is a powerful web based tool for administration of your business users Dedicated Support - Siemens offer support services as standard . You receive dedicated account management , access to the MyOne Intranet portal as well as on-site support Benefits Save Time - Siemens can deliver and manage your entire IT network including suppliers , enabling you to focus on your business priorities Save Money - On leased lines , multiple support contracts and maintenance . The service including all equipment is leased removing capital depreciation costs from your business Manage Your Risk - Work with a company who you can trust . A company who enables you to match your payments to the service benefits you receive . Drive Customer Expectations - We understand the importance of good customer service . Our services enable you to deliver value to your customers , increase your revenue and enter new market opportunities </text>
<text id="sqdo" url="http://gimbo.org.uk/archives/2006/01/chomsky_intervi.html">
« Apache vs Yaws · Spoof signs » A succinct interview with Chomsky , touching on the morbid state of democracy in the USA , the " War on Terror " , Iraq , oil , all the usual stuff ... Some very interesting ( but short ) comments on China towards the end as well . Now let 's talk about withdrawal . Take any day 's newspapers or journals and so on . They start by saying the United States aims to bring about a sovereign democratic independent Iraq . I mean , is that even a remote possibility ? Just consider what the policies would be likely to be of an independent sovereign Iraq . If it 's more or less democratic , it 'll have a Shiite majority . They will naturally want to improve their linkages with Iran , Shiite Iran . Most of the clerics come from Iran . The Badr Brigade , which basically runs the South , is trained in Iran . They have close and sensible economic relationships which are going to increase . So you get an Iraqi/Iran loose alliance . Furthermore , right across the border in Saudi Arabia , there 's a Shiite population which has been bitterly oppressed by the U. S . - backed fundamentalist tyranny . And any moves toward independence in Iraq are surely going to stimulate them , it 's already happening . That happens to be where most of Saudi Arabian oil is . Okay , so you can just imagine the ultimate nightmare in Washington : a loose Shiite alliance controlling most of the world 's oil , independent of Washington and probably turning toward the East , where China and others are eager to make relationships with them , and are already doing it . Is that even conceivable ? The U. S . would go to nuclear war before allowing that , as things now stand . </text>
<text id="tkhv" url="http://www.company-wizard.co.uk/SEO/Link-Exchange.htm">
One thing you are likely to come across during the promotion of your website is link exchange programs . Essentially this is the process of obtaining a free link on a particular site by agreeing to place a link to them on your site . Be careful however not to link to ' bad neighbourhoods ' , this is what many search engines refer to as sites that attempt to exploit or degrade the relevancy of their search results . Bad neighbourhoods tend to include sites involved in link pyramids , link farms and any other activity that requires you to download pages of links to your website . Linking to bad neighbourhoods may well harm your pagerank and will not improve your position one iota . Check the pagerank of the site the listing is offered on and decide whether a link exchange would be a fair deal for both parties . If your pagerank is 0 then you wo n't have much to bargain with , alternatively if your pagerank is 6 then it will not be advantageous to pursue a link on a site with a pagerank of 0. </text>
<text id="togq" url="http://www.hearingconcern.org.uk/news/news_scots06.html">
News & Events news Waiting list relief for Scottish patients Waiting times to see a specialist about hearing problems have been slashed in the Lothians after hundreds of thousands of pounds were spent on new testing rooms . Deaf and hard of hearing patients now wait an average of around seven months to see an audiologist and have a hearing aid fitted - down from more than 18 months two years ago . Waiting times are set to fall even further with the appointment of a further six audiologists at the Ear , Nose and Throat ( ENT ) department at Lauriston Place . But the latest figures still fall three weeks short of the Scottish Executive 's target of 26 weeks , which came into force in March this year . Nanette Milne , health spokeswoman for the Scottish Tories , said : " It is very good news for people in Edinburgh and the Lothians that waiting times have already been reduced and that new audiologists have been appointed . " I am not too concerned about Executive waiting times , as long as the needs of patients are being met and the fact that the wait has been cut by so much is fantastic . " She added : " I know waiting lists in audiology have meant people have been waiting a terribly long time to have hearing aids fitted . " The new permanent staff will replace locums who are currently carrying out the work , saving NHS Lothian £ 180,000 a year . Two have already started work , and the others are set to begin soon . Some of them will later be moved to the audiology department at St John 's Hospital , Livingston . In February , the health authority spent £ 470,000 installing four new sound-proofed rooms to measure hearing ability at Lauriston Place . An extra 240 people a week are seen by audiologists since the booths were installed - a 60 per cent rise since February . But patients are still having to wait an average of 29 weeks from being referred by their GP to having a hearing aid fitted . Mark Hamilton , manager of the ENT department at Lauriston Place , said : " These additions to the audiology department are great news for patients . We have just revised our waiting list timetables which means people will now be getting access to treatment sooner . " Over the next few months we are also expecting a big increase in the number of patients attending our department . " Hearing problems are a major disadvantage to a lot of people and our patients can rest assured that NHS Lothian is always striving to deliver high quality health services . " A Scottish Executive spokeswoman said : " We are committed to a programme of modernisation of audiology services in Scotland , and to making available digital hearing aids where there is a clinical need . All boards can now fit digital hearing aids if appropriate . " A target of 26 weeks ' waiting time from referral to fitting is being achieved by some , but not all , boards as the starting point for modernisation varied from board to board . " Around £ 17 million has been made available to NHS boards over 2003-07 to modernise audiology services . I had just had enough so I decided to go privately Long waiting lists have forced some patients to have hearing aids fitted privately . Frank Cochrane , 73 , of Trinity , waited to see an NHS Lothian audiologist for nearly two years after being referred by his GP . He said : " My hearing started to go very gradually more than three years ago . When I first went to see my GP , it had gone only a little bit , but by the time I got to the Ear , Nose and Throat , it was really quite bad . " I have had terrible problems waiting to see someone at the NHS . Once I eventually did see someone at the hospital , they told me I would face another wait to have a hearing aid fitted . I had just had enough , so I decided to go privately . " Mr Cochrane , who had one foot amputated earlier this year , contacted a private firm who came to his home to carry out tests and fit two hearing aids . He added : " When I was in hospital having my foot amputated , I dropped my hearing aid and broke it . I decided to see if there was any way I could get it repaired on the NHS , but I was told I would have to join the bottom of the list again . " Source : The Scotsman Link : http://www.scotsman.com / | top | legal | privacy | accessibility | disclaimer | © copyright Hearing Concern 2006 | | Registered charity no . 1094497 | A company limited by guarantee registered in England no . 4466960 | | W3C : AAA Compliant | W3C : Valid HTML | W3C : Valid CSS | </text>
<text id="tqru" url="http://histru.bournemouth.ac.uk/Oral_History/Technology_in_the_Community/Joan_Wolstenholme.htm">
Looking back at your childhood what are the earliest memories of how the washing was done ? With a scrubbing board in a tin tub , and a dolly peg in a tub , boiling in the cellar with a fire underneath the water container . Also there were conveniences for the general public at that time . The city were I lived had a lot of baths and wash houses . They were combined with the public swimming baths and they gave the service of letting people go along to use their machines , which were huge . And you could often see people with prams pushing them down the streets with ... In those days potatoes used to come in big wicker baskets , and they 'd have a wicker basket in this pram and all the family washing . As much as they could possibly get in that wicker basket was put in there , and they wheeled it to the nearest public wash house and baths , and when it came back it was dry-ish , rather than having wet washing hanging around the house , as it would have been if it had been done in the house . You mentioned a dolly peg , what was that ? Yes , a dolly peg it was a little bit ... It was , I suppose , about 4 foot high , a little bit like a milking stool at the bottom , with a long pole in the centre , two handles at the top and you agitated it : a manual agitator . And for the very dirty bits on the working shirts , or whatever there was , you 'd have a scrubbing board . And that would stand in the water and you would put the dirty part , like the collar or the cuffs , and you would rub the soap over it and get a scrubbing brush and scrub it like that . And you knew when it was wash day because you walked in and you could smell the boiling washing , the washing that had been boiled up , even if it was in the cellar ... steam everywhere . Wet clothes hanging around forever , no dryers unless of course , you know , it was a fine day . If it was a fine day they would all get pegged out on the line . Did you used to have a mangle ? Oh yes . Now you needed strong arms for that because they were ... the big mangles were very , very heavy . Cast iron and great big thick wooden rollers . Instead of soap powders , you did n't use the soap powders we have today , so what sort of things did you use ? Well , it was carbolic soap ... Right ... or green soap sometimes . I can remember Fairy , green soap coming in . Before that it was just carbolic soap . Or those who could afford it had , I think , soap flakes perhaps : soap that had been specially flaked . But it just depended on what your income was , as to what you could afford . And then of course , a little bit later on there came the Rinso . You 've heard of Rinso have n't you ? It was the forerunner of all the powders . Oh , right ... Rinso ... Can you remember how any of these smelt , did they have a distinct smell or ... ? Yes , which is indescribable unless you 've smelt it yourself ! I suppose the nearest thing would be to a steamy bath . So it did n't smell nice , did n't make the clothes smell nice , it was just to clean them basically ? What was to clean them ? The soap it ... they did n't smell nice ... it was just ... Oh yes , it was a good clean smell , Yes it was good clean smell . OK . When washing machines were first invented , how long did it take for you to have one in your family , and how did this changed things ? My parents never had one , never had one . And I did n't get a washing machine until the mid fifties . How did that change ? Oh , it made a big difference , but it was n't an automatic . Well , what did it look like , and what did you have to ... how did it work ? Well , they worked on the same principle as they work now , with electricity . But my first one was only so big , very tiny , and it had a rubber mangle on the top ; and that was made by Hoover . And how did they differ from the ones they have today ? Oh well , the ones you have today ... there 's just no work . You just throw them in , p ress a button when you 've set the ... whatever you want , and walk away . It 's taken off your hands . In comparison , it used to take a day to do the family wash . Now you can do the equivalent in a couple of hours , all washed and ironed and dry , all out of the way . It saves hours of work . Before you had Hoovers what would you use to clean the floors ? I wondered if you 'd thought of that one . Brushes : You would sweep them with stiff brushes . And if they were very dusty , they used to have a trick of having damp tea leaves , and you 'd strew them on the carpet , all over , and that would kill the dust as you brushed . Oh right- I never knew that ! Or if the carpet ... and you remember in those days not many people - well very few - had fitted carpets . In fact I ca n't remember ... I ca n't think of anyone . They were usually big carpets or rugs . If they were small rugs they would go out over the line and you 'd beat them with a beater . Did you ever have , did you get , a Hoover eventually when they came out ? Oh yes . That obviously made things easier , but what did they look like ? Well , the first Hoovers I remember were very , very heavy in weight for me , and not unlike the traditional shape they still are , except they were made in stainless steel , I suppose , but they ... of course , by that time a lot of people had carpets all over the house , and it did make a difference . When was that roughly ? Roughly towards the end of the thirties . Right , OK , what were your earliest memories of television ? My earliest memories , Oh gosh ! I suppose the first time I ever watched television was at the year of the Coronation . Like most people , unless you were very , very wealthy , you could n't afford a television and the only ... The first time I watched television was on a friend 's television , where we were invited to go and watch the coronation . And it was a very tiny little screen perhaps from there to there . [ Gestures a few centimetres . ] And it was , I think , in a very long , tall cabinet ... Of course , in those days your eyesight quite a lot better than it is after so many years . And it was all right and because it was new and we 'd nothing to compare it to , except the cinema , which , of course , every one was used to . You were aware that it was only tiny , but because it was contained within a room it was acceptable . Now-a-days they 're used for recreational use , you just switch on and watch it ; but how does that differ from what you used to do ? I mean , you said you were invited round , so you obviously did n't get a choice of what you watched ? Oh , very limited . In fact , I do n't think they broadcast for quite a lot of the day . You see , not owning one for a long , long time , I was n't aware of what programs there were ; but I have a feeling that they were very , very short hours ... mostly towards the evening time , nothing in the day particularly the mornings . But I suppose they had coverage at some stages for big events , but I really could n't answer that one . So , when was the first time you got a television in the family ? Once again I would say the middle fifties , and that would be ... ( How many years after they sort of came out ? ) 18 nearly 20 years after they first . You see , they only broadcast , did n't they , in the London area to begin with before the war ? Well , I was living up North , and I do n't think we had the television set up in that part of the world until after the war . I 'm not sure about that though . Before television , what technology was there to entertain you and your family ? Oh the radio , technology . I would say , all I can think of is the radio . It all depended in those days on what level of society you were . Some people had cars , they could go out riding . But if you could n't afford a car , well you could n't afford a car , and that was it . In the home the radio certainly had got more or less established in everyone 's home . What did they look like , and how did they work ? Well , like anything else it started off , I suppose , with dials and headphones . They had a box and they had headphones and they had dials to bring it in and get the wave band . Those were the very ... That was my memory of the very earliest radio that I can remember ; with sitting watching my father twist the dials . And then , of course , we got ... As it improved , then you could just switch on and you even got places on the dial saying ... It would pick up places from Europe which was fantastic , you know . Was n't just within the country . But I am sure you will be able to get a lot of information from radio buffs who 'll be able to give you all the details , but those are my earliest memories . There was one other thing , the gramophone : and the earliest one I remember was one of those where you turn the handle and had a great big horn . With His Master 's Voice ... and they were portable . This was portable , and you had , I suppose you had , a few selected records and played them constantly . In fact we used to take ours into the air raid shelter , when we had to sit in the air raid shelter at night ... It was a communal one . And the gramophone used to be taken in religiously , and it would play the records and people would ... everyone was smoking their heads off : the place was like a tap room . And suddenly , when you heard the aircraft coming , the first thing we 'd do was take the record off and sit and listen . Listen to the planes ... Listen to the planes ... and wait for the bombs to go over ... hear the swish of the bombs . But yes gramophones was another one , if you were lucky enough . OK . How old were you when you first got a telephone In your family ? Well , I suppose mid fifties , in the last century , in the mid fifties again ... when we first got our ... yes early fifties . But it was n't ... you did have access to phones ... Quite a number of people had them already in their houses , so I was not like some people who had never had access to using a phone . Some people were afraid of using phones because they 'd never been used to using them . How did they differ from the ones today , the touch ones ? Oh , I think the dialling , of course , was the main thing ; and obviously you had you had several different kinds . There was the hand held one and you also had the one that had it hooked on to the side , where you lifted the earpiece and spoke into the speaker . But you 've seen them all on films . You 've got record of them in old films , you know . If you keep your eyes open , you 'll see all varieties of them . But there was no touch telephones ; no , nothing like that . Was it expensive to use the telephone ? I would say for the time , very little difference , very little . And did it bring the family closer together ? I mean , you could communicate easier ? That was good , because even if both ... all members of the family did n't have a phone , it did mean that there would be a point at which they could all come together . It meant that communication was n't as difficult . Yes . With cooking appliances changing over the years , first you had the Aga , then the cooker and then the microwave , how did the introduction of microwaves effect your family ? It did n't , because they never had one ! It 's affected mine fantastically , wonderful . I think one of the best inventions out , but what came before the Aga ? Have n't got a clue , I do n't know , have n't got a clue . What came before the Aga ? Not everyone had an Aga . Was it called a range ? A fire range . If you were lucky enough , some houses had fireplaces where they had an oven beside it , where they cooked . Some people did n't even have that , and they had little hobs on the grates , on the fire , and they turned the hob over the fire and cooked on the fire . Did n't have a cooker , kettles too always used to sit beside the fire or hang over the fire on a hook . When you first got a microwave , how did you feel about them ? There are stories that some people were scared of them because of the waves they let out . Did it bother you ? It did n't bother me because I reasoned that it would n't be allowed to be sold unless it had been fully tested ; and if you 're sensible and careful . But of course , remember , it had been invented and had been used in America many years before became popular in England . So we did have that knowledge , before it was more or less introduced on a big scale in this country . Very few places actually sold microwaves for quite a while , but they were used a lot more in America for years before that . OK , central heating . Can you remember when it first came out and how did you heat the house before ? Before central heating : fires hot water bottles , loads of clothes , closed windows . And did you have an open fire in every room , or just one that heated the whole house ? Unless you were poorly , then you had one in your bedroom . Did you ever work in an office or anything like that ? Yes . And how did technology change , I mean typewriters and things like that , how has that change ? Well , I was n't in that kind of a situation and it was n't for a long , long period so I could n't answer that one . OK , computers : what do you think of them do you have one ? I have n't got one , but I am like people who were first introduced to the unknown : probably have n't bothered because I am just a little bit afraid that I will make a fool of myself , and that 's really the top and bottom of it . Those who have confidence in new things just go all out ; and it depends too on your need . Well I 've not needed a computer since they sort of , you know , have just become so popular . But I 'd certainly like to have a go now . Now that I 've got time and it does n't matter , there 's no pressure . OK . Before electricity , how would you light the house and what happened when lighting was introduced ? Well before electricity , which was wonderful , there were several stages of lighting . Candles I can recall using as a child to light my way to bed , on a candlestick . Oil lamps , which had to be trimmed and cleaned and paraffin bought for them ; and kept in absolute pristine condition because the fumes from the paraffin lights could have been dangerous . So those were the first two forms of lighting that I recall . Then town gas came in ; and if you were lucky enough you you had a house with gas supplied . Usually there was a centre light , almost like an electric light positioning and this , of course , was in the main room ; perhaps not every room , but once the gas was in the house I think most rooms did have it on little side brackets in certain rooms , but the main rooms had a middle , centre light . And you used to have ... you used to have to buy what they called mantles ; and they were terribly delicate . They were small shaped , rounded with almost , I suppose , a clay type top . And you had to put them on to the ... where the gas came out , and carefully put them round to make them hold , almost like a bulb ... and if you were n't careful even blowing on them sometimes would break them . So they were very delicate . And then you 'd turn the gas on . It could have been a tap that screwed in , it could have been a lever where you had like a swing , a see-saw , where you pulled it down one side and it would bring the gas out and you turned/pulled it the other and that would turn the gas off . You would then light it with either a taper or with a match , and then it would give the light . I think that went on for quite a while . Now you see , the gas obviously was introduced in some houses in the 1800 's , but some houses did n't even have gas until 20 's . A lot of people lived in houses that did n't even have town gas , but that was n't the general rule ; most people by that time had . So then , of course , you could ... you could then get electricity put in once the mains had been put in . And how they did that by taking the gas out and replacing it with electricity I do not know . But they did do that , they converted gas lit houses into electrically lit houses . </text>
<text id="uclj" url="http://beehive.thisislincolnshire.co.uk/default.asp?WCI=SiteHome&ID=4337&PageID=21591">
There are many , many ways to help the Jerry Green Foundation Trust . Adopting a Jerry Green Dog yourself is wonderful - and also a big responsibility . We hope you will be able to do so . However , if you feel you are not ready for a dog at present due to work commitments or other reasons - you can still help us . DOGS COSTS : DID YOU KNOW THAT YOUR FUNDS ARE NEEDED FOR THE FOLLOWING : Looking after each Dog Costs £ 1.00 - £ 1.50 per day for food and treats depending on size £ 75.00 - £ 115 per spay -depending on size and area £ 50 - £ 75 per castration depending on area We need at least £ 350. per day for veterinary costs and sometimes a lot more depending on state of dogs taken in . Apart from spreading the word about this great Charity - please ! - check below how you can support us from far and wide . Head Office is JAY GEE SANCTUARY FOR DOGS BROUGHTON , BRIGG NORTH LINCOLNSHIRE DN20 0BJ Contact : Manager Gail Windsor TEL : 01652 653343 FAX : 01652 650886 e-mail : broughton@jerrygreen . o rg . u k 2006 KENNEL SPONSOR PLAQUE HERE IS ONE OF THE MANY WAYS TO HELP THE DOGS IN OUR MANY SANCTUARIES - GIVE US A RING FOR ADVICE AT ANY TIME . KENNEL SPONSORSHIP Whether or not you can home a Jay Gee rescued dog - perhaps you would sponsor a Kennel for £ 10 a month - a plaque showing your support will be placed on the kennel and you will receive news of the dogs it supports ( see example below ) ADOPT A JAY GEE DOG Visit a Sanctuary near you and see the lovely dogs needing a good home - then consider if you can take on this responsibility - talk to the Resident Manager BEQUESTS IN YOUR WILL Jay Gee depend heavily on bequests - remember us in your will -ask for details of how you can consider doing this FUND RAISING Support Open Days at the various Sanctuaries - by coming along and having a day out and spending your money with us ! or why not join in and help us by running a stall , working behind the scenes etc . Or how about doing an independent fund raising event in your own locality for us MEMBERSHIP OF JGFT Why not become a Member Life Membership is £ 75 : Annual Membership is £ 15 - Ask any branch for details DONATIONS Donations are always gladly received at any time . If you cannot make it to one of our Open Days or other " dos " - send us a donation please . If you live far away and cannot get to a sanctuary - please send us some funds . INFORMATION PACK Everything on this page and more can be found in our INFORMATION PACK . You can send for one by completing your name and email at the SPECIAL PAGE ON THIS SITE - or contact a branch near you . ADVERTISE ONLINE Have a look at our Official WEbsite www . j errygreen . o rg . u k Contact webmaster@jerrygreen . o rg . u k if you would like to Advertise online </text>
<text id="uijm" url="http://www.galha.freeserve.co.uk/glh/233/mckenna.html">
The Secret Life of Oscar Wilde , by Neil McKenna reviewed by Jim Herrick This new biography could well be subtitled “ the wild , wild sex of Oscar ” ; . It transforms our knowledge of Wilde by its detailed account of his engagement with the Victorian homosexual underworld . Richard Ellmann , whose biography ( 1987 ) is reckoned a classic , provides an authoritative and sympathetic portrait of the great writer ; but for the full picture McKenna ( a former editor of the Pink Paper ) is the biographer to read . Although the Ellmann biography deserves respect it can be wrong – ; that Wilde contracted syphilis seems unlikely , that he eschewed anal intercourse seems wrong . McKenna attempts to correct the view ( to which Ellmann subscribes ) that Wilde 's final years in Paris were unutterably miserable ; but alcoholism , poverty and quarrels with Bosie do not sound like bliss , even if some casual sex went some way to redeeming it . Unlike Bosie , who was busy buggering boys at Winchester public school , Wilde came late to homosexuality . The emotions preceded the actions – ; although his later hymns to neoplatonic love were undercut by his love of rough trade whether in Piccadilly or Algiers . His marriage came at a time when he was reaching for homosexual contacts , the classic attempt to deny the real feelings for the conventional alliance , a mistake that gay men still make today . Constance , his wife , was constant and gave him two sons , but the relationship was strained and they virtually separated as he lived a life of lust in hotels . He became a great talker and a great writer . His first big success was as a lecturer in America , representing the aesthete views and pose . He met Whitman and they recognised in each other the appeal of the love of comrades . His religion was art , although he could be superstitious and a Catholic priest fetched by Bosie brought him the last rites ; but there is nothing in his life or writing to suggest devotion to God or the church . He was more attracted to street boys than altar boys . The first writing that endorsed the love of boys was “ The Portrait of Mr . W. H. ” ; , an account of Shakespeare 's love of a youth in the sonnets . This was the first of the many occasions on which he hymned the love of the older for the younger man , as found in ancient Greece , or Michelangelo , as the love that dare not speak its name . The book that really blazoned homoerotic love was his first novel The Picture of Dorian Gray . That male beauty should last for ever – ; what a homosexual fantasy ! A character argues that it is society and religion which have suppressed men 's true nature . The book was talked about at times with an ominous disapproval . Wilde was gaining his courage as a writer . The plays which later became his great success have not the same homosexual undertones , but nevertheless the themes of loyalty , adultery and betrayal – ; the steel within the wit – ; have relevance to gay culture . Then came Bosie – ; the love of his life , although it did not seem so at first . Their relationship was tempestuous : they often quarrelled , neither had any instinct for a monogamous relationship , they both loved luxury which they could not really afford . Yet , it brought them ecstasy and disaster . Bosie 's father , the Marquis of Queensberry , provided the catastrophe – ; an arch-homophobe , a pugilist and , embarrassingly , the president of the British Secular Union ( a breakaway group from the National Secular Society ) . Was the man who was behind the Queensberry Rowing and Athletic Club at the secularist Hall of Science likely to send soft encouraging notes to his two gay sons ? The biographers have missed this aspect of the sulphurous Queensberry . The detestation of homosexuality , especially homosexual acts , lay side by side with a gay demimonde , a punishing legal system and a nascent sexual reform movement . McKenna reveals this in considerable detail and it is the great strength of the book . It gives great insight into nineteenth-century gay history . In 1885 the maximum punishment for sodomy was life imprisonment , although the insertion of semen had to be proved – ; quite a difficult test . Other sexual acts between men were not criminal , until Labouchère produced his famous amendment – ; this was apparently a reaction to what was thought the increasing “ scourge ” ; of homosexuality . Perhaps they should have closed down the public schools . As is often the case , there may have been an increase of visibility rather than a growth of the tendency . Oscar Wilde was on the edge of visibility – ; and Bosie was positively a campaigner . They called themselves Uranians , a word which came from the German lawyer Ulrichs , who coined the term “ uranismus ” ; from “ uranios ” ; or “ heavenly love ” ; of Aphrodite , daughter of Uranus . They started a magazine , the Chameleon , and began to talk of the Cause . McKenna 's account of this area brings out new detail . He also offers information about Lord Roseberry 's affair with Bosie 's brother Drumlanrig , which is not fully given elsewhere . There was even a suggestion of a conspiracy against Wilde from the top of society to divert attention from Roseberry 's sexual activities . The story of Wilde 's trials are well known : the libel case which he brought against Queensberry and withdrew when it was clear that he was going to lose , then the two trials ( one with an indecisive jury ) for indecency , and the cruel sentence of two years ' imprisonment with hard labour . Why did not Wilde escape to France , as he was urged to do by his friends ? Arrogance , inertia or , as McKenna suggests , defiance on behalf of the Cause ? There are moments when McKenna almost seems to be suggesting that there was full gay rights campaigning in the 1890s , which is overstating it . Nevertheless , he gives a fine portrait of a man who wrote to Bosie in extremis , while waiting for the trial to start , “ Every great love has its tragedy , and now ours has too , but to have known and loved you with such profound devotion , to have had you for part of my life , the only part I now consider beautiful , is enough for me . ” ; Copyright © 2004 The Pink Triangle Trust . All rights reserved . For more information or to buy The Secret Life of Oscar Wilde , visit the </text>
<text id="vgzh" url="http://www.societies.stir.ac.uk/sppa/sppa/responsibilities.html">
Home Governance SPPA committee roles and responsibilities SPPA committee roles and responsibilities This page details the responsibilities of the various SPPA posts . To find out who currently holds each post , please visit the committee page or click on a post title . President The president is responsible for : The overall policy of the SPPA Decisions about the type , location and frequency of SPPA events Liaison with SPPA reps to encourage wide participation in SPPA events Preparing an annual plan of projected SPPA activities Secretary The secretary is responsible for : Maintaining and moderating the SPPA mailing list Maintaining the SPPA website Ensuring the constitution is up to date Liaising with the SPC to ensure events of interest to SPPA members are published on the SPC events calendar Treasurer The treasurer is responsible for : Keeping accurate accounts of SPPA income and expenditure Liaising with the SPPA 's financial supporters Providing an annual budget and report of the SPPA 's income and expenditure Receiving and checking bank statements Liaising with bank to ensure address details and authorised signatories for the SPPA cheque book are up to date SPPA representative The SPPA aims to have representatives at each Scottish institution in which there are philosophy research students . These representatives are responsible for : Ensuring postgraduates at their university are aware of the SPPA and have signed up to the mailing list Forwarding key SPPA communications directly to postgraduates at their university Posting details of events at their univeristy that may be of interest to SPPA members to the SPPA mailing list Encouraging postgraduates at their university to submit papers for SPPA seminar days and conferences , and to attend these events Liaising with SPPA committee members and other SPPA reps to plan SPPA activities and policy Suggesting possible activities and additions to the website to the SPPA committee Helping organize SPPA seminar days and conferences when held at their institution and obtaining departmental support for these events </text>
<text id="vihv" url="http://three.co.uk/customer/terms/index.omp?cid=1146151223400">
Your access to and use of the sites is subject to these terms , the Kink Privacy Policy and any other terms contained on the Web Site ( " Terms of Use " ) . Every time you go to the Web Site or WAP site , you agree to access and use the sites , and the material on the sites , in accordance with the Terms of Use . The Terms of Use are a legally binding agreement between you and us . 1 Changes to the Terms of Use 1.1 From time to time , we may need to change these Terms of Use . We may change the Terms of Use at any time by posting the changed Terms on the Sites , and by posting a notice to users on our homepage stating that a change has occurred . 1.2 Any change in the Terms of Use will not affect the terms of any pre-existing agreement between you and us regarding your acquisition of any products or services from the sites . 2 Usage Rules 2.1 The content and information on the sites are provided for your personal use only . 2.2 Unless expressly stated otherwise on the sites , you may download the content and information on the sites onto your personal computer , but only to the extent necessary to allow you to view that content and information . You may also print hard copies of that content and information , but only for your own personal use and reference . 2.3 You must use the Sites in a responsible manner , and in compliance with all relevant rules . 2.4 If you are under 18 years of age , you must obtain a parent or guardian 's consent before accessing or using Kink Kommunity . 2.5 You must not : ( a ) change , modify , adapt , manipulate , reverse engineer , decompile , distort or enhance any of the content or information on the Sites ; ( b ) incorporate or merge any of the content on the Sites with any other material , including advertising or promotional material ; ( c ) create HTTP links from the Sites to any other web site on the Internet ; or ( d ) send , post , communicate or transmit to or via the Sites ( including any chat rooms ) any information or material which infringes a third party 's rights ( including intellectual property rights ) , or which is obscene , indecent , inflammatory , pornographic , defamatory , illegal , misleading or deceptive ; ( e ) use the Sites or any facilities available on or via the Sites ( including any chat rooms ) to defame , harass , threaten , menace or offend any person , or in a way which inhibits another person from using or enjoying the Sites or those facilities ; ( f ) tamper with , hinder the operation of , or make unauthorised modifications to the Sites or any content on the Sites ; ( g ) knowingly transmit any virus , worm , trojan horse or other disabling feature to or via the Sites ; ( h ) use the Sites to send commercial , unsolicited or bulk electronic messages to anyone or in any other way which would constitute an infringement of the Spam Act 2003 ( Cth ) ; ( i ) use another person 's name , username or password on the Sites or to access any content on the Sites ; or ( j ) attempt to do , or permit another person to do , any of the above acts . 3 Operation of the Sites 3.1 We will use reasonable efforts to make sure that you can access and use the Sites at all times . However , despite our efforts , the Sites may not be accessible at all times and you may experience interruptions , delays , errors or faults in your use of and access to the Sites . We will not be responsible to you or anyone else if these things occur . 3.2 When you are using the Sites , we may require you to re-authenticate yourself from time to time - for example , if there has been a period of inactivity on the connection between your internet browser and our servers . We will not be responsible for any information you may lose if your access to the Sites is suspended or terminated in these circumstances . 3.3 To enable you to access certain content on the Sites , we may provide you with a username , password or some other type of identifier . You agree that you are responsible keeping such identifiers secret and that you will responsible for the conduct of any person who uses your identifiers , whether or not you have authorised that use . 3.4 We may receive fees or commissions ( or both ) from third parties in relation to some of the content , goods or services which we advertise , promote or make available on the Sites . You acknowledge and consent to us receiving those fees and commissions . 4 Linked Sites 4.1 The Web Site may contain links to other web sites which are not maintained or controlled by us . These links are provided by us solely for your convenience . We do not accept any responsibility for broken or redirected links . 4.2 We have not checked the accuracy , completeness or suitability of the content of , or the goods and services available from , any linked sites . Also , we do not review or monitor any linked sites . You must therefore make your own enquiries about the content , goods or services available from any linked site before relying on that content , or buying or using any of those goods or services . We will not be responsible for any loss or damage you suffer as a result of relying on , buying or using any content , goods or services from a linked site . 4.3 The presence of links on the Sites should not be taken to imply that we endorse , sponsor or approve of any linked site , or any content , products or services available from that linked site , or that we are affiliated or associated with the owner or operator of any linked site . 5 Changes to the Sites 5.1 We ( or our suppliers ) may change the content , information , products and services provided on the Sites , and the prices for those things , at any time . 5.2 If you purchase any products or services from the Sites , you will be charged the price that applies and is displayed at the time you request those products or services . 6 Our liability to you 6.1 To ensure that we can continue to provide you with quality content and services via the Sites , we and our related companies need to try to minimise the costs associated with operating the Sites . 6.2 As a result , neither we nor our related companies can accept liability for any loss or damage you suffer as a result of using or accessing the Sites or any content , information , products or services available on or from those Sites , except to the extent that we are required to by law , such as State or Territory fair trading legislation and the Trade Practices Act 1974 ( Cth ) . 6.3 In particular , except to the extent required by law , we and our related companies do not accept , and specifically exclude , liability for any business losses , or losses of data or profits , or any other direct , indirect or consequential loss or damage , which you may suffer in connection with our supply , non-supply or defective supply of the Sites , or any content , information , products or services available on or from the Sites . 6.4 As a guide , the Trade Practices Act 1974 ( Cth ) would require us to accept liability to you where : ( a ) we fail to supply the content on the Sites with due care and skill ; or ( b ) the content we supply via the Sites is not reasonably fit for the purpose for which it is supplied . 7 Your liability to us 7.1 To minimise the costs associated with operating the Sites , we also require that you take responsibility for any harm we or our related companies suffer as a result of your use of the Web Site . 7.2 You therefore agree to indemnify us and our related companies from and against any loss , damage , costs or expenses suffered by any of us arising out of or in any way connected to the use of the Sites by you or someone using your name and password . 8 Termination and suspension 8.1 If we reasonably believe that you have breached any of these Terms of Use , we may immediately suspend , terminate or limit your access to the Sites . 9 Trade marks , copyright and other intellectual property 9.1 All intellectual property relating to Kink , including written material , logos , illustrations , audio clips , video clips and photos is protected by copyrights , trademarks , and other intellectual property rights that are owned and controlled by Kink or by other parties that have licensed their material to Kink . 9.2 Material on Kink is solely for your personal , non-commercial use . Without the prior written consent of the owner , modification of the materials , use of the materials for any purpose other than personal , non-commercial use is prohibited . 9.3 " 3 " and " Kink Kommunity " are trade marks licensed to Hutchison 3G Pty Limited . 10 Disclaimer 10.1 By sending in material to 3 , you agree to the following : ( a ) 3 may use and publish any material that you submit . You need to make sure that you have permission from anyone else who is in a video and or picture before you send it in . 3 reserves the right to not publish any submissions and may adapt or edit any material for publication . ( b ) 3 may use or publish it without liability to you for payment or otherwise . You warrant that the material is fit for publication and agree to indemnify us if any third party takes action against us in relation to the material you submit . You warrant that 3 may publish the material you submit and/or make use of any concepts described in it in 3 products or services without liability to you and you agree not to take any action against use in relation to it . ( c ) All personal information gathered as part of your submission may be used by 3 or Kink Kommunity . Your personal information will be dealt with in accordance with Kink 's Privacy Policy found HERE ( Privacy Policy ) 11 General matters 11.1 If we need to notify you of any matter relating to these Terms of Use and you have given us your contact details , we ask , and you agree , that we may use post , fax or email to the relevant contact details notified to us . If we do use email , you will be taken to have received the email if it leaves our servers , unless we receive evidence to the contrary . 11.2 If any of these Terms of Use are invalid , unenforceable or illegal in a particular jurisdiction , that term will be struck out for that jurisdiction only and the remaining terms will remain in full force . 11.3 If we do not act in relation to a particular breach by you of these Terms of Use , this will not be treated as a waiver by us of our right to act with respect to subsequent or similar breaches . </text>
<text id="wcnf" url="http://culturemachine.tees.ac.uk/Cmach/Backissues/j005/Articles/hall.htm">
In 2000 , for the first time in over a decade - some say for the first time ever - world-wide sales of music compact disks ( CDs ) fell . The following year the decline continued . The sale of CD singles in the US , for example , dropped by almost 40 % in 2000 , the US experiencing a further 10 % fall in music sales in 2001 ( Harmon , 2002 ) . Indeed , only France and Britain have so far bucked this world-wide downward trend , in the latter 's case , partly thanks to the huge success of artists such as Robbie Williams and Dido . But with recent reports suggesting that the value of UK music shipments dropped by 3.7 % last year to £ 1.2bn , even the previously buoyant British market now appears to be in decline ( Cassy , 2003 : 22 ) . All of which has left music industry chiefs frantically scrabbling for explanations . Among the most popular put forward to date are the slowing down of the world economy , the increase in popularity of CD ' rewriters ' , which enable individuals to make their own ' pirate ' CDs , and the fact that most people have by now long since replaced their old vinyl recordings of Phil Collins ' ' In the Air Tonight ' with a compact disk version . But there is another explanation , one with far more profound potential consequences for the music industry : the Napster effect . Napster is a software tool for sharing MP3 files . It was written in 1999 by a then nineteen-year-old student , Shawn Fanning , and named after his nick-name at school - he had short , very tight , curly hair . Specially designed for the Web , MP3 files allow users to make free digitised copies of their vinyl and CD collections to a very high standard of sound quality . Now to this extent MP3 merely represents a technological update on home cassette taping and the associated debates of the 1970s : MP3 is open standard , without copyright protection , and so makes it hard for music companies to prevent people from copying and distributing their products without paying for them first . The big difference between home taping and MP3 lies in the ease and scale with which the copied recordings can be shared . In marked contrast to cassettes , MP3 files can be transmitted from user to user over the internet , stored on their computer hard drives , and then played back either on their computers or MP3 players . Yet in the early days of MP3 this still was n't seen as being too much of a problem because , as with home taping , people tended to exchange these files mainly on an individual basis : among friends , work colleagues , etc . Until Napster , that is . Napster transformed the situation by organising the process of exchange , simultaneously increasing , vastly , the amount of recorded material available . It works likes this . When a person logs on to Napster , the software reads the hard-disk of their computer for music files , and adds them to its central directory . All anyone looking for free music then has to do is just search Napster 's directory for the artists or songs they want and download them from there . Now I realise that when it comes to ' music piracy ' - or ' software communism ' , as some prefer to see it - Napster is a bit old hat these days . Sued for violation of copyright , Napster has long since been forced to remove all copyrighted files from its database . In late 2000 , in an attempt to reinvent itself as a legitimate business , Napster even signed a deal with Bertelsmann , one of the world 's leading music and entertainment companies , to access their music catalogue , and subsequently proceeded to operate on a monthly subscription basis - although not particularly successfully , I might add . According to one report , for instance , whereas in ' the summer of 2000 , the peer-to-peer music company had more than 67m registered users swapping files free of charge - an internet phenomenon ' : Last [ May ] - until Bertelsmann , the German media group , stepped in - it was on the brink of bankruptcy . Bertelsmann has agreed to pay $ 8m ( £ 5.4m ) to see off Napster 's creditors . Shawn Fanning , its founder , and Konrad Hilbers , CEO , are to stay on , having threatened to walk out . But it is far from certain that Napster will survive as a business . The online music provider is still being pursued by music companies seeking compensation . And its transition from a free service to a subscription model has caused users to desert in droves . ( Abrahams & Harding , 2002 ) And in fact at the time of writing Napster 's site has indeed closed down . All of which has led to a whole series of arguments and disputes . Does Napster provide a model for revolutionising the music industry ? Witness the way in which , as Napster struggled through the courts , Gnutella , Kazaa and a range of other unauthorised free music download sites and file-sharing applications all took its place on the internet . 1 Or is Napster just another example of the general failure of new media technology to escape big business ' power of incorporation for any significant length of time ? Indeed , does the recent announcement by HMV , the largest music retailer in Britain , that it is setting up its own website where , for £ 4.99 a month , subscribers can choose from almost 100,000 online tracks and download them as MP3 files direct onto their computers and portable MP3 players without ever having to set foot in a record shop , not provide evidence , if any was needed , that the free music download sites have had their day ? But let 's hang fire with the usual debates around Napster for the moment and play a game of science-fiction instead . Let 's imagine that some time in the not too distant future it 's going to be possible to have an academic equivalent to Napster , Gnutella , Kazaa et al . . NapstarXivation As anyone who teaches or studies in a university ( and a British university especially ) will be only too aware , our current system of higher education is one in which an expansion of student numbers has gone hand in hand with a decline in the number of books and journals per student that are provided by university and college libraries . Severe cuts in funding , brought about by the attempts of successive governments to compete in the global marketplace by reducing the state budget deficit through decreases in public spending , not least on education , have produced a situation in which it is increasingly difficult for libraries to be able to afford to stock books , and for students to be able to buy them . ( To provide just one example from the US : whereas previously the University of California would have bought a copy of a particular book for each of its eight campus ' - UCLA , Berkeley , etc . - the University is now reported to be purchasing only one copy to share across all of them . ) And it 's not just teaching and learning that has been affected . Building a career , even just surviving as an academic , is today more than ever dependent on publications . But as both institutions and students have found it harder and harder to purchase texts , the traditional market for the academic monograph has been substantially eroded . This has led a number of academic publishers to cut back dramatically on their commissions , with many In Poland the censor says what you can and cannot do , and that creates a hunger for what the censor refuses to pass , whether it 's any good or not . What is approved by the censor is often by definition of little real interest to the Polish public . In the West we have The Market . The Market censors us through our stomachs and through the pockets of would-be publishers . We cannot do what we cannot sell . If there is no market for a thing , a book say , then the chances are that it will not get written . And if someone should write it , that it will not get published , and if it is published that it will not sell . That is not to say that it is a bad book . ( Tighe , 2001 : 170 ) deciding to concentrate on producing ' Introductions ' and ' Readers ' for the relatively large first year undergraduate ' core course ' markets , and not produce books for second and third years , let alone postgraduate students , at all . Indeed , so bad has the situation become in the US that in May 2002 the Modern Language Association ( MLA ) produced an open letter calling for ' Action on Problems in Scholarly Book Publishing ' : . over the course of the last few decades , most departments of language and literature have come to demand that junior faculty members produce , as a condition for being seriously considered for promotion to tenure , a full-length scholarly book published by a reputable press . T he immediate problem , however , is that university presses , which in the past brought out the vast majority of scholarly books , are cutting back on the publication of works in some areas of language and literature . Indeed , we are told that certain presses have eliminated editorial positions in our disciplines . . Some junior faculty members who will be reviewed for tenure in this academic year . find themselves in a maddening double bind . They face a challenge--under inflexible time constraints and with very high stakes--that many of them may be unable to meet successfully , no matter how strong or serious their scholarly achievement , because academic presses simply cannot afford to publish their books . . We are concerned because people who have spent years of professional training--our students , our colleagues--are at risk . Their careers are in jeopardy , and higher education stands to lose , or at least severely to damage , a generation of young scholars . ( Greenblatt , 2002 ) Of course , such problems have been offset to a degree by the seemingly endless stream of new journals that are being produced to meet the demand from academics for ever more ' research impact ' , Research Assessment Exercise ( RAE ) submitable publishing opportunities . The International Journal of Cultural Studies , The European Journal of Cultural Studies , Cultural Studies - Critical Methodologies , Journal of Visual Culture and Journal of Consumer Culture are just some of the new titles that have appeared in the cultural studies field from Sage alone . And yet a shortage of funds produced by decreasing budgets and the rapidly increasing costs of medical , scientific and technical journals has meant that many university libraries are unable to sustain their current holdings , never mind expand the number of periodicals they take . So even if academics do manage to get published in one of these organs , the chances of anyone having access to their work , let alone actually reading it , are getting slimmer all the time . ( As an academic one regularly hears rumours that the average readership for a journal article is , frighteningly enough , somewhere between just 3 and 7 readers . ) That the major high street book chains are increasingly reluctant to stock academic titles ( journals especially , but also books ) , and more and more independent books stores , such as Compendium and Silver Moon in London , are closing due to competition from the likes of Waterstones at one end of the market and Amazon . c om at the other , only exacerbates the situation . But , as I say , let 's play a game of science fiction and imagine for a moment what it would be like if it were possible to have an academic equivalent to Napster , Gnutella et al , something dealing with written texts rather than music ? What would the consequences be for the way in which scholarly research is conceived , acquired , communicated , exchanged , practised and understood ? Well , for one thing , a free academic text download ( and upload ) site of this kind would provide a way round some of the problems created by restrictive copyright regulations that have until recently enabled the publishing industry to severely limit the number of photocopied texts university lecturers in the UK can give to their students ( we 'll get to the legalities of all this in a moment ) . Academics could provide their classes with as many copies of books and journal articles as they like , simply by supplying students with the address where they can find them on the net and download them for free . By ' splicing and dicing ' from other texts , lecturers could even put their own ' Readers ' together in this way , and ensure that they are constructed to suit the exact requirements of their specific courses ( rather than having to rely on those huge ' doorstoppers ' that are produced by other people with their own courses in mind , and which never quite seem to do the job you want ) , while simultaneously meeting the demand for pre-packaged material created ' partly because of student poverty and partly because of the rise of the student as customer ' ( Midgley , 2002 : 15 ) . Perhaps most importantly of all , at least as far as those working in the humanities are concerned ( where , in contrast to the ' hard ' sciences , more importance is attached to writing academic monographs than to publishing in the most prestigious peer reviewed journals ) , academics and researchers would need no longer worry about whether their next research project was going to appeal to a publisher as something that could be marketed and sold . They could forget about this , secure in the knowledge that as soon as they finish slaving over their text it can be made readily available - to anyone , anywhere in the world ( providing of course that person has a computer and access to the Internet - not an insignificant point given that apparently one quarter of those in the UK and half of all Europeans do n't actually use the Net ) . And what 's more can stay that way for as long as they want ( so never again need As a minimum , access to the Internet typically requires a computer with the right software , a modem , a telephone line , and a subscription to an Internet service provider ( ISP ) . In the Philippines , the computer and modem would cost some P25,000 ( US$500 ) ; phone and ISP subscription combined would require around P1,000 ( US$20 ) or more per month . This is definitely beyond the reach of most poor families , though perhaps within reach of the middle class , if they are willing to drop other daily expenses . At these costs , the Internet would definitely remain an enclave of the rich . ( Verzola , 2002 ) anyone suffer the indignity of having their book go out of print after only 18 months because their publisher only brought out a hardback version , which cost £ 45 a time , and which few people except institutional libraries could afford to purchase ) . Now I realise that at this point some of you may be thinking : ' Yeah , yeah , more cyberbabble ! ' But despite what I said earlier about science-fiction this is all not quite so far fetched and utopian as it sounds . There are already a number of such ' free text ' sites in operation on the Internet . Perhaps the best known and most influential of these is the arXiv . o rg e-Print archive . Founded in 1991 by Paul Ginsparg and originally based at the Los Alamos National Laboratory before moving to Cornell University in December 2001 , this archive has carried over 215,000 submissions , has deposits of a further 25,000 every year , and receives 200,000 connections daily . arXiv . o rg works as follows . Whenever a scholar in the field of physics , maths , computing or non-linear sciences is about to submit a paper to a refereed scholarly journal for publication , they send a pre-print copy to this archive . This pre-print is then made available to any researcher , scholar or student who wants it , free of charge . They simply have to download the file from the archive . Nor does copyright present a problem . As an article that appeared in The Times Higher Education Supplement a couple of years ago made clear , the e-print archiving system is able to avoid falling foul of copyright agreements by means of what 's called the ' Harnad/Oppenheim preprint+corrigenda strategy ' : First the author posts a pre-print of his or her paper on the web . Then they submit the paper to a refereed journal . The author makes amendments in light of referees ' and editors ' comments , then signs the publisher 's copyright agreement . The author then posts a note onto the web pre-print , pointing out where areas of correction might need to be made , in effect turning the pre-print into a version of the draft refereed paper . ' If these steps are followed , the author has done nothing wrong , has broken no law and has not signed a contract he or she should not have signed ' . ( Patel , 2000 : 12 ) This last point is of course extremely important , as it highlights one of the major differences between the self-archiving of e-prints and Napster , and thus provides a means of overcoming what is , potentially , a major hurdle to making such a free academic text download site a real possibility ( as opposed to a mere science fiction fantasy ) . 2 After all , was n't Napster sued because it infringed the copyright of music companies and musicians to own the rights to , and profit from , their music ? Archiving academic texts electronically in the manner described above , however , is not illegal because of the way in which academia works . Unlike Sony , the Motion Picture Association of America , 3 Eminem , Britney Spears , Madonna , Metallica , Missy Elliott or even the vast majority of authors of other forms of writing ( novels , plays , screenplays , newspaper and magazine articles , computer programmes . ) , academics tend not to be too concerned about getting paid a fee for , or receive royalties from , their research publications . ( They 're in the wrong business if they are . ) As Stevan Harnad , one of the co-authors of the Harnad/Oppenheim preprint and corrigenda strategy , and himself a vociferous advocate of the e-print self-archiving system , has emphasised , the main priority of most academics is to have their research read by as many people as they can , in the hope of having the biggest possible impact on future research , and perhaps even society , and so they are perfectly willing to in effect give their work away for free to anyone who can bring this about . In fact this is often how academics derive their income - from ' how much they are read , cited , and built-upon by other researchers ' - as this tends to lead , either directly or indirectly , to employment , career advancement ( including tenure ) , salary increases , promotions , the awarding of grants , etc . ( Harnad , 2001 ) . One of the things that makes e-print archiving , and digital publishing in general , so attractive to many academic authors is therefore precisely the extent to which , by rendering their work freely and easily available to all those who can access it ( rather than restricting access merely to those who can afford to pay for it via the high cost of purchasing it in book or journal form , taking out a journal subscription fees , licensing deals , pay-per-view , etc . ) , it does make reaching a large audience a very real possibility . To provide an obvious example of what is achievable , even on just a relatively small scale , publishers in cultural studies will generally regard an academic journal as financially viable as long as it sells at least one hundred copies per issue . Most cultural studies journals , even quite well established ones , have circulations of only In an article written in honour of Stuart Hall and his activities over the years , Angela McRobbie describes being in the ' audience at an academic media and communications conference where a whole array of editors were on the stage and asked to give an update on publishing in their RAE rated journals ' . To her horror , not one of these editors so much as ' flinched when they described their readerships as a paltry 300 or 400 internationally ' ( McRobbie , 2000 : 219 ) . Myself , I 'm just surprised she was so surprised . Of course , these figures has to be qualified by the fact that , as most ' paper ' journals are purchased by university libraries , they are often read by far more people than actually buy them . The amount such journals may be photocopied , and the way a lot of them appear in multiple formats ( digital as well as paper , for instance ) , also has to be taken into account . Still , the figures McRobbie cites go a long way to explaining why so many new journals are being produced . After all , if individual journals only sell in the region of 500 copies or so per edition , one way for publishers to sell more journals is to increase the number of titles they publish - especially if they have a captive market in university libraries who are likely to feel obliged to subscribe to most if not all the journals produced in a particular area . Considering that publishers pay for neither the content , the editing , nor the peer-review process that makes these journals possible ( and that the yearly subscription to at least one journal in the sciences , Brain Research , costs over £ 9000 , with others in the humanities and social sciences already operating on a ' pay-to-play basis ' , the Journal of Information Technology charging $ US200 reader 's fee for reviewing the article and then $ US100 per page that is actually published ) , academic journal publishing can be extremely profitable . 400-600 copies internationally . Compare this to the fact that Culture Machine achieved a circulation of 6,500 ( i. e . at least 10 times that amount ) in the first 10 months of its existence alone , and only 3 years later ( 2001-2 ) was receiving as many as 375,000 hits per annum , which works out as somewhere between 40,000-50,000 individual accesses , or approximately 4,000 readers a month on average . Nor should those writers and authors who do want to profit directly from their work automatically dismiss the potential benefits of the e-archiving system . A recent study of writers by The Society of Authors found that most had to supplement their very low annual earnings with other forms of work and that : . o nly a handful of writers earn the huge advances which take up so many column inches in the press . Indeed , in writing , five per cent earn on average over £ 75,000 and ' three quarters of members earned less than the national average wage ; and two-thirds less than half the average wage and one half less than the minimum wage ... '(Pool , 2000 ; cited in McRobbie , 2002 ) So the argument that writers of for-profit texts risk losing money , or not making it all , by self-archiving their work does not really apply . Unfortunately , the vast majority of authors simply have no money to lose ; like academics , they , too , could in fact gain from the increase in potential readers and exposure . CSeARCH By now the impact an equivalent archive to that at Cornell , or the CogPrints archive that has been put together for cognitive psychology at the University of Southampton by Harnad ( or the DSpace ' super-archive ' that has recently been launched by the Massachusetts Institute of Technology , for that matter ) could potentially have on cultural studies is hopefully becoming clear . Which is why Culture Machine , working in association with the Mediactive group at Middlesex University , is shortly to launch just such a cultural studies e-print archive ( called , imaginatively enough , the Cultural Studies e-Archive - or CSeARCH , for short ) . The idea is to join with those at Cornell and Southampton as part of the Open Archives Initiative , which is described - somewhat problematically in my view , it has to be said , but that 's an argument for another day - as being in effect one global , virtual archive of jointly searchable academic work . Among other things the CSeARCH electronic archive will enable those in the cultural studies field to : publish their research , and make it widely available as a result , immediately upon completion - before it comes out in either journal or book form ( which can take between 18 months and 2 years from submission of the final manuscript ) ; even before it has gone through the peer review process if they wish , as that can also take a considerable amount of time ; attach a record of all the various stages of the research they wish to record - from pre-refereeing , through successive revisions , to the refereed , journal/publisher-certified publication , including any subsequently corrected , revised , or otherwise updated drafts ; make their work available for free to anyone who can access it - and not just to those who can afford to pay to read it via book fees , journal subscription fees , etc . As Stevan Harnad notes , obviously ' [ r]esearchers in developing countries and at the less affluent universities and research institutions of developed countries will benefit even more from barrier-free access to the research literature than will the better-off institutions , but it is instructive to remind ourselves that even the most affluent institutional libraries cannot afford most of the refereed journals ! None have access to more than a small subset of the entire annual corpus ' ( Harnad , 2001 ) ; provide their audience , including students , with as many copies of their work as they like - simply by supplying their readers with the address where they can find them on the net and download them or print them off for free ; advertise and promote their texts for free - all authors need to do is send out the relevant addresses by email . This enables individual writers to be far more accurate when targeting an audience for their works , as they can send details to people who they know will be interested : students , colleagues , peers , etc ; potentially increase reading figures , impact and even sales of their paper publications - rather than detracting from them , as many publishers fear , publishing on the web frequently increases sales of paper copies , as the ( now ex ) chairman of Faber and Faber , Matthew Evans , acknowledged during a recent talk ( Evans , 2002 ) ; publish books and journals which have too small a potential readership to make them cost effective for a ' paper ' publisher to take on - because they are seen as being perhaps too ' advanced ' , ' specialised ' , ' esoteric ' or ' avant-garde ' ; make their research ' permanently ' available - so authors no longer need concern themselves with the thought that their work may go out of print or become otherwise unavailable ; re-publish texts which have gone out of print - and this applies to journal articles as well as full-length books ; revise and update their research whenever they wish - so authors need no longer worry about their work going out of date ; distribute their research to an extremely wide ( if not necessarily ' global ' ) audience - rather than reaching merely the specific audiences their publishers think they can market and sell their work to ( in cultural studies ' case , primarily just the US , UK and Australia ) ; encourage browsing by enabling even those readers who still prefer to purchase a paper copy to read the texts concerned first - this is simply not possible on Amazon . c om , nor increasingly in the conventional bookselling market , as bookstores are taking fewer and fewer ' academic ' titles . As a result , the element of chance and serendipity traditionally associated with browsing in a bookshop is brought back . In addition authors will have all the advantages associated with electronic publication , including ease of navigation and searching , speed of access , ability to link citations to other electronic texts and to link their texts to other multimedia material in general . To provide just one quick example : individual journal articles are rarely included in library catalogues . Digital academic texts , however , can be easily indexed and searched , even to the level of specific words and phrases . All this will be available for free - to both authors and their readers . What 's more , thanks to the Harnad/Oppenheim preprint+corrigenda strategy cultural studies writers and scholars can still publish any research placed in the archive as journal articles or academic monographs ; and do so without fear of infringing copyright agreements . A variation on this theme even works for articles and books that have already been accepted for publication in a referred journal , or which are already in print . ' Simply do a revised 2nd edition ! Update the references , rearrange the text ( and add more text and data if you wish ) . For the record , the enhanced draft can be accompanied by a " de-corrigenda " file , stating which of the enhancements were not in the published version ' ( Harnad , 2001 ) . 4 Indeed , as far as cultural studies is concerned this last point is probably almost as important as the self-archiving system 's ability to circumvent the problem of copyright , since it has the effect of rendering the Harnad/Oppenheim preprint and corrigenda strategy much more appropriate and appealing to a field which - partly because it does not place so much I t makes little sense for academic libraries to be purchasing journals which no one actually reads , and whose main value to the community is their ' citability ' . The logical resolution to this absurdity , as Harnad has advanced in his work , is for the journal titles to continue to exist but primarily to provide the function of quality control , the organisation of peer review . The titles should continue , almost certainly in electronic-only form , and will continue to pick up subscriptions - perhaps from individual subscribers , or members of the learned societies who publish them in many cases , rather than from academic libraries - but will not depend upon library subscriptions for their existence . Their economic basis will change as they disinvest in the machinery of print and electronic distribution , scaling down their production to a much reduced level ( and abandoning print distribution entirely ) , and will be funded through charges levied on academic and research institutions for the provision of peer-review services . ( MacColl , 2002 ) emphasis on the speed with which results are shared , published and communicated - lacks the history and culture of pre-print exchange of many physical science disciplines . Despite everything I 've said so far , however , the advantages this process offers to cultural studies teaching and research are not the only reason why a number of us who are involved with Culture Machine are interested in the self-archiving of e-prints . For example , we 're not putting it forward merely as a possible solution to the hunt that is now on within the MLA , as a result of Stephen Greenblatt 's open letter on the ' Problems in Scholarly Book Publishing ' to find an alternative criterion for tenure to books - the most obvious candidate being the refereed journal article , with the idea of ' attaching equal weight to peer-reviewed electronic publications ' interestingly being My preference . would be to encourage a greater diversity of types of publication , where perhaps the rules of anonymous peer reviewing and all the paraphernalia involved in getting RAE-rated work into print might be suspended in favour of attention to the quality of the written work and the spirit of experiment and innovation . The system the RAE has put in place operates as a means of disciplining young scholars to conform to the rules of their seniors . In a nutshell , they have to go through the route of the established journals rather than start their own . This is also a constraint on critique and on healthy intellectual subordination . ( McRobbie , 2000 : 220 ) one of the options reportedly also under consideration ( Phillips , 2002 : 18 ) . Nor are we motivated simply by a belief that knowledge should n't be owned , copyrighted or exchanged by publishers for profit , and that it should instead be made available for free ( or at least relatively cheaply ) to ( almost ) everyone - a conviction that has recently led 32,362 research scientists in 183 countries to boycott any scientific journal which refuses to make research papers freely available on the internet 6 months after publication ; and when that boycott failed , since younger scholars in particular found they still had to publish in those journals in order to embark on their careers , to launch their own free online journals ( Meak , 2001 : 3 ; MacLeod , 2003 : 9 ) . And we 're certainly not advocating it as a way of making money for publishers . In other words , we do n't see e-print archiving as representing a new , alternative form of capitalism or even post-capitalism , one that is potentially more effective in the context of what 's called variously the ' digital ' or ' knowledge economy ' . The reason we 're so interested in electronic archiving is due to the ethical and political questions it raises for academic and institutional authority and legitimacy : the way NapsterXivation , as I 'll nickname it , promises to transform and redefine our relationship to knowledge . To be continued ... 5 Endnotes 1 According to Duncan Campbell and Stuart Miller , more than ' 8bn music files were swapped online ' in 2001 ( Campbell & Miller , 2002 : 5 ) , while members of the International Federation of the Phonographic Industry are reported as having ' closed down more than 1,000 illicit music sites ' in 2001 ( Cassy , 2002 : 20 ) . 2 This is of course not the only important difference between them . Another concerns the way in which the e-print archiving system , at least as it is characterized by arXiv . o rg , is based on a database , hosted on a central server , which is used to collect , publish and store written academic texts . Napster , by contrast , is a music file sharing tool based around a central directory which lists the data that is being offered for exchange by other registered participants . Neither arXiv . o rg nor Napster is therefore what is called a P2P ( peer-to-peer ) networking system , at least not in the proper sense of the term . P2P file sharing systems such as Gnutella and Kazaa consist of a de-centralised network of connected machines that are independent of either a centralised server or a centralised directory . 3 In March 2002 the Motion Picture Association of America began a legal action against MusicCity . c om and others for swapping ' pirated ' television programmes and films online . According to Campbell and Miller , approximately ' 11m Americans are now swapping television programmes and films online and are downloading an estimated 350,000 moves from the internet everyday ' ( Campbell & Miller , 2002 : 5 ) . 4 As Harnard makes clear , this strategy is designed to be employed only in those cases where a publisher will not expressly allow the self-archiving of the refereed pre-prints . Such cases are rarer than one might think . Harnad cites figures to the effect that approximately 10 % of journal publishers already explicitly allow self-archiving of the refereed postprint . Others , ' ( perhaps 70 % ) ' , will also allow authors to modify their copyright transfer agreement forms with something along the lines of the following clause , ' but only if you explicitly propose it yourself ( they will not formulate it on their own initiative ) ' : I hereby transfer to [ publisher or journal ] all rights to sell or lease the text ( on-paper and on-line ) of my paper [ paper-title ] . I retain only the right to distribute it for free for scholarly/scientific purposes , in particular , the right to self-archive it publicly online on the Web . ( Harnad , 2001 ) If you ask nicely most journal publishers will generally release articles for self-archiving at some stage once the journal issue in question has been published , as after a certain date they have no real sale value : As to the past ( retrospective ) literature : the Harnad/Oppenheim preprint+corrigenda strategy will not work there , but as the retrospective journal literature brings virtually no revenue , most publishers will agree to author self-archiving after a sufficient period ( 6 months to 2 years ) has elapsed . Moreover , for the really old literature , it is not clear that on-line self-archiving was covered by the old copyright agreements at all . ( Harnad , 2001 ) But even if publishers do respond to such ventures , as some have predicted , by getting together and agreeing between themselves to no longer wave copyright and allow self-archiving of pre- and post-prints ( although why should they : after all , arXiv . o rg has been operating for over 10 years now without any such difficulty ) there is a case to be made for academics just cutting out the middle-man ( i. e . the publishing houses ) and taking the means of production into their own hands and simply publishing their work for , and by , themselves . After all , as I pointed earlier , academics are rarely paid , either substantially or directly , for any of the writing , editorial work or refereeing that goes into the production of scholarly journals , publishers getting all this work for free . 5 See Hall ( 2003 ) . References Abrahams , P. & Harding , J. ( 2002 ) ' The Digital Divide ' , The Financial Times ( May 21 ) . Campbell , D. & Miller , S. ( 2002 ) ' Net Pirates Turn Sites on Hollywood ' , The Guardian , ( February 23 ) . Cassy , J. ( 2002 ) ' Record Firms Foil CD Pirates ' , The Guardian ( April 17 ) . Cassy , J. ( 2003 ) ' Pirates Turn Down the Music ' , The Guardian ( February 11 ) . Evens , M ( 2002 ) , ' RESOURCE ' , in J. Frow ( ed . ) , T he New Information Order and the Future of the Archive : Proceedings of a Conference held in March 2002 , Institute for Advanced Studies in the Humanities , The University of Edinburgh . http://www.ed.ac.uk/iash/proceedings/evans/evans.html Greenblatt , S. ( 2002 ) ' Call for Action on Problems in Scholarly Book Publishing : A Special Letter from the President ' , MLA Documents and Reports ( May 28 ) . Hall , G. ( 2003 ) ' Digitize This ' , Mediactive ( April , 2003 : forthcoming ) . Harmon , A. ( 2002 ) ' CD Technology Stops Copies , But it Starts a Controversy ' , New York Times ( March 1 ) . Harnad , S. ( 2001 ) , ' For Whom the Gate Tolls ? How and Why to Free the Refereed Research Literature Online Through Author/Institution Self-Archiving , Now ' . http://www.ecs.soton.ac.uk/~harnad/Tp/resolution . h tm MacColl , J. ( 2002 ) ' Free Access to Research Publications ? The Potential of the Open Archives Initiative ' , in J. Frow ( ed . ) , The New Information Order and the Future of the Archive : Proceedings of a Conference held in March 2002 , Institute for Advanced Studies in the Humanities , The University of Edinburgh . http://www.ed.ac.uk/iash/proceedings/maccoll/maccoll.html MacLeod , D. ( 2003 ) ' Publishers Damned : Free Online Science Service Challenges Established Journals ' , The Guardian : Education ( January 7 ) . McRobbie , A. ( 2000 ) ' Stuart Hall : The Universities and the ' Hurly Burly ' ' , in P. Gilroy , L. Grossberg & A. McRobbie ( eds ) , Without Guarantees : In Honour of Stuart Hall . London : Verso . McRobbie , A. ( 2002 ) ' From Holloway to Hollywood : Happiness at Work in the New Cultural Economy ' , in P. du Guy & M. Pryke ( 2002 ) , Cultural Economy : Cultural Analysis and Commercial Life . London : Sage . Meek , J. ( 2001 ) ' Science World in Revolt at Power of the Journal Owners ' , The Guardian ( May 26 ) . Midgley , S. ( 2002 ) ' The End of Books ? ' , The Guardian : Education ( April 9 ) . Patel , K. ( 2000 ) ' Team Finds Way Round Copyright ' , The Times Higher Education Supplement ( February 12 ) . Phillips , S. ( 2002 ) ' Take Away Books and the Chairs Collapse ' , The Times Higher Education Supplement ( November 8 ) . Pool , K. ( 2000 ) ' Love , Not Money ' , The Author ( Summer ) . Tighe , C. ( 2001 ) Burning Worm : Memoirs , Notes & Diaries of Eugene Hinks . Manchester : IMPress . Verzola , R. ( 2002 ) ' Internet Cafes : Connectivity for the Masses ? ' . Posted on the fibreculture list 05.05.02 . fibreculture@lists . m yspinach . o rg , </text>
<text id="wkut" url="http://www.craigmurray.co.uk/archives/2006/06/met_chief_could.html">
« Is Haditha just the tip of the mass grave | Main | Coucil of Europe report on extraordinary rendition out today » June 04 , 2006 Met chief could face charge over Menezes From The Observer The Crown Prosecution Service is considering legal charges against Britain 's most senior police officer over the fatal shooting of Brazilian Jean Charles de Menezes , mistakenly taken to be a terrorist . The Observer can reveal that the Metropolitan Police commissioner , Sir Ian Blair , and two senior commanders in control of the operation that culminated in de Menezes 's death are the focus of the final legal analysis of the shooting by Crown prosecutors . If the CPS goes ahead with the dramatic move , the decision would pile further pressure on the already beleaguered head of Scotland Yard . Legal sources close to the CPS case have revealed that , following a four-month review of a report by the Independent Police Complaints Commission , prosecutors are considering whether the command team are ultimately responsible , a decision that could give rise to a charge of gross negligence manslaughter against Blair and two other senior figures . Posted by andrew on June 4 , 2006 11:20 AM in the category 7 UK Policy Comments I 'm not convinced this one will actually fly , but it 's interesting to notice how tight-lipped Scotland Yard is being over the latest ' tragic mistake ' in east London . I 'll bet there are a few worried ( desperate ? ) senior cops and spooks right now . If they ca n't get any ' evidence ' together shortly it 's going to be ever so embarrassing . And note the constantly changing unattributable stories about the circumstances of both the shooting and the type of ' bomb ' . Yes indeed , news management at its finest . Posted by : Chuck Unsworth at June 5 , 2006 11:27 AM Post a comment Thanks for signing in , . Now you can comment . ( sign out ) ( If you have n't left a comment here before , you may need to be approved by the site owner before your comment will appear . Until then , it wo n't appear on the entry . Thanks for waiting . ) </text>
<text id="wrrh" url="http://www.fenews.co.uk/newsview.asp?n=1014">
Jul - Sep 2006 Apr - Jun 2006 Jan - Mar 2006 Jul - Sep 2005 Apr - Jun 2005 Jan - Mar 2005 Jul - Sep 2004 Apr - Jun 2004 Jan - Mar 2004 Jul - Sep 2003 Apr - Jun 2003 Jan - Mar 2003 Home SEU Report Welcomed by Minister 09 December 2005 Transition to Adulthood Tougher Than Ever , says Phil Woolas MP A report issued by the Social Exclusion Unit ( SEU ) on the issues facing 16 - 25 year olds from disadvantaged backgrounds has been welcomed by the Government . The report , entitled ' Transitions ' , includes not only some startling research results concerning suicide rates , using ASBOs inefficiently and the cost to the state of failing young people and not bringing them back into the workforce , but also some details of the measures to be taken by a cross - Governmental action . And a government minister spoke about the report as a necessary document given the new and difficult environment facing young people in this transition today . Generation Gap The Minister of State responsible for the SEU and Local Government , Mr . Phil Woolas MP , spoke of the need to recognise the change that society as a whole has undergone and the consequences of this , saying : ' For my generation - and my parents ' generation - the transition from adolescence to adulthood was relatively straightforward : leave school , get a job , leave mum and dad 's home , get married , start a family . But these days - as the SEU report shows - the transition is more complicated - and more difficult . ' Speaking of the need for better advice and guidance for the young people , he said : ' All young people need help and advice during this critical stage of their lives . Important decisions have to be made - decisions about work and education , for example . But for vulnerable and disadvantaged young people that advice can sometimes be lacking - and this can result in existing disadvantage being passed from one generation to the next . Trust and Respect The report raises the issue of respect and responsibility and the need to enhance these amongst the young people concerned . This is a sentiment that Mr . Woolas shared : ' For me , one of the key points in the SEU report is the focus on the need for a disadvantaged young adult to have trust in someone they respect - and who respects them . Someone who can support and advise them - but also challenge their thinking . This is crucial . And it is one way that all young people can experience a successful and happy adult life . ' He stated that the Government is entirely commited to effecting the changes outlined in the report , saying : ' The SEU report Transitions shows how seriously the government takes this . The actions show that this is a cross government initiative to help get young adults lives back on track . ' Projects to Build On Jane Slowey , Chief Executive of the Foyer Federation , also welcomed the report , saying : ' This report is a positive step towards treating young people according to the stage they have reached , rather than just their age . Too many disadvantaged young people are being failed in their early twenties , a time when many are most in need of support to help them move into education , training and work . ' Young people living in projects such as Foyers often face what seem like insurmountable barriers to get them back into a positive cycle and help them progress . ' She concluded with a message to the Government , warning them of the need for imnmediate and sustained action : ' Government now needs to act on the evidence presented in this report and elsewhere to ensure that all young people have the chance to realise their full potential . ' Jethro Marsh Read a review of the SEU report right here at FE News ! Click here for the latest FE and Work Based Learning job vacancies . FE Careers advertise hundreds of NVQ Assessor jobs , Tutors , Lecturers , Verifiers and Senior Manager vacancies each week . </text>
<text id="wxqy" url="http://www2.newsquest.co.uk/the_north_east/petscorner/news/140106.html">
Samson spared week from death 14/01/06 A DOG on death row with a taste for men in uniform has been given a reprieve . Magistrates had imposed a death sentence on three-year-old rottweiler Samson after they heard he had attacked a postman and a police officer . They were bitten in separate incidents while calling at the home of owner Mandie Jayne Henderson , in Newton Aycliffe , County Durham . Despite a previous order by South Durham magistrates for Samson to be kept under control after the attack on the postman , he bit the PC on the arm in the back yard of the house , in Booth Walk , last January . The officer , who was calling after a further complaint about the dog , retreated bleeding from puncture wounds . Magistrates imposed the destruction order at a hearing in August , and confirmed their ruling last month . But this week , eight days before he was due to be put down , Ms Henderson appealed against the sentence at Durham Crown Court . Her barrister , James Robinson , said that other than a clash with another dog while being walked by Ms Henderson 's former partner , there had been no further incidents since the officer was bitten . Mr Robinson told the court that Samson was muzzled when taken for a walk . He said : " She will do whatever is necessary to spare this dog . " She did not believe he had to be kept muzzled when he was at home in the yard , but she can keep him muzzled all the time at home , if necessary . " Judge Michael Cartlidge , sitting with two magistrates , upheld the appeal , sparing Samson , but imposed a number of conditions on 39-year-old Ms Henderson . These include keeping Samson muzzled and on a lead at all times when not at home . Warning notices must also be put up outside the house . Judge Cartlidge said : " I hope this will ensure there is no further trouble in future . " Leaving court , Ms Henderson said : " He just does not seem to like men in uniforms , but I have had people at the house and he is as soft as can be with them . " </text>
<text id="xmyp" url="http://www.nursingbra.co.uk/emma_jane.htm">
Has all the features of a maternity bra - support , coverage , adjustability and comfort , plus : - access for breast feeding - support , so when one cup is open for feeding , the other should continue to provide comfortable support . Emma Jane product code 381 . Available in white and black , in medium , large , xl and xxl sizes . IF YOU REQUIRE A DIFFERENT SIZE , COLOUR OR CUP , JUST SCROLL DOWN USING THE BLUE ARROWS ON THE RIGHT . Nursing bras should be bought during the last month of pregnancy . Do n't forget you will need to buy two or three bras . </text>
<text id="xvwn" url="http://www.paramountcomedy2.co.uk/comedy/comedians/comedian.aspx?id=429">
Tim Vine Profile Tim is well known on the comedy circuit for having more punch lines per minute than any other comedian . At full pelt , Tim sprays out 10 jokes a minute . Tim is no stranger to television and could be seen most recently on our screens in ' The Sketch Show ' which recently won a BAFTA award for best comedy show . His other credits include ' The Royal Variety Performance ' , ' Jim Davidson Presents . ' , ' Not The Jack Docherty Show ' and the Paramount Comedy show ' The Comedy Store ' . At home in stand-up , Tim always sells out at the Edinburgh Festival and for last years ' I 'm Vine Thanks ' , he received rave reviews . Tim received critical acclaim for his performances at the Montreal ' Just For Laughs ' comedy festival and also won the ' Best Newcomer ' Perrier Award in 1995 . More comedians ... More comedians in the Paramount comedian A to Z Have your say ! Get involved and send us YOUR Comedy News and Gossip ! </text>
<text id="ygug" url="http://www.seequality.org.uk/gender.html">
This section deals with gender discrimination , more commonly referred to as sex discrimination . Business Benefits Enhancing Customer Satisfaction increase the satisfaction of the customers enhance the reputation of the enterprise ensure that the diverse training needs of all disadvantaged groups are recognised and addressed show customers that you conduct business fairly Strengthening Community Roots help strengthen and deepen roots in the local community affirm the organisation 's business commitment to the locality ensure that the best use is made of local suppliers Meeting Local Needs greater success in recruiting staff and trainees and helping them to achieve their personal and vocational goals greater customer loyalty an increased market share access to neglected markets and a wider customer base Becoming An Employer Of Choice an enhanced reputation as an employer a wider pool of applicants from which you increase the likelihood of recruiting the best person for the job Development & Promotion To Maximise Staff Potential improves retention provides savings in recruitment and retraining costs Family-friendly work practices lead to : greater commitment and higher productivity and staff retention Benefiting from partnerships , A Good EO reputation attracts : partners from a variety of agencies development funding by meeting social inclusion criteria Gaining Development Funding - Effective EO policy & implementation ensures that : the organisation meets funders ' criteria funding applications are positively received AVERTING THE COSTS OF DISCRIMINATION : all discrimination is expensive costs money , undermines staff morale and reputation makes the organisation unattractive to employees , customers and suppliers adverse publicity or formal investigation of alleged discrimination is an expensive liability . THE ROLE OF GOOD EMPLOYMENT PRACTICES IN PROMOTING EQUAL OPPORTUNITY Equal opportunities policies are not required by law , but the benefits of having them is recognised by those employers who have drawn them up and implemented them . An equal opportunities policy : will ensure the effective use of human resources ; is in the best interests of both the organisation and its employees it is a commitment by an employer ( and their employees ) to the development and use of non-discriminatory procedures and practices . Implementing the Policy An equal opportunities policy must be seen to have the active support of management at the highest level . To ensure that the policy is fully effective , the following procedure is recommended : the policy should be clearly stated and where appropriate , included in a collective agreement ; overall responsibility for implementing the policy should rest with senior management ; all employment policies should be reviewed in the light of commitment to The EO policy ; the policy should be made known to all employees and , where reasonably practicable , to all job applicants . Trade unions have a very important part to play in implementing genuine equality of opportunity and they will obviously be involved in the review of established procedures to ensure that these are consistent with the law . </text>
<text id="bacte" url="http://vue.org.uk/carlos.htm">
Carlos Fallanty lost his wife at the time of the Violent Unknown Event . She was a voluble , untidy woman who made her own clothes and washed once a week in the water wrung out of the laundry . She was invaluable to her husband . She looked after his poultry , kept his accounts , and when roused , was as uxorious a wife as Carlos could wish to have . On the night of June 12th of the VUE , Carlos 's wife suffered a stroke , and Carlos transferred his affection to a turkey . The VUE Directory records for Carlos a debilitating malfunction of the left ventricle , bone-marrow disease , and save for the VUE immortality clause , would have normally given him six months to live . Carlos had buried his wife in the floor of his greenhouse . The local authorities later had the body exhumed . Now Carlos lived in the greenhouse to keep his turkey company . A fowl-pest epidemic finally erased Carlos 's other poultry , and two veterinary officials came to make sure he had burnt or buried all the corpses . Insisting that the one remaining bird should be destroyed as well , the vet promised to compensate Carlos with at least a set of photographs . These are the photographs taken as the vet stalked the bird with his camera , whilst the vet 's assistant stalked the bird with a shotgun . Carlos was not happy with the photographs . He is now awaiting trial at Clichy for shooting the vet . </text>
<text id="baiwc" url="http://www.sleafordtownfc.co.uk/archives/archived_game.asp?MatchID=89&Season=2002/03">
As each week passes , Sleaford Town are getting stronger and stronger . The Team put out against Coleby on this balmy September afternoon was more in keeping with the Manager 's expectations to see Sleaford Town do very well in the Lincoln league . The game started brightly with Gibson hitting the woodwork after only 6minutes with a fierce drive only for Coleby to force a first class save from Ben Jackson in the Sleaford goal with a looping header after 15 minutes . Sleaford , with Hanlon , Morley , and Musson dictating play , were winning the midfield battle . It was a flowing move through the midfield culminating in Sleaford 's bright new signing Reece racing away down the left before setting up Gibson from 25 yds to do what he does best and score with a fine shot into the top corner . The best of Sleaford 's defence was in evidence after 44 minutes when after Hill & Greenslade had snuffed out another Coleby attack , Goalkeeper Jackson then quickly threw the ball to Sweeper Fox . Fox then carried the ball 30 yds before delivering a fine ball to Reece who flicked on for Morley to score with his ' Bryan Robson ' style late run from Midfield . 2-0 at half time . Same story after the break with Sleaford looking the stronger team . Costa gave way to young Martin Dickinson , and it was Martin 's strong run and magnificent left foot strike that sealed the victory 3-0 after 69 minutes . Ryan McGuinness replaced Mark Brayfield who had played very well in his first start of the season . Ryan once again showed why he is one for the future with great touches and intelligent running . Carl Roberts replaced Hanlon with 8 minutes remaining and the Player Manager had a chance to put the icing on the cake with a forth goal from 6yds only to blaze wildly over ( to an ironic cheer from his prodigies ) All in all a good days work and the signs are good to continue the early success . </text>
<text id="baysn" url="http://www.portscathoholidays.co.uk/ShowDetails.asp?id=96">
Good sea views from this delightful little property set back up a private path between 2 other houses and about 25yds from the hustle and bustle of the actual sea front . Very conveniently situated close to all village amenities . Panoramic sea views from the secluded patio at the rear of the property and from the adjoining hillside garden . Lower ground level Bedroom with good quality double bed , double wardrobe , chest of drawers and bedside table . Entrance door level Living room with sea view . Good quality double sofa bed . Wardrobe , built in cupboard and ottoman provide ample storage . Dining table and seating for four . A wood burning stove , will keep you nice and warm should you need it . F uel is not provided . Bathroon with wc , shower , shaver point , heated towel rail , large airing cupboard . Kitchen with pine storage units and worktops , fridge/freezer , spin dryer and microwave . Nightstorage heating provided Patio with barbecue , summerhouse , garden furniture . Parking . There are some unrestricted on-street spaces directly opposite the approach path , some limited duration parking in the village square , a large local authority free park beside the cliff path about 5 minutes walk from the cottage and another fair sized park at the village hall 300yds . , away on Gerrans Hill about 50p per night via honesty box </text>
<text id="bbgkl" url="http://www.homezonenews.org.uk/news/news_detail.asp?nid=22">
Leeds pilot evaluation The programme was established with the aim of evaluating the potential benefits of shared road space in a variety of Home Zones across England and Wales . The Methleys Home Zone is to the north of Leeds City Centre and employed such measures as gateway treatments , Home Zone signing , shared road space , traffic calming and hard and soft landscaping . In order to assess the effectiveness of these measures , a programme of ' before ' and ' after ' monitoring was undertaken . This included household interview surveys with adults and children , collection of traffic flow , speed and accident data , video recording to observe residents behaviour in the shared space , air quality and noise monitoring . The interviews revealed that the majority of resident 's supported the Home Zone scheme and felt it had had a positive impact , whilst half of the adults surveyed thought that motorists were now more considerate to children playing in the street . From the children came a list of the most popular outdoor activities including riding bikes , playing football , chatting and ' hanging around ' with friends . Notably , mean traffic speeds were reduced by 6 mph and traffic flows fell by 10 per cent . The question of on-street car parking spaces and the desire to park close to home to reduce the risk of crime was an area of main concern raised by the residents during the consultation process . On-street parking spaces were reduced by 16 % but generally in areas not directly overlooked by houses . The Home Zone measures had little impact on modal shift or how often people walked , cycled or drove . Similarly , they had little impact on noise levels and kerbside concentrations of benzene and nitrogen oxides . This first evaluation report demonstrates the value of robust monitoring both ' before ' and ' after ' the introduction of Home Zone Schemes and provides quality information for town planners to call upon when considering such schemes in the future . You can download the report from this website here : blank ' Pilot home zone schemes : evaluation of The Methleys Printed copies of the report are available from TRL priced £ 10 . </text>
<text id="bbglz" url="http://www.benhs.org.uk/anex.html">
The 2006 Annual Exhibition took place on 11th November and proved to be another very successful event with a good turnout of members and guests . As this year has been an exceptional one for migrants it was not surprising that many exhibits displayed specimens of rare migrants , and several moth species new to Britain . As an experiment this year , and in response to requests made in the questionnaire circulated last year , Pemberley Books were invited to have a book stand at the exhibition , and it is hoped that this was a financial success for them . No doubt the BENHS Council will consider whether to repeat this venture in future years . In past years trading has been limited to the Society 's own publications plus those of the London Natural History Society , and the Royal Entomological Society , with whom we have strong links . Around 40 people stayed to enjoy an excellent evening meal at Imperial College , a fitting end to a most enjoyable exhibition . The date of the 2007 exhibition will be posted to this site as soon as the booking has been made and confirmed . It is likely to be held on Saturday 10th November 2007 at Imperial College . Hope to see you there . </text>
<text id="bcked" url="http://www.fancy-rats.co.uk/information/guides/guides.php?subject=ratsthatbite">
Rats That Bite There is an argument that suggests that any rat that bites should be humanely destroyed , as a biting rat is not acceptable as a pet . While I agree with that in part , there are also a whole host of reasons why this does not have to be the ' unwritten law ' of rat keeping . Pet rats are generally kept in cages - they cannot bite anyone outside their cage , only someone who infringes on their territory by putting their fingers through the bars , or their hand through the door . Being a biter does not necessarily make the rat dangerous ( as long as you follow basic rules , like NOT sticking your fingers through the bars ) , neither does it mean that the rat in question ca n't have a long and fulfilled life ( it may be perfectly happy with cage mates ) . As an owner , you have to decide whether you are willing to accept the constraints of a biting rat and whether you are willing to put in the time and effort to correct this character flaw . You also have to consider , especially if there are children involved , whether it is realistic to even attempt to do this - it may be wiser to pass the rat over to someone else who is less interested in having the rat as a cuddly pet . It is very rare for pet rats to aggressively bite , but they can and will bite for a whole host of other reasons . Understanding the reason(s ) can help an owner overcome the problem , or at least allow themselves not to be hurt when dealing with a particular rat , as well as allowing the rat to lead as normal a life as possible . The primary cause of any bite is fear . A well-socialised regularly handled rat is highly unlikely to bite compared to a solitary un-handled rat . Unfortunately , unless you buy your rats from reputable breeders , you will have no way of telling how socialised your new friends are until you try to pick them up - they may be used to the person in the pet shop , picking them up for short periods or shooing them out of the way while their cages are cleaned , but that does not mean they can cope with , or understand , the loving attentiveness of a new owner . As an owner you must be patient and understanding , giving your new friends time to settle into their new environment and introducing yourself to them slowly and carefully . Start off by just resting your hand in their cage , so they can get used to your smell , or try putting an old t-shirt that you 've recently worn in their cage . You will be able to tell , quite easily , which of your new rats are nervous and which are quite happy to see you : nervous rats will cower , run away , move in a jerky manner and make every attempt to avoid your hand at all costs ! This is when you need to be extra patient because the one thing that will get a rat to investigate you is curiosity . By talking calmly to the rats and not making any sudden movements , even the shyest of kittens will try and sneak a sniff , a lick or even a ' is it edible ? ' nip ( which wo n't hurt you at all ! ) . Trust building exercises , like letting rats lick yummy stuff from your fingers , help to teach the rat to associate hands with nice things and also that fingers are not for biting , only for licking . When venturing to pick up your baby rats , NEVER EVER pick them up by the tail - either use a scooping motion supporting the tummy , or place your first 2 fingers either side of their neck , just above the shoulders , with your thumb and remaining fingers supporting their tummy . You obviously ca n't do this with bigger rats , unless you have big hands ! Once you 've scooped them up you must support their feet : rats feel very vunerable when left dangling in mid-air ! When you first get your baby rats out of their cage , do n't go too far with them - stay close to the cage so that they can still smell it and , if they panic , you can easily put them back . You must handle your baby rats daily , for at least 20 minutes - there is a theory that a baby rat cannot stay frightened for more than 20 minutes so , by handling them for at least this length of time in any one go , they will realise that there 's nothing to be frightened of . However , some rats are far more nervous than others , and can show obvious distress at being handled after only a very short time . Stress is very bad for rats so I would suggest that nervous rats should have their handling time gradually increased - a little amount of handling but several times a day . If they are particularly nervous you will need to make sure they do n't associate your visits with just being handled : on one visit to the cage handle them , on the next give them a treat , on the next just have your hand in etc . If you do have nervous babies , it may be worth considering not giving them a covered bed or bolt-hole in their cage : this may seem a bit harsh but most pet shops do not provide cover and , for the first few weeks at least , it will be easier for you to handle the rats if you do n't have to chase them round the cage or fish them out of a hidey-hole ! Gradual but continual ( and that 's the key ! ) trust building will socialise your rats in no time and , though it wo n't guarantee a shoulder or lap rat ( that depends on the personality of the rat ) , it will almost certainly guarantee that your baby rats wo n't grow up to be biters ! Older rats that bite are more of a problem and the reasons behind their biting can be more complex and harder to figure out . If you ' adopt ' an adult biter , you have no way of telling whether it has been handled regularly , whether it has been mistreated or whether it is insecure and unsocialised . Trust training can also work with adult rats , though will probably take longer and require a lot more persistence on your part . Thick gardening gloves can be worn to minimise the risk of damage to fingers , or some people use a thick towel to scoop or catch the rat in , should it be necessary to handle it . You have to decide whether this will stress the rat out and undo all your hard work of trust training , or whether you should ignore the handling aspect of socialising your rat until it feels safe in your company and is used to you lightly touching or brushing it with your fingers . There is no need to feel rushed in your socialisation and trust training of your new rat - each rat is different and each will take their own time to ' come round ' to your way of thinking ! Being naturally sociable animals , it is very rare for a rat to just be aggressive and unhandleable with no hope of character redemption , but any rat that exhibits outward unprovoked aggression should NEVER be bred from . Responsible breeders breed as much for character as they do for colouring and they socialise their rats almost from birth , getting them used to being handled from an early age - a good reason to consider buying your rats from breeders rather than pet shops , which can sometimes breed and sell rodents for reptile food ( ' feeders ' ) and are consequently uninterested in the character and health of the animals they produce . Whether from a breeder or a shop always get at least a pair of same sex rats . If buying from a pet shop , unless you know the shop to be reputable , get young , recently weaned rats . Wherever you buy your new pets from , the time spent building bonds can be one of the most rewarding experiences of rat ownership , so have fun ! </text>
<text id="bcnko" url="http://www.ombudsman.org.uk/improving_services/selected_cases/PCA/sc9903/c682b.html">
Home Improving Services Selected cases -- Parliamentary Selected Cases and Summaries of Completed Investigations - October 1998 - March 1999 C.682/96 Full text Parliamentary Commissioner for Administration Sixth Report Session 1998-99 Volume 2 OCTOBER 1998 - MARCH 1999 The full report of selected cases Summary of selected cases DEPARTMENT OF SOCIAL SECURITY Case No . C.682/96 Misleading information about eligibility for medical cover while living abroad 10.1 Mr H complained that the then Department of Health and Social Security now the Department of Social Security ( DSS ) misled him about his eligibility for medical cover while living abroad ; and that as a result he had to pay for private medical cover for himself and his wife thereby causing him financial hardship . 10.2 My investigation into Mr H 's complaint began once the Ombudsman had obtained , after the referral of the complaint , comments from the Chief Executive of the Benefits Agency , an executive agency of DSS with responsibility , since 6 April 1992 , for advice on medical cover abroad . I have not put into this report every detailed investigated by the Ombudsman 's staff ; but I am satisfied that no matter of significance has been overlooked . Appendix A to the report gives the meaning of the initials used in it . Back to top Background 10.3 Entitlement to sickness benefit ( SB ) and to invalidity benefit ( IVB ) to which a claimant was entitled after 28 weeks ' incapacity ( both replaced from 13 April 1995 by incapacity benefit ) normally depended on the claimant 's national insurance ( NI ) contribution record . ( The exceptions were where incapacity had been caused by an accident at work or was due to a prescribed occupational disease . ) Two conditions had to be satisfied . The first was that the claimant must have paid enough Class 1 ( employed persons ) and/or Class 2 ( self-employed persons ) contributions in any one tax year ( which runs from 6 April in one calendar year to 5 April in the next ) to give an earnings factor of at least 25 times the lower earnings limit for payment of contributions for that year . ( The earnings factor approximated to the earnings on which contributions had been paid . ) The second condition for claims made before 2 October 1988 was that , in the relevant tax year , the claimant must have paid or been credited with Class 1 or Class 2 contributions to give an earnings factor of at least 50 times the lower earnings limit . ( NI contribution credits could be awarded to those receiving certain benefits , including SB and IVB . ) The relevant tax year was the last complete tax year before the start of the benefit year . The benefit year was the one which contained the first day in respect of which benefit was claimed . Benefit years started on the first Sunday in January . From 2 October 1988 , the qualifying contributions had to have been paid or credited in both of the last two complete tax years before the start of the benefit year . Those entitled to IVB continued to be entitled to it if they went to live in another European Community country . SB was also payable in certain circumstances . Back to top 10.4 Those living in another European Community country and receiving United Kingdom ( UK ) IVB , retirement pension ( RP ) or widow 's benefit were entitled to receive medical treatment for themselves and their dependants under the state scheme of their new country of residence . To qualify , they had to obtain a certificate of entitlement a form E121 from DSS . In completing the form , DSS certified that the person concerned was entitled to a pension for either " old age " , " accident at work " , " invalidity , " " occupational disease , " or " survival " . Those living in another European Community country and receiving UK SB or maternity allowance were entitled to medical cover for the length of their benefit entitlement . Those living , but not working or receiving one of the qualifying benefits , in another European Community country were entitled to medical cover for the period in respect of which they retained an underlying entitlement to UK SB . To qualify , they had to obtain a certificate of entitlement a form E106 from DSS . Enquiries from those going to live abroad are handled by the Overseas Benefit Directorate ( OBD ) of DSS who are responsible for the issue of forms E121 and E106 . Before April 1992 OBD were called Overseas Branch but for the sake of consistency I refer to them throughout this report as OBD . 10.5 A person from the UK who is abroad is normally entitled to pay UK NI contributions voluntarily to maintain his or her UK NI record for RP and certain other benefit purposes . If a person is not gainfully occupied abroad voluntary contribution has to be at the Class 3 ( non-employed ) rate . Back to top Investigation 10.6 In accordance with their normal practice , by the time the complaint was referred DSS had already routinely destroyed all correspondence in Mr H 's case before 1994 . Mr H supplied the Ombudsman with letters which DSS had sent to him between 1987 and 1994 and a copy of a letter he had sent to them on 6 June 1988 ; he was unable to supply copies of the other letters which he had sent to DSS during the period . 10.7 1986 In 1986 Mr H retired early on health grounds from the police force . He received IVB from his local Benefits Agency office from 19 April to 19 July . After a short period of unemployment he requalified for IVB from 28 November 1986 . Back to top 10.8 1987 On 20 January 1987 Mr H wrote to OBD saying that he was contemplating moving to live in Spain . He told the Ombudsman 's staff that in that letter he had asked specifically for advice on health cover and what he needed to do to maintain his RP rights . On 30 January OBD replied enclosing a leaflet SA 29 entitled " Your social security , health care and pension rights in the European Community " and a leaflet NI38 entitled " Social Security abroad " which included an application form to pay NI contributions while abroad . They said that it might be possible to provide him with limited medical cover ( certificate E106 ) based on his UK NI contributions when he took up residence in Spain ; but if the certificate was issued the cover could be provided only for as long as residual entitlement to SB existed . They said that , when the E106 expired , he should take out private medical insurance to cover him until his 65th birthday when cover would again be given by virtue of certificate E121 which would be issued with effect from the date his RP became payable . OBD asked Mr H to provide his NI number so that they could check his record ; the date of his intended departure ; and his address abroad . I reproduce at Appendix B , paragraphs 15 , 16 , 17 and 18 of the 1986 version of leaflet SA 29 , which appeared under the general heading " Health Care " and the first part of paragraph 24 which appeared under the general heading " The benefits involved " . 10.9 On 10 March the local Benefits Agency office sent Mr H the IVB due for the period from 4 to 17 March . On 19 March Mr H sent OBD the completed application form to pay voluntary NI contributions while abroad . He wrote an accompanying letter which he told the Ombudsman 's staff had merely informed OBD of the date of his departure from the UK . Mr H and his wife moved to Spain on 20 March . Around that time ( the date is not recorded ) the local Benefits Agency office sent Mr H a form 189 asking him to provide further medical evidence if he remained incapable of work ( they held medical evidence up to 19 March ) . They received no reply and on 6 April they sent Mr H a final payment of IVB for the period from 18 to 19 March . Also on 6 April OBD wrote thanking Mr H for his correspondence . They said that , on checking his NI record , he had paid sufficient NI contributions in respect of the tax year 1985/86 to provide him with medical cover by virtue of certificate E106 until 3 January 1988 . They reminded Mr H that cover did not last indefinitely and that he should take out private medical insurance when the certificate expired . They said that it might be possible to provide medical care after 3 January 1988 based on the NI contributions paid in respect of the 1986/87 tax year ; and they asked him to contact them again six weeks before the E106 expired . The remainder of the letter dealt with Mr H 's payment of voluntary contributions . On the same date , 6 April , OBD sent form E106 to the relevant Spanish authority . Back to top 10.10 1988 On 2 January 1988 Mr H wrote to OBD asking whether further medical cover was possible . On 15 February OBD issued a form E106 certifying entitlement to medical cover for the period from 4 January to 31 December . On 21 April Mr H wrote to OBD asking for a form E121 . On 18 May OBD replied saying that , as a form E121 could be issued only to a person in receipt of a UK RP , it was not applicable to Mr H 's circumstances . They said that , if he and his wife were still abroad when they reached retirement age and were entitled to a UK RP , a form E121 would automatically be issued to provide medical cover in Spain . On 6 June Mr H wrote again to OBD saying that his request for a form E121 had been made as a result of information received from the Spanish authorities that the occupational pensions received by himself and his wife were sufficient to qualify them for medical cover under the Spanish state scheme . He said that he and his wife had private medical cover but it was very restricted . He said that he had seen a form E121 on which there was provision for " other pensions " ; and he asked if that would not cover himself and his wife or , if not , whether there was no other form with which they could be issued to produce to the Spanish authorities . On 19 July OBD replied saying that Mr H must be in receipt of RP to be entitled to a form E121 . Back to top 10.11 1994 On 24 January 1994 Mr H wrote to OBD saying that he felt that they had previously failed fully to inform him of his correct entitlement . He explained that he had had to finish work because of ill health and on 20 March 1987 had moved with his wife to Spain . He said that he had received IVB until he left the UK ; and that before leaving he had sought advice about contributions and health care . He went on to relate the information which OBD had given about medical cover in their letters of 30 January 1987 , 18 May and 19 July 1988 . He said that , after changes to European Community law in November 1993 , he had consulted his local ( Spanish ) Social Security office who had told him that nothing had changed ; but that as he had retired from work on health grounds and was receiving a pension , although he was not yet 65 years of age , he should be able to obtain a form E121 . Mr H said that his wife had recently applied for a RP forecast and had received leaflet SA 29 ( print date August 1993 ) paragraph 16 of which said that anyone receiving IVB before going to live abroad was eligible for form E121 . He said that had not been mentioned in any of the replies which he had received from OBD ; and it appeared that he had been entitled to the form but had been misinformed . Moreover , it seemed from paragraph 25 of the leaflet that IVB was payable abroad . Mr H asked whether he could have continued to receive IVB while in Spain . I reproduce at Appendix C , paragraphs 15 , 16 , 17 and the first part of paragraph 25 of the relevant ( 1993 version of ) leaflet SA 29 . Back to top 10.12 On 22 February OBD replied saying that IVB was payable in Spain provided that a person continued to satisfy the conditions for receipt of the benefit had he remained in the UK . They enclosed a claim form for Mr H to complete and return with supporting medical evidence . They reminded him that IVB was not payable for a period more than 12 months before the date of claim . On 11 March Mr H wrote to OBD saying that he had paid Class 3 ( voluntary ) contributions since going to Spain . He asked whether he could qualify for IVB ; and for advice on the medical evidence required . He also asked OBD to send him form E121 on 15 April , after obtaining his contribution record . OBD replied saying that , as he had not paid Class 1 contributions since 1987 , he could not satisfy the contribution conditions for receipt of benefit ( Class 3 contributions could not satisfy the requirements ) . On 9 May Mr H wrote again pointing out that the main point of his letter of 24 January , the request for a form E121 , had been ignored . He said that it appeared from leaflet SA 29 that he had been entitled to the form when he had left the UK because he had been receiving IVB . 10.13 On 7 June OBD wrote to Mr H saying that , as he was not in receipt of RP or IVB , they were unable to provide him with form E121 . Mr H replied on 22 June referring to paragraph 16 of leaflet SA 29 ( the current version ) and saying that he was applying retrospectively for the form E121 which should have been issued to him in 1987 when he went abroad . He said that in 1987 and 1988 OBD had wrongly told him that form E121 could be issued only to a person in receipt of RP . If they had given him the right information and issued form E121 as they should have done , he would still be covered under the Spanish health service . OBD replied on 18 August apologising for the delay in doing so . They said that , as Mr H 's IVB had ended on 19 March 1987 , he was no longer entitled to form E121 ; and he could not requalify for IVB because he had not paid Class 1 NI contributions since 1987 . On 3 September Mr H wrote to OBD complaining about their failure in their letters of 30 January and 6 April 1987 , 18 May and 19 July 1988 to mention the possibility of entitlement to a form E121 on the basis of receiving IVB . He said that he had the leaflet SA 29 print date January 1986 ( which had been sent to him on 30 January 1987 see paragraph 10.8 ) and observed that paragraph 16 made no mention of form E121 , unlike paragraph 16 of the later August 1993 print of the leaflet . He said that , although he had contacted OBD two months before leaving the UK , he had never been advised of the link between entitlement to IVB and to form E121 ; and he therefore could not have known about it until reading the 1993 leaflet sent to his wife ( paragraph 10.11 ) . He asked OBD why they had not noticed when they had checked his NI record in 1987 ( paragraph 10.9 ) that he was being credited with NI contributions as a result of receiving IVB ; and he asked them to send him the form E121 which they should have sent to him when he had left the UK . He added that he had not continued his claim to IVB after leaving the UK because he had not been aware that it was payable abroad . Back to top 10.14 On 11 October OBD wrote to Mr H saying that they were unable to give him a form E121 because he was not entitled to IVB ; but , in view of his comments in his letter of 3 September , they were looking again at his case . On 1 November OBD wrote to Mr H saying that , according to their records , they had sent him information about benefit entitlement abroad but he had not continued his ( IVB ) claim when he had left the UK . They said that any new claim would not succeed because of the contribution and late claim conditions ( paragraph 10.12 ) , but NI credits might be awarded if he supplied medical evidence of incapacity for work . They asked him to let them know if he wanted to make a claim . On 17 November Mr H wrote to OBD making a claim for NI credits and enclosing medical evidence . He said he was confused by the correspondence and asked whether his request for a form E121 was still being considered . On 29 November OBD told Mr H that his case would be looked at again and that he would receive a full reply to his letter of 17 November shortly . 10.15 1995 On 19 January 1995 Mr H wrote to OBD asking for a decision on his request for a form E121 . On 15 March OBD replied saying that they could issue form E121 only if Mr H was entitled to and receiving IVB ; as that was not the case , they were unable to do so . On 5 April OBD told Mr H that NI credits had been awarded from 9 September 1993 . 10.16 1996 On 9 April 1996 , after further correspondence between Mr H and OBD , Mr H asked the then Member of Parliament who jointly chaired the All Party Group for Pensioners to refer his complaint to the then Ombudsman . The Member did so on 3 May . In October 1996 an adjudication officer ( AO ) decided that , from 10 October , Mr H could not be treated as incapable of work ; and that as a result he was not entitled to NI incapacity credits from that date . ( Mr H subsequently made an unsuccessful appeal against the AO 's decision . ) 10.17 In his comments on the case the Chief Executive of the Benefits Agency said that there was no evidence to suggest that Mr H had been incapacitated when he had left the UK to live in Spain ; his last medical certificate had expired on 19 March 1987 and he had made no enquiries about continuing payment of benefit abroad . The leaflet SA 29 which had been sent to him on 30 January 1987 had provided guidance on medical cover ; and it had clearly said that IVB was payable abroad and those receiving it were entitled to medical cover . The Chief Executive said that the failure on the part of OBD later , in 1988 , to include specific reference to IVB in letters was regrettable ; but had been based entirely on the information available at the time . IVB had neither been in payment nor mentioned by Mr H in his correspondence until January 1994 . Turning to Mr H 's statement that , when OBD had been considering the issue of form E106 in 1987 ( paragraphs 10.9 and 10.13 ) , it should have been evident from his NI contribution record that he had been in receipt of NI credits for IVB , the Chief Executive said that , at the time of Mr H 's departure from the UK , the tax year 1986/87 had not ended and as a result there would have been no record of any credits for that year on his NI account . He said that credits were not recorded until well after the end of the tax year . It would have been impossible , therefore , for OBD to have known in April 1997 that Mr H had been receiving IVB from his local DSS office when he had first written in January 1997 . Back to top 10.18 In conclusion , the Chief Executive said that it was unfortunate that the letters to Mr H in 1988 had not mentioned form E121 being applicable to those receiving IVB as well as RP . That had been an omission which the Department recognised . However , the Chief Executive said , Mr H had neither received nor mentioned IVB after his departure abroad . Additionally , leaflet SA 29 had provided clear guidance about medical cover and receipt of benefit abroad . Taking those facts into account , there were no grounds for reimbursement of health costs incurred by Mr H from 1 January 1989 , the expiry date of the form E106 . On 16 January 1997 the Chief Executive wrote to Mr H apologising for any trouble and inconvenience caused by the less than satisfactory service he had received . In the course of my investigation one of the Ombudsman 's officers received confirmation from OBD that had Mr H claimed benefit in 1988 he would have been within time , as the requirements then stood , for payment ( paragraph 10.3 ) . Back to top Findings 10.19 The letter which OBD sent to Mr H on 30 January 1987 ( paragraph 10.8 ) was correct as far as it went but it was misleading in that it omitted information about the entitlement to medical cover in another European Community country of those receiving UK SB , IVB , maternity allowance or widow 's benefit . That was a serious omission for which I criticise them . In my view , OBD should either have covered all the circumstances in which medical cover was available ; or none of them and simply directed Mr H to the information in the leaflet SA 29 , offering further advice on any particular aspect if needed . The 1986 version of leaflet SA 29 , which OBD sent to Mr H , contained all that he needed to know about medical cover abroad ; but the presentation of some of that information gave me cause for concern . 10.20 Paragraph 16 of the leaflet was the one which covered the link between IVB and medical cover ( Appendix B ) but I found the heading to the paragraph misleading in that it referred to " State pensioners " . It seemed to me that those like Mr H receiving IVB would not have regarded themselves as pensioners and might therefore have been dissuaded from reading further . Similarly , the text of the paragraph referred to invalidity pension . I was pleased to see that the relevant heading and the text in the later ( 1993 ) issue of the leaflet had been changed ( Appendix C ) . I noted also that the paragraph failed to make clear that IVB ( and RP and widow 's benefit ) had to be in payment abroad , rather than in payment before departure , to give entitlement to medical cover . In 1994 when Mr H read both the 1986 and 1993 versions of the leaflet ( paragraphs 10.11 to 10.14 ) he was misled by the wording of paragraph 16 on that very point . Be all that as it may , paragraph 16 did not stand in isolation and , given Mr H 's circumstances in 1987 , I consider it reasonable to have expected him also to have read that part of the leaflet concerned with social security benefits . If he had done so , he would have known that he could continue to claim IVB after he moved to Spain ( Appendix B ) ; and I am confident from what he said in his letter of 3 September 1994 ( paragraph 10.13 ) that that is what he would have done instead of allowing it to lapse . He would then have been entitled to a form E121 for as long as his entitlement to IVB continued . It follows that I do not think that OBD 's less than comprehensive letter of 30 January 1987 was crucial to Mr H 's future action ; the leaflet which they sent him at the same time should have been sufficient to set him on the right track . Back to top 10.21 Mr H asked why , when OBD checked his NI record in 1987 , the credit of NI contributions , because of his receipt of IVB , had not been spotted ( paragraph 10.13 ) . I have seen Mr H 's NI account which OBD examined in April 1987 ( paragraph 10.9 ) and again in February 1988 ( paragraph 10.10 ) before issuing forms E106 . The Chief Executive has explained that , in April 1987 , the last tax year for which details were recorded was 1985/86 ( paragraph 10.17 ) . That year showed Class 1 NI contributions to the value of £ 905.64 paid on Mr H 's employment with the police force . When OBD examined Mr H 's NI account again in February 1988 ( paragraph 10.10 ) , the details of the tax year 1986/87 had been recorded . They showed Class 1 NI contributions to the value of £ 144.96 paid on Mr H 's employment with the police force , 30 NI credits awarded by the local Benefits Agency office , and nine credits awarded by the local Unemployment Benefit office . I am satisfied that the information on Mr H 's NI account was not such that OBD , either in April 1987 or February 1988 , should have taken action other than they did . 10.22 That is though not the end of the matter . On 21 April 1988 Mr H asked OBD for a form E121 believing , after discussion with the Spanish authorities , that the occupational pensions received by himself and his wife qualified them for medical cover in Spain ( paragraph 10.10 ) . The response he received that only those receiving UK RP qualified for the form was clearly wrong . Moreover , when Mr H challenged the advice OBD repeated it a second time despite their attention having been drawn to the wording on the form E121 which referred to pensions other than those for retirement ( paragraph 10.4 ) . That was a serious error for which I criticise OBD . The question which arises from their error is what would have been the outcome if it had not occurred . As I saw it , if OBD had given Mr H as they should have done a full description of the benefits and pensions which entitled a person to a form E121 , he would have begun the sort of enquiries which he began six years later in 1994 ( paragraph 10.11 ) . Moreover , I am satisfied that those enquiries would have led to the realisation that he could have continued his claim to IVB after going to live in Spain . It seemed to me , therefore , that the incorrect information which OBD had given to Mr H in 1988 had prevented him from making a late claim for SB/IVB which he otherwise would have made ; and I thought that DSS should put that right by placing him as far as that was now possible in the position in which he would have been had he made such a claim . I suggested that should involve DSS taking a view on the value of any lost entitlement to benefit ; of any voluntary NI contributions which Mr H had paid unnecessarily ; and of any medical costs incurred as a consequence of lost entitlement to medical cover . Accordingly , I asked the Chief Executive of the Benefits Agency to consider Mr H 's case in the light of my comments . Back to top 10.23 I am pleased to report that the Chief Executive replied that it had been decided to make Mr H an ex gratia payment subject to enquiries to determine whether he had satisfied the conditions for benefit in the period from 1988 to 1994 ; and to the production of evidence of his medical costs . DSS subsequently awarded Mr H an ex gratia payment of £ 35,648.74 to replace his lost statutory entitlement to SB , IVB and incapacity benefit from 21 March 1988 ( the maximum backdating which could have been allowed in Mr H 's case under the law at the time was one month ) to 9 October 1996 ( when he was deemed capable of work see paragraph 10.16 ) ; and an ex gratia payment of £ 3,901.98 to meet the cost of medical insurance which Mr H incurred in the period from 1 January 1989 to 31 December 1996 plus interest on that sum of £ 909.86 . DSS will also pay Mr H interest on the sum of £ 35,648.74 which they have yet to calculate and which is likely to amount to between £ 9,500 and £ 10,000 . In addition , they have undertaken either to award Class 1 NI credits to Mr H in respect of the period from 21 March 1988 to 9 October 1996 and to refund with interest the Class 3 ( voluntary ) contributions which he paid for that period ; or to reimburse him the cost of the Class 3 contributions with compensation for the loss of use of the money . 10.24 One final matter deserves mention . My investigation has shown that Mr H 's claim of misdirection , which he made in January 1994 ( paragraph 10.11 ) , was handled badly by OBD . They failed to address the issue , despite several letters from him ( paragraphs 10.12 and 10.13 ) , for some nine months and then only superficially ( paragraph 10.14 ) . I criticise them for their poor response to Mr H 's representations . Back to top Conclusion 10.25 OBD dealt poorly with Mr H 's enquiries about medical cover both before and after he moved to live in Spain . The incorrect information which they gave him in 1988 caused him financial loss for which DSS have agreed fully to compensate him by awarding ex gratia payments of £ 35,648.74 to replace his lost statutory entitlement to benefit plus interest on that sum which is likely to amount to between £ 9,500 and £ 10,000 ; £ 3,901.98 to meet the cost of medical insurance plus £ 909.86 interest on that sum ; and undertaking either to refund with interest Class 3 ( voluntary ) NI contributions which Mr H has paid unnecessarily or to reimburse him the cost of the Class 3 contributions which he has paid in respect of the period from 21 March 1988 to 9 October 1996 with compensation for the loss of use of the money . I regard all that , together with the Chief Executive 's apologies for OBD 's poor service ( paragraph 10.18 ) , as a satisfactory response to a justified complaint . Back to top Appendix A Initials used and their meanings DSS Department of Social Security IVB invalidity benefit NI national insurance OBD Overseas Benefits Directorate RP retirement pension SB sickness benefit UK United Kingdom Back to top Appendix B Extracts from the 1986 version of leaflet SA 29 15 . Living ( but not working ) in another Community country . 15.1 If you are going to live , but not work , in another Community country you may be entitled to receive medical treatment for a limited period at UK expense under the State scheme of your new country of residence . This period is linked to any remaining entitlement to UK sickness benefit you may have . When this period expires you will cease to be covered by the UK . Consider joining the state health insurance scheme , if possible , or take out private insurance ( but see paragraphs 16 and 17 ) . Write to the Department 's Overseas Branch ( address on page 1 ) as far in advance as possible before you go . 15.2 If you become employed again you will need to contribute to sickness insurance fund in order to claim benefits from the scheme of the country in which you are living . 16 . State pensioners living in another Community country If you are receiving a State invalidity or retirement pension or widow 's benefit and you go to live in another Community country ( or if such a benefit or pension becomes payable when you are living there ) you and any dependent members of your family who go with you , will be entitled to the health services of the sickness insurance institution of that country as though you were insured with it . Write to the Department 's Overseas Branch ( address on page 1 ) as far in advance as possible before you go . 17 . Receiving sickness benefit or maternity allowance If you are receiving sickness benefit or maternity allowance and you go to live in another Community country you and any dependent members of your family will be entitled to the health services of the sickness insurance institution of the country to which you go . You will be covered for the length of your sickness benefit or maternity allowance entitlement . To be eligible for these benefits you must obtain the authority of this Department before you leave the UK . Write to the Department 's Overseas Branch ( address on page 1 ) . Back to top 18 . In all cases You will be entitled to medical treatment on exactly the same terms and conditions as apply to the insured persons of the country to which you are going . Information about other countries ' schemes can be found in the EC Guide ( see page 5 ) . For more detailed information consult the local sickness insurance institution . 24 . Invalidity benefit UK invalidity benefit If you are entitled to UK invalidity benefit , you will be entitled to it wherever you may live or stay in the Community . You may also be entitled to invalidity benefit from Denmark , the Federal Republic of Germany , Greece ( except under the agricultural insurance scheme ) , Italy , Luxembourg , or under the French miner 's scheme , if you have been insured at any time in those countries . The amount of invalidity benefit will be calculated as explained in paragraph 28.2 Back to top Appendix C Extracts from the 1993 version of leaflet SA 29 15 . Living ( but not working ) in another EC Country If you are going to live , but not work , in another EC country you may be able to get health care for a limited period at UK expense under the state scheme of your new country of residence . This period is linked to any remaining entitlement to UK Sickness Benefit you may have . When this period ends you will no longer be covered by the UK . You may then be able to contribute voluntarily to the state sickness insurance scheme of your new country of residence . Otherwise , you will need to take out private insurance but see the following sections paragraphs 16-18 . Write to the Benefits Agency at the address on page 2 for form E106 as far in advance as possible before you go . Your application must state your full name and address in the UK ; your maiden name ( if appropriate ) ; your date of birth ; your nationality ; your National Insurance number ; the full name(s ) and postal address(es ) of your UK employers(s ) in the last 2 years ; the date you finished work ; the date of your departure from the UK ; whether you intend seeking work abroad ; your wife/husband 's full name , date of birth and National insurance number . you become employed again you will need to contribute to a sickness insurance institution in order to claim benefits from the scheme of the country in which you are living . Back to top 16 . Receiving Invalidity or Widows 's Benefit or Retirement Pension and living in another EC country . If you are receiving Invalidity or Widow 's Benefit or Retirement Pension and you go to live in another EC country ( or if such a benefit or pension becomes payable when you are living there ) you and any dependent members of your family who go with you will generally be entitled to the health services of the sickness insurance scheme of that country . Write to the Benefits Agency at the address on page 2 for form E121 as early as possible before you go . If you are entitled to a pension from the country where you go to live and you are entitled to health care under that country 's rules , then the UK may not be responsible for your health care costs . You may have to pay contributions to a scheme in your new country of residence . You may wish to confirm this with the sickness insurance office in the country where you intend to live before you go . 17 . Receiving Maternity Allowance , Sickness or Industrial Disablement Benefit in another EC Country . If you are receiving Maternity Allowance or Sickness or Industrial Disablement Benefit from the UK and you go to live in another EC country , you and any dependent members of your family will be entitled to the health services of the country which you go to . You will be covered for the length of your Maternity Allowance , Sickness or Industrial Disablement Benefit entitlement . If you are eligible for these benefits you must obtain prior authority from the Benefits Agency at the address on page 2. If you are receiving Industrial Disablement Benefit and you go to live in another EC country , you will be entitled to health care in relation to your particular disability . Write to the Benefits Agency at the address on page 2 for form E123 . Back to top 25 . Invalidity Benefit . UK Invalidity Benefit If you are entitled to UK Invalidity Benefit , you will be entitled to it wherever you may live or stay in the EC . You may also be entitled to Invalidity Benefit from Denmark , Germany , Greece ( except under the agricultural insurance scheme ) , Italy , Luxembourg , Portugal or under the French miners ' scheme , if you have been insured at any time in those countries . The amount of Invalidity Benefit will be calculated as explained in How your claim is dealt with on pages 30-31 . </text>
<text id="bdacj" url="http://www.mml.cam.ac.uk/call/translation/toolkit/6/">
6 : Formal Filter In the previous tool kits , I addressed cultural issues and questions of full synonymy . The purpose here is to establish a series of other textual variables for which the ST can be screened . I shall begin with the smallest level at which a decision can be made about the use of language ( the level of sound or letter segments ) and move up to the larger level ( intertextual and generic links between texts ) . The schema of textual filters can be viewed in Section 4 : Schema of Textual Filters Phonic / Graphic Level This is the smallest level of detail or choice in composing texts , and represents choices made at the level of sound segments , phonemes , and letter segments , graphemes . Even at this level difference between meaning can be present ; compare , for example , ' This nosy cook ' , and ' This cosy nook ' . This level is most immediately relevant where sound or visual effects are apparent . Onomatopoeias , words whose sound imitates their meaning , are culturally determined , as may be the range of applications of a particular onomatopoeia in any given language . One example is the case of English ' squeak ' , which gives a single noun to the noises made by doors , mice , and new shoes . In other languages what we perceive as the same group of sounds may be perceived differently , and not all of the nouns used will necessarily be onomatopoeic : It cri cri ( crickets , cicadas , woodworm[ ! ] ) ; Sp chillido ( mouse ) , chirrido ( hinges ) , crujido ( new leather or rice crispies ) ; Fr cric-crac ( floorboards ) , couic ( mouse ) , craquement ( of new leather ) ; grincement ( hinges ) Ge quieken ( mouse ) , knarren ( door , wheel ) . The use of onomatopoeia may be incidental to a ST ; however , if its phonic / graphic level is a salient feature , it may pose a challenge for the translator . On such occasions , the translator may need to consider carefully whether , and how , to compensate for the loss of any salient onomatopoeia , perhaps by compensating with the addition of a sound effect through alliteration and assonance at the appropriate place . However , on occasion appropriate terms in both languages are fully or partially onomatopoeic ; for example , búho ( Spanish ) , Uhu ( German ) , CoBa ( Russian ; transliterated ) , gufo ( Italian ) , and hibon ( French ) are all onomatopoeic names ; however , their English equivalent , ( long-eared ) owl , is only partially so . Assonance ( repetition of vowels for rhyme ; recurrence of sound or letter clusters in the middle of a word ) and alliteration ( repetition of same sound or letter cluster at the beginning of a word ) may also prove a challenge to the translator , as in the alliteration ( bold ) and assonance ( italicised ) of ' a s w ift s n ifter a fter wards ' . Where the use of phonic effects is a salient feature of a ST or its use is not incidental , such as to highlight specific thematic concerns , then a careful approach is necessary . Consider the phonic level in the first two lines of John Keats 's ode , ' To Autumn '1820 ( full text here ) in which alliteration is in bold , and I have italicized assonance : Season of m ists and m ellow fr uit f ulness , Close boso m - fr iend of the m aturing sun ( from ' To Autumn ' , Keats ) As Hervey and Higgins ( 2002 : 79-80 ) argue , the context is essential . The combination of the title and the word ' fruitfulness ' evokes the colour of mature fruit and autumn leaves , yellow . The sun itself is likely to be such a colour , glowing like a mature fruit hanging low in the sky , and shining through the autumn haze . The m- alliteration of ' mists ' associates it with ' mellow ' and ' maturing ' , and - together with the previous image - it suggests a soft hazy mist rather than the cold and damp of wintertime . The -m in ' bosom ' links it to ' mellow ' , ' mists ' and ' maturing ' so that the image of mellow fruits now seems linked to milk-filled breasts , as if the season , sun and earth were unified in maternal bountifulness . This suggestion is again reinforced through the assonance and alliteration of ' fr uit f ulness ' , and ' fr iend ' . The phonic level here is manipulated to associate closely the key words in Keats 's creation of images , and their prominence reinforces the thematic content of the lines and therefore would need careful attention in translation . Be ware that phonic effects are used quite widely by prose writers and are not the sole province of poets . Prosodic Level The prosodic level , on the other hand , is largely the domain of poetry , although metric patterns are very occasionally found in prose . The prosodic level concerns metric schemes relating to rhythm and stress , which vary greatly between languages and language groups . For example , in the modern Romance languages versification is syllabic , that is , based on syllable count , but the method of syllable counting varies between languages . English metre , on the other hand , mainly uses syllable and stress metre . Each line is defined in terms of the number of feet , which comprise a group of stressed and unstressed syllables in a specific order . The most famous English metric pattern is the iambic pentameter : The cur /few tolls / the knell / of par /ting day / 1 2 3 4 5 This line has five feet ( divided by slashes and numbered ) and so is a pentameter . Each foot has two syllables , the first unstressed and the second stressed ( in bold ) , and so is an iambic foot . Some modern English poetry uses strong-stress metre in which only the stresses count when describing the line . For an introduction try James Fenton , An Introduction to English Poetry ( Viking , 2002 ) . Certain fixed forms , like the sonnet and the haiku , enjoy international currency , the form of others varies between languages , such as the ballad , which seems to be a global poetic genre . In most languages which use rhyme , ballads tend to rhyme on even lines only . In English the ballad has four accented syllables in odd lines , and three in even lines . In contrast , syllabic languages tend to use an octosyllabic line . The translation of poetry is particularly controversial , and this debate goes right to the heart of what poetry is really about : creating meaning or exploring form . As a consequence , in translating poetry it is particularly useful to focus on a very specific target audience : the needs of a student of the second-language , someone with an interest in a specific culture , and someone with an interest in poetry as an art form may be very different : Ille mi par esse deo videtur , Ille , si fas est , superare divos , qui sedens adversus identidem te spectat et audit dulce ridentem , misero quod omnis eripit sensus mihi ; He seems to me to be equal to a god , he seems to me , it is lawful , to surpass the gods , who , sitting opposite to you , keeps looking at you and hearing you sweetly laugh ; but this tears away all my senses , wretch that I am . He 'll hie me , par is he ? The God divide her , He 'll hie , see fastest , superior deity , Quiz - sitting adverse identity - mate , inspect it and audit - You 'll care ridden then , misery holds omens , Air rips the senses from me ; Catullus ; trans . Celia & Louis Zukovsky ; apud Hervey , Higgins & Haywood 1996 : 49 The first TT below Catullus 's Latin is a literal TT , which is intended to convey the message content . In contrast , the second TT by Zukovsky and Zukovsky attempts a phonemic approach that aims to convey the rhythm and phonic effect of the Latin . The decision to use one of these strategies would need to be based on very careful consideration of the potential target audience for any such TT . There is , of course , a mid-point between these two approaches , and it is perhaps to be advocated in the majority of situations . A communicative approach is one in which the translator pays careful attention to the formal structure of the poem in hand , perhaps taking into account differences in expectations about certain meters or rhyme schemes between source and target culture . The translator also pays careful attention to other salient features of the poem being translated , including other phonic features and content . Consider carefully as many of the versions of the first verse of Lewis Carroll 's ' Jabberwocky ' as you can , in which this is precisely the strategy adopted by the translators : Jabberwocky ' Twas brillig , and the slithy toves Did gyre and gimble in the wabe : All mimsy were the borogroves , And the mome raths outgrabe . Der Jammerwoch Es brillig war . Die schlicten Toven Wirrten und wimmelten in Waben ; Und aller-mümsige Burggoven Die mohmen Räth ' ausgraben . Galimatazo Brillaba , brumeando negro , el sol ; agiliscosos giroscaban los limazones banerrando por las váparas lejanas ; mimosos se fruncían los borogobios mientras el momio rantas murgiflaba . Le Jaseroque Il brilgue : los tóves lubricilleux Se gyrent en vrillant dans le guave , Enmimés sont les gougebosqueux , Et le momerade horsgrave . Grammatical Level This concerns arrangements of words ; such as the use of syntax , and word systems ( a pattern of words with an associative , and meaningful , common denominator ) . An example of a meaningful arrangement of words can be found in the Magpie rhyme : One for sorrow , Two for joy , Three for a girl , Four for a boy , Five for silver , Six for gold , Seven for a secret that 's never been told . The pattern is built around a number followed by a preposition . In lines one to six a further pattern is built up around pairs of lines : lines 1 and 2 conclude with a pair of abstract nouns , which are antonyms ; lines 3 and 4 conclude with an indefinite article followed by a pair of common nouns , again also antonyms ; and lines 5 and 6 end with two mass nouns in an ascending series . The final line breaks this pattern in its length , and its structure as it follows the preposition with an indefinite pronoun , an abstract noun , and a relative clause : Number + preposition ( for ) + 2 x abstract antonyms indefinite article + 2 x common nouns / antonyms 2 x mass nouns ascending series indef . article + abstract + relative clause The structure of the rhyme is clearly more important than the message content . For another example of elaborate grammatical arrangement see the quotation below from Tennyson 's ' The Ancient Sage ' . Word systems also frequently appear in literary texts . The following example is taken from the novel Count Julian ( Reivindicación del conde don Julián , 1970 ) by Spain 's Juan Goytisolo . The author is concerned by the fact that , despite Muslims occupying a large part of what is now modern Spain from the 8th to the 15th centuries , Islamic culture is often held in low esteem in Spain , and the debt of Spanish , and , by extension , European culture to it overlooked . However , there is no need for the reader to have any familiarity with Spanish to observe that there is an obvious word system at work : y galopando con ellos en desenfrenada razzia saquearás los campos de algodón , algarrobo , alfalfa vaciarás aljibes y albercas , demolerás almacenes y dársenas , arruinarás alquerías y fondas , pillarás alcobas , alacenas , zaguanes Lit ST : and galloping with them in a frenzied cavalcade you will destroy the fields of cotton , carob , alfalfa you will empty cisterns and tanks , you will demolish stores and dry docks , you will ruin farmhouses and hostels , you will pillage bedrooms , cupboards , hallways The key to the word system lies in the fact that many of the words in this extract begin with phonetic group al- , a clear indicator of a Spanish word 's origins in Arabic . In fact , upon closer examination all of the italicized words have their origins in Arabic either etymologically , culturally or as technologies introduced by the Muslims . The extract lists what will be lost or destroyed if Muslim influence on Hispanic culture were to be eradicated . This passage poses a particular challenge for the translator for a variety of reasons . English lacks the relationship of cultural debt to , but prestige over , Arabic that Goytisolo is attacking , so it is not possible simply to replicate the word system by replacing it with English words of Arabic origin . Many of the languages , such as French or Latin , from which English has borrowed words , phrases or concepts enjoy a relationship of high prestige in relation to English in British culture . Its mother language , Anglosaxon , is infamous for four letter words , and most English-language speakers are unaware of other specific areas of debt . The translator is left with three choices , it seems . The first is to replace the words comprising the word system with concepts drawn from languages of the former colonies , and whose contribution to British culture is not given the prestige they merit . The disadvantage here would be the replacement of specific Hispanic cultural terms derived from Arabic . The second is simply to translate the terms , without comment thereby giving rise to the loss of Goytisolo 's point . The third is to use some kind of exegetical technique at some point in order to make explicit the relationship between the two cultures . Sentential Level The Sentential Level treats the sentence as a self-contained vehicle for communication , starting with one word comments , such as ' Go ! ' , or ' Sorry ' . At the sentential level the structure ( or order of parts of speech ) creates different assumptions about the sentence 's particular communicative purpose through some of the following features : Intonation or punctuation and typography Clearly in speech the sentential level can be expressed through the manipulation of intonation and stress : The salt ( falling intonation : statement ) ; The salt ? ( rising intonation : question ; fall-rise : emphatic query ) ; The salt ! ( high , level intonation : command ) Whilst written texts lack this feature , they make use of punctuation , which has a much more limited range , to convey some of the purpose of the sentence . Like other features of language , punctuation norms differ between cultures and all translators should be familiar with the differences in punctuation usage between the languages ( and even language varieties , including UK and US English ) that they are translating . There is not space to consider this topic here ; however , most good , advanced grammar books contain a useful section on punctuation . For English , consider reading Lyne Truss 's Eats , Shoots and Leaves ( 2003 ) , whose title is based on the famous joke about the gun-totting panda who has correctly interpreted a mispunctuated encyclopaedia entry about its own habits . Written and oral texts make use of a number of other features to convey meaning and purpose at the sentential level : Sequential focus ( marked word order to convey meaning ) I told you to stay at home . You , I told to stay at home . Home - that 's where I told you to stay . In this series , the first sentence uses standard subject + verb + object structure . The second two sentences mark out the focus or theme that is being emphasized by placing it at the beginning of the sentence . Illocutionary particles ( innit ? H'mmm , do n't you think ? alas ) These short words and phrases do not fit into syntax proper but simply mark the sentence as having a particular communicative purpose , and help guide the reader / listener as to how to take the utterance . They are discrete elements added for affective force not for their literal meaning : French : hélas ; tout de même ; bien : Je t'avais bien dit de rester chez toi . Italian : non è vero ; ma andiamo ( scoffing disbelief ) ; dunque ( emphatic ) . Spanish : ¿ verdad ? ; ¿ no es cierto ? ; ¿ qué sé yo ? ; pues . German : gell ? ; nich war ? ; aber ; auch ; modal particles , denn ( open and innocuous ) ; ja ( consensus - prevents defensive response ) ; doch mal ( disarming ) : Fahr doch / doch mal selber hin ! Why not go yourself ; Why not pop over yourself . Careful consideration should be given to STs that have features conveying meaning or purpose at the sentential level since they may well require compensation . The Discourse Level This level is concerned with the cohesion and coherence of the ST . Cogency is the degree to which text hangs together ; that is , its thread of intellectual interrelatedness . Cogency is expressed in coherence ( implicit thematic development ) and cohesion ( explicit and transparent linking of sentences through discourse markers and linguistic anaphora ) . The importance of cogency can be illustrated by examining the following text : I was getting hungry . I went downstairs . I knew the kitchen was on the ground floor . I was pretty sure that the kitchen must be on the ground floor . I do n't know why I was certain , but I was . I did n't expect to find the kitchen so easily . I made myself a sandwich . As an account , this narrative is coherent since , although it is not explicitly marked , the events depicted show a tactic but discernible development , and it seems to have an implied chronological structure . However , its limited cohesion is supplied through repetitions . Now consider another version of the same account : I was getting hungry . So I went downstairs . Well ... I knew the kitchen was on the ground floor . I mean , I was pretty sure that it must be there . Actually I do n't know why I was so certain , but I was . Still , I did n't expect to find it so easily . Anyway I made myself a sandwich . Here the account is coherent and cohesive . The cohesion derives from the use of discourse connectors ( in bold at the beginning of some sentences ) to set up links between them . They also act explain or comment on the speakers actions ( all the bold sections ) . In addition , the repetition is replaced by grammatical anaphora ( in italics ) . Anaphora is the replacement of previously used words and phrases by expressions referring back to them : it replaces ' the kitchen ' , and there , ' the ground floor ' . Needless to say , different languages have different degrees of tolerance for the use of anaphora . Languages with gendered noun systems often have sets of appropriate , gendered demonstrative pronouns which are in common use , and whose usage tolerance is higher than for ' it ' and ' them ' in English . Organization at the discourse level may introduce a progression ( similar to that discussed at the sentential level ) of patterns or themes between sentence types : Thou canst not prove the Nameless , O my son , Nor canst thou prove the world thou movest in , Thou canst not prove that thou art body alone , Thou canst not prove that thou art spirit alone , Nor canst thou prove that thou art both in one : Nor canst thou prove that thou art mortal - nay , my son . Thou canst not prove that I who speak with thee , Am not thyself in converse with thyself , For nothing worthy proving can be proven , Nor yet disproven . Wherefore thou be wise , Cleave ever to the sunnier side of doubt , Cling to Faith beyond the forms of Faith ! Tennyson , The Ancient Sage . This extract from Alfred , Lord Tennyson 's The Ancient Sage uses two long sentences , both starting at the beginning of lines with the words , ' Thou canst not prove ... ' ( in bold ) , and using enumeration . There is a marked decrease in length of these two sentences . They are contrasted with the final sentence which Tennyson opens mid-line with the discourse connector , ' Wherefore ... ' ( also in bold ) , which introduces his conclusion . The patterning is used for rhetorical , and climatic effect . Intertextual Level This refers to any meaningful relationship the ST bears to another text ( cultural artefact ) ; such as its genre membership , or imitation , parody or pastiche ; quotation or allusion . For example , individual chapters of David Lodge 's The British Museum is Falling Down pastiche the work of specific authors , whilst in James Joyce 's Ulysses they pastiche specific textual genres . Since the intertextual level often contains culturally-specific content , it may require special attention , and some compensation may be called for . For a useful discussion of intertextual techniques , see Peter Hutchinson , Games Authors Play ( London : Methuen , 1983 ) . Some intertextual references enjoy widespread knowledge ; such as the sign above the entrance to Hell in Dante 's Inferno : Lasciate ogni speranza , voi ch'entrate TT1 : Give up all hope , those people who are coming in . TT2 : Abandon all hope , ye who enter here . The translator would need to be making a special point in opting for TT1 , a rather literal rendering of the well known words , and not the more familiar version which appears as TT2 . The translator would , of course , need to be sure that the phrase was actually a quotation or allusion , and - where more than version exists - to decide which to use . Christiane Rochefort 's La Porte du fond ( 1988 ; discussed by Hervey & Higgins , 2002 ) offers a particularly interesting illustration of these questions . One section of the book is headed : ' Vous qui entrez ' ( ST1 ) , a structure more common in French than English , and consequently not overly marked . French readers may not , in fact , associate this phrase specifically with Dante . It soon becomes clear , however , that the novel focuses on hellish events : the narrator 's sexual abuse by her father . Eventually she tells us that she pinned a notice above her parent 's bedroom , Vous qui entrez / Perdez toute esperance ( ST2 ) , and chillingly that her father later said to her , ' perds l'espérance ma petite ' ( ST3 ) . Suspicions that ST1 is an allusion to Dante are now well founded . The translator is then in a difficult position since it is only the later context that makes this allusion clear . To translate ST1 as ' Ye who enter here ' would reveal the subtext very early on , and the cumulative strength of the allusion would be diminished in comparison with the ST : even ' You who enter ' may give too much away too early . Yet alternative translations , such as ' Those coming in ' lose a vital cohesive element in the thematic structure . There is bound to be loss ; the translator has decide which solution is less unacceptable . 5 : Synonymy | 7 : Semantic Filter Text by Louise M. Haywood , Department of Spanish & Portuguese Site Design and Implementation by Gavin Burnage and Yseult Jay . MML Computer-Assisted Translation Computer-Assisted Language Learning Facility Faculty of Modern and Medieval Languages University of Cambridge Sidgwick Avenue , Cambridge , CB3 9DA For MML contact details , see the Contact List or full Staff LIst . Last updated on 08 July 2005 at 10:29 </text>
<text id="bdrlk" url="http://www.mubs.mdx.ac.uk/Conferences/BPCSR05/submission.htm">
The 2nd one-day International Conference on Business Performance & CSR - SUBMISSION OF PAPERS Wednesday 22nd June 2005 National Liberal Club London , UK Organised by The International Research Group for Business Performance and Corporate Responsibility Papers should be sent electronically . Please note the following conditions for acceptance of your paper . Papers must NOT be published elsewhere . At least one author of the paper must register for the conference and present the paper . Papers in which no author attends the conference will be excluded from the final proceedings . All submissions should be sent as Microsoft Word documents and MUST fulfil guidelines shown below . Abstracts Abstracts should be concise and consist of no more than 250 words . The abstract should include the front page -- see details below - and should be submitted to Denise Arden , Conference Co-ordinator , by email at d. a rden@mdx . a c. u k by Monday 18th April 2005 Full Paper The full paper(s ) submitted MUST be between 10-20 A4 pages and submission process will be stated here at a later date . The full paper includes all diagrams , appendices and reference list . It must follow the page set-up stated below . The paper must include your original abstract -- see above - which will be displayed on the conference web pages after acceptance for informational purposes . Note that practitioner papers WILL NOT be subject to double blind review UNLESS authors indicate that they would like their papers to be considered for a special edition of one of the journals associated with the conference . Front Page All abstracts and full papers must come with a front page that includes the title , and will be the ONLY part of the paper that includes : The title of paper Author name(s ) Author affiliations Postal address E-mail address Telephone number ( including country code ) Fax number ( including country code ) Up to five key words Page Set-Up of all papers All papers must be presented as A4 documents with margins as follows : Top : 2.54cm , Bottom : 2.54cm , Left : 3.17cm , Right : 3.17cm ) . The main text font must be 12 point Times New Roman . Other sizes all Times New Roman : Headings The following format should be used for headings : Title Bold 22 point centred uppercase Level 1 Bold 14 point left-justified uppercase numbered 1 to 10 Level 2 Bold 12 point left justified no numbering Level 3 Italic 10 point left justified no numbering Figures and Tables Embedded in text Centred Numbered either Fig . 1 or Table 1 Font 12 point Bold Centred at base of Figure/Table References Contributors should use the Harvard referencing system : Journal Paper : Author(s ) ( Year ) Title Journal Volume ( Issue ) Page Numbers Book : Author(s ) ( Year ) Title Publisher Place Edition Important Dates & Deadlines Submission of Abstracts Monday 18th April 2005 Review Decisions by Friday 15th April 2005 Submission of Full Paper by Monday 23 May 2005 The conference website http://mubs.mdx.ac.uk/bpcsr05 will be updated on a regular basis . Details on the conference agenda will appear here when confirmed . Further information can be obtained from : Denise Arden Middlesex University Business School Telephone : 44 ( 0)20 8880 4222 </text>
<text id="bdsvh" url="http://www.herts24.co.uk/flatfiles/paulpearcetributes.aspx">
We have known Paul for twenty five years , when he first came down to Ridlins and joined us at SNHAC . Don was his coach then for a few years . Don was at Whitethorn when the news was first heard . We shall miss him very much ; being retired we often met him during his daytime runs and met him at races when his enthusiasm for everyone was plain for all to see . There are not many people out of the same mould as Paul-- he worked so hard during the years as his eyesight deteriorated , somehow he managed to ' see ' clearly how to live at the highest level he could . Our thoughts go to his partner and family , & to Pete and Neil and others who have been his eyes in various races . Margaret and Don Powell , Letchworth Garden City Paul was not only an inspiration to many but a local hero and friendly face to all . This is shocking news to all who met and knew him and to those who were just privileged to watch him run . Zoe Dawson , Potton Paul has been a great friend and fellow competitor for 20 years or more and was a great ambassador to his sport . He was one of a kind and will be forever missed by us all . We love you Paul and miss you . Tim and Joy Saunders-Mullins , Letchworth Garden City Paul was our window cleaner and became our friend . He was the most kind hearted and genuine guy you could ever have wished to meet and an inspiration to anyone that met him . Will miss his smile and his uncanny ability to tell me what perfume I was wearing ! Our thoughts and prayers are with his family and friends at this difficult time . I feel so honoured to have known him - Paul you were a shining star and the world is a better place for having had you in it . Sue , Paul , Harry and Alfie , Biggleswade We were very shocked and saddened to hear of the tragic death of Paul . We have known him for ten years . He was a very kind and gentle man and always had time for a chat . He always spoke fondly about his children and partner , and his love of running . We will really miss him . Our thoughts and sympathy go to his family and friends . Laura , Tom , Ian and Lisa Green , Biggleswade I have only known Paul for 5 years , in fact almost as long as I have lived in Bedfordshire . Paul was my window cleaner , but at the same time he was much more than this , he was a fantastic person to know , he always had a smile and a positive word or thought about anything . His attitude and stories of trial and success helped me through injuries I sustained in a car crash . I ca n't really get to grips with the news about his death , I feel that there will be an unfillable gap left behind him . My thoughts are with all who knew him , his family and his friends , he was a true character in the many communities he touched and will be sorely and deeply missed . God bless him . Kim , Biggleswade Paul was our window cleaner since the day after we moved to Biggleswade in 2000 . He always greeted us with a smile and a chat . He was such a lovely man and we remember him telling us all about how excited he was to be representing Britain in the Paralympics which we watched with interest delighted to share in his success and have such a celebrity window cleaner ! How could this happen to such a lovely man and talented dedicated runner ? We will miss him and we send our love to his family . Sarah Stuart and Ben Osborne , Biggleswade Could not believe the news when I heard it . I went to one of his races in Santry Stadium and he won . Everybody else had to run 2 or 3 more laps before they got to the finish line . Only met him 2 or 3 times but he was a really nice man and could make you laugh . He was a great guy . Eamonn Og Gray , Dublin I was totally shocked to hear of the tragic death of such a dedicated athlete and an inspirational and nice person . I would see Paul out training in Letchworth , Baldock at least 3 or 4 times a week and he was so committed to his career . It was only a few weeks ago that I was lining up on the start line next to him at Buntingford and in the Stevenage 5k series . Paul would offer so much advice to others and his visibility would never bother him , he just got on with it . It will not be the same driving home from work and not seeing him out there . At this time we are all thinking of his close friends and family and he will never be forgotten and will be missed greatly by many . Ben Wallis , Codicote A real big shame ... . . Siggers , Letchworth Garden City Paul has been our window cleaner for almost five years , and during this time we came to look forward to his regular visits & chats . He always had a kind word and a smile for our sons Thomas & Luke . In fact Luke was very keen to show off his new pyjamas to Paul when we last saw him ! Our thoughts and prayers are with Paul 's family & friends at this sad time . We hope that it is some consolation to know how highly Paul is regarded and what an inspiration he is to so many people . We will miss you Paul . Helen , Justin , Thomas & Luke , Biggleswade Pearcy was the life and soul of the paralympic Endurance squad , a modest , kind and generous fiend , and inspiration to all of us , I will never forget his excitement as we waited to go into the stadium for the opening ceremony in Athens ... . h e was the proudest man in the team and a true ambassador for his country . Letchworth must be so proud . We will all miss him dearly . Noel Thatcher , Harlow Paul was a popular guy on the racing circuit and a respected competitor , watch over us Pearcey . Rootsy , Ampthill Michael , Luke , Helena and family - I am sorry for your great loss . What a great person Paul was , I will never ever forget him ! Nicole xxxxx Nicole McCarthy , Cork Paul , I still cannot understand why such a tragic thing had to happen to such a genuinely nice person . I 've known you since I was a little girl ( and I still have n't really grown up ! ) and over those years , you had always taken the effort to stop and ask me how I was and how life was treating me . You always were genuinely more interested in how everybody else was , more so than talking about yourself . Everybody is numbed by the sad news of your death , and our feelings go out to Helena , Michael , Luke & other family members . I have n't seen Michael nor Luke since I used to babysit for them when I was at school , I ca n't imagine what they are going through right now , but I can positively say that they are proud that you were their Dad . Rest in Peace x Tracey Hopkins , Hitchin Pearcey , your my best friend of 26 years and godfather to my daughter , you will be missed by so many as you touched everyone 's life who you came into contact with . You were the inspiration to many and I find it hard to find the right words to describe how I feel . RIP to the best friend anyone could ever wish for . David Gentle A fantatsic athlete , a great guy in every way and an inspiration to everyone who met him . We have all lost a truly dedicated and wonderful person who will never be forgotton . John Franklin , Hitchin It is such a tragic loss to see someone so wonderful die in such horrendous circumstances . Paul will be so sadly missed from all his friends who had the honour to know him in ( the club ) . Sleep well my friend , keep on running on the big track in the sky , all our love . Tony & Elaine He was a truly lovely man and an inspiration to all runners . Amanda Cowan , Ickleford Just want to add to the tributes for Paul , who had been my window cleaner for many years , I only hope that his mother , two sons and Helena get some small comfort to know how much he touched all those who knew him . Just a lovely man who will be greatly missed . Maureen Heathcote , Biggleswade To the family of Paul It was a tragic and sad . I met Paul for the 1st time at the Sports Awards 2005 which I won the disability award 2004 . Paul will be remembered at the Sports Award each year , he is a hero . He will be sadly missed . Andy - England Deaf Rugby Squad An inspiration to not just runners but all who met him . He will be missed by many . With deepest sympathy North Herts . Duke of Edinburgh Award Having competed against him in the past , I didnt really get to know him until recent years , when I was working in and around Letchworth . Paul was a really genuine guy . I only spoke to him a few weeks ago , after he 'd just done a 9 mile training run . He told me how he had to change his course because of the Baldock Bypass construction work . He always had time for a chat about athletics . He will be sadly missed by all who knew him . Paul Baltruschat , Graveley I met Paul in '97 when I first moved to Biggleswade . He was a lovely bloke , always concered for others before himself . I was so shocked when I heard the sad news , my thoughts are with his family who should be very proud of him . Nicky Helena , So sorry to hear of Pauls death , will be in touch . Love and God bless from your cousin Mary Daly I am a PE teacher at Stanborough School in Welwyn Garden City . Paul came into the school last year and gave a talk to my Year 12 A Level PE class . He was there to talk about his experiences as a disabled athlete and the success he had achieved in the Paralympics . He was great ! Easy to talk to , funny and well informed . The students thoroughly enjoyed Paul 's visit and could have sat talking to him for hours . His death is a tragedy , he had so much to give . Lynne Godsave , Stanborough School More tributes can be found on the North Herts Road Runners forum here » </text>
<text id="belcb" url="http://www.blackpresence.co.uk/phpBB2/viewtopic.php?t=97">
well I have n't seen much of animatrix ... thought it looked good as i like all things manga ! I really enjoyed Matrix 1 s ... just thought that Matrix 2 made the mistake of bieng so very unfinnished ... I mean take Star wars ... EMPIRE is a class film in its own right ... does n't really leave you hanging on ! ! Just thought the matrix2 was all too much seeming to happen in one day . Aw well it would n't do if we all like d the same things _________________ ------------------------------------------------- The Black Presence in Britain - Black British History . The Black Presence in Britain - Black British History . </text>
<text id="beoeg" url="http://www.viploan.co.uk/article/Mortgages-1212.shtml">
LONDON - The Deputy Prime Minister , John Prescott has come down heavily on the cost of buying houses in Britain and said that unless people were already on the real estate market , they would find it tough to buy a decent house in the country . He was speaking on the occasion of announcing the nine winners who had won the right to submit designs to build his £ 60,000 homes . The Deputy Prime Minister chose nine building consortiums to build the two-bedroom developments , which are touted as the most affordable houses for first-time buyers . " I think everybody thinks they are too high , unless you have bought one , and that 's one of the problems of this present stage , " Mr . Prescott said about the cost of homes in Britain . The £ 60,000 home project is going to build around a thousand ultra-cheap homes " made from timber , steel , glass and brick and guaranteed to last 100 years . " Asked as to what he considered as the ideal price for a home Prescott replied , " I would love to sell a £ 60,000 house . Would n't you like to buy one at £ 60,000 ? " Dismissing criticism , especially from the Tories about the project , Mr . Prescott challenged , " Unless you have some other arrangement , and we have shown a way forward . But I generally recognize , unless we lift the amount of houses in supply , we are not likely to reduce greatly that increase in prices in housing , which even now is two or three times people 's yearly earnings . " The Conservative spokeswoman Caroline Spelman said that the £ 60,000 was from construction alone and that there would be more costs afterward . " The grim reality is that the homes are in less than desirable locations - such as next door to mines , prisons and landfill - and are all on contaminated land . The sale prices will be six-figure sums each , and only a mere 300 homes will be affordable , " she said . However , Mr . Prescott appeared surprised by these allegations and said , " The pressure was on me to build more and more on brownfield sites . And we have now reached a record level of 70 % . " The nine finalists announced by John Prescott will now have to submit their designs and one among them will be chosen to build the homes . Posted on : Wed , 10 Aug 2005 14:05 GMT | Mortgages News By : Paula Jenkins </text>
<text id="bfqbt" url="http://www.brainbashers.co.uk/droodlesprev.asp">
Droodles was a monthly challenge to guess what each Droodle represented . Droodles were created by Roger Price and are a cross between a doodle and a riddle . It is n't necessarily something real and everyone sees something different in each Droodle , so there are were wrong answers . Droodle #15 The Eiffel Tower seen through a security vehicle 's rear window . Five 5 penguins seen in a rear view mirror . A basketball hoop seen through a letterbox . A box with sharp teeth . Christmas tree in a box . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #14 Diaper/nappy for a baby porcupine . Bored scientist has fun with a laser and a Dorito . On his first day at the hourglass factory , Kevin completely missed the point ! Chickenpox on a bird 's beak . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #13 Tennis ball ( factory reject ) . Are you calling me square ? Shopping for psychics . A well used dice . A cubist painting . Kevin 's first sphere carving went horribly wrong . Balancing worm 's circus act . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #12 Mummy cannonball taking her little ones for a walk . A ball who 's lost its bearings . The last great cosmic alignment . An ex-snowman . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #11 The early bird caught a very strong worm ! A gopher with two TV sets . Two palm trees on a desert island . Oops ! Poor old Rudolph . A golf ball stealing alien . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #10 A pig coming out of a fog bank . Two worms sunbathing on a desert island . Bird 's eye view of an almost bald man 's head . An elephant coming out of a fog bank . A pig 's passport snout print . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #9 Someone playing a trombone in a telephone box . A paper clip playing hide and seek . A box for Pinocchio . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #8 A doorknob in a hair tonic factory . A noiseless ping-pong ball . An outspoken wheel . A circular centipede under a beach umbrella . A snowball with a fur coat . A hairy doughnut . A surprised cyclops . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #7 A mended doughnut . A bowling ball with a bandaid . A clown 's nose after a fight . A retired tiddlywink . An Earth sized game of tic-tac-toe . Synchronised swimming for worms . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #6 An egg , sunny side down . A hat that thinks it 's a bowl . A confused sunset . A pregnant worm . An alien who did n't quite get it right . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #5 4 elephants sniffing an orange . Close-up of a windmill . Confusion ensues at the world pool championship . 4 straws and a pea . A quadclamation mark . Unsportsmanlike gopher hunting . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #4 A worm on roller skates . Pots of gold at the ends of a rainbow . A two headed worm . Four fishermen pulling in their net . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #3 A ship arriving too late to rescue a witch . The titanic about to hit an iceberg . A shark eagerly awaiting its dinner . The Leaning Pyramid of Egypt . Playtime with the triangle family . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #2 A spider doing a handstand . Total eclipse of the sun on a stick . A family of worms stuck on a toffee apple . A frightened mop . A dandelion seed making a perfect landing . A supermodel on a bad hair day . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #1 A smartly dressed elevator . A man who 's caught his bow tie in an elevator . A butterfly abseiling . A smartly dressed worm . A forgotten Christmas present . A triangle admiring themselves in a mirror . A supermodel wearing a bow tie . A kite string with a bow . A double-door with triangular handles . A child 's wooden diabalo from above . An hourglass balancing on a tennis net . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California </text>
<text id="bgckh" url="http://www.photonics.org.uk/newsletter/NoticeBoard.php">
PHOTONEX , the UK 's annual photonics , lasers and optical instrumentation event , will be held on 5-6 October . The exhibition of 150 different companies and organisations is supplemented by a technical programme and networking activities . This year 's event will be brimming with new products , ideas and a breathtaking range of photonics and optoelectronic components , tools , instruments , materials , software , systems , services and applicable optical technologies . There will also be free seminars , arranged by Photonics Cluster , the UK Industrial Vision Association and the Institute of Physics Optical Group . For the first time this year , the exhibition is featuring a special photonics demonstration area , supported by the DTI , to host demonstrations of the work of LINK ISD and OSDA projects , university groups and knowledge transfer networks ( KTN ) . These demonstrations show the progress being made , in the UK , in the development of next generation photonics products . Back to top Event : PHOTONEX 05 When : 5 October , 10am-5pm and 6 October , 10am-4pm Venue : Hall 2 , Stoneleigh Park , near Coventry ( free parking available ) Details : There is free entry to PHOTONEX 05 , but do register before the event to secure your place . For full details of the event , and to register for a free visitor pack , visit </text>
<text id="bgndn" url="http://www.snh.org.uk/calendar/jul.asp">
The National Biodiversity Network ( NBN ) is home to all information on the nation 's biodiversity . You can find the Local Biodiversity Action Plan ( LBAP ) for your area from www . b iodiversityscotland . o rg or www . s earchnbn . n et The involvement of the people of Scotland is essential if we are to conserve biodiversity for today and the future . Across Scotland , people are taking action for biodiversity in their own ' back yard ' . Local Biodiversity Action Plan partnerships have been set up , involving government agencies , national and local voluntary bodies and community groups all working together . Local wildlife sites are being managed , greenspace networks established and gardens made more wildlife friendly . Public bodies are looking to include action for biodiversity in their everyday activities . Wherever you live in Scotland , there are opportunities to get involved in biodiversity conservation locally . Twenty-four Local Biodiversity Action Plans ( LBAPs ) cover the country from Shetland in the north to Galloway in the south and from the Western Isles/Na h-Eileanan Siar in the west to Aberdeen in the east . Each LBAP is overseen by a partnership of national and local organisations , some of which also contribute funding to the project . In most cases core funding is provided by SNH and the Local Authority , with a variety of other organisations contributing in different circumstances . One or more LBAP Officers may be employed ( usually by one of the partner organisations - most often the Local Authority ) to promote and co-ordinate activities . In some areas , the additional post is a Community Biodiversity Officer , with a specific remit to encourage community involvement in the LBAP . The work of LBAPs contributes in many ways to fulfilling the objectives of the Scottish Biodiversity Strategy , particularly in terms : of halting the loss of biodversity and bringing about the recovery of threatened habitats and species ; increasing people 's awareness , enjoyment and understanding of biodiversity and getting more people involved in its conservation ; integrating and co-ordinating consideration of biodiversity into all decision making ; and ensuring that the most up-to-date knowledge of biodiversity is available to decision-makers . Local Authorities have a duty to achieve " best value " in delivering the services which they provide , Guidance on " Best Value and Biodiversity in Scotland " is available via the Scottish Executive website . In addition , all public bodies have a duty under the Nature Conservation ( Scotland ) Act to further the conservation of biodiversity in carrying out their functions . An important function of LBAPs is to raise people 's awareness of their local biodiversity and what they can do to help . This applies to all sectors of society , and LBAPs may work with schools , youth groups , ethnic minorities , special-interest groups , businesses - in fact , anybody at all ! This type of work can include arts projects , story telling , production of leaflets , websites or CDs , and a whole range of activities several steps removed from hands-on habitat or species management . Greenspace Scotland Eco-schools Biodiversity Stories Business & biodiversity project So what do LBAPs actually do ? Most have by now completed the initial stage of drafting their own Local Biodiversity Action Plan . The Plan includes an assessment of which species and habitats are of particular importance in the local area . These will include species or habitats on the UK Biodiversity Action Plan priority list which occur locally , and also species and habitats considered important by local people . The Plan then sets out what needs to be done , and by whom , to improve the status of the chosen species and habitats . Some LBAPs may take on the function of identifying local sites of importance for biodiversity , which can then be taken into account by the authorities in decision-making . Information on species distribution can be obtained from the National Biodiversity Network Gateway however , this is not comprehensive . The umbrella organisation BRISC ( Biological Recording in Scotland ) is working to improve the availability of data on the distribution of Scottish habitats and species through projects such as " Wildlife Counts " . In some areas Local Biodiversity Records Centres hold this information at a local level . Links to these Centres can be obtained from the BRISC website . After deciding what needs to be done to improve the status of local biodiversity , resources must be found to do it . This may mean money , manpower or specialist expertise . Funding for project implementation can be sought from SNH under our " Supporting Biodiversity " or " Involving People " grant schemes , from locally-applicable European funds ( e. g . Leader + ) , Landfill Tax Credit Schemes , Lottery funds , charitable trusts and a variety of other sources , including of course the LBAP partner organisations . Lottery funding is also currently available through the BBC Breathing Places campaign . Other useful links : Details of all of the LBAPs can be accessed via the UK BAP website Forthcoming Biodiversity related events : Fun Day at Forvie National Nature Reserve . Sunday 2nd July Meet at the Stevenson Forvie Centre , Collieston , Aberdeenshire at 12 noon Turn Your Eyes to the Skies - introduction to birdwatching at St . Cyrus National Nature Reserve Sunday 9th July Meet at Visitor Centre , Nether Warberton , St Cyrus , Montrose at 2pm . Bring your binoculars Family Fun Open Day at Noss National Nature Reserve Wednesday 12th July Shetland . Starts 12 noon Local Nature Reserve Celebrations will be running at various localities from 15th to 31st July 2006 . " Wildlife Counts " events in North Lanarkshire , Stirling and Falkirk from now until October Scottish Wildlife Trust events July and August A directory of RSPB events is available SNH " Sharing Good Practice " event on biodiversity for rural businesses 6th December 2006 at Blair Castle , Blair Atholl , Perthshire </text>
<text id="bgpwt" url="http://www.cv-library.co.uk/localjobs/Northamptonshire/jobs-in-Brackley.html">
We are currently seeking to recruit an Air Conditioning & Refrigeration Engineer . Duties to include : carrying out maintenance , service , and repair to a variety of Air Conditioning & Refrigeration equipment on a large static site . The ideal candidate will have experience in a similar role , will hold relevant City & Guilds Qualifications , and will posess an up-to-date Safe Handling of Refrigerants card . A full driving licence is also essential . This position is intially being offered on a temporary basis , with a view to a permanent position . This company have work for around five years on this site , and are looking for an engineer </text>
<text id="bgvth" url="https://secure.bfi.org.uk/features/ultimatefilm/chart/details.php?ranking=65">
65 : STAR WARS EPISODE II ATTACK OF THE CLONES All images are the copyright of their respective rightsholder and may not be reproduced from this site without permission of the rightsholder . USA 2002 Dir George LUCAS ( Year refers to British release ) Running Time : 143 minutes Colour : Deluxe Estimated Attendance : 9.16 million View cast and credits What they said at the time ... Synopsis Padmé Amidala , former queen of the planet Naboo , comes to the city-world of Coruscant to take her seat in the senate of the Republic . She becomes the target of an assassination attempt , and the Jedi knight Obi-Wan Kenobi and his apprentice Anakin Skywalker are assigned to protect her . They track the assassination attempt back to bounty-hunter Jango Fett , and through him to an alliance of commercial interests - perhaps under the control of ' the Dark Side ' - who are seeking to secede from the Republic . Anakin accompanies Padmé back to Naboo where they begin to reveal their feelings for each other . Obi-Wan traces Jango to a forgotten ocean planet called Kamino , where an alien race has been building an army of clone warriors , and then to the barren world Geonosis , where Jango reports to Count Dooku , a powerful Jedi who leads the secession movement . On Coruscant , Chancellor Palpatine is granted emergency powers and decides to use the clone army of Kamino to fight for the Republic . Anakin and Padmé travel to Tatooine , Anakin 's home planet , where he finds that his mother has been kidnapped by bandits . He arrives too late to rescue her and massacres her kidnappers indiscriminately . The droid R2-D2 arrives on Tatooine , carrying a distress call from Obi-Wan . Anakin and Padmé ( as well as R2-D2 and its fellow droid C-3PO ) follow him to Geonosis , where they are captured along with Obi-Wan and must battle monstrous beasts in a gladiatorial arena . They are rescued by a band of elite Jedi led by Mace Windu . Led by Yoda , the clone army arrives to defeat Dooku 's army of droids in a massive battle . Obi-Wan and Anakin are seriously injured fighting with Dooku . Yoda saves them and drives away Dooku , who escapes to Coruscant and reports to his master , an evil Sith Lord who is well pleased by events . Akanin and Padmé are married . Review At least George Lucas has had the common sense to return the Star Wars saga to its roots : rampant piracy and hysterical pastiche . The ponderous air of Asimovian prologue that made Episode I The Phantom Menace so nearly unendurable has mercifully been abandoned , and the cartoonish characters from that film who struck many viewers ( myself included ) as grossly offensive ethnic stereotypes have been written to the margins but not ( sadly ) banished altogether . What remains is a crisply managed entertainment that moves deftly from one dazzling digital setting to another and lards its story judiciously with well-executed action sequences . If the plots of Lucas ' overall narrative ( and of this instalment ) have become baffling and arcane , that 's nothing new to those steeped in Skywalker lore . Fans will surely welcome Episode II Attack of the Clones as a return to form , probably the most agreeable entry in the series since The Empire Strikes Back ( now designated Episode V ) in 1980 . Yet even sympathetic observers can detect a disturbance in the Force , one that cannot entirely be blamed on the sinister Count Dooku played by Christopher Lee ( distinguishable only by his wardrobe and accoutrements from Saruman , the good wizard gone bad he plays in The Lord of the Rings The Fellowship of the Ring ) . A quarter of a century after the first release of Star Wars , Lucas has become like Darth Vader , a prisoner of his own inflated mythopoetics . As the nomenclature of his universe becomes ever more ludicrous and his grand storyline grows in complexity and gaseousness ( " Our intelligence points to disgruntled spice miners on the moons of Naboo " ) , it increasingly seems that Lucas is a bored god who no longer cares about his creation one way or the other . Episode II Attack of the Clones is more crowded with quotations and references than any previous Lucas film , but it 's hard to say whether they make any kind of point ; there is a compulsive , perhaps desperate quality one never sensed in his earlier work . Here Lucas is not merely imitating himself ( and the original sources he imitated in the first place ) but is imitating his imitators and sometimes imitating films markedly inferior to his own . Much of the appeal of his original 1977 film - the one he now wants us to call Episode IV A New Hope - lay in its wide-eyed mythic shallowness , its catholic embrace of Flash Gordon serials and Westerns and samurai films and the grandiose pulp epics of early science fiction . These were all things Lucas evidently loved , and taken together they defined a worldview that was boyish , idealistic , short on moral subtlety and profoundly American . The sheer density of allusion in Episode II can be thrilling for movie buffs . The cloning station on the ocean planet Kamino comes from Tarkovsky 's Solaris , Anakin Skywalker 's act of vengeful violence on Tatooine recalls John Ford 's The Searchers ( after briefly referring to the biker-film tradition of The Wild Ones and Easy Rider ) , and so on . In the film 's major showcase sequences , Lucas jams together disparate elements with mixed results . The exciting spacecraft-chase sequence through the vertiginous spaces of the city-planet Coruscant , in which Obi-Wan Kenobi ( Ewan McGregor ) and Anakin pursue the would-be assassin of Padmé Amidala , emulates the most memorable scene in Luc Besson 's ludicrous The Fifth Element while , inevitably , nodding to Ridley Scott 's Blade Runner and accessing Lucas ' own quasi-sexual spaceship-through-a-tight-channel leitmotif . Later , when Obi-Wan , Anakin and Padmé must fight an array of phantasmagoric monsters in a desert amphitheatre , the touchstones seem to be Scott 's Gladiator ( and its numerous sword-and-sandal predecessors ) , Paul Verhoeven 's Starship Troopers and the classic 1950s stop-motion animation of Ray Hanyhausen . Of course in any Lucas film ( at least until now ) the director eventually has to deal with actors , and the results in Episode II are no more encouraging than usual . It 's easy to ridicule Lucas for his inability to depict the complexity of adult emotions , but his attempt here to capture the melodrama of teen romance - between Anakin ( Hayden Christensen ) and Padmé ( Natalie Portman ) - would seem chaste and dull by the standards of US network television . This forbidden love is clearly meant to be the emotional core of the entire Star Wars prequel trilogy ( and presumably in Episode III will lead Anakin to renounce his Jedi vow of chastity and embrace the Dark Side ) . But during the love scenes the pell-mell pace screeches to a halt while Portman and Christensen mumble their way dolefully through Lucas ' abysmal dialogue against a variety of lovely artificial settings . Those actors who survive a Lucas film with their reputations intact , as Lee , McGregor and Samuel L Jackson do here , plant their feet firmly on the jet-age or Stalinist-chic sets and bellow their lines , Errol Flynn style . Christensen tries to convey Anakin 's inner torment with a sort of brooding Brando impersonation , but mainly comes off as a sulky vacuity . When Padmé points out , after his mother 's death , that he is n't all-powerful , he pouts : " Well , I should be ! Someday I will be ! " In this same scene , Padmé finally admits to Anakin that she loves him , just after he has confessed to her that he has massacred an entire village . Lucas gives no indication that he sees this contrast as grotesque or inappropriate ; indeed , throughout the first two-thirds of this trilogy he seems profoundly uncomfortable with the task of making the cute kid of The Phantom Menace and the dreamboat teen of this film grow into the monstrous tyrant in the impressive black headgear . As derivative space opera goes . Episode II Attack of the Clones is enjoyable enough . But at heart it 's a forgettable and discontented tale of entropy and corruption , of a grand , idealistic venture that has lost its way . It 's no Star Wars . Synopsis and Review from Sight and Sound Vol.12 No.7 July 2002 p.54-55 The Monthly Film Bulletin was published by the British Film Institute between 1934 and 1991 . Initially aimed at distributors and exhibitors as well as filmgoers , it carried reviews and details of all UK film releases . In 1991 , the Bulletin was incoporated into Sight and Sound </text>
<text id="bhdtl" url="http://eurocomms.co.uk/online_pr/online_pr.ehtml?o=1647">
( Web Exclusive ) Teleunit SpA awarded test WiMAX licence for Florence region Teleunit , the Italian telecom services provider , has announced that it has been awarded a WiMAX test licence covering the Florence region in Tuscany , in conjunction with Italtel , one of the leading companies in the supply of products , solutions and services for next generation networks over IP , by the Italian Ministry of Communications . Teleunit will make available its existing wireless local loop ( WLL ) backbone , and structure the commercial offering through which the WiMAX and all related services will be rolled out to end users . Italtel will provide an integrated WiMAX solution , including its engineering , installation , onsite testing and technical support services , and additional marketing support to maximise the WiMAX customer base . The test licence has been issued free of charge , although any investment required to ensure the commercial feasibility of WiMAX will be assumed by Teleunit and Italtel . The test licence has also been issued subject to the provision of free trial WiMAX services to clients ; however , this does not preclude the possibility of exploiting other associated commercial opportunities . Francesco Cimica , Teleunit 's Chief Executive Officer , commented : " This represents an exceptional opportunity for Teleunit to develop a strong foothold in the WiMAX arena . Our existing WLL infrastructure means that the WiMAX offering can be rolled out more easily , thereby affording us a competitive advantage . Initially we will concentrate on technical testing in preparation for the commercial roll-out of the services . " </text>
<text id="bhtur" url="http://www.inverness-courier.co.uk/news/fullstory.php/aid/809/Tackling_human_organ_donation_dilemma_.html">
Tackling human organ donation dilemma By Andy Dixon Published : 29 August , 2006 IT is not easy to talk about your death or the death of those you love . However , by discussing organ donation it could potentially save someone 's life . Thousands of Scots are on the waiting list and hundreds die whilst waiting for a crucial organ transplant . The public in Inverness have the chance to save lives when the Scottish Executive 's organ donation road show kicks-off at Eastgate shopping centre tomorrow . It is part of a nationwide campaign to encourage more people to sign-up to the Organ Donor Register ( ODR ) . There are over 13.5 million people on the register , a confidential , computerised database used to help establish those who want to donate organs . Shoppers will be given the chance to sign-up on the spot with Scottish Executive representatives on hand to explain the importance of organ donations . The road show coincides with the launch of new legislation coming into effect on Friday . Under the Human Tissue ( Scotland ) Act 2006 , the wishes of people who choose to be considered as organ donors in the event of their death will be respected . Donald Cadzow ( 69 ) is a haemo-dialysis patient at Raigmore Hospital on the transplant waiting list for almost three years . Mr Cadzow , who suffers from total renal failure , attends the hospital three days a week and does not have any dialysis at home . " It 's a condition that does n't get better so I accept it , " he said . " I have had to build my life around it . " The retired Caithness farmer , who now lives just outside of Tain , returned from a three week holiday in Australia last week . He said the hospital arranged for him to continue having his treatment abroad , but does not know how long he will be waiting for a transplant . " There are various tests to see if a kidney is suitable , so I have to wait for the right one to come along , but there 's no time limit , " he added . Jane Bryce ( 60 ) , of Nairn , had a kidney transplant 10 years ago and said her life has been vastly improved thanks to the donation . She was diagnosed with polycystic kidney disease , a hereditary condition that her father also suffered from . " I was born with a cyst in my kidney , " said Mrs Bryce , treasurer of the Highlands and Islands Kidney Patients Association for the last five years . " For patients like me the cysts grow and sometimes it will never affect a person , but for others it can block kidney functions and that 's what happened to me . " Mrs Bryce has been involved with the association for around 11 years , working within Raigmore Hospital and around the city with the Scottish Kidney Federation to offer support for people who have had kidney failure . " When you 're first diagnosed there is a very odd feeling , " explained Mrs Bryce . " You know that you 're living with a disease that you know would get you , but you are not sure when . " I was very lucky though , because I was only on the waiting list for three years which is a relatively short time . " Whilst she was waiting , Mrs Bryce had to do 30 minutes of home dialysis four times a day . " I would get very tired , " she said . " You have to watch every drop you drink and be careful about what you eat because it can be very toxic . " It can be hard because you also have to restrict your activities . " She still has to take medication to maintain the transplant but says the ODR and the introduction of new legislation is a good idea and will hopefully change some attitudes . " When the family are in a position with the death of a loved one it is a very difficult time , so it is perhaps better to discuss the topic beforehand , " she said . Dr Stewart Lambie ( left ) with renal dialysis patient Lewis Gove at the renal unit at Riagmore Hospital . Pic : Phil Downie 01463 831249 " Transplant patients like myself are forever grateful to the donors and their families and never forget them . " The kidney transplant I had has changed my life dramatically and improved it immeasurably , but with heart , liver and lung transplants it saves their lives . " Debbie Gallacher , transplant co-ordinator at NHS Highlands , said the new legislation is very important for encouraging more donations . Until this Friday it is still down to the next of kin of individuals who carry a donor card or are on the donor register as to whether their organs can be used after their deaths . New laws will mean relatives will no longer be asked for their consent . But if families do object then it would be unlikely to go ahead . The problem in the past is families have objected to allowing their loved one 's organs to be used . Mrs Gallacher said until last month , NHS Highland 's waiting lists on transplants stood at approximately 120 for kidney patients and 20 for heart , lung and liver replacements . But last year the Highland 's had the highest increase in willing donors in Scotland . Dr Stewart Lambie , renal consultant at Raigmore Hospital for just over a year , said transplants offer a two-fold improvement in people 's lives . " They no longer have the burden of dialysis and it allows them to live longer , " said Dr Lambie He stressed the importance of the ODR and said it takes the pressure off families as they can be seen to do the wishes of their loved one . One school of thought backs an opt-out , rather than opt-in system , whereby people are automatically considered for donation unless they specify that they do not want their organs to be used for transplants , but this can be controversial . " I think the ODR and new legislation is a fairly good compromise because there are moral and ethical issues to be considered , " added Dr Lambie . " There may be a change in the future , but there would be a lot of debate , however the new legislation needs a bedding-in period and then an assessment of its impact . " Live donations is another area encouraged which allows people to donate a kidney to save someone 's life . " As the list of patients waiting for a transplant is steadily rising , we are trying to increase the number of live donors , " added Dr Lambie . " The number at this hospital at the moment is moving towards somewhere between 30 per cent and 50 per cent and I would like to see that go up a bit more . " Research commissioned by UK Transplant , part of the NHS , shows nine out of 10 people are in favour of organ donation in principle across Scotland , however only 27 per cent of the nation has joined the ODR . The statistics for the UK show that since 1st April , 305 people have donated organs , 918 people have received transplants and 6970 people are still on the waiting list , with 729 living in Scotland . " Transplants save and enhance thousands of lives every year , but there is a desperate shortage of donated organs , " said Chris Rudge , UK Transplant managing director . " Right now more than 6000 people in the UK are waiting for an organ transplant but the shortage means that fewer than 3000 can be carried out each year . " Almost 500 people die every year while waiting , " he continued . More information on how to sign-up can be found at www . i nfoscotland . c om/organdonor or by calling the Organ Donor line 0845 60 60 40 . </text>
<text id="bhvhh" url="http://www.sscs.bham.ac.uk/phsi/eating/bmi.htm">
Weight and Body Mass Index A more realistic statistic of how your own body weight compares with general population norms , is an estimate of Body Mass Index ( or BMI ) . This takes into consideration your weight and height ( but not your build ) . You could try the following calculation : Take your weight in Pounds and multiply this by 700 Then divide by your height in Inches Again , divide by your height in Inches The sum is a number representing your BMI If your BMI falls below 20 , than this suggests that you are underweight . If your BMI falls above 27 then this suggests that you are overweight . If your BMI falls below 18 or above 30 then you should speak to your GP about this . For example for a person who weighs 9 stone 7 lbs . ( 133 lbs . ) , and who is 5 feet 5 inches ( 65 inches ) tall 133lbs multiplied by 700 = 93100 Divided by 65 inches = 1432 Divided by 65 inches = a body mass index of 22 ( which falls within the healthy range ) Remember that this calculation gives you only a rough guide to weight in comparison with your height and that there are many other factors which contribute towards maintaining a healthy body weight . If you are concerned about your weight why do n't you make an appointment to see your GP , or visit the Health Centre to see the Practice Nurse or to attend A Well Woman / A Well Man Clinic . You could also visit a counsellor at the Counselling Service to discuss some of your concerns . This page is maintained by the Student Support and Counselling Service </text>
<text id="bieca" url="http://www.ombudsman.org.uk/improving_services/selected_cases/HSC/IC0107/pt1-e2242.html">
Home Improving Services Selected Cases - Health Selected Investigations Completed August 2001 - November 2001 Part I , Case no . E.2242/98-99 Chapter 1 : Hospital , Community Health and Ambulance Trusts Case No . E. 2242/98-99 - Inadequate arrangements for care following discharge ; inadequate response to request for independent review Complaint against : Lincoln and Louth NHS Trust Summary of case Mrs P was treated by the Trust for a broken hip following a fall at home in April 1997 . Her son , Mr L , complained that , despite the family 's concerns that she was becoming increasingly confused , Mrs P was discharged without a psychiatric assessment . The Ombudsman 's professional assessors concluded that Mrs P 's pre-discharge assessment was adequate ; her discharge was appropriately planned ; and the necessary support for her discharge home was put in place . The Ombudsman did not uphold this aspect of the complaint . Mr L also complained about the Trust 's handling of two requests he made for independent review ( IR ) . The Ombudsman concluded that the Trust did not deal adequately with either request . They failed to refer the first to the convener , as required by national guidance , and instead attempted further local resolution . When this was unsuccessful and Mr L made a second request for IR , the Trust failed to respond because of staffing difficulties and procedural weaknesses . This aspect of the complaint was upheld . The Trust apologised to Mr L and confirmed that they had taken steps to improve complaint handling procedures . </text>
<text id="bjcqp" url="http://www.bfice.org.uk/index.asp?contentid=21&menuid=21">
To learn more about The Institution of Civil Engineers , please click here . To learn more about other work related charities visit the website of the Occupational Benevolent Funds Alliance - www . j oblinks . o rg . u k Links to engineering related charities Engineers Against Poverty The Engineering Technology Board RedR Engineering Council Links to other organisations Action for Blind People Advice Guide The online Citizens Advice Service , providing independant advice on rights Age Concern England Advice and extensive range of fact sheets on subjects relating to the elderly . Aidis Trust Provides specialised computer equipment to people with disabilities . Alzheimers Disease Society Advice and support to those dealing with dementia . Arthritis Care Citizens Advice Bureau , National Association of ( NACAB ) Provides details of local Citizens Advice Bureaux . Consumer Credit Counselling Service Registered charity . Free and confidential service , providing counselling to help achieve realistic solutions to debt problems , avoid bankruptcy and learn to handle money . Counsel and Care for the Elderly Provides an advice service on care at home , residential care and nursing homes , community care and financial help . Department for Work and Pensions ( formally the DSS ) Disabled Living Foundation Information on equipment and technology to increase disabled people 's independence . Elderly Accommodation Counsel The EAC is a charity , providing a free service to help older people make their own choices about where they live , and any care or support services they need . Employment%20Opportunities%20for%20People%20with%20Disabilities Employment%20service%20for%20job%20seekers%20&%20employers . % 20Good%20first%20point%20of%20contact , % 2 Kingshill Research Information resource for dementia sufferers and their carers . Leonard Cheshire Charity provider of services for disabled people . Motability Charity helping disabled people to purchase/hire vehicles . Multiple Sclerosis Society National Schizophrenia Fellowship ( Rethink ) Aims to improve the lives of everyone affected by severe mental illness . Parkinson 's Disease Society Red Cross ( British Society ) National limited equipment Loan , escort and transport services . RightsNet The welfare rights website for advice workers . Royal National Institute for the Blind ( RNIB ) Provides advice , assistance and information on benefits , equipment , employment and support . Royal National Institute for the Deaf ( RNID ) RNID is the largest charity representing the nine million deaf and hard of hearing people in the UK . Scope Charity working with people with cerebral palsy . Skill ( National Bureau for Students with Disabilities ) Skill promotes opportunities for young people and adults with any kind of disability in post -16 education , training and employment across the UK . Thrive National horticultural charity that exists to enable disadvantaged , disabled and older people to participate fully in the social and economic life of the community . </text>
<text id="bjyhd" url="http://www.ebe.org.uk/ccn.htm">
Celebration Churches Network in Bristol Individual churches who network together under the ' CELEBRATION Churches ' banner come from a variety of backgrounds and denominations . We aim to function as a ' fellowship of fellowships ' , committed to outworking a common vision & seeking a region wide expression of church in Bristol & the surrounding area . Our relationship is based on mutual respect , a desire to express Christian unity & a recognition that if the one million people of the Bristol region are to be reached with the good news of Jesus , partnership rather than competition between churches is vital . Ebe is one of the ' Celebration Churches ' in Bristol . Vision of Celebration Churches EXPRESSING UNITY . We aim to pray & share ministry together because we recognise that unity brings pleasure to God & provides the context in which He has promised blessing . REACHING COMMUNITIES . we aim to strengthen & resource existing local churches & newly planted churches in order that every home & family in Bristol region will be reached with the good news of Jesus . TOUCHING LOCAL SOCIETY . we aim , through prayer , witness & social action , to influence every area of life in the region , with a particular desire to express care for the most marginalised & vulnerable . BLESSING THE WORLD . we aim to work in partnership with Christians from other nations in order to spread the Good News to all peoples , especially the poorest . Celebration meetings are not currently running regularly , but watch out for special events throughout the year . Citywide Youth and Children 's Events The Mix is a city wide Youth celebration , which is an opportunity for secondary school age young people , to experience God through worship , teaching and intercession . The Mix is also motivating young people with a heart for evangelism . ' The Mix ' meets at Woodlands Christian Centre at 7.30pm on the first Sunday of every month . The Max is a city wide Childrens celebration , which happens once a term and is aimed at primary school aged children . ' The Max ' meets at Woodlands Christian Centre and details are in the online diary </text>
<text id="bjzdi" url="http://www.northumberland.gov.uk/vg/text_northpen.html">
This plain text version of the page is designed for printing and use by speech browsers . Please click here for a more graphical version North Pennines The North Pennines is one of the largest and most recent parts of England to be officially declared an " Area of Outstanding Natural Beauty " . It spans three counties : Northumberland ( to the south of Hexham ) , Durham and Cumbria and comprises magnificent moorlands , wooded valleys and small , unspoilt villages . The central uplands are the source of many of the North of England 's best known rivers : The Tyne , Wear and Tees and waterfalls and gurgling streams are plentiful . You are welcome to enjoy the beauty of the North Pennines but please always follow the Country Code . There are three main valleys of the North Pennines in Northumberland . These are SOUTH TYNEDALE which reaches from the market town of Haltwhistle to the Cumbrian town of Alston , the highest market town in England ; ALLENDALE with its centre at Allendale Town and its fascinating lead mining history remembered in the moorland village of Allenheads ; and the DERWENT VALLEY which forms part of the border with County Durham and where Blanchland is one of the most attractive villages in Northumberland . For further information , please visit the North Pennines official Website . Summary of topics covered in this page : | Allendale || Allenheads || Blanchland || Haltwhistle || Allenheads Heritage Centre || Derwent Reservoir || North Pennines Bird Watching || Allendale Golf Course | ALLENDALE ( Towns and Villages ) Accommodation Search Area : Hadrian 's Wall and North Pennines Accommodation Search Sub-Area : North Pennines Population : 740 . A North Pennines village in the unspoilt valley of the River East Allen . It is an ideal walking centre with some interesting gift shops and good accommodation . An ancient New Years Eve ceremony involves a procession of " guisers " carrying blazing tar barrels on their heads to a midnight bonfire in the middle of the village . Amongst the fans of North East author , Catherine Cookson , the valley is known as Mallendale as this was the setting for her " Mallen Streak " trilogy . The saga told the story of a family whose male members ( including the illegitimate ones ! ) could be easily recognised by a white streak in their hair . Additional Related Information ... - County Map - Accommodation Search - Allendale Local History - View a Street Map - View a Road Map ALLENHEADS ( Towns and Villages ) Accommodation Search Area : Hadrian 's Wall & North Pennines Accommocadion Search Sub-Area : North Pennines Population : 200 . A pretty North Pennines moorland village at the head of the Allen Valley . In the 19th century it was a busy leading lead mining centre and had a population of 759 in 1851 . There are signed walks through the local woods and alongside the river . The British Norwegian Ski Club is nearby . Additional Related Information ... - Ski-Allenheads - County Map - Accommodation Search - View a Street Map - View a Road Map BLANCHLAND ( Towns and Villages ) Accommodation Search Area : Hadrian 's Wall and North Pennines Accommodation Search Sub-Area : North Pennines Population of village : 140 . A delightful model village in the North Pennines , right on the County Durham boundary with picturesque houses set against a backdrop of deep woods and open moors . Its unspoilt qualities make it a frequent setting for period films set in the 18th century such as those based on the novels of Catherine Cookson . Nearby the Derwent Resevoir provides excellent facilities for sailing and fishing . This village boasts a wonderful array of different retail outlets including : The Post Office , Blanchland Stores , Gallery Upstairs , The White Monk Tea Rooms and Get Ahead Hats . Additional Related Information ... - North Pennines - Fishing - Sailing and Water Activities - County Map - Accommodation Search - View a Street Map - View a Road Map HALTWHISTLE ( Places ) Population : 3,800 . " The Heart of Roman Wall Country " . A small market town on the South Tyne river which is only a few miles from some of the best remaining sections of Hadrian 's Wall . It is possible to walk from the town to the Wall via Haltwhistle Burn . The name of the town which sounds so evocative of the railway age actually means " river junction by a hill " . It has good local shops and accommodation and Market Day is Thursday . The town provides a local transport hub linking the railway station to the Hadrian 's Wall Bus Service and the North Pennines bus to Alston . Akzo-Nobel ( Crown ) Paints and Nampak ( plastic bottle manufacturers ) are the major employers . The new A69 Haltwhistle By-pass was the first major road construction scheme in the country to be built using private finance , under contract to the government . Additional Related Information ... - North Pennines - Hadrian 's Wall & Forts - View a Street Map - View a Road Map ALLENHEADS HERITAGE CENTRE ( Industrial ) In the 19th century , the North Pennines was one of the great lead mining areas of England . Most of the villages in the area have strong connections to the days of lead and old mine chimneys still stipple the landscape . At Allenheads , a Visitor Centre explores the history of the local lead mines and explains how the village has survived since the last mine closed in 1896 . There is also an interesting blacksmith 's shop and engine house to visit . Open : Easter - October 10:00am - 5:00pm ( 2003 ) . Adults : £ 1 ( 2003 ) . Tel : ( 01434 ) 685395 . Partially accessible for visitors in wheelchairs . Additional Related Information ... - Allenheads - View a Street Map - View a Road Map DERWENT RESERVOIR ( Sailing ) Derwent Reservoir is in the North Pennines Area of Outstanding Natural Beauty , near to the picturesque village of Blanchland . The County boundary which separates Northumberland from Durham runs through the middle of the lake . It is a quiet , reflective spot with lovely views . Access and facilities for sailing at the lake are only available through the Derwent Reservoir Sailing Club . Tel : +44 ( 0)1434 675258 for details . Additional Related Information ... - Blanchland - Derwent Reservoir Sailing Club - View a Street Map - View a Road Map NORTH PENNINES BIRD WATCHING ( Birds ) Curlew , Merlin , Peregrines , Red Grouse and sometimes the much rarer Black Grouse may also be seen regularly in Northumberland 's other great heather moorland area , in the North Pennines , to the south of Hexham . ALLENDALE GOLF COURSE ( Golf ) 9 holes ; 4541 yards ; Par 64 . Scenic hilly meadowland course in Allendale village ( North Pennines ) , 8 miles south west of Hexham . Visitors welcome . Green fees £ 12.00 per day mid-week £ 15 weekends ( 2006 prices ) . Tel : +44 ( 0)1434 683926 . Additional Related Information ... - Allendale and Allenheads - Golf Events - Allendale Golf Course Website Created and Maintained by : Northumberland Tourism , 9 Telford Court Morpeth NE61 2DB © 2006 </text>
<text id="bkebq" url="http://www.vam.ac.uk/res_cons/research/research_reports/1992/theatre_museum/index.html">
RESEARCH REPORT 1992 Theatre Museum National Museum of the Performing Arts James Fowler Deputy Head Dr Fowler specialises in all aspects of the performing arts before 1830 , with particular interest in Shakespeare , stage technology and architectural drawings . In 1992 he contributed an entry on ' British Theatre Architecture 1650-1800 ' to the Dictionary of Art ( forthcoming ) . 1992 Publications : [ Editor ] . Catalogue of paintings at the Theatre Museum , London , by Geoffrey Ashton . London : Victoria and Albert Museum in association with The Society for Theatre Research , 211 pp . , ill . Claire Hudson Head of Library & Information Services , Theatre Museum Mrs Hudson is actively involved in exploring systems which will best document and exploit the Theatre Museum 's extensive library and archive collections . In particular , this focuses on the potential for using automated systems for indexing a very wide range of media . As chair of the Theatre Information Group ( the UK branch of SIBMAS - La Société Internationale des Bibliothèques et Musées des Arts du Spectacle ) she is frequently called upon to provide information on performing arts library and archive collections in Britain . She is regularly asked to review new theatre reference works , and to report on publishing proposals . Her special interest is that of the social history of the actor - training , employment and working conditions . Catherine Haill Subject Specialist Ms Haill specialises in the history of popular entertainment including circus , pantomime , puppets , magic , music hall , variety , pleasure ground and fairground entertainment , and musical theatre . She has worked on the development of theatrical ephemera and is producing a major catalogue of the D'Oyly Carte Opera collection , another area in which she specialises . In accordance with Museum policy , she aims to promote links with the theatre profession by collecting pro-actively around current productions , producing taped interviews and gathering related documentation and designs . Leela Meinertas Registrar Leela Meinertas is responsible for the Theatre Museum Collections of Set and Costume Designs ( including Set models and backcloths ) , and the Rock and Pop Collection . Work in progress includes research for an article on theatre designs by members of the Omega Workshop and a lecture on actresses who married into the aristocracy ( 17th-19th centuries ) . She is currently engaged on research into costuming for the nude showgirl/dancer . Sarah Woodcock Subject Specialist Sarah Woodcock specialises in dance and opera , with particular interest in the Diaghilev Ballets Russes and the development of dance in England . She has been working on a catalogue of the Diaghilev Ballets Russes costumes in the Museum , on the dance photograph collections , especially the Anthony Crickmay archives and on the archive of the dance publisher and historian , Cyril Beaumont . She is interested in extending the Museum 's links with contemporary dance and opera companies and building up the costume collection to include a greater range of opera and ' period ' theatrical costumes . Janet Birkett Curatorial Assistant Dr Birkett is interested in the stage history of Shakespeare 's plays , particularly the production of the plays in the twentieth century . She is also interested in the work of Shakespeare 's contemporary dramatists , and in the twentieth-century British and American theatre . Melanie Trifona Christoudia Curatorial Assistant Melanie Trifona Christoudia pursued a BA ( Hons ) in the Performing Arts and MA Dance Studios at the University of Surrey , developing research interests in dance in musicals and the choreography of Twyla Tharp . A member of the events committee of the Society for Dance Research , she has written a number of essays for a dance dictionary to be published by St James 's Press in 1993 . Andrew Kirk Curatorial Assistant Mr Kirk 's main interests are music-hall and variety . He is also interested in the work of post-war British playwrights , especially David Hare , David Edgar and John Osborne . Barry Norman Curatorial Assistant Mr Norman is interested in the history of both the British and American musical and revue , and has an extensive collection of recordings and literature on the subject . Helen Smith Library Cataloguer Helen Smith 's current main interest is dramatic publication in the 18th and 19th centuries . </text>
<text id="bknbk" url="http://easyweb.easynet.co.uk/jim.shead/River-Arun.html">
NOTE : N and U in the Navigable column above indicates that the node is navigable or unnavigable . If a D appears here it means that navigation is difficult or restricted to smaller craft . River Avon ( Bristol ) Description : Navigable from Hanham Lock , Bristol , ( the junction with the Kennet and Avon Canal ) to Avonmouth . The river is navigable for sea-going craft from Avonmouth to Bristol Docks . History : Made navigable following Acts of 1700 , 1749 , 1803 , 1806 , 1808 and 1809 . Navigation between Hanham Mills and Bath opened in 1727 . For more details see the History page Points of Interest : There is a fast ebb run down towards Netham Dam after the highest spring tides opposite St Anne 's Board Mills . Under the conditions it is essential to carry an anchor , so in an emergency craft are not swept onto the Dam . Navigation Authority : Head Office : British Waterways , MD 's Office : Southern Waterways , General Manager : South West Waterways , Alexandra Warehouse , West Quay , The Dock , Gloucester GL2 2LG : Telephone 01452 318000 : Fax 01452 318076 : The tidal Avon Related Articles Bristol Beckons Related Books The Bristol Avon by Ernest Walls , 318 pages , Published by Arrowsmith 1927 Rivers of England series . Includes drawings . The Canals of South and South East England by Charles Hadfield , ISBN 0 7153 4693 8 : 393 pages , Published by David & Charles 1969 Order now from . The Bristol Avon - A Pictorial History by Josephine Jeremiah , ISBN 1 86077 362 1 : 134 pages , Published by Phillimore & Co . 2005 Traces the history of the river from earliest times to the 20th century . Over 180 photographs . Order now from . Related Videos A Journey Down The Bristol Avon Produced by Heritage Video Films Ltd Starting in the foothills of the Cotswolds and continuing down through Malmesbury , Tetbury , Bradford-On-Avon , Bath and finally Bristol . Available on tape . Order on video tape from Related Photographs River Avon ( Bristol ) : Cumberland Basin Entrance Lock No 2 SS Great Britain River Avon ( Bristol ) : Cumberland Basin Entrance Lock No 2 Trip narrowboat River Avon ( Bristol ) : Cumberland Basin Entrance Lock No 2 Nb Toria in Floating Harbour River Avon ( Bristol ) : Avonmouth Sailing Ship - Eye of the Wind Avon : Bristol The Floating Harbour River Avon ( Bristol ) : Cumberland Basin Entrance Lock No 2 Industrial Museum Avon : Bristol Related External Web Sites Anglo Welsh : A large narrowboat hire company with a good choice of bases and boats . The Bristol Packet : Public & Charter Boat Trips on the river Avon between Bath and the Bristol Channel and in Bristol 's Floating Harbour Messing About on The River : Trip boat and day hire boats on the Bristol Avon . Related Cruising Logs 12th May 1995 15th May 1995 20th June 1999 22nd July 2001 23rd July 2001 29th July 2003 Other Related Pages Cruising Times Lock Sizes and maximum craft dimensions : Through the Cumberland Basin Entrance Lock : length 324 foot 9 inches , beam 48 foot 10 inches . Through Netham Lock : length 80 foot , beam 17 foot 8 inches . NOTE : For more details of maximum lock and craft sizes and the basis of these figures see Craft and Lock Sizes Page River Avon ( Bristol ) : Table of distances Miles Locks Navigable ( N ) Grid ref OS Map No Kennet and Avon Navigation Junction Junction with Kennet and Avon Canal 0.0 0 N ST646700 172 Hanham ( Former Colliery Wharf ) 1.5 0 N ST634717 172 Conham 1.9 0 N ST629718 172 Netham Lock No 1 Netham Lock generally has its gates open to feed the City Docks locks and graving docks . It is generally only used against floods and tides that exceed the crest of Netham Dam . 3.5 1 N ST615727 172 Cumberland Basin Entrance Lock No 2 Bristol 6.5 2 N ST567724 172 Cliffton Suspension Bridge 6.9 2 N ST564730 172 Pill 11.1 2 N ST526761 172 Avonmouth Junction with River Severn 13.1 2 N ST502787 172 NOTE : N and U in the Navigable column above indicates that the node is navigable or unnavigable . If a D appears here it means that navigation is difficult or restricted to smaller craft . River Avon ( Hampshire ) Description : Although the river was once made navigable for 36 miles from Christchurch to Salisbury boats are no longer able to use the waterway . History : In 1535 a commission was appointed to remove weirs and obstructions from the river but no work seems to have been done . In 1664/5 an Act was passed but work did not start until 1675 and the navigation opened in 1684 . Traffic ceased about 1705 . For more details see the History page River Blyth Description : A five and a half mile tidal navigation near Southwold , Suffolk . Runs from the River Mouth to Blythburgh . History : An Act of 1757 authorised the navigation but the locks were closed in 1934 , by an order under the 1930 Land Drainage Act . For more details see the History page Related Books The Canals of Eastern England by John Boyes & Ronald Russell , ISBN 0 7153 7415 X : 368 pages , Published by David & Charles 1 1977 Order now from . Other Related Pages The Blyth Navigation : Article on the navigation by Brian Holt . River Cart Description : Navigation improvements to the White Cart , Renfrewshire . History : Authorised by two Acts of 1753 and 1787 , the only work , on a cut , followed the second Act . For more details see the History page Related Books The Canals of Scotland by Jean Lindsay , Edition : 1st edition ISBN 7153 4240 1 : 238 pages , Published by David & Charles 1968 Order now from . River Colne Description : A tidal navigation from Colchester to Colne Point . The top three and a half miles are practically dry at low water . History : Promoted by acts of 1623 , 1689 , 1718 , 1740 , 1750 and 1781 . For more details see the History page Points of Interest : Maximum length 195 foot , width 28 foot . Navigation Authority : : Colchester Borough Council , PO Box 884 , Town Hall , Colchester CO1 1FR : Telephone 01206 837316 : Fax 01206 282288 : Related Books Down Tops'l - The story of East Coast Sailing Barges by H Benham , Edition : 2nd edition , revised 192 pages , Published by George G Harrap & Co . 1971 This illustrated work includes river and creek navigation on the Crouch , Colne and Roach . The Canals of Eastern England by John Boyes & Ronald Russell , ISBN 0 7153 7415 X : 368 pages , Published by David & Charles 1 1977 Order now from </text>
<text id="bksuh" url="http://www.lawson-cruttenden.co.uk/conveyancing.html">
Residential Conveyancing Moving house can be extremely stressful . The firm seeks to take upon itself as much of that stress as possible . We offer a complete and thorough service . The prices of the properties we deal with vary between several million pounds at the upper end of the residential market and in the region of 75,000 pounds at the lower end . Great care is taken in relation to leasehold conveyancing . Commercial Conveyancing We have frequently undertaken Commercial Conveyancing . Round the clock service offered for a speedy conclusion . The fastest exchange of contract has been achieved within 24 hours of instructions . All conveyancing is carried out by fully qualified solicitors , we do not use unqualified clerks or junior members of our team . This is a quality service set in our chambers in Grays Inn Square . On-line Conveyancing Quotes Please complete the following questions for an on-line quote : Is the property a House or Flat ? What is the Sale Value and the Purchase Value ? Are you Buying Selling or Both ? What is the Post Code and Country of the property ? </text>
<text id="bkvbo" url="http://www.hamradio.co.uk/acatalog/Vert_Arno_Ant.html">
28-29.8MHz , 90cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 119.94 ( 177.52 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 102.08 ( 151.08 ) Arno EH Cobra 15 20.7-21.7MHz , 90cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 119.94 ( 177.52 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 102.08 ( 151.08 ) Arno EH Cobra 20 13.8-14.8MHz , 90cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 119.94 ( 177.52 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 102.08 ( 151.08 ) Arno EH Cobra 30 9.9-10.3MHz , 90cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 119.94 ( 177.52 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 102.08 ( 151.08 ) Arno EH Cobra 40 7-7.2MHz , 90cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 119.94 ( 177.52 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 102.08 ( 151.08 ) Arno EH Venus 80 3.5-3.8MHz , 248cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 199.95 ( 295.92 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 170.17 ( 251.85 ) Arno EH Venus 155 1.913-1.933MHz , 248cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! £ 199.95 ( 295.92 ) ( Including : VAT at 17.5 % ) Ex . VAT Price : £ 170.17 ( 251.85 ) Arno EH Venus 160 1.830-1.850MHz , 248cm Long , 2kW ( 500W RTTY/AM ) Introducing a new range of antennas from Arno Electronics . Available for any band 10m-160m , ML&S stock this exciting new product available for immediate despatch . All antennas are beautifully built and pre-tuned at the factory . Supplied with fixing clamps & clear installation instructions . Easily fine tuned with outer ring sleeve . You will be totally amazed at how well they work . No ATU required . Just plug-in and work ! </text>
<text id="bkxng" url="http://travel.independent.co.uk/europe/article1192096.ece">
Luxury living is child 's play The great thing about the Azia Beach Hotel in Cyprus is that it 's five-star but not formal . So take the baby and relax , says Lena Corner Published : 23 July 2006 It 's often easier to stay at home than drag a child of an awkward age away on holiday . Fifteen-month-old Ronnie is at that in-between stage where he 's just learnt to walk and is terribly excited by his new skill but also frighteningly unsteady . A younger baby is more portable because it will sit in its pram and a toddler you can leave to run off steam . Ronnie does n't quite do either . So when our taxi finally swept into the forecourt of the Azia Beach Hotel and Spa , after a fairly fraught four-hour flight , the relief was immense . We checked into our room and popped Ronnie in his cot just in time to crack open a couple of ice-cold Keo beers and catch a blistering red sunset over the Mediterranean from the comfort of the hot tub on our balcony . The great thing about the Azia is that it does five-star without being formal or turgid . Its brochure is emblazoned with that old " barefoot glamour " cliché , but here it really works . This is the kind of place where a noisy baby at the dinner table gets serenaded by a musician rather than banished to its room . Although it 's a fairly average resort set-up , with a pool complex at the centre , a couple of restaurants , gym , tennis courts etc , last year a facelift - the addition of a luxurious Elemis spa along with plenty of muted earthy tones and contemporary styling - shifted it up-market . Ronnie made himself at home immediately . In the mornings he ate under a canopy of trees in the outdoor restaurant , before taking to the shallowest waters of the pool . When the sun got too high he checked into the kids ' club where Sophie and any other passing Azia staff drooled all over him as he tried to play . After a long siesta he would go for a leisurely jaunt to the nearby beach and in the evening a selection of jolly Russian baby sitters could be called upon to sing him to sleep . This left plenty of time for us to laze by the pool , or , in the evening , catch a taxi into Paphos ( a 10-minute drive away ) , where we indulged in , or rather gorged on , a 30-course fish mezze . The spa facilities were also put to good use - and it 's not just a couple of treatment rooms masquerading as a spa , it really is the full works ( voted by Grazia magazine as one of the world 's 10 best new spas ) . In the adjoining yoga centre I had one of the most vigorous yoga sessions I 've ever had . Fifteen years ago , all this was nothing but a patchwork of fields covered mainly with banana trees . Antis Economides , the owner , had the foresight to buy one . Then , when he had raised a bit more money , he bought another , until he had five on which the Azia now stands . The only drawback , if it is one , is that we were so firmly ensconced in the comfort of the Azia that our sense of wanderlust was completely dampened . The west coast of Cyprus does not have the big sandy beaches of the other side ; instead it has rocks and plenty of tiny , sandy coves . One hot morning , feeling unusually energetic , we caught the number 10 bus to Coral Bay . Lovely for an hour or so , but trying to pin a hot , sticky child down to the prickly seat on the way back was n't relaxing . The more adventurous could hire a Jeep and head on a little further to Cape Lara , a long sweep of unspoilt sand , and see where the green turtles come in to nest . Or , better still , get off the tourist trail and head inland to the villages at the foot of the magnificent Troodos Mountains . But , as soon as you venture out , there is the Brits-abroad reality check to contend with . Take the road along the coast either to the east or west and you will come across O'Solomon 's Irish bar , the Zik Zak club , Sid 's pub and any number of other Identikit tourist traps trying to lure you in with offers of beer at knockdown prices . And , as for the number of property companies vying for foreign trade , it will be a wonder if there are any Cypriots left on the island in five years . Not that any of this bothers Economides . His passion is not so much in the business of running a hotel - he leaves that to his wife and two daughters - but in the workings of his beloved plantation just outside Paphos . There , he cultivates the incredible array of plant-life that covers the Azia 's gardens and also grows around 80 per cent of the fruit used by the hotel - impressive , when you consider there are 250 rooms and 15 bungalows . So as well as the striking 50ft cerise bougainvillaea that grows up the stark white frontage of the Azia , there are palm trees of a type you will never have seen before and huge bushes of lavender , which gets used in the spa . And it is these luscious gardens , which slope down to the cliff edge , that sets the Azia apart from the rest . Economides really has created a luscious oasis in a hot , rocky corner of Cyprus . Even Ronnie , as he raced from the pool to the kids ' club , stopped for a split second to show his appreciation for one of the more Jurassic-looking protuberances by beating it repeatedly with his plastic spade . Argo Holidays ( 0870 066 7070 ; argoholidays . c om ) is offering seven nights at the Azia Club & Spa , Paphos , in an inland room , from £ 895 per adult , based on two sharing , and £ 269 per child aged two to 12 years sharing their parents ' room , including return flights from Gatwick , transfers and b&b </text>
<text id="blunb" url="http://www.nsbapty.co.uk/Supp-Samp.htm">
This is a sample agreement to provide consultancy & technical support , entered into by Neil S Bapty B. S c(Hons ) , of ... ... ... ... ... ... ... ... . , herein referred to as NSB and : - No Body herein referred to as the Customer . Commencement Date - 1. DEFINITIONS In this Agreement , unless the context otherwise requires , the following expressions shall have the following meanings : - " the Systems " means the systems specified in this Agreement in Schedule B and such additions and variations to such systems as may be approved in writing by NSB for inclusion in the Agreement . " the Customers Premises " means the Customer 's premises at which the systems are installed as specified in this Agreement in Schedule A. " the Commencement Date " means the date on which this Agreement shall become effective as specified above . " the Initial Period " means the twelve months from the Commencement Date . " the Monthly Charge " means the monthly charge referred to in Clause 3.1 of these conditions and specified in Schedule F. 2. DURATION This Agreement shall commence on the Commencement Date and shall continue for the Initial Period and shall remain in force thereafter unless or until terminated by either party giving to the other not less than ninety days written notice of termination on the last day of the Initial Period or on the last day of any calendar month thereafter ( but subject to the provisions for earlier termination contained in Clauses 3.1 and 10.1 of these conditions ) or until superseded by a future agreement which includes the support of the system covered by this agreement and such additional equipment as may be agreed by NSB . 3. CHARGES 3 .1 The Customer shall pay NSB a fixed Monthly Charge in advance for each month of this Agreement . For the Initial Period the Monthly Charge shall be the amount specified in this Agreement in Schedule F. NSB shall be entitled to increase the Monthly Charge for any subsequent year or years of this Agreement after the Initial Period by giving to the Customer prior written notice of such increase , as detailed in Schedule F. Where such notice is given the Customer shall have the right to terminate this Agreement by giving NSB written notice of termination within thirty days of the date of NSB 's notice of increase ( time being of the essence in this respect ) . 3.2 The Customer will pay for all work at the scale of charges for the time being in force detailed in Schedule G - Other Charges . 3.3 NSB shall be entitled to charge the Customer at NSB 's standard rate of charges for the time being for any site visits or other additional work caused by the Customer 's failure to comply with its obligations under this Agreement . 3.4 The Monthly Charge and any additional charges payable under this Agreement are exclusive of Value Added Tax which shall be paid by the Customer at the rate and in the manner for the time being prescribed by law . 3.5 Any charges payable by the Customer in addition to the Monthly Charge shall be paid within seven days after receipt of NSB 's invoice therefor . 3.6 If any sum payable under this Agreement is not paid within seven days after the due date then ( without prejudice to NSB 's other rights and remedies ) NSB reserves the right to charge interest on such sum on a day to day basis ( as well after as before any judgment ) from the due date to the date of payment ( both dates inclusive ) at the rate of Two per centum per annum above the base lending rate of the National Westminster Bank Plc for the time being in force . 3.7 The customer shall be entitled to vary the contract level , as illustrated in Schedule F , by giving a minimum of 90 days notice 4. SERVICES TO BE PROVIDED BY NSB 4.1 During the continuance of this Agreement NSB shall at the Customer request : - ( a ) subject to the Customer having the necessary connected dial-up modems , NSB will provide a remote diagnosis service during " Office " hours . ( b ) at the Customer 's request NSB will visit the Customer 's Premises to diagnose the nature and cause of faults or malfunctions and will advise as to the repair or replacement of faulty equipment . ( c ) advise as to the selection , and procurement of new equipment or software . 4.2 Provide additional services as specified in Schedule D. 5. EXCLUDED SERVICES The following are not covered by this Agreement : - 5.1 Service other than at the Customer 's Premises specified in Schedule A. 5.2 Consultancy services outside the scope of the services described in Clause 4 of these Conditions . 5.3 The repair or replacement of any hardware . 6. AVAILABILITY NSB agrees to be available a minimum of 330 days per year , subject to bookings , and will notify clients in writing of any period of unavailability greater than 3 working days . 7. CUSTOMER'S RESPONSIBILITIES During the continuance of this Agreement the Customer shall : - 7.1 Provide NSB free of charge with adequate working space and facilities to enable NSB to carry out his duties under this Agreement . 7.2 Make available to NSB free of charge such programs operating manuals and other technical information regarding the System as may be necessary to enable NSB to perform his duties under this Agreement and if requested by NSB to provide staff familiar with the Customer 's programs and operations to co-operate with NSB in the diagnosis of any fault or malfunction in the System . 7.3 Keep full security copies of the Customer 's programs data bases and computer records in accordance with the best computer practice . 7.4 At the Customer 's expense provide at the Customer 's Premises such dial-up modems and other telecommunications facilities as may be reasonable requested by NSB for testing and diagnostic purposes , detailed in Schedule C. 7.5 Provide NSB free of charge parking facilities , where such parking facilities can reasonable be provided , or are provided to partners , directors , or employees of the customer . 7.6 Comply with specific provisions detailed in Schedule C. 8. LIABILITY 8.1 NSB shall indemnify the Customer against any personal injury to or death of any person caused by the negligence of NSB whilst acting in the course of his duties . 8.2 Subject to Clauses 8.1 but notwithstanding anything else contained in this Agreement NSB shall not be liable to the Customer for any direct , indirect incidental or consequential loss or damage suffered by the Customer whether arising from negligence breach of contract or otherwise ( including but not limited to loss of profits or contracts loss of use of the System or any equipment comprised therein or loss of or damage to the Customer 's programs and data ) . 8.3 NSB 's total liability except under Clause 8.1 for any claims of whatever nature arising from one or more related acts or omissions under this Agreement shall not exceed Five hundred pounds . 9. INTELLECTUAL PROPERTY 9.1 The knowledge , techniques , and information NSB uses to solve problems and design solutions remains the intellectual property of NSB , and NSB reserves the right not to disclose any information other than administrative passwords to the client . 9.2 NSB reserves the right to suspend working on a problem , without warning , should he feel that the actions of the Client , their employees , or their sub-contractors , could compromise the confidentiality of his intellectual property . 9.3 The ownership of any network designed created for the client by NSB remain the property of NSB , and the client agrees not to re-use any such designs , without the written permission of NSB . 10 . TERMINATION 10.1 Notwithstanding the provisions of Clause 2 of these Conditions this Agreement may be terminated : - ( a ) By NSB forthwith on giving notice in writing to the Customer if the Customer shall fail to pay any sum due under the terms of this Agreement ( otherwise than as a consequence of any default on the part of NSB ) and such sum remains unpaid for fourteen days after written notice from NSB that such sum has not been paid ( such notice to contain a warning of NSB 's intention to terminate ) ; ( b ) By either party forthwith on giving notice in writing to the other if the other commits any serious breach of any term of this Agreement ( other than any failure by the Customer to make any payment hereunder in which event the provisions of paragraph ( a ) above shall apply ) and ( in the case of a breach capable of being remedied ) shall have failed to remedy the breach within 30 days after the receipt of a request in writing from the other party so to do ( such request to contain a warning of such party 's intention to terminate ) . 10.2 Any termination of this Agreement howsoever occasioned shall not affect any accrued rights or liabilities of either party nor shall it affect the coming into force or the continuance in force of any provision hereof which is expressly or by implication intended to come into or continue in force on or after such termination . 11 . MISCELLANEOUS 11.1 Neither party shall be liable to the other for failure or delay in the performance of any obligation under this Agreement ( other than any obligation to pay money ) if such delay is caused by circumstances beyond the reasonable control of the party so delaying and such party shall be entitled to a reasonable extension of time for the performance of such obligations . 11.2 Neither party may assign any of its rights or obligations under this Agreement without the prior written consent of the other party . 11.3 Neither party shall rely upon any variation of this Agreement or waiver of any of its terms unless contained or evidenced by letter or other document written on behalf of the other party . 11.5 This Agreement shall be subject to and interpreted in accordance with English law and any dispute or difference which may arise between the parties concerning this Agreement shall be determined by the High Court of Justice in England and NSB and the Customer submit to the exclusive jurisdiction of that Court for such purpose . 11.6 All notices which are required to be given under this Agreement shall be in writing and shall be sent to the address of the recipient set out in this Agreement or to such other address within the United Kingdom as the recipient may designate by written notice to the other . Any such notice may be delivered by hand or by first class pre-paid recorded deliver letter and shall be deemed to have been served if by hand when delivered if by first class post 48 hours after posting . </text>
<text id="bmbka" url="http://www.shakespeare-country.co.uk/swt.aspx?&cp=../swt/&cg=/&sim=&id=487&pagetype=27">
South Warwickshire Tourism/Industry News Please select from the press releases below to find out more . Enjoy the Complete Works in Shakespeare Country in 2006 South Warwickshire Tourism ( SWT ) has chosen the British Travel Trade Fair to launch a new colour newsletter for the travel trade featuring news on attractions and events taking place throughout 2006 , as well as updates on our hotels . The team will also be on hand to talk about these exciting developments including the eagerly awaited RSC Complete Works Festival and the re-opening of Hill Close Gardens in Warwick . 16 January 2006 </text>
<text id="bmwro" url="http://www.surf4wine.co.uk/Eben_Sadie.html">
Eben Sadie : winery profile by Richard Kelley MW It is fitting that Eben ' surfer-philosopher ' Sadie should name his wine after Lucius Junius Moderatus Columella , author of ' De Rustica ' ( ' On Country Matters ' ) , the most comprehensive account of Roman viticulture that dates back two millennia . The wine itself comes from seven different , unirrigated , fully controlled leased parcels across 52km of the Swartland . The area has a remarkably stable climate , allowing for consistent quality albeit with vintage variation . The distinction of Columella is derived from its terroir , the character of the vintage and a very hands off winemaking approach ( more time for surfing , or jetting off to Spain to prune vineyards , or to rack wine in his Priorato venture ) . Columella is primarily Syrah with 10 % Mourvèdre ( in 2000 ) . Five of the seven parcels are planted with bushvines and each site reflects a different soil profile , encompassing slate ( at Porcelain Mountain ) , coffee stone , an iron rich soil ( Rheeboksfontein ) , and granite ( Aprilskloof ) . To say selection is rigorous is an understatement . The vines are pruned to allow for around 25 hl/ha so as to encourage full phenolic maturity . Picking takes place in the early morning into 15kg lug boxes and refrigerated down to 5 degrees C for 24 hours , when a team of 20 women painstakingly select , often grape by grape , into a final selection bin . These are destemmed and about 50 % are crushed and allowed to cold soak for two to four days . All parcels are vinified separately . Fermentation takes place in open wooden vats with native yeasts using traditional pigeage . Post fermentation maceration lasts up to three weeks , depending on the vineyard . The grapes are pressed in a tiny basket press and transferred ( with buckets ) into oak barrels , not all of them new , where malolactic takes place and the wine is racked through a primitive system relying solely on gravity . After blending at about eight months , Eben allows for 24 months in barrel before bottling unfined and unfiltered . Just over 5,000 bottles were produced of the 2000 vintage , and in 2001 , the extremely low crop yielded just 15hl/ha . In South Africa , these are highly sought after wines , aided by a five star rating for the 2000 in the John Platter Guide . With the retail price the equivalent of £ 35 a bottle in one Cape Town wine shop , at around £ 26.00 in England , there is an obvious opportunity to re-export what little 2000 we still have available . With 2002 , we see the introduction of a white partner , Palladius , the successor to Columella . This wine is a revelation , tasting nothing like any other wine made in the southern hemisphere - Eben 's inspiration here being the white produced at Clos Mogador . It is a blend of Viognier , Chardonnay , Chenin Blanc and ( uncertified ) Grenache Blanc . The Viognier component was fermented as red wine ; on both skins and stalks , which explains the tannic edge . The Chenin is from 45 year old bush vines and the Chardonnay from 25 year old vines , making them some of the oldest in the Cape ( in 1981 there were only 19ha planted in the whole of SA ) . The wine took a year to complete fermentation , being in older wood for 16 months . Only eight barrels were made . The wine 's individuality has made it a challenge for a South African palate bought up on crisp , clean Sauvignon or over-wooded Chardonnay ; however we believe it will be Palladius that finally gives Eben the international recognition he deserves . </text>
<text id="bnaqt" url="http://jobsearch.localgov.monster.co.uk/getjob.asp?JobID=46663258&AVSDM=2006%2D08%2D10+09%3A45%3A00&Logo=0&sort=cp&pg=1">
My client , a leading player in the Financial Services sector , are currently seeking a German speaking Research Analyst for their Mergers & Aquistitions desk . Responsibilities Monitor M&A activity on a daily basis Identify M&A transactions through daily searches to ensure full market coverage Managing the input and updating of transactions Creating and updating company records and maintaining accurate information on database Providing weekly reports / monthly reports . Key requirements Excellent communication skills Excellent PC Skills Excellent problem solving skills and time management skills Flexibility Fluency in English and German essential A good understanding of Financial Markets and Customer Service skills are also desireable for this role . Excellent salary and bonus package . To apply for this excellent opportunity send a CV to Tommy McCool for immediate consideration . </text>
<text id="boplu" url="http://www.dw-perspective.org.uk/dwboard/messages/112.html">
For discussion of any area relevant to DW , marathon canoeing or this site . Re : We still finished - unofficial new record ! Posted by james treadgold ( james . t readgold@oxinst . c o. u k ) ( from 194.200.52.204 ) on 25 April , 2000 at 07:37 In reply to : We still finished - unofficial new record ! posted by Duncan Capps on 24 April , 2000 at 10:36 : Duncan : First congratulations on a new ( unofficial ) record . I saw you through Newbury on Saturday morning , thought you looked smooth and wished you well . Your time may not appear in the record books but you know what time you did , that should be all that matters . While I agree with a lot of what you have said , are you aware of the incident at Old Windsor wier that caused the race to be called off ? If not I suggest that we all wait for a public airing of the facts before we make too many judgements on what happened . From what I have heard and looking back on the information about the 1998 race when some boats did go over wiers I think DW had no option ( with the EA pressure ) but to call the race off once an incident had happened . I am not part of the DW organisation but as I understand it the race was not called of until 6am - after you had got on the water and started . Perhaps there should have been better co-ordination to advise you of the situation before you started but these things do happen . Let us hope that there is a speedy public discussion of what did happen and that new rules can be created to cope with this situation in the future if that is what it requires . * * * Follow-Ups : * * * [ Devizes to Westminster Discussion Area ] [ FAQ ] Post Follow-Up : Name : E-Mail : Subject : Message : : Duncan : : First congratulations on a new ( unofficial ) record . I saw you through Newbury on Saturday morning , thought you looked smooth and wished you well . Your time may not appear in the record books but you know what time you did , that should be all that matters . : While I agree with a lot of what you have said , are you aware of the incident at Old Windsor wier that caused the race to be called off ? If not I suggest that we all wait for a public airing of the facts before we make too many judgements on what happened . : From what I have heard and looking back on the information about the 1998 race when some boats did go over wiers I think DW had no option ( with the EA pressure ) but to call the race off once an incident had happened . : I am not part of the DW organisation but as I understand it the race was not called of until 6am - after you had got on the water and started . Perhaps there should have been better co-ordination to advise you of the situation before you started but these things do happen . : Let us hope that there is a speedy public discussion of what did happen and that new rules can be created to cope with this situation in the future if that is what it requires . </text>
<text id="botuf" url="http://www.landforsale-investment.org.uk/Plot-Sales.html">
It is important for investors who purchase lots for resale to carefully evaluate their personal financial positions before actually selling . It may be more advantageous to lease , rather than sell , the property . A lease develops certain advantages for both the landowner and the tenant . The owner benefits by securing an income stream into the future . In addition , at the expiration of the lease , the reversionary rights to the Plot Sales are retained , as well as any improvements made thereon by the tenant . Long-term land leases also provide the landowner with an asset-the lease-that can be capitalized on . By pledging the lease as collateral , the landlord can secure cash from a lender- tax-free cash that can be used to purchase additional investments . Thus , the landlord continues to own the leased land and can expand the investment portfo- lio accordingly . The primary benefit to a land-leasing tenant is leverage : the leasehold interest acquired under a long-term land lease can be pledged as collateral for a mortgage to construct a new building . With a loan sufficient to pay for the costs of construction , the developer may be able to leverage 100 percent and avoid investing personal funds in a project . In addition , the rent paid by the tenant for the use of the land is considered an operating expense in the year that it is incurred . Thus , by paying rent on land rather than owning it , a tenant is effectively gaining the benefits of " depreciating " the land over the life of the lease . Remember that Plot Sales is not specifically depreciable . </text>
<text id="bovad" url="http://www.expertcardirectory.co.uk/car-leasing-jamjar.htm">
Information for owners of cars and company vehicle drivers regarding car leasing through Jamjar This motoring concept was conceived in October 1999 and following £ 50 million of investment Jamjar turned into reality . The company are backed by Direct Line who are one of the largest car insurance companies in the UK and who in turn are members of the Royal Bank of Scotland Group . Car leasing and other related products are available via their website or through their telephone call centre and include new and used sales , loans , car leasing , insurance , and breakdown cover . The company aims at the personal car leasing market . Key product features include part exchange service should you wish to sell your vehicle , low initial deposit which is approximately 3 months rental , followed by fixed monthly payments typically lower than a loan and nothing to pay at the end . In addition to individuals this car leasing product is targeted at the company vehicle driver who has opted out of the company car scheme and chooses to receive an allowance . All the car leasing vehicles are UK specification and are sourced from Dixon Motors , a UK franchised dealer group . Potential customers can obtain car leasing quotes based upon whether the vehicle is kept for between 24 and 48 months and for mileages totaling between 8,000 and 40,000 miles . Leasing maintenance packages including servicing are also available , however , car insurance is not included and has to be arranged separately . Please note , conditions will apply for all of the leasing products and services mentioned above , please contact the company concerned for more information . Jamjar Car Leasing Website Address www . j amjar . c om Get a UK car leasing quote from the leading companies below </text>
<text id="bpedf" url="http://www.nta.nhs.uk/news/020624.htm">
Crack cocaine misuse is treatable - given the appropriate skills Crack cocaine misuse can be treated effectively , but drug workers need to be provided with the skills to support and promote change amongst misusers . That was the message from the National Treatment Agency at today 's crack cocaine conference in Birmingham . " Research from the USA and the UK demonstrates that cognitive behavioural therapy approaches with a sympathetic counsellors , combined with low waiting times and ongoing aftercare , has a dramatic effect , " explained Ms Dale-Perera , director of quality at the National Treatment Agency . " Fifty-six per cent of those who entered treatment for crack cocaine misuse in the UK in 1998 were still drug-free four years after treatment . The National Treatment Agency ( NTA ) is calling for an improvement in drug services to ensure that drug workers have the knowledge and skills to treat the growing population of crack misusers and poly-drug misusers . This will form part of the NTA 's wider strategy to improve the skills-base of drug workers through the development of standards and expansion of training . . Crack cocaine misuse is often accompanied by alcohol misuse and , increasingly , drug treatment services are having to respond to individuals misusing both heroin and cocaine . The interaction between different substances and their impact on users demands new approaches to treatment and the management of clients . The NTA is currently assessing the most effective forms of treatment and will publish the findings this summer . The Agency will then pilot new treatment models for crack cocaine later this year . Also this summer , the NTA will launch the equivalent of a national service framework for drug treatment services , setting out how services should be co-ordinated to obtain maximum benefit . For further details contact : Iris Steen , Communications Manager , NTA 020 7261 8620 email : iris . s teen@nta-nhs . o rg . u k www . n ta . n hs . u k Notes to editors The National Treatment Agency ( NTA ) was created by the Government with a remit to increase the capacity , quality and effectiveness of drug treatment in England . Alternative arrangements are in place for Wales and Scotland . There is evidence of an increase in demand for treatment for crack misuse : 4 % of those seeking treatment in 1998 identified crack cocaine or cocaine as their main drug . This increased to 7 % in 2000 . 18 % of those seeking treatment in 1998 identified crack cocaine or cocaine as a secondary drug . This increased to 24 % in 2000 . There are strong regional varieties in crack cocaine/cocaine as the main drug : Trent - 2 % London - 21 % Eastern region - 6 % . Crack misusers are less likely than other drug misusers to seek treatment . This is partly because drug treatment services have traditionally developed to treat opiate misusers . There is therefore a limited awareness of the effectiveness and availability of crack treatment services , and a lesser skill-base within the treatment workforce . In addition , black and minority ethnic misusers are also less likely to seek treatment . The combination implies that black crack misusers are disadvantaged in the current drug treatment system . Effective treatment 56 % of those using crack at the start of treatment in 1998 , were not using it four years afterwards Most effective forms of treatment : Psycho-social interventions including structured counselling that is action focused , emphasising ability to manage and control situation Effective treatments : Address the immediate crisis and plan for the long-term Offer a portfolio of different forms of treatment Have low waiting times - crack misusers will not wait for treatment and are difficult to manage on a waiting list . The NTA has established targets for waiting times , provided guidance on management and is providing support to service providers via the NHS Modernisation Agency to minimise waiting times Deal with relapse prevention and the triggers that lead to relapse Have open , flexible client/counsellor relationship is crucial . Counsellor needs to : Be empathetic towards clients ' situation Understand the chemical effects of crack ( including immediate effects leading to excited state , and longer term effects such as paranoia and depression ) . Needs to explain this to the client Be non-judgemental Understand the social background and related needs of individual clients Anti-depressants can support treatment for those with pre-existing depression that is not induced by drug misuse Community-based treatment is as effective as residential treatment for less chaotic users . Residential treatment appears to be more effective for those with complex , chaotic drug misuse Problems associated with crack cocaine misuse Distorts the brain chemistry and affects rational thinking and decision making abilities for months after usage . Drug treatment workers need to take this into consideration when planning treatment and assessing patient . Produces a state of excited delirium - extreme highs and lows . This can present itself as aggression . Induces depression , anxiety , paranoia Can lead to weight loss , chest problems if smoking crack , liver problems Many of those dependent on crack cannot sustain misuse on a legitimate income , its use is therefore associated with acquisitive crime . Crack can lead to anxiety and paranoia , giving rise to offences involving violence . You can not overdose on crack cocaine in the same way that you can on heroin , therefore a user can spend a lot of money on one binge which can last for days . If crack misuse is combined with alcohol a third addictive substance is created ( cocathalene ) , leading to an additional addiction . Polydrug misuse is emerging as a new problem particularly as traditional heroin misusers are also starting to misuse crack . </text>
<text id="bpjoh" url="http://www1.city.ac.uk/law/lawpages/Victim_Support.html">
Aims : To offer emotional support , information and practical help to people whom have suffered the effects of crime . Our Witness Service operates in every Crown Court and it is from this base that witnesses , victims and their families are given help before , during and after hearings . We also work for the rights of victims and their families and for greater awareness of the effects of crime . Number of Students Sought : Unlimited Nature of Pro Bono Work : Working in the Victim Support service by offering a range of services to victims of crime . Emotional support through listening and reassurance is coupled with information and practical assistance . Working for the Witness Service by offering emotional support and information about court proceedings to all witnesses , victims and their families . Nature of Commitment : Victim Support volunteers commit a minimum of 2 hours per week for 2 years . Witness Service volunteers give half a day per fortnight . Method of Reruitment and Qualifications : Call Anthony Forsyth on 020 7735 9166 and ask for information on volunteering . Please make it known that you are from The City Law School at City University . Training : The basic training in both services takes about 40 hours . It is delivered by the local service at times which take into account your other commitments . Contact Details : National Office Cranmer House 39 Brixton Road London SW9 6DZ Tel : 020 7735 9166 Fax : 020 7582 5712 </text>
<text id="bpsfu" url="http://www.industrialnetworking.co.uk/mag/v7-2/p7.html">
New products - May 2001 Pentium CPU for industrial tasks With an embedded 500MHz Pentium III processor , the CPU7630 Compact PCI single board computer from Datasound Laboratories meets the needs of a wide range of industrial control and processing applications . A major feature of the board is its multiprocessing capability created by using the modular approach of one of the two on-board PCI bridges . The modular bridge can be selected from either transparent ( the system master ) or non-transparent ( peripheral master ) . On board features include SSD with CompactFlash , two EIDE interfaces , keyboard and mouse controllers , two serial ports , two USB ports , two 10/100Mb Ethernet ports , SVGA controller , printer interface , watchdog timer and a real time clock . The 6U board is available in 4TE and 8TE thicknesses . </text>
<text id="bqbnl" url="http://www.cedr.co.uk/index.php?location=/news/archive/20040628.htm">
Overcoming hurdles in negotiation the Australian way 28 Jun 2004 On 2 June 2004 over 30 delegates attended a whole-day workshop at CEDR run by Professor John Wade . Lecturing at Bond University in Queensland , John is a leader in three fields in Australia : mediator , academic focussing on ADR , and law-lecturer . The workshop concentrated on overcoming common hurdles in negotiation . By not focussing solely on mediation , he stimulated an audience drawn mostly from the business sector with techniques for progressing and unblocking negotiations . Feedback from delegates was universally complimentary . Some particularly liked John 's checklists and crib cards . Others enjoyed insights into the psychology of negotiation . John writes regularly in the Bond University Dispute Resolution News e-mail newsletter which can be found at www . b ond . e du . a u/law/centres/drc/newsletter For information about other seminars or workshops aimed at the business sector , please contact Terry Jones at CEDR ( tjones@cedr . c o. u k ) who is always pleased to talk about cutting the cost of conflict and the use of mediation and related techniques in the business sector . </text>
<text id="bqccv" url="http://www.idler.co.uk/archives/?page_id=18">
A Country Diary : 14 The Idler 's Editor , Tom Hodgkinson , has retired to a Devon farmhouse to write a book . Here 's the fourteenth part of his diary . I'VE BEEN up in the vegetable patch a lot lately . I consider it to be a freedom-seeking , anarchistic activity and it 's largely enjoyable . It 's the first step on the road to self-sufficiency . However , there are two downsides , one is the sheer amount of hard graft and the other is the expense . Seeds , for starters , cost anything from one to two pounds per packet . I made the mistake of spilling my seed a little too promiscuously with some of the early sowings . I must have planted , for example , around 150 lettuces where there was room for only 15 to grow . That meant throwing away many many seedlings , which seemed like an awful waste . I 've also had to buy planks to build the raised beds , that was a cost of about fifty quid . Then there 's been the wheelbarrow , fork , spade , bamboo canes , bark chipping , black plastic sheeting , Growmore fertiliser , watering cans , sprayer , twine , little plastic pegs for showing you what 's growing where , black plastic sheeting for laying on the paths , bark chippings , gardening books , pencil , weedkiller ( organic ! ) , lime for liming the soil ( whatever that means ) . Luckily I live on a farm so the cowshit is free . Then there 's the enormous amount of time the whole project has taken . If you factor that in , these are going to be the most expensive potatoes ever eaten . I was not prepared either for how complicated the whole thing is . I was given a book called ' The Vegetable and Herb Expert ' to help me learn the ways of the veg , but it has confused me enormously . Every vegetable seems to be different . They require different kinds of soil , light , and watering . Some of them have to be grown indoors and transplanted . Some , thank God , are sown directly into the soil ( which has to be raked to fine " tilth " first ) . I got everything the wrong way round and grew the carrots from seed on my windowsill and then transplanted them . You 're supposed to have a greenhouse and also things called cloches . Then I found out that for some vegetables you 're supposed to grow them in a special seed bed , and then transplant them somewhere else when they start shooting through ! I mean , why bother moving them ? Well . I have now planted radishes , runner beans , tomatoes , carrots , parsnips , beetroots , leeks , kale , garlic , onions , salad onions , one single courgette plant ( donated by a neighbour ) , lettuces and a whole bed of potatoes which I painstakingly DOUBLE DUG ( yes , just when you think you 've got the hang of single digging they spring this on you - DOUBLE DIGGING ! ) and filled with cow manure . The radishes are doing well . I was complaining about the amount of expense and hard graft involved in all this to Penny Rimbaud , CRASS founder and experienced vegetable gardener . " But no ! " he said . " It does n't have to be . It can be cheap and easy . It 's called permaculture . And there are some gardeners who do n't even believe in digging ! | " Hmm , I thought . I 'd like to meet them . So I have started looking into permaculture , and it does indeed look fantastic . It 's all about using nature to make your life easier , letting nature do its thing in terms of planting flowers which keep pests down and the like . Rimbaud said also that he is of the " just bung it in and see " school which I also like the sound of . Permaculture is also all about sharing seeds and plants , thus cutting down on the expense and allowing you to avoid becoming a victim of the gardening industry . Apparently , the Henry Doubleday Institute runs seed swap programmes and also produces natural old-fashioned varieties that have been all but destroyed by the big commercial seed companies . The only permaculture-type thing I have done so far is to plant marigolds near the tomatoes . Apparently they keep slugs away or something . But expect more permaculture tips soon , as and when I learn them . About six weeks ago , I planted around 40 seed potatoes at neat intervals and they all appeared to be springing up beautifully . I have just showed them proudly to Alan , my mentor in this gardening experiment . He was initially impressed , but then looked a little closer . " The leaves are looking a bit yellow , " he said . I looked at them and had to admit he was right . We looked up " yellowing leaves " in my book . Definitely not good . Could be a bad case of Blackleg . " Strikes early in the season , " my book said . " Treatment : none . Lift and burn all plants . " More work . More expense . © 1993-2005 The Idler | Designed by Noble Savage </text>
<text id="bqswt" url="http://www.donhost.co.uk/support/index.pl?page=mailboxes">
A POP3 mailbox is essentially a password protected area on our server in which you store your mail . POP3 mailboxes can be created and configured using the Mailboxes page . The number of mailboxes you can create depends on your hosting plan . Creating A Mailbox To create a mailbox click ' Create Mailbox ' on the Mailboxes page . On the following screen enter the name for the mailbox , this is the part of the email address before the @ sign which should be no more than 20 characters long and may consist of lower case letters , numbers and ' . ' only . Enter a password to be used to access this mailbox which should be between 5 and 20 characters long and may consist of letters and numbers only . Click ' Create Mailbox ' to create this mailbox on the system . Changing A Mailbox Password To change the password that is used to access a mailbox , click the ' Change Password ' link corresponding to the mailbox in the listing on the Mailboxes page . Enter a new password which should be between 5 and 20 characters long and may consist of letters and numbers only . Click ' Change Password ' to update the mailbox password . Deleting A Mailbox To delete a mailbox , click the ' Delete ' link corresponding to the mailbox in the listing on the Mailboxes page . You will be asked to confirm this action before the mailbox is actually deleted . On confirmation the mailbox including its contents will be erased from the system . Accessing A Mailbox To collect email from a POP3 account you need to configure your email program correctly . The settings you need to configure are as follows . Incoming ( POP ) Server pop . d onhost . c o. u k Outgoing ( SMTP ) Server If you use our dialup service to connect to the internet , use : smtp . d onhost . c o. u k Otherwise use the SMTP mail server of the Internet Service Provider ( ISP ) that you use to connect to the Internet . This information can usually be found on your ISP 's web site or by contacting their support department . If your Internet access provider does not have an SMTP mail server for you to use , you can send mail through our SMTP server shown above provided your mail client supports SMTP authentication , authenticate with your mailbox username and password . Username The username for a mailbox can be obtained from the Mailboxes page Password The password you specified when creating the mailbox From Address This is the address shown in the ' from ' field of messages that you send . You should specify your new email address at your domain ( i. e . yourname@domain . c o. u k ) here in order to present the most professional image . How you configure these settings in your mail client will vary slightly depending upon which program you are using . Consult the documentation for your email software for more information . In circumstances where you do not have access to your mail client , you can use our web based email service at http://webmail.donhost.co.uk . Login with your mailbox username and password . See the webmail documentation for more information . Notes On Mailboxes Please be aware that as part of our system maintenance procedures , designed to ensure continuous provision of high quality service , we may delete read messages that are in excess of 1 month old and unread messages that are in excess of 3 months old from your mailbox . </text>
<text id="bqxqv" url="http://backstage.bbc.co.uk/news/archives/2005/11/backstagebbccou_2.html">
Web2.0 at d. c onstruct By Ben I 've just come off stage here at the d. c onstruct Web2.0 conference in Brighton . I was talking about backstage . b bc . c o. u k and it 's involvement in the Web2.0 community . I also gave the first public demo of the BBC Programme Catalogue project , which Matt Biddulph and Ben Hammersley are currently working on ( that project is hopefully due to be launched in beta in the new year ) . There 's a great crowd of people here at d. c onstruct â ' perhaps 80 or so . We 've been listening to speakers ranging from AJAX experts through to the representatives of other sites with a Web2.0 presence ( such as Simon Willison from Flickr ) . My presentation from the event is available here . 11 Nov 2005 02:56 PM Comments Post a comment 1. On 15 Nov 2005 03:11 PM , Nazim Beltran said : Great presentation . Did not get a chance to talk to you after your presentation but was pretty impressed with the Programme Catalog Project . </text>
<text id="brjyh" url="http://www.learningexperience.org.uk/learning_first.php">
Learning First APL can be used by anyone with formal qualifications , irrespective of when , where or why they were taken . APEL is often used by a wide range of adult learners , particularly those who have little or no formal education . AP(E)L is often used by the following groups of learners to help them to regain entry to formal learning or as a contribution towards a programme of study : undergraduate and postgraduate students people wanting to improve upon existing qualifications people who left courses before achieving the formal qualifications people who have been out of the education system for a long time and who may lack formal qualifications those wanting to re-train or change careers women returning to education unemployed people seeking accreditation for past skills or informal learning people who have disabilities of some kind minority ethnic groups and asylum seekers AP(E)L can be used in two ways . Provided that an applicant 's learning claim is formally recognised by an educational institution or employer , it can be used : To gain entry to a programme of study offered by the educational institution or to the employer 's training programme To gain credit towards the completion of a programme of study or training The concept of AP(E)L and who stands to benefit from it are hopefully now clear . The next two sections explain the practical considerations of AP(E)L , both for students/applicants and for tutors/employers . © Copyright Learning from Experience Trust , 2005 </text>
<text id="bsajb" url="http://www.chortle.co.uk/edfest2006/terrysaunders.htm">
Nathan Cooke is that boy , he likes music and draws on his bag in biro . He should be in Glastonbury discovering women , but is in fact on holiday with his mother against his will . To exact his revenge on her for keeping him from possibly kissing a girl for a first time he takes a vow to only speak in Pulp lyrics ... it works . YouTube teaser Review In Pulp Boy , young storyteller-stroke-stand-up Terry Saunders imagines a typically moody teenager who vows , for a while , only to speak in the lyrics Jarvis Cocker made famous . Under the lad 's bizarre logic , it 's a way of tackling the feelings of being displaced , misunderstood and unloved ­ and a rebellion of sorts against his killjoy mother who 's dragging him on a budget break to Spain while he 'd much rather be going to Glastonbury with his pals . While his self-imposed affliction could lead him to ridicule , it also leads him to the first flushes of love , sparking a holiday romance with a girl equally enamoured with the band . Saunders 's touching tale ­ which he reads unapologetically from a printout ­ is remarkable in the way he captures the feelings of being lost and alone when 15 , combining the certainty that you know all with the frustration the rest of the world does n't see it , for a reason beyond your comprehension . Our protagonist is at once romantic and crassly unsympathetic , seeing himself as a complex not contradictory . Saunders excels at recreating that maelstrom of conflicting emotions , speaking in the authentic tone of a defiant but confused young man . Pulp Boy is wonderfully written , poignant and quirky . It 's not a side-splitting romp , nor is it intended to be , but there are plenty of moments of rich humour , mostly in the struggle to find just the right lyric for the occasion . This is a fulfilling , grown-up piece of comedic artistry , warm , sincere and worthy of a wider audience . Steve Bennett Leicester Comedy Festival , February 2006 Your comments Terry is developing a great line in lovely , low-key whimsy , which really comes through in this show . Totally recommended . Tom H 03.08.06 </text>
<text id="bspmu" url="http://www.cps.gov.uk/legal/section21/chapter_f.html">
When is payment due ? | What sum is due ? | Who may enforce a confiscation order ? | The Director of ARA | The Magistrates ' Court | Magistrates ' power to obtain monies from banks and building societies | The Prosecutor | The decision to appoint an enforcement receiver | The role of third parties | Resolution of third party interests | The matrimonial home | Inadequacy of available amount | Discharging the confiscation order | Enforcement abroad | Procedure | Cases with the prosecutor holding lead responsibility | Determine whether an appeal has been lodged | Determine whether any monies have been paid | Send letter to the defendant | Determine defendant 's earliest release date | List an enforcement hearing in the Magistrates ' Court | Appoint Enforcement Receiver | Choice of receiver | Application to court | Content of witness statement | Hearsay evidence | Receiver 's powers | Address any third party claims | Appeals ( Procedure ) | Chase up enforcement receiver | Cases where the Magistrates ' Court holds lead responsibility | Useful Links | Further Information | Principle The purpose of a confiscation order , namely to deprive the defendant of the proceeds of his or her crime , is only fulfilled once the order is paid . A confiscation order is a debt owed by the defendant to the Crown . The defendant can choose to pay the order voluntarily , but if he or she fails to pay the order , compulsory enforcement action can be taken . All confiscation order payments , however enforced , go to the Treasury through the enforcing Magistrates ' Court . It is intended that CPS will play an active role in the enforcement of confiscation orders by making applications to the Crown Court for the appointment of enforcement receivers and/or by requesting the listing of applications at the Magistrates ' Court to activate the default sentence of imprisonment , if the defendant fails to pay the confiscation order . Top of page Guidance When is payment due ? The amount to be paid under a confiscation order must be paid on the date of the making of the confiscation order ( section 11 Proceeds of Crime Act 2002 ( POCA ) ) . If the defendant shows that he or she needs time to pay the confiscation order , the court may extend this time for payment for up to six months . If within the six months the defendant applies to the court for a further extension of this time and the court finds that there are exceptional circumstances , it can extend the time for a further six months . Before granting either an application for an extension of time or an application for a further extension of time , the Court must give the prosecutor an opportunity to make representations . Top of page What sum is due ? Interest is payable on the unpaid amount of the confiscation order , to encourage prompt payment . If the confiscation order is not paid by the due date , the amount of interest is added to the confiscation order and is treated as if it were part of the order ( section 12 POCA ) . The rate of interest is that specified in section 17 of the Judgments Act 1838 and is currently 8 % . Interest is not payable if an application to extend time to pay has been made by the defendant within twelve months of the making of the confiscation order and has not been determined by the court . Top of page Who may enforce a confiscation order ? The Director of ARA or the Magistrates ' Court is responsible for the enforcement of a confiscation order . In cases where the Director of ARA is not responsible for enforcing the order , the prosecutor has an important role in enforcement by applying to the Crown Court for the appointment of an enforcement receiver to realise the defendant 's assets , and/or to the Magistrates ' Court for an enforcement hearing , so that the court can activate the sentence imposed in default of payment of the confiscation order . Top of page The Director of ARA Section 34 of POCA requires the court to appoint the Director as the enforcement authority for a confiscation order if : the Court made a confiscation order after being asked to do so by the Director ; the Court made a confiscation order after being asked by the Director to reconsider the case where no confiscation order was made ; the Court of Appeal , or the Crown Court at the direction of the House of Lords , made a confiscation order as the result of an appeal by the Director ; before the Court made the confiscation order , the Director applied to the Court to appoint him as the enforcement authority for the order . A protocol will be agreed with ARA as to the types of cases , where ARA may be willing to act as the enforcement authority . The guiding factor will be one of complexity . It is anticipated that cases , which involve the realisation of substantial assets abroad would fall within this category . Top of page The Magistrates ' Court The Magistrates ' Court has the ultimate responsibility of enforcing a confiscation order and it will enforce the order as if it were a fine . Nevertheless , the Magistrates ' Court is not the preferred enforcer in cases involving the realisation of assets outside the jurisdiction , real property , or enforcing against property held in the names of third parties . Top of page Magistrates ' power to obtain monies from banks and building societies POCA makes specific provision for cash held by banks and building societies , in order to ensure that effective enforcement of confiscation orders occurs quickly . A Magistrates ' Court may order a bank or building society to pay the money to the Justices ' Chief Executive towards satisfaction of the confiscation order if any of the following conditions occurs : money is held by a defendant in an account which he holds with a bank or building society ; or money has been seized by a constable under section 19 of PACE 1984 and is held by a police force in an account which it holds with a bank or building society ; or money has been seized by a customs officer under section 19 of PACE 1984 and is held by the Commissioners of Customs and Excise in an account which they hold with a bank or building society ; and the money has been restrained by a restraint order ; and a confiscation order has been made against the defendant ; and the Director has not been appointed as the enforcement authority for the confiscation order ; and an enforcement receiver has not been appointed in relation to the money ; and the period granted by the Court for payment of the confiscation order has expired . If the bank or building society fails to comply with such an order , the Magistrates ' Court may order it to pay an amount not exceeding £ 5000 and this money will be treated as payment towards the confiscation order ( see section 67 POCA ) . Top of page The Prosecutor As the Director of ARA is only likely to be appointed in complex cases , perhaps involving foreign properties , and as the Magistrates ' Court is best equipped to recover sums of money from bank accounts or other straight forward cases , it will fall upon the prosecutor to enforce cases involving the realisation of the defendant 's assets . Fortunately , this task may be easily achieved by the prosecutor applying to the Crown Court for the appointment of an enforcement receiver ( see below ) . The prosecutor , rather than the Magistrates ' Court , should normally take primary responsibility in cases in which there is an existing restraint order and/or where the realisable assets include : Assets out of the jurisdiction ; Real property ; or Assets held in the names of third parties ( including limited companies ) . Note - This is an administrative arrangement rather than a legal requirement . Top of page The decision to appoint an enforcement receiver The prosecutor should consider making an application to the Crown Court for the appointment of an enforcement receiver wherever the realisable assets include assets out of the jurisdiction , real property or assets held by and/or in the names of third parties ( including limited companies ) . Another factor to consider is the cost of appointing an enforcement receiver . The CPS give the receiver an indemnity to make good any shortfall of the receiver 's costs after the defendant 's assets have been realised . Clearly , if the costs of hiring the receiver are likely to be in excess of the amount that is likely to be realised , a receiver should not be appointed . This may be a particularly pertinent issue in cases where there has been no restraint order , as some assets may have been dissipated prior to the appointment of the receiver . Although the application to court is made by the prosecutor , once appointed , the receiver is an officer of the court and will be separately represented on future hearings . See below for the procedure relating to the appointment of the enforcement receiver . Top of page The role of third parties Third parties have no right to be heard on a criminal confiscation hearing . The Crown Court will determine the defendant 's interest in property held by third parties , whether this property is held jointly , is a tainted gift , or is property otherwise held in the names of third parties . The Court at the confiscation stage is only tasked with determining the amount of the defendant 's free property , in order to calculate the recoverable or available amount in which to make an order for a sum of money and is not concerned with the property itself . Any determinations as to the defendant 's interest at that stage cannot be binding on third parties , as they are not parties to the proceedings ( see Re Norris [ 2001 ] UKHL 34 ) . Third party assets may be restrained and/or at the enforcement stage , action may be taken by a receiver to realise property , in which third parties may be claiming an interest . Third parties are entitled to have their claims determined by a court , although not as a part of the confiscation proceedings . Unlike previous legislation , POCA provides that the appropriate court will be the Crown Court . Top of page Resolution of third party interests The court may order anyone who has possession of realisable property to give it to the receiver and may order anyone who holds an interest in realisable property to pay the receiver the amount of any interest held in the property by the defendant or the recipient of a tainted gift . Once that payment is made , the interest of the defendant or the recipient of the tainted gift in the property is extinguished . Before such orders are made , the Crown Court ( Confiscation , Restraint and Receivership ) Rules 2003 ( SI 2003 No . 421 ) require that the defendant or the recipient of the gift must be given notice of the hearing and will , therefore , be able to make representations to the court . The defendant , or the recipient of a tainted gift , may apply to the court for an order that any property that cannot be replaced should not be sold . Such an order made under section 69(4 ) POCA may be revoked or varied . Section 62(3 ) POCA provides that any person affected by the action or proposed action of a receiver may apply to the Crown Court for an order giving directions as to the exercise of the receivership powers . The court may make such order as it believes appropriate . Any person affected by an order appointing or giving powers to a receiver may also apply to the Crown Court to vary or discharge the order by virtue of section 63(1)(c ) POCA . Section 69(3 ) POCA provides that in exercising the powers given to the court and/or to a receiver , the powers must be exercised with a view to allowing a person other than the defendant or a recipient of a tainted gift to retain or recover the value of any interest held by him ; in the case of realisable property held by a recipient of a tainted gift , the powers must be exercised with a view to realising no more than the value for the time being of the gift ; in a case where a confiscation order has not been made against the defendant , property must not be sold if the court so orders under subsection ( 4 ) . Top of page The matrimonial home A confiscation order is an order to pay a sum of money and may be enforced against any property held by the defendant , even if some of that property was legally obtained . Accordingly , the matrimonial home may be seized and confiscated , if the defendant fails to pay . Subject to the operation of section 31 of the Family Law Act 1996 , this may result in the eviction of other family members . The effect of section 69(3)(a ) POCA is to reverse the unreported case of Customs and Excise v A ( July 22 2002 , CA ) ; a case in which it was held that a property adjustment order could be made in family proceedings notwithstanding the provisions of the Drug Trafficking Act 1994 . The court may not , however , order the realisation of any share in the matrimonial home owned by the spouse or partner , unless it can be shown that the share was a tainted gift ( see R v Buckman [ 1997 ] 1 Cr . A pp . R . ( S. ) 325 ) . Top of page Inadequacy of available amount If the defendant or enforcement receiver applies to the Crown Court to vary the order the court must calculate the available amount . If it finds that the available amount is inadequate to pay the amount outstanding under the confiscation order the court may substitute the amount that it thinks just ( section 23 POCA ) . The court must disregard any inadequacy that it believes is attributable in whole or in part to anything done by the defendant to preserve property held by the recipient of a tainted gift in order to prevent it from being used to pay the confiscation order . Top of page Discharging the confiscation order In exceptional circumstances if less than £ 1,000 remains to be paid under the confiscation order and a Justices ' Chief Executive applies to the Court for the discharge of the order , the Court may consider whether the available amount is inadequate . If the Court finds the available amount to be inadequate to meet the amount remaining to be paid , and if this is due to fluctuations of currency exchange rates for foreign currency or due to any other reason specified by the Secretary of State , the Court may discharge the confiscation order . If only a small amount remains outstanding ( £ 50.00 or less ) and a Justices ' Chief Executive applies to the Court for the discharge of the order , by virtue of section 25 POCA , the Court may discharge the confiscation order . Top of page Enforcement abroad Realisable property is often held abroad . If a confiscation order has not yet been made , but any one of the five conditions for the granting of a restraint order have been satisfied and the prosecutor or the Director believes that realisable property is situated outside the United Kingdom , the prosecutor or the Director may send a request for assistance to another country via the Secretary of State to prohibit any person from dealing with realisable property and/or to sell realisable property and apply the proceeds in accordance with the law of that country ( see section 74 POCA ) . If the property is sold by the requested country , the money raised from that sale remains in the requested country , but the remaining balance of the amount ordered to be confiscated will be reduced by the amount raised by the sale . Top of page Procedure MAS have prepared a process map of the steps involved at the enforcement stage under the previous legislation . Enforcement . x ls The Crown Court will send the Notice of the Confiscation Order , Confiscation Certificate and Schedule(s ) of Assets to the relevant prosecutor and the defence solicitors within seven days of the confiscation order being made . The prosecutor should then contact the Justices ' Chief Executive for the Magistrates ' Court within fourteen days of receipt of Orders and Schedule(s ) from the Crown Court to inform him/her whether CPS intends to take the primary enforcement responsibility , or conversely whether there is an existing restraint order and that The CPS intends to take no enforcement action . The reasons for this should be detailed in a letter . The Justices Chief Executive for the Magistrates ' Courts will contact the prosecutor in cases that he/she believes that the prosecutor should take primary responsibility , if the prosecutor has not already made contact . Top of page Cases with the prosecutor holding lead responsibility Determine whether an appeal has been lodged Contact should be made with the Court of Appeal to confirm whether or not an appeal has been lodged . If an appeal has been lodged , then the enforcement process will be stayed pending the outcome of the appeal . Top of page Determine whether any monies have been paid Before taking the action outlined below , a telephone call should be made to the Magistrates ' Court to ascertain whether the defendant has voluntarily paid any of the sum due under the confiscation order . Top of page Send letter to the defendant Within fourteen days of primary responsibility being established , the prosecutor should send a letter to the defendant or defendant 's representatives indicating the preferred enforcement process ( voluntary payment or application for receiver ) and enclosing any relevant documents for signature ( e. g . authorities for accounts , policies , motor vehicles , jewellery etc ) . The letter will inform the defendant that failure to satisfy the Confiscation Order by the due date together with a refusal to consent to the preferred enforcement process may lead to the imposition of the default sentence . The debt will not be expunged after the default sentence is imposed . It cannot be remitted and will increase due to the accrual of interest at the relevant rate . Enforcement action to realise assets will continue even after the default sentence is imposed . Top of page Determine defendant 's earliest release date The prosecutor should obtain confirmation of changes in the defendant 's earliest release date and current location by faxing the Prisoner Release Service on 0121-6263474 . Where the defendant 's earliest release date post-dates the expiry of time to pay , the prosecutor should ensure that any enforcement action is completed before the defendant 's earliest date of release , and preferably before the expiry of time to pay , so that the magistrates ' court can issue a warrant of commitment in relation to any unpaid amount while the defendant is in prison . Top of page List an enforcement hearing in the Magistrates ' Court At the request of the prosecutor , the Magistrates ' Court should list an enforcement hearing to see why the default sentence should not be imposed . The prosecutor should supply the Court with copies of the relevant correspondence to and from the defendant showing its efforts to pursue funds . Once a default sentence has been imposed , it cannot be remitted and must be served in full , or until such time as the Confiscation order is satisfied , whichever is earliest . The incentive to the defendant is the fact that wilful refusal to co-operate is likely to lead to the default sentence being imposed and being served in full with the assets then be realised anyway . If there is no penalty for delaying the enforcement process defendants will continue to do so . At the request of the prosecutor , the Magistrates ' Court should issue a distress warrant or obtain a garnishee order as appropriate . The prosecutor should supply the Court with copies of the relevant correspondence to and from the defendant showing its efforts to pursue the particular assets and any other information or documentary evidence which the Magistrates ' Court might reasonably require in order to obtain a garnishee order . Enforcement hearings at the Magistrates ' Court should not normally be adjourned for more than two weeks to allow for the defendant to sign relevant documentation or four weeks to permit the defendant to arrange for the transfer to the Court 's bailiffs of chattel assets not already in the Crown 's possession . NB . It can be more expedient and cost-effective for the court rather than a receiver to realise certain chattels or cash . Top of page Appoint Enforcement Receiver There are three conditions that must exist before the court appoints an enforcement receiver : The court has made a confiscation order ; The confiscation order has not been satisfied ; and The confiscation order is not subject to appeal . Once these conditions are met , on the application of the prosecutor , the Crown Court may appoint a Receiver in respect of realisable property . Top of page Choice of receiver A panel of receivers will be appointed to act on behalf of The CPS on a range of confiscation related matters across the 42 Areas . Areas will take receivers from a national panel on a case-by-case basis ; geography does not impact on the selection and use of receivers . Receivers will be appointed to the panel after a rigorous tendering exercise and be experienced in this work and fully acquainted with CPS requirements . The project team , on behalf of the Service , will undertake the tendering and the setting up of the panel . The receiver 's letters of appointment will agree the fees they charge and the terms and conditions under which they will work as set out in the Framework Agreement . Top of page Application to court The Crown Court may determine the application without a hearing . The Rules state that unless the application to appoint the receiver is made ex parte , the application and witness statement must be lodged with the Crown Court and served on - the defendant ; the recipients of any tainted gifts ; and any other person whom the applicant knows to have an interest in any property to which the application relates , at least seven days before the date fixed by the court for hearing the application , unless the Crown Court specifies a shorter period . Top of page Content of witness statement The witness statement should give the grounds for the application including : an overview of the case and the circumstances giving rise to the need for the appointment of an enforcement receiver ; copy correspondence with the defendant inviting payment of the confiscation order ; full details of the proposed receiver and exhibit the letter of agreement setting out the basis for the receivers remuneration and operation and a consent letter from the receiver that he or she is willing to act in the case and abide by the terms of both the order and letter of agreement ; and to the best of the witness 's ability , full details of the realisable property in respect of which the applicant is seeking the order and specify the person holding that realisable property . A draft receivership order must accompany the witness statement . Top of page Hearsay evidence Hearsay evidence is admissible in restraint and receivership applications , however , Rule 39 of the Crown Court ( Confiscation , Restraint and Receivership ) Rules 2003 ( SI 2003 No . 421 ) provides that section 2(1 ) of the Civil Evidence Act 1995 does not apply to these proceedings . There is no duty to serve notice identifying the hearsay statements or of an intention to rely upon hearsay . Top of page Receiver 's powers The receiver gets his authority to act from the court . This is set out in the order appointing him ( section 51 POCA ) . It is extremely important that the order appointing a enforcement receiver is drafted so as to give the receiver the powers that he needs to operate to manage the assets . An ex parte application to appoint an enforcement receiver the Court cannot give the receiver power to manage the assets as in order to grant the receiver this power an opportunity to be heard must be given to all parties likely to be affected by the enforcement receiver order . On an ex parte order the receiver may be given the Power to take possession of property ; Power to start , carry on or defend legal proceedings in respect of the property ; Power to enter premises in England and Wales : To search for or inspect anything authorised by the Court ; To make or obtain a copy or photograph or other record as authorised by the Court ; To remove any property as authorised in the receivership order . After an inter partes hearing he may be given the powers set out above and also the Power to realise so much of the property as is necessary to meet the receivers remuneration and expenses ; and Power to realise so much of the property as is necessary to meet the receivers remuneration and expenses . Top of page Address any third party claims Please refer to the heading " The role of third parties " above . Top of page Appeals Any decision as to whether a prosecution appeal should be lodged , should be taken at level E , or by the head of the relevant trials unit . Prosecution appeals in respect of enforcement receivership include : Section 65 ( 1 ) to the Court of Appeal in respect of the refusal of the Crown Court to appoint and/or give powers to an enforcement receiver ; Section 65 ( 2 ) ( a ) to the Court of Appeal in respect of an order made by the Crown Court to appoint and/or to give powers to an enforcement receiver ; Section 65 ( 3 ) to the Court of Appeal where on a further application by the prosecutor , the Crown Court refuses to make an order ; Section 65 ( 4 ) to the Court of Appeal where on a further application the Crown Court has made an order ; and Section 66 to the House of Lords in respect of a decision of the Court of Appeal . In addition , the defendant and/or any person affected by the appointment or powers given to a enforcement receiver ; by the grant of powers to the receiver ; by the refusal or the giving of directions ; or by a refusal to discharge or vary the order , may appeal with leave to the Court of Appeal . Any party appearing in an appeal before the Court of Appeal may appeal with leave to the House of Lords . The appeal procedure may be found in a combination of POCA , the Criminal Appeal ( Confiscation , Restraint and Receivership ) Rules 2003 and in the Proceeds of Crime Act 2002 ( Appeals under Part 2 ) Order 2003 ( SI 2003 No . 82 ) . Notice of Appeal should be served within fourteen days , although application can be made for an appeal out of time . Top of page Chase up enforcement receiver Regular contact should be maintained with the enforcement receiver and reports obtained of the amounts recovered and of the remaining balance . This information should be entered on the Excel spreadsheet and submitted to Headquarters on a quarterly basis . Top of page Cases where the Magistrates ' Court holds lead responsibility Quarterly updates as to the value of assets realised should be obtained from the relevant Magistrate 's Court . The details should be entered in the Excel spreadsheet and forwarded to Headquarters every quarter whilst the order is outstanding . If the Magistrates ' Court appears to be making little progress , the prosecutor should consider asking the court to list a hearing to activate the default sentence of imprisonment . Alternatively , further consideration should be given to the appointment of an enforcement receiver , if appropriate . Top of page Useful Links Enforcement protocol Receiver Panel Letter of appointment of receiver Forms Draft Orders Pre-POCA confiscation guidance </text>
<text id="bssga" url="http://www.tropicalfishcentre.co.uk/Plants.htm">
More information on a DIY CO2 set-up What about plant fertiler ? Try the PMDD article Question - Why do most of my plants die in around a months time ? Why do I have to keep buying some more ? ! ! Is it plastic fantastic for the rest of my life ? Hey , calm down , you can keep some of your plants alive even though your aquarium is low-tech . Yeah , certainly some can fail , and make no mistake , plenty of mine have . I 'm not saying that unless you have a degree in botany you will be successful , but it 's a whole lot helpful if you have some knowledge about aquatic plants . Plants need these basic few things : A good substrate ( Substrate ? You what ? ) : To start off with , you 've gone and bought some nice , coarse , gravel - no wonder your plants have problems rooting . A good substrate is really needed , and 2-3 mm , low-calcium beach gravel available from your aquatic shop will be a good start . Using this sort of substrate , allows the roots to penetrate easily , and anchors the plant - a big no-no to coarse gravel , as the plants will just give up and go home . Well , they 'll die to be precise . Other types of substrate are : Laterite : Iron-rich clays , in a reddish colour , you can buy some in your local pet shop . Why bother ? You do n't have to , but this will add some iron into the substrate . You can get it in a pellet form , where you just mix it with your normal gravel , and then add a 100 % gravel top layer . The roots can go directly into the substrate . By doing this , you do n't have to use so much fertiliser in the water column , minimise the risk of algae breakouts . And does n't everyone just love an algae breakout ? Sand : Using sand as a 100 % substrate can be detrimental to the plants , as it can compact quite tightly , and therefore roots can rot away in dead patches . Nutrients : A good mixture is needed if the plants are to thrive . Iron is one of the important elements , for the green pigment of plants ( chlorophyll ) . Other elements include : Manganese , Zinc , Magnesium , Copper , Boron , Potassium , Sulfur , Phosphorous , Calcium , Nitrogen . No mean list there - You may thinking , " what am I meant to do ? Go and buy a bloody laboratory to check the amount of nutrients in my water ! ! " No , its not realistic is it . Many of those nutrients will be free in your tap water , and you can buy a liquid fertiliser , or 2 , to make sure you are adding enough . Plants will also use the Nitrates in your aquarium , which is no bad thing at all . You have got to try to balance the fertiliser with the plants , and it 's a bit of a tricky old situation . If you go and drown your aquarium with fertiliser , algae can come a ' calling . For instance , Iron content does n't need to be anymore than 1ppm . Now what about Photosynthesis - light/CO2 ? Do I need it in a aquarium ? Of course you do ! ! Every plant needs this little bit of magic . And how much CO2 will be needed then ? And light ? Now its 's getting a bit trickier , you start delving into the more advanced side of the hobby . The fish in your aquarium will give off CO2 ( respiration ) , but it wo n't be that much . If you are really going for a heavily planted tank with some tough plants , You could add some CO2 , and place some extra bulbs in your tank . And how much CO2 would be needed for the average plant ? 15 - 30 ppm wo n't go too far off . A bit different from iron 1ppm hey ! ! And you could use a CO2 injection system . No , n o , do n't all run away , if you know what you are doing , you wont kill all of your fish in one fell swoop . I 'm not going to try explaining everything on this page , as this can be quite complex . One thing is certain - do n't go out and buy 100 lamps if you have no CO2 system , as Photosynthesis will only occur if there is a balance between light/CO2 . Water conditions : Is every plant a hardy one ? Unfortunately , no . Some need quite specific conditions - say , the " Isoetes Setacea " , needs these properties for it to thrive : KH : 2-5 , pH : 5.5-6 , and needs a lot of bright light . Now if I had a tank with the specs , let us say - about 8KH ; pH 7.5 , and one bulb , theres not much chance of me keeping this plant alive for a very long time , no matter how much fertiliser , or good substrate I have . Although plants will use Nitrates as a source of food , and your tank has levels of 20-30ppm or over , some plants can be affected badly . Only 20-30ppm ? That 's not right surely ? I hear what you say , but if you look around for pics for heavily planted tanks , often there will be a smaller population of fish compared to the normal stocking level . Here 's some info on some tough , low light plants , that anyone should be able to keep alive : Java Fern ( Microsorium pteropus ) : PH : 5.5 - 7.5 Temp : 20 - 25C KH : 2 - 12 Java Fern is very popular , you 'll probably have bought some of this already . In the natural enviroment , it creeps over logs and rockwork , attaching itself by roots . Its often used to decorate bogword , where the Rhizomes can be secured by wire or a nylon thread , until they become firmly attached . It can grow in subdued light Hygrophillia polsperma : Substrate : Plain washed gravel PH : 6.5 - 7.8 Temp : 15 - 30C KH : 2 - 15 Specs look good eh ? And it 's a very attractive plant as well . It grows rapidly in a range of water conditions , perfect to start off your aquarium with . It would like quite a bit of bright light , but you can get by with 1.5 Watts per Gallon . When it actually hits the surface of the water , it will start to run horizontally , and runners will pop out . You could cut the tops and re-plant it , it helps to rejuvinate it . Vallisneria spiralis : Substrate : Plain washed gravel PH : 6.5 - 7.5 Temp : 15 - 30C KH : 5 - 12 This is a linear , grasslike plant , perfect for a backgroud aquarium . They can grow quite rapidly , and could reach up to 60cm . Its another plant that would do well in bright light , but will tolerant light shade . It can be quite indifferent to water quality in your aquarium - buy it ! ! </text>
<text id="btabi" url="http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=155&a=493">
The Draft Directive on the Supplementary Supervision of Credit Institutions , Insurance Undertakings and Investment 17/03/2001 INDEX Comments by the British Bankers ' Association PARENT UNDERTAKINGS OUTSIDE THE EUROPEAN UNION SCOPE OF SUPPLEMENTARY SUPERVISION CAPITAL ADEQUACY Member state Discretion Consolidated Sectoral Capital Tests Minority Interests Non Regulated Entities Accounting Consolidation Capital Adequacy Tests : Terminology INTRA GROUP TRANSACTIONS AND RISK CONCENTRATIONS APPOINTMENT OF A COORDINATOR AND COOPERATION/EXCHANGE OF INFORMATION AMONG SUPERVISORS AMENDMENTS TO SECTORAL LEGISLATION Comments by the British Bankers ' Association In view of the very limited response time provided by the Commission , these comments are of a preliminary nature . They are addressed to the latest text of the draft directive ( 5.1.01 ) though reference is made also to the consultation document published by the Commission in December . On a general level , we recognise the need to develop a supervisory framework for financial conglomerates . It will be important , however , that the proposed legislation should not impose disproportionate regulatory burdens on financial groups doing business in Europe , give rise to unnecessary bureaucracy or generate significant competitive distortions within the EU . PARENT UNDERTAKINGS OUTSIDE THE EUROPEAN UNION It is intended that the geographical scope of the directive should extend beyond the EU to include the parent company of a conglomerate so located . In cases where a third country supervisor does not apply rules equivalent to those in the draft directive , it is proposed that the relevant supervisor in the EU should apply the provisions of the directive to all regulated entities within the group . Another possibility broached in such circumstances is requiring the establishment of a holding company in the EU , facilitating the application of the provisions of the directive to all regulated entities in the EU . As noted , we recognise the case for the principle of ' whole group ' supervision . Also , we are mindful of the potential for competitive distortions where groups headed by undertakings outside the EU would not be covered by an equivalent regime . Nevertheless , we believe the EU should proceed with caution . In particular , we consider that EU supervisors should hold back from taking ' unilateral ' action in respect of groups whose parent undertakings are in jurisdictions following general Basel standards . Pending broader international implementation of a similar conglomerates regime , EU supervisors should adopt a flexible approach and seek to address any concerns on group wide prudential issues in cooperation with the relevant third country supervisors . It is essential that international groups should not be required to effect major structural changes , such as setting up an EU holding company , which may lack organisational or commercial logic . It is noted , in addition , that the draft directive ( Article 12.5 ) proposes that EU supervisors should have similar extended cross jurisdictional powers regarding consolidated supervision at the sectoral level . Again , we would urge that a cooperative model be followed , particularly vis-à-vis non EU supervisors embracing general Basel standards . SCOPE OF SUPPLEMENTARY SUPERVISION The proposed scope of supplementary supervision is less than clear in various respects : It is presumed that a ( mixed ) sub group of regulated entities within a group that , as a whole , does not qualify for financial conglomerate status would be subject to the provisions of the directive . However , this is not explicitly addressed in Article 3. It may be that Article 3.4 refers but the drafting of this paragraph is obscure . It is assumed that the main focus of the paragraph is what were termed in the consultation document ' mixed activity conglomerates ' ( i. e . those groups not meeting the 50 % balance of activity test ) . If this is the case , a clear statement to that effect would be helpful . Articles 4.1 and 5.1 imply that the rules on capital adequacy and intra group transactions and risk concentrations respectively apply only to the entities identified in Article 3.2 . Presumably , this is not the case . Article 3.4 suggests that entities/groups there addressed could also be subject to the provisions in question . As drafted , it is not clear that Article 3.2 covers regulated entities that are subsidiaries of another regulated entity which is at the head of a financial conglomerate . Article 12 ( 1 ) of Directive 83/349/EC does not refer to direct parent/subsidiary relationships but rather to circumstances where undertakings ' are managed on a unified basis ' etc . It is important that there is a clear statement of the scope of the directive and to facilitate effective consultation this should be provided at an early stage . CAPITAL ADEQUACY Member State Discretion Both the consultation document and the draft directive envisage national supervisors having considerable discretion as to which of the capital adequacy tests should be applied to different kinds of financial conglomerates . We agree with the comment in the consultation document ( Section V ) that supervisors should have the flexibility to elect for a methodology , or combination of methodologies , which makes most sense in the light of the structure of a particular group . We are , however , mindful also of the level playing field considerations raised in Section X of the document and endorse the view there expressed that it will be important to ensure that any differences in the methodologies used by national supervisors do not generate significant competitive distortions . Consolidated Sectoral Capital Tests In the case of a conglomerate headed by a regulated entity , the draft directive would appear to propose that the conglomerate capital test would be additional to the consolidated test at the sectoral level ( e. g . covering banks and other financial institutions ) . The rationale for the proposed approach is unclear . Provided supervisors are satisfied with the financial soundness of the group overall , with the distribution of capital across the group and , in particular , with the capital adequacy of each regulated entity within it , it is not apparent what purpose would be served by an intermediate test . The same applies for a group headed by a holding company . It is understood that the intention is that tests at the sectoral level would not be required for such groups and that this is designed to follow from Article 12.2 which clarifies that a company cannot be both a mixed financial holding company and have the status of a financial holding company that would trigger sectoral consolidated supervision . But for certain structures the Article 12.2 clarification would not rule out a sectoral capital test - for example where a mixed financial holding company had a regulated subsidiary which in turn headed a sub group of regulated entities . Clarification is requested as to the Commission 's intentions . Minority Interests Following the line taken in the consultation document , the draft directive ( Annex 1 ) proposes that , where a subsidiary has a capital surplus , minority interests in subsidiaries should only be included in a group 's capital on a pro rata basis . For reasons that have been rehearsed many times before in the debate on consolidation techniques , this is judged unduly restrictive . We consider that the logic of the proposed capital tests for conglomerates dictates that minority interests should be included in full in group capital . Non Regulated Entities Annex 1 of the draft directive envisages proxy solvency requirements being applied to non regulated entities for the purposes of the conglomerate capital adequacy test . We do not think this would be appropriate in all circumstances . In particular , we consider that unregulated non financial entities should generally be excluded from the group wide capital test - a possible approach referred to in the report of the Joint Forum . Accounting Consolidation In the report of the Joint Forum , it is noted that in some circumstances a consolidation approach allowing full offset of market risks across a conglomerate may give ' a more accurate picture ' and would therefore be appropriate . We agree with this and would ask for clarification as to the proposed treatment in the directive . A further point on the accounting consolidation method is that the sectoral solvency requirements to be used in the group capital test should be adjusted to take account of the fact that intra group items are stripped out . This should be mentioned in the description of the method in Annex 1. Capital Adequacy Tests : Terminology As noted in the consultation document , the Commission has not sought to develop new methods or tests for assessing the capital adequacy of financial conglomerates but rather has relied on those identified by the Joint Forum . However the methods identified by the Joint Forum ( building block approach , risk based aggregation etc ) have been given different names in the draft directive , which can only confuse . It would be helpful if a standard terminology could be maintained . INTRA GROUP TRANSACTIONS AND RISK CONCENTRATIONS The decision not to lay down quantitative limits on these items in the directive is endorsed . Whilst there is some concern that the exercise of member state discretion may generate competitive distortions , we agree with the comment in the consultation document that it would not be practicable to introduce harmonised limits at this stage . In terms of qualitative measures , the directive requires regulated entities to have adequate risk management processes and internal control mechanisms to measure , monitor and control intra group transactions within a conglomerate and risk concentrations at group level - with an obligation to report to supervisors at least twice a year . In order to limit the additional administrative burden arising , it will be important for reporting requirements to mirror as far as possible those already applying of the sectoral level . There are various references in the consultation document to the possibility of intra group transactions and the allocation of business between group companies being used as a means of ' supervisory arbitrage ' . Furthermore Annex 2 of the draft directive suggests that ' when a regulated entity is at the head of a conglomerate , competent authorities may apply that entity 's sectoral rules on intra group transactions and risk concentrations to all regulated entities in the group to avoid inappropriate arbitrage of sectoral rules ' . The text quoted immediately above is ambiguous in that it is not clear whether the posited supervisory action would be taken only as a response to suspected arbitrage or as a precautionary measure to ensure that arbitrage could not take place . Presumably , the Commission 's intention is the former , since the consultation document underlines the Commission 's view that it would not be practical to have harmonised cross sectoral rules ( for example ) on risk concentrations in the short term . Nevertheless , the text needs to be redrafted so that its meaning is not subject to more than one interpretation . Article 5 of the draft directive sheds little light on the nature of the risk concentrations that would be subject to regulatory oversight at the conglomerate group level . Article 1 ( definitions ) provides more of a flavour but the relevant text is fairly broad brush . Unless the framework is spelled out in a degree of detail at EU level , there will be a danger of quite material differences in how this part of the directive is implemented in individual member states . APPOINTMENT OF A COORDINATOR AND COOPERATION/EXCHANGE OF INFORMATION AMONG SUPERVISORS The coordinator would have an important role to play in facilitating effective supervision of conglomerate groups and the core tasks to be allotted to the coordinator appear reasonable . However , there is a danger that the additional layer of regulatory oversight could lead to a duplication of supervisory effort and confusion , visiting additional burdens on the groups concerned . A key responsibility of the coordinator should be to ensure that this is avoided . In this regard , the reference in the consultation document to the coordinator 's role in preventing ' unnecessary accumulation of information , duplication of work and the passing on of irrelevant information , all of which will result in inefficiencies and higher compliance costs ' is welcomed . Clarity as to the respective roles of the various supervisors with responsibility for a conglomerate or its constituent parts , and the avoidance of supervisory overlap , will be essential in order for the proposed model to work effectively . It will be particularly important to avoid a situation in which a variety of supervisors aspire to conduct whole group supervision . Whilst the consultation document provides some reassurance on this score , it would be desirable to include a suitable reference in the recitals to the directive . AMENDMENTS TO SECTORAL LEGISLATION Article 15.1 proposes that the provisions of Article 34.2 ( 12 ) and ( 13 ) of Directive 2000/12/EC be modified so that holdings in insurance undertakings , as well as those in credit and financial institutions , of more than 10 % of their capital and other holdings which , in total , exceed 10 % of a bank 's capital , should be deducted from the bank 's capital . We would comment that the prudential rationale for the deduction of holdings of less than 10 % of an institution 's capital , as originally espoused in the Own Funds Directive , is far from clear . Industry concerns on this treatment have been brought to the attention of the Commission . Pending a detailed review of this issue , we suggest that Article 15 should be dropped . </text>
<text id="btbbg" url="http://www.burpham.surrey.sch.uk/potter.html">
Harry Potter and the Philosopher 's Stone - J. K . R owling At Burpham , we believe that group reading has significant benefits for Literacy . So what better book to have a mini scheme of work for than JK Rowling 's " Harry Potter and the Philosopher 's Stone " , the most popular children 's book of our day . I have used this with Year 5 , but it could equally be used by Year 4 or Year 6 children , according to their reading ability . Feel free to copy the text and use in your school . Any comments/suggestions would be very welcome . Contact me at the school 's email address - head@burpham . s urrey . s ch . u k Chapter 1 Collect all the ways in which the author tells us how someone is speaking in the conversation between Albus Dumbledore and Professor McGonagall ( pages 13-16 before Hagrid arrives ) . Classify into 3 categories - adverb used , the verb itself , or both together . Imagine a baby is found on your doorstep one morning . What would you do , think , feel ? Chapter 2 List evidence , things she does and things she says , that show Aunt Petunia doesn 't like Harry . Harry has a chat with the boa constrictor . Write the conversation you would have with a monkey or chimpanzee in a zoo . Chapter 3 Write the letter that someone is trying to send to Harry . Chapter 4 We learn a lot about parents in this chapter . Write about yours - what do they look like , what do they do , what sort of people are they ? Chapter 5 Hagrid has a newspaper , the Daily Prophet . Write/draw a front page for an edition of this paper . Chapter 6 Draw the scene on Platform 9 3/4 Write a chapter from the " The History of Magic " . Design the packaging for " Bertie Bott 's Every Flavour Beans " or " Drooble 's Best Bubble Gum " . Write a chapter from the book " Great Wizarding Events of the Twentieth Century " . Chapter 7 Write out the whole of the ghosts ' conversation about Peeves . Write the legend of the third floor corridor on the right hand side . What has happened there in the past which has resulted in the risk of a very painful death for those who go there ? Make up a song about your school in the style of " Hogwarts , Hogwarts " . Chapter 8 Write a potion - ingredients , equipment , method - explain what it is for and when you would use it . Draw the inside of Hagrid 's home . Chapter 9 What is the naughtiest thing you have ever done deliberately ? Why did you do it ? What happened ? List advantages and disadvantages of being able to fly by broomstick . Chapter 10 Write out a proper , numbered code of rules for Quidditch . Write a mini-story about doing something " brave and stupid " . Chapter 11 Hagrid wears a coat made from animal skins . Set out points for and against killing animals . Chapter 12 What would you do if someone gave you a cloak of invisibility ? Chapter 13 What are the good points and the bad points about being able to live forever ? Chapter 14 Turn the passage , on page 169 , from " when they knocked on the door . . " to " . . . . t rusted enough to help him , apart from you . " into a playscript . Chapter 15 Centaurs and unicorns are mythical creatures . Make up a new one , describe it in detail and tell the story of how it came to be . Chapter 16 Each room has a challenge to be worked out and overcome . If there had been a room with your spell on it , what would the challenge have been , and how would Harry , Ron and Hermione overcome it ? Chapter 17 Discuss as a class As much money and life as you want . . humans [ have a ] knack of choosing precisely those things which are worst for them . Fear of a name increases fear of the thing itself . Truth is a terrible and beautiful thing . I shall answer your questions unless I have a very good reason not to . To have been loved deeply . ... will give us protection forever . It takes bravery to stand up to our enemies , but just as much to stand up to our friends . Review the whole book . Summarise the whole story in three sentences . Write a sentence about each main character , summing up what sort of person they are . Say what you particularly liked and disliked about it , giving reasons and lastly , give the book a mark out of ten overall . David Holmes - 1999 [ Home ] [ What 's New ] [ School Brochure ] [ SATS - OFSTED ] [ Policies ] [ Development Plan ] [ Children 's Work ] [ Kids Web ] [ Gallery ] [ Parents Support Group ] [ Diary ] [ For Teachers ] [ Links ] [ Kidzone ] [ Discussion Forum ] [ Sign Our Guestbook ] Page last updated Saturday , 31 August , 2002 Questions or comments related to this site should be emailed to Alex Laing </text>
<text id="bthkw" url="http://www.ttrb.ac.uk/viewArticle.aspx?categoryId=14542&taggingType=4&contentId=11208">
This report summarises research in primary science and ICT , including a focus on scientific literacy and children 's learning . The contribution and potential of ICT in primary science is evaluated . front cover The report identifies the need for focused and systematic research . It would be relevant for classroom practitioners , curriculum and software developers . The report is in five parts . Part one focuses on the debate about the meaning of scientific literacy and the question of what science should be taught in the primary curriculum . Part two focuses on the nature and value of primary science and includes some basic practical advice relating to the teacher 's role . Part three provides a survey of some of the research relating to children 's learning in science and begins to focus on the role of ICT . Issues of pupil age and gender as well as that of teachers ' science knowledge are identified with reference to research findings . A discussion of the implications of a constructivist approach to science is undertaken , highlighting the following challenges : ' One of the principal problems a teacher faces when using constructivist approaches to science teaching is the consideration of the unique ideas and experiences 30 individuals bring to each new science topic . How can the teacher elicit and challenge all of these to ensure that children develop the desired scientific concepts ? How can s/he ensure that each child is involved in science investigation ? How can s/he promote group work with limited science resources so that children can co-operate in science projects ? ' p 20 The view is presented that the primary curriculum should be made more exciting and comprehensible by focusing on observation and description , leaving explanation for KS3 . ' The author of this report strongly recommends that primary children should not be taught aspects of science that are too difficult for their teachers . ' p 18 Part four evaluates how ICT is currently being used to support primary science based on different modes of use . The value of spreadsheets and databases as tools in the primary curriculum is discussed as outlined in the following extract . ' Poole ( 2000 ) , however , warns that primary children have used spreadsheets without going through all the preliminary stages such as selecting axis scales and deciding on the best type of graph to explore patterns in the data . He suggests that the key issue is the pupil 's ability to handle and interpret the data , so that the use of ICT for graphing needs to be part of a well-coordinated programme for teaching graphical skills . When the use of spreadsheets is considered in terms of the skills , concepts and attitudes summarised in Table 2 ( see source ) , however , it appears that the only added value of using a spreadsheet in terms of primary science is the speed with which the data can be presented graphically . This could indeed prove to be problematic because if the children are not drawing the graphs for themselves , they may experience a ' conceptual gap ' between measurements and their graphical representation . McFarlane ( 2000b ) , however , argues that using the graphing applications of spreadsheets can allow data handling exercises to focus on presentation and interpretation rather than simple construction . The issue could be analogous to that of children using calculators routinely instead of mental arithmetic ' p23 The term ' drawing graphs for themselves ' may be the cause of confusion here . Rather than being an issue of the technology used to create a graph ( i. e . pencil , paper and ruler versus computer and software ) , it may be an issue of agency and experience in the design of graphs for differing purposes . Data logging is evaluated positively but issues of practicality are highlighted . CD-ROMs and the Internet are evaluated as a reference source . Examples of students ' evaluations are included . E-mail , digital cameras , PowerPoint and Interactive Whiteboards are evaluated as a means of communicating concepts and understanding . The view is expressed that ICT can realise its greatest potential as support for presenting scientific information . Control technology , simulators and virtual reality are evaluated as a means for exploration and investigation . The final part of the report identifies opportunities for research focusing in particular on the subject knowledge of the primary science curriculum , the match of software to science learning , the impact of using spreadsheets and the design of CD-ROMs . </text>
<text id="bthxs" url="http://www.rvrcd.co.uk/catalogue/walker/walkerreviews.htm">
Recorder players are most likely to be familiar with Robin Walker 's A Book of Song and Dance ( both the edition published by Forsyth Brothers and a recording of the collection have been reviewed in The Recorder Magazine ) pieces from which have been included in grade exam syllabuses . This CD provides an opportunity to hear two more of Walker 's recorder pieces together with a selection of other instrumental works composed during the last twenty years . Mr Gilbert dines at the Modern Hindu Hotel for descant recorder and piano was composed in 1994 to celebrate composer Anthony Gilbert 's 60th birthday . Lasting a little under three minutes and certainly an occasional piece , it is nevertheless a significant work , exploring textures and sonorities found also in Rite in A Book of Song and Dance composed at around the same time . His Master 's Voice for sopranino recorder and piano was written in 2001 for Walker 's composition teacher David Lumsdain on his 70th birthday . It proceeds in alternate calm and energetic sections that achieve further contrast by setting the recorder very effectively against the piano 's higher and lower registers . This and the above are two recorder works striking in their originality that leave you eager to hear more of walker 's work for the instrument . His years as a chorister in York Minster under the direction of Francis Jackson clearly gave Walker a strong sense of organ sonorities that is very evident in two impressive works for the instrument , Dances with Chant and Chorales and Invention . The earliest composition on the disc is Dance/Still for the unusual ensemble of flute , clarinet , violin , cello , guitar and percussion ( two players ) written in 1982 . Here , the influence on Walker of his study-visits to India is particularly evident in the rhythmic freedom and expressiveness . The piano piece At the Grave of William Baines was written for the centenary of the Yorkshire composer ( 1899-1922 ) . Lasting nearly fifteen minutes , it captures something of the spirit of Baines ' own works for piano , but also reflects Walker 's own response to the instrument . In total contrast is the work for pianola , Halifax . The composer describes it as a mechanical fantasy , and as the piece progresses , an almost musical box-like quality takes over from and contrasts with the heavier almost mill-like sounds of the opening . The most personal work on the disc is the short , single movement string quartet , I Thirst , from 1994 . Walker reflects on one of Christ 's Seven Last Words in a work of extraordinary atmosphere , beginning and punctuated with viola solos and making use of chords in quiet harmonics for the entire quartet . The performances by all involved are impressive . Walker 's music engages the performer ( and the listener ) and is clearly born out of inspiration rather than formulation . This is something in which Walker believes passionately and about which he has written in his contribution in the symposium Reviving the Muse , ( edited by Peter Davison and published by Claridge Press ) . A disc revealing a very original musical personality who composes for the recorder with the same creativity he brings to all his instrumental works - Andrew Mayes Review by Roger Carpenter in The British Music Society In an age when so much - too much - new music is hardly more than soulless note-spinning striving for effect , Robin Walker stands apart , a classicist at heart , who writes from the heart in a wholly contemporary idiom , at once distinctive and attractive ; in short , he is that modern rara avis , a composer whose music leaves you wanting to hear more . This impeccably produced , performed and recorded disc presents a conspectus of his developing work over two decades , ever subject to experiment and expansion into new fields , ranging from Dance/Still , the chamber piece which first brought him to public notice , to the neatly titled His Master 's Voice , a 70th birthday tribute to his composition teacher , David Lumsdaine . One could say that Walker is Robert Simpson 's natural successor in his command of large organic structure juxtaposing vitality with stasis in the true sense of both words . Like Roussel , following two study visits to India he has drawn inspiration , particularly rhythmically , from the culture of that continent , and overall one senses a French provenance ( or as the composer himself puts it , a precession ) , matching the timeless strength of Varèse , Messiaen and , to my ears particularly , Koechlin . Remarkably Robin himself is not familiar with Koechlin , yet he aspires to the same fusion of energy and stillness ; listen to the opening of the second part of Dance/Still - for a moment , it could almost be from Le livre de la jongle . This comes across again awesomely in the organ work , Dances with Chant and Chorales , filtered through the prism of childhood recollection as a York Minster chorister of the grandeur of the Minster organ 's Full Swell , and equally in the string quartet , I Thirst , with its clouds of natural harmonics . A further organ piece , Invention , takes as its starting point a very different French idiom , that of the virtuoso tradition of Dupré et al , not to mention Walker 's first and much revered teacher at the Minster , Francis Jackson , whilst Halifax , written by contrast unusually and most effectively for the pianola , reveals an unexpected vein of Yorkshire humour beneath its celebration of a native heritage . Living as he now does just across the Pennines in Lancashire , it is no surprise that Walker has responded to another more recent virtuoso tradition , that established by the Manchester-based recorder player , John Turner , for whom he has written ten pieces ; two of these , stunningly played , are included on this CD . Readers of British Music volume 21 may recall Robin 's account of how he grew up on the very road in York in which William Baines had lived and died at the age of 23 some thirty-odd years before . The spiritual affinity between these two composers of different eras goes far deeper than that simple coincidence , and the extended piano work , At the Grave of William Baines , is a direct response to a pilgrimage made to the grave on the 100th anniversary of Baines 's birth . There is no superficial homage here replete with quotations - this is pure Robin Walker , albeit infused throughout with Baines 's spirit , and the emotion is intense , filled with frustration , and ultimately resignation , at the waste of creative instincts thwarted by ill health . It is played magnificently by Peter Lawson . David Fanning calls Walker 's half-hour symphonic poem The Stone Maker " one of the outstanding achievements in British music of the 1990s " , and , objectively setting aside my own Bainesian associations , I cannot but think that the same applies to this piano work , at least as significant in the context of 1999 as was the impact of Baines 's own Paradise Gardens exactly eighty years previously . Where next ? There are hopes of a recording of Walker 's 40-part madrigal , recently broadcast by the Tallis Scholars on BBC Radio 3 , and meanwhile the world of opera beckons . Roger Carpenter This review was written by Roger Carpenter for the September 2003 issue of The British Music Society , and can be found on-line at http://www.musicweb.uk.net/BMS/index.htm The review can also be found on-line at music web </text>
<text id="btlmk" url="http://www.birdtours.co.uk/tripreports/Spain/andalucia6/and-oct-03.htm">
Participants : Ronnie Irving , Ian Kinley , Derek McAlone and Dave Thexton General Comments This was essentially a repeat of a trip that three of us ( RI , IK and DT ) had made in October 2002 though an additional five days allowed us more time at each site and an opportunity to explore a new area ( the plains of southern Badajoz ) . Although the dates of the two trips overlapped , we noticed a number of differences ; in particular , in 2003 we saw plenty of Purple Herons and Hoopoes ( we had none in 2002 ) while Los Lances ( Tarifa Beach ) was drier and less productive in 2003 than in 2002 . There were many highlights in two bird-filled weeks but perhaps the abiding memory will be of a spectacular concentration of thousands of Glossy Ibis , storks , egrets , waders and gulls packed into one wet rice field at Isla Menor . It was also interesting to note the change in birds during the course of our trip - in the space of two weeks Meadow Pipits and Serins had gone from non-existent to common while swifts had disappeared . As last year we failed to find any rare swifts at Bolonia or Zahara , nor could we find any Little Bustards despite plenty of easily visible Great Bustards on the plains of southern Badajoz . We also repeated what is fast becoming a traditional fruitless search for Azure-winged Magpies in the horrendous Algaida Pinewoods ( they were , of course , all over the place north of Seville ) . Weather Quite mixed with some cool days and a fair amount of rain . Low cloud , rain and unfavourable winds at times hampered raptor migration at Tarifa , which proved less spectacular than in 2002 . About half the time however , conditions were ideal ; dry , sunny , calm and warm but never too hot to bird . Birding light lasted from about 08.15 ( no need for early starts ! ) to about 20.15 . Travel We flew from Liverpool to Malaga with EasyJet ( £ 100 return , booked over the internet , very efficient and virtually hassle-free ) . At Malaga airport , we picked up a hired Renault Scenic Diesel from Record Rentacar ( 342 euros , booked over the internet with Carjet and again very smooth and efficient ) . Accommodation We had not intended to pre-book any accommodation , having had no problems in 2002 , but prior to departure we learned that the European Kite Surfing Championships were being held in Tarifa during our time there so decided to book somewhere for the first few nights . We need not have worried ; it turned out to be no busier than usual , there is ample choice of accommodation in the area and we would have had no difficulty finding somewhere . However , we did have problems later in the trip - we had to move earlier than planned from our hotel in Fuente de Cantos as it was fully booked the next night ( a Saturday , frequently difficult for accommodation in our experience ) and , more seriously , we could not find any accommodation at all in , or near , Grazalema . Half a dozen hotels were all full and a radical change of itinerary saw us abandon our stay in the mountains and return to Tarifa . Anyone planning to visit the Grazalema area would be well advised to book in advance , at least at weekends , and be prepared for hordes of noisy tourists . We stayed at the following : - Hotel Cortija Las Pinas ( set back from the N340 8km west of Tarifa ) www . c ortijolaspinas . c om Four nights , 37 euros per night per twin-bedded apartment . Very comfortable ( though the lack of air-conditioning may be a problem in hotter periods ) and well situated . No proper restaurant but there was plenty nearby . Hostal Alcazar ( just east of Chipiona alongside road to Sanlucar de Barrameda ) Two nights ; 30 euros a night per twin-bedded room . Comfortable ( with air-conditioning ) and good value . Much better than outward appearances suggested . No restaurant but bar open in evenings and owner did get up specially to make us coffee at 07.30 . Hotel El Desembarco at Los Palacios y Villafranca Avenida de Cadiz , 4. 41.720 Los Palacios . Sevilla . T el:95 581 31 00 Fax:95 581 23 23 . Two nights ; 35 euros per night per twin-bedded room . Very comfortable and excellent value . Good restaurant and bar . Sole drawback was difficulty with on-street parking ( we managed to pick up a parking ticket ! ) . Hotel Rural " La Fabrica " at Fuente de Cantos http://www.hrlafabrica.com or e-mail hotel@hrlafabrica . c om Two nights ; 55 euros per night per twin-bedded room . Very nice indeed if a touch pricey ( though not by British standards ) . Good restaurant . Excellent location with Great Bustards , Black Vultures and Black-bellied Sandgrouse just five minutes drive away and Black-shouldered Kites within 15km . Hostal El Pilar at Monesterio One night ; 36 euros a night per twin-bedded room . Comfortable and good value but a lot of traffic noise . Very good bar/restaurant just across the road under same ownership . The restaurant menu included some interesting English translations such as " scum " which turned out to be ice cream and " thorns to the brave sauce " which remained unidentified , as none of us was brave enough to order it ! Hotel Cordoniz ( alongside N340 just west of Tarifa ) La Codorniz , Carretera Nacional 340 - Km . 79 , 11380 TARIFA ( Cadiz ) http://www.lacodorniz.com Tel ( 34 ) 956 684744 Fax : ( 34 ) 956 684101 Two nights ; 70 euros per night per twin-bedded bungalow apartment including , unusually , continental breakfast ( served from 08.00 , allowing just enough time before it got light enough to bird ) . Superb , very comfortable , excellent restaurant and brilliant location . Easily the best place we stayed but reflected in the price . Itinerary October 1st : Malaga-Tarifa , with most of our half-day 's birding at or near Tarifa . October 2nd-4th : Based at Tarifa with birding done in Tarifa area , La Janda and Sierra de la Plata . October 5th : Tarifa-Bonanza . Birding at Bonanza Salinas and Laguna de Tarelo . October 6th : Birding at Trebujena Marismas , Algaida Salinas and Bonanza Salinas . October 7th-8th : Based at Los Palacios y Villafranca birding sites on the east bank of the Guadalquivir ( Brazo del Este/Isla Menor ) . October 9th : Los Palacios y Villafranca-Fuente de Cantos birding en route and , in evening , in the Fuente de Cantos area . October 10th-11th : Fuente de Cantos area including Sierra de Hornachos . Overnight at Monesterio on 11th . October 12th : Monesterio-Isla Menor . Full morning 's birding at Isla Menor before travelling to Grazalema . Failed to find accommodation and continued on to Tarifa . October 13th-14th : Birding in Tarifa area before travelling to Malaga late morning on 14th . Sites Visited : Los Lances ( Tarifa Beach ) Superb site that we accessed from several points between the harbour and the football stadium c2km to the north . Rather drier ( especially on our second visit ) than in 2002 with gulls and terns less obliging but different birds every day and well worth repeated visits . We found seawatching better from the beach near the football stadium and/or the causeway to the island than from the coast on the Mediterranean side of the fort , with birds closer and more numerous ( though you do lose the advantage of height ) . The dunes and rough grassy areas behind the beach were also well worth exploring . Lots of potential for a major " find " here . We also paid several visits to the inlet behind Playa Palomas , which is essentially an extension of Los Lances about 8km north of Tarifa . Though heavily disturbed by surfers , it did have an interesting tidal inlet with potential for good birds . Ciguena Negra watchpoint , Tarifa We did our raptor watching from here ( which we called Tarifa Observatory in our 2002 report ) . It 's the first viewpoint east of Tarifa ( take the first minor track left off the main road near the top of the hill going east out of Tarifa in the direction of an ugly-looking Cepsa compound/building ) . The small concrete observatory structure ( now sporting a nice drawing or two Black Storks on the wall ) is situated on a low foothill overlooking the town and coastal strip and affords some protection from the sun and wind . It is manned at times by locals monitoring the raptor and stork migration La Janda ( pictured right ) Excellent plains area , with reedy drainage ditches and rice fields , plenty of potential . Very drivable tracks , with no apparent access problems , at an elevated level to the surrounding fields . Huge numbers of White Storks assembling close to the tracks with raptors constantly in view overhead . Sierra de la Plata Area of low coastal limestone hills , not brilliant overall though well known for breeding White-rumped and Little Swifts . Bonanza Salinas Superb site with no access problems ( contrary to Gosney ) . Large concentrations of birds with a network of drivable tracks allowing very close views . Algaida Salinas Another excellent area . Again there are now no access problems ( see Gosney ) . An extension of the above site with similar birds though the generally deeper water resulted in a subtle difference in the species using the area . Trebujena Marismas An interesting area of farmland , marismas and lagoons situated between Trebujena and the Guadalquivir north of Algaida . We saw our only Pin-tailed Sandgrouse here . Laguna de Tarelo Good access and viewing , with easy White-headed Ducks . Algaida Pinewoods We again failed to see the promised Azure-winged Magpies here in two visits . Not an enjoyable area to bird due to local " boy racers " on motorbikes and inconsiderate 4xwheel drive owners haring along the rough track . May be more productive when quiet . Brazo del Este/Isla Menor Superb site that includes the area Gosney refers to as the Pinzon Marshes . Close range viewing mostly from a road level higher than the surrounding habitat gives wonderful views of the full range of marisma species . A must visit site , which , with reports of accessible areas of the Coto Donana being dry at the time of our trip , appears to have more reliable water levels than the Coto itself . In fact , water levels at Brazo del Este were considerable higher than in 2002 with no muddy margins for the Bluethroats or waders seen last year . However , more than adequate compensation was provided by the rice fields at Isla Menor where harvesting was underway and conditions were perfect for feeding waterbirds . Water levels are likely to change constantly - indeed they had done so between our two visits - and it 's a case of driving the network of tracks to find where the birds are concentrated . Make sure you continue beyond the Acebuche Bar onto the tracks towards San Vicente Ferrier - we found this the most productive area on our visit . Plains of southern Badajoz We birded the triangle formed by Fuente de Cantos , Llerena and Usagre but concentrated most on the area east of Fuente de Cantos where we were based and found it excellent for Great Bustards and Black-bellied Sandgrouse though we saw neither Little Bustards nor Pin-tailed Sandgrouse here . It was also pretty good for raptors with Black-shouldered Kite , Bonelli 's Eagle , Golden Eagle , Black Vulture , Hen Harrier and lots of Red Kites . Sierra de Hornachos Disappointing with far fewer raptors on show than the literature had led us to believe . For details and directions to all the sites we visited we used : - Gosney 's Finding Birds in Southern Spain . Though in most cases the directions and maps were up to the usual high standard , woefully out of date in places , especially re Bonanza and Algaida Salinas . Also in the section on Brazo del Este he regularly refers to Isla Major when he means Isla Menor . No updates were available on the Birdguides website prior to our trip . Where to watch birds in Southern and Western Spain by Garcia and Patterson . Excellent and up to date , with much useful background information . Birdwatching on Spain 's Southern Coast by John R. Butler . See also his website at www . d onanabirdtours . c om which gives some site information and includes up-to-date trip reports from the Donana area . Useful extra information was gleaned from trip reports available on the Birdtours website www . b irdtours . c o. u k/tripreports and we also looked at the Rare Birds in Spain website www . r arebirdspain . n et prior to our trip for info on latest rarities . We used the Michelin map 446 Espagne Sud Species List We recorded a total of 180 species , listed below . The figures in brackets represent the number of days each species was recorded e. g . ( 4/14 ) means that a species was seen on four days during our 14 day trip ( bearing in mind that the first and last days were really only half-days of birding ) and gives a crude indication of how easy each species was to see . More details are given of the rarer or more interesting species . Little Grebe Tachybaptus ruficollis ( 5/14)Records included 200+ at Trebujena Marismas on 6th Great Crested Grebe Podiceps cristatus ( 5/14 ) Black-necked Grebe Podiceps nigricollis ( 1/14 ) - 1 at Trebujena Marismas on 6th Cory 's Shearwater Calonectris diomedea ( 7/14 ) - Ever present off Los Lances often very close inshore , max . 100 on 14th . Also seen close in at Bolonia and Zahara de los Atunes . Balearic Shearwater Puffinus mauretanicus ( 5/14 ) - Birds seen heading into the Mediterranean every day off Los Lances with a maximum count of 50 ( including 33 in 30 minutes ) on 4th . Also seen off Zahara de los Atunes Gannet Morus bassanus ( 6/14 ) - Recorded every day off Los Lances Cormorant Phalacrocorax carbo ( 6/14 ) Night Heron Nycticorax nycticorax ( 7/14 ) - 1 juv at La Janda on 2nd ; 2 juvs at La Janda on 4th ; 8 at Laguna de Tarelo on 5th ; 1 juv at Trebujena Marismas on 6th ; c15 at Brazo del Este on 7th ; c30 at Brazo del Este/Isla Menor on 8th ; c10 at Isla Menor on 12th Squacco Heron Ardeola ralloides ( 4/14 ) - 1 at Laguna de Tarelo on 5th ; 40+ ( including a flock of 32 ) at Brazo del Este on 7th ; c30 at Brazo del Este/Isla Menor on 8th ; c20 at Isla Menor on 12th Cattle Egret Bubulcus ibis ( 14/14 ) - Widespread . Little Egret Egretta garzetta ( 12/14 ) - Widespread . Especially numerous at Brazo del Este/Isla Menor Great White Egret Ardea alba ( 1/14 ) - 1 at Algaida Salinas on 6/10 . Grey Heron Ardea cinerea ( 13/14 ) Purple Heron Ardea purpurea ( 3/14 ) - 1 at La Janda on 4th ; c6 at Brazo del Este on 7th ; 3 at Brazo del Este/Isla Menor on 8th Black Stork Ciconia nigra ( 8/14 ) - A flock of 23 over Tarifa on 1st ; 10 at La Janda on 2nd ; 11 over Tarifa on 3rd ; 1 at Bonanza Salinas on 5th ; 1 at Trebujena Marismas on 6th ; c30 at Brazo del Este on 7th ; 2 at Brazo del Este/Isla Menor on 8th ; 6 at Isla Menor on 12th White Stork Ciconia ciconia ( 9/14 ) - Widespread . Most notable records comprised many hundreds on the ground at La Janda on 2nd ( far fewer there on 4th ) ; 1000+ at Brazo del Este on 7th ; and 8th ; c1000 including hundreds in a field that was being ploughed ; lots roosting on nests at San Roque railway sidings at dusk on 12th . We saw none north of Seville though there were plenty of deserted nests . Glossy Ibis Plegadis falcinellus ( 3/14 ) - 3 at Brazo del Este on 7th ; 1000+ at Isla Menor on 8th ( a magnificent spectacle ) ; c300 at Isla Menor on 12th Spoonbill Platalea leucorodia ( 7/14 ) - 1 at La Janda on 2nd ; a flock of 22 over the sea at Zahara de los Atunes and 3 at La Janda on 4th ; 20+ at Bonanza Salinas on 5th with small numbers there on 6th ; 50+ at Trebujena Marismas on 6th ; small numbers at Brazo del Este on 7th ; c20 at Brazo del Este/Isla Menor on 8th ; just 1 at Isla Menor on 12th Greater Flamingo Phoenicopterus ruber ( 4/14 ) - 500+ at Bonanza Salinas on 5th ; several hundred at Trebujena Marismas and 1000+ at Bonanza Salinas on 6th ; c250 at Brazo del Este/Isla Menor on 8th ; c300 at Isla Menor on 12th Greylag Goose Anser anser ( 2/14 ) - 20 at Trebujena Marismas on 6th ; 50 at Isla Menor on 12th Wigeon Anas Penelope ( 2/14 ) Gadwall Anas strepera ( 3/14 ) Teal Anas crecca ( 1/14 ) Mallard Anas platyrhynchos ( 9/14 ) Pintail Anas acuta ( 4/14 ) Garganey Anas querquedula ( 1/14 ) - 1 drake at Brazo del Este on 7th Shoveler Anas clypeata ( 5/14 ) Marbled Duck Marmaronetta angustirostris ( 3/14 ) - 6 at Trebujena Marismas on 6th ; 20+ at Brazo del Este on 7th and 30 there on 8th Red-crested Pochard Netta rufina ( 2/14 ) - 3 at Laguna de Tarelo on 5th ; 6+ at Trebujena Marismas on 6th ; 1 at Isla Menor on 12th Pochard Aythea farina ( 1/14 ) White-headed Duck Oxyura leucocephala ( 2/14 ) - 13 at Laguna de Tarelo on 5th ( much lower numbers here than last year ) ; 41 at Trebujena Marismas on 6th Honey Buzzard Pernis apivorus ( 5/14 ) - 5 at Tarifa on 1st ; 2 at Tarifa and 1 at La Janda on 2nd ; 10 at Tarifa and 1 at Bolonia on 3rd ; 15+ at Zahara de los Atunes on 4th ; 1 at Tarifa on 14th Black Kite Milvus migrans ( 3/14)- 3at Tarifa on 1st ; 1 at La Janda on 2nd ; 2-3at Tarifa on 3rd Red Kite Milvus milvus ( 4/14 ) - 2 at Algaida/Trebujena Marismas on 6th ; quite common in southern Badajoz with up to 30 seen in a day Black-shouldered Kite Elanus caeruleus ( 2/14 ) - Up to 3 birds seen early morning and late evening 9/10-10/10 at site 14km east of Fuente de Cantos alongside road to Llerena . Egyptian Vulture Neophron percnopterus ( 3/14 ) - 3 at La Janda on 2nd ; 3 at Tarifa on 3rd ; 1 at Tarifa on 13th Videograb above . Black Vulture Aegypius monachus ( 2/14 ) - A wasp sting to IK brought about an unscheduled and fortuitous stop near Fuente de Cantos on 9th resulting in the sighting of 2 close range Black Vultures . Despite the insignificant/great* pain , IK stoically suffered in silence/yelped like a stuck pig* . A single east of Fuente de Cantos later the same day and 1 in the Fuente de Cantos/Llerena/Usagre triangle on 10th . * delete as applicable Griffon Vulture Gyps fulvus ( 10/14 ) - Recorded , usually in small numbers , at several sites , most notably 60+ at Algaida Pinewoods on 5th ; a migrating flock of 87 over Tarifa on 13th ; at least 80 at a carcase c12km west of Tarifa on 13th giving stunning close range views Short-toed Eagle Circaetus gallicus ( 6/14 ) - Our first was seen over the streets of Algeciras while we were in traffic on 1st , then seen at Tarifa whenever weather conditions allowed including 100+ on 3rd and 50+ on 13th . Also 10+ at Sierra de la Plata on 4th and smaller numbers Brazo del Este/Isla Menor Marsh Harrier Circus aeruginosus ( 8/14 ) - Particularly numerous at La Janda and Brazo del Este/Isla Menor where it was often possible to have 6 in the scope at once . One near Fuente de Cantos on 11th . Hen Harrier Circus cyaneus ( 1/14 ) - At least 2 ( a male and a ringtail ) east of Fuente de Cantos on 10th Montagu 's Harrier Circus pygargus ( 1/14 ) - 1 juv at La Janda on 2nd was our only sighting Sparrowhawk Accipiter nisus ( 10/14 ) - Records included 30 at Tarifa on 3rd Common Buzzard Buteo buteo ( 9/14 ) Golden Eagle Aquila chrysaetos ( 2/14)- 1 imm near Usagre on 10th and an adult at Sierra de Hornachos on 11th Booted Eagle Hieraaetus pennatus ( 10/14 ) - Seen at Tarifa whenever weather conditions allowed including 25 on 1st and 60+ on 3rd . Also c10 at La Janda on 2nd ; 10+ at Sierra de la Plata on 4th and small numbers at Bonanza Salinas , Sierra de Hornachos and Brazo del Este/Isla Menor . These included stunning views of a dark-phase juv perched in a tree at Brazo del Este that we showed to 2 members of the Gardia Civil who were taking a keen interest in the contents of our boot ! Bonellis Eagle Hieraaetus fasciatus ( 4/14 ) - Superb views of an adult being mobbed by a Marsh Harrier at La Janda on 2nd ; 2 adults near Usagre on 10th ; 1 near Grazelema on 12th , 2 adults c12km west of Tarifa on 13th Osprey Pandion haliaetus ( 3/10)- 2at Trebujena Marismas/Algaida Salinas on 6th ; 1 at Brazo del Este/Isla Menor on 7th ; 2 at Brazo del Este/Isla Menor on 8th Kestrel Falco tinnunculus ( 13/14 ) - However hard we looked all the Kestrels we were able to view closely turned out to be Common Hobby Falco subbuteo ( 3/14 ) - Lovely close views of 3 at Tarifa on 3rd ; 1 near Fuente de Cantos on 9th ; 1 over our hotel at Tarifa on 13th Peregrine Falco peregrinus ( 4/14 ) Red-legged Partridge Alectoris rufa ( 6/14 ) Pheasant Phasianus colchicus ( 2/14 ) Water Rail Rallus aquaticus ( 1/14 ) 1 heard at Isla Menor on 8th . Moorhen Gallinula chloropus ( 8/14 ) Purple Gallinule Porphyrio porphyrio ( 4/14)- 2 at Laguna de Tarelo on 5th ; very common and easy to see at Brazo del Este/Isla Menor , including 50 in one rice field on 12th Coot Fulica atra ( 6/14)- Scrutiny of the Coot flocks at various sites failed to reveal any Crested Coots Great Bustard Otis tarda ( 2/14 ) - 46 ( 3+24+15+4 ) in the Fuente de Cantos area on 9th and 26 ( 16+3+7 ) in the Fuente de Cantos/Llerena/Usagre triangle on 10th Black-winged Stilt Himantopus himantopus ( 6/14 ) - Present in good numbers at Bonanza Salinas , Algaida Salinas and Brazo del Este ; small numbers at La Janda and large numbers at Isla Menor including 1891 in just one wet field . Avocet Recurvirostra avosetta ( 4/14 ) - Present in good numbers at Bonanza Salinas ( 1000+ on 6th ) , Algaida Salinas and Isla Menor ( c200 on 12th ) Little Ringed Plover Charadrius dubius ( 4/14 ) Ringed Plover Charadrius hiaticula ( 11/14 ) Kentish Plover Charadrius alexandrinus ( 9/14 ) Grey Plover Pluvialis squatarola ( 5/14 ) Lapwing Vanellus vanellus ( 7/14 ) Knot Calidris canutus ( 3/14 ) Sanderling Calidris alba ( 7/14 ) Little Stint Calidris minuta ( 3/14 ) - Hundreds at Bonanza Salinas ; 50+ at Isla Menor on 12th Temminck 's Stint Calidris temminckii ( 1/14 ) - Super close views of 7 birds in a shallow corner of a wet field at Isla Menor on 8th . Water levels had been raised and birds had moved on by 12th . Curlew Sandpiper Calidris ferruginea ( 3/14 ) - 100+ at Bonanza Salinas ; 1 at Isla Menor on 12th Dunlin Calidris alpina ( 8/14 ) Ruff Philomachus pugnax ( 5/14 ) - 20+ at Bonanza Salinas ; 500+ at Isla Menor on 8th Snipe Gallinago gallinago ( 5/14 ) Black-tailed Godwit Limosa limosa ( 5/14 ) -500+ at Bonanza Salinas and c1000 at Isla Menor on 8th Bar-tailed Godwit Limosa lapponica ( 4/14 ) Whimbrel Numenius phaeopus ( 1/14 ) - 2 at Tarifa on 13th Curlew Numenius arquata ( 1/14 ) Spotted Redshank Tringa erythopus ( 4/14 ) -Records included 20+ at Bonanza Salinas and 10+ at Isla Menor Redshank Tringa tetanus ( 8/14 ) Greenshank Tringa nebularia ( 6/14 ) - Records included 20+ at both Bonanza Salinas and Isla Menor Green Sandpiper Tringa ochropus ( 8/14 ) - Seen at several sites including c20 at Brazo del Este/Isla Menor Wood Sandpiper Tringa glareola ( 3/14 ) - 10+ at Brazo del Este/Isla Menor Common Sandpiper Actitis hypoleucos ( 7/14 ) Turnstone Arenaria interpres ( 5/14 ) Pomarine Skua Stercorarius pomarinus ( 1/14)- 1 juv chasing an Audouin 's Gull off Los Lances on 3rd Arctic Skua Stercorarius parasiticus ( 1/14 ) - 1 off Los Lances on 4th Great Skua Catharacta skua ( 2/14 ) - Singles off Zahara de los Atunes on 4th and Los Lances on 14th Black-headed Gull Larus ridibundus ( 11/14 ) Slender-billed Gull Larus genei ( 2/14 ) -30+ at Bonanza Salinas on 5th but just 1 there next day Audouin 's Gull Larus audouinii ( 7/14 ) -Ever present on Los Lances including 71 on 3rd , 78 on 4th and 134 on 13th . Also small numbers on the beach at Atlanterra on 4th and 3 at Bonanza Salinas on 5th Lesser Black-backed Gull Larus fuscus ( 12/14 ) Yellow-legged Gull Larus cachinnans ( 12/14 ) Caspian Tern Sterna caspia ( 2/14 ) - 1 at Los Lances on 1st and 6 at Bonanza Salinas on 6 th Sandwich Tern Sterna sandvicensis ( 8/14)- Ever present in small numbers at Los Lances , with small numbers also seen at Bonanza Salinas Common Tern Sterna hirundo ( 4/14 ) - Up to 3 at Los Lances ; 1 at Bonanza Salinas ; 12+ at Trebujena Marismas Little Tern Sterna albifrons ( 1/14 ) - 10+ at Trebujena Marismas Whiskered Tern Chlidonias hybridus ( 4/14 ) - c20 at Trebujena Marismas/Algaida Salinas on 6th ; 2 at Brazo del Este on 7th ; 20 at Brazo del Este/Isla Menor on 8th and 2 there on 12th Black Tern Chlidonias niger ( 2/14 ) - 1 at La Janda on 2nd ; 10 at Trebujena Marismas on 6th Pin-tailed Sandgrouse Pterocles alchata ( 1/14 ) - 9 ( 8+1 ) at Trebujena Marismas on 6th Black-bellied Sandgrouse Pterocles orientalis ( 3/14)- 9 ( 6+3 ) in the Fuente de Cantos area on 9th and a total of 41 in the Fuente de Cantos/Llerena/Usagre triangle on 10th , 6 near Fuente de Cantos on 11th . Feral Pigeon Columba livia ( 14/14 ) Woodpigeon Columba palumbus ( 4/14 ) Collared Dove Streptopelia decaocto ( 11/14 ) Turtle Dove Streptopelia turtur ( 3/14 ) Barn Owl Tyto alba ( 1/14 ) - 1 hunting after dark in front of our hotel at Tarifa on 13th Little Owl Athene noctua ( 3/14 ) Eagle Owl Bubo bubo ( 2/14 ) - 2 heard calling at dusk at the " Black-shouldered Kite site " east of Fuente de Cantos on 9th with one heard there next night Nightjar sp . ( 1/14 ) - 1 flushed from the road near Bolonia in the dark on 3rd ; probably Red-necked but not positively identified . Common Swift Apus apus ( 1/14 ) - Several on first visit to Tarifa Pallid Swift Apus pallidus ( 3/14 ) - At Tarifa , 1 on 2nd ; 4 on 3rd and 3 on 4th Alpine Swift Apus melba ( 2/14 ) - 2 at Tarifa on 3rd Kingfisher Alcedo atthis ( 8/14 ) Hoopoe Upupa Epops ( 5/14 ) Small numbers in most areas . Green Woodpecker Picus viridis sharpiei ( 3/14 ) Great Spotted Woodpecker Dendrocopus major ( 3/14 ) Calandra Lark Melanocorypha calandra ( 3/14 ) - 3 at Trebujena Marismas on 6th ; 30+ in the Fuente de Cantos area on 9th ; small numbers in the Fuente de Cantos/Llerena/Usagre triangle on 10th ; 2 at Los Lances on 13th Short-toed Lark Calandrella brachydactyla ( 2/14)- 4 at Los Lances on 4th and 20 flying over on 14th Lesser Short-toed Lark Calandrella rufesc/ens ( 2/14 ) - 4 at Bonanza Salinas on 5th and 50+ in ) small flocks at Trebujena Marismas on 6th Crested Lark Galerida cristata ( 14/14 ) Thekla Lark Galerida theklae ( 3/14)- Common in suitable habitat Woodlark Lullula arborea ( 5/14 ) - Recorded at several sites and quite common in Sierra de Hornachos with plenty of song Skylark Alauda arvensis ( 5/14 ) Sand Martin Riparia riparia ( 4/14 ) Crag Martin Hirundo rupestris ( 3/14 ) - Quite widespread in small numbers Swallow Hirundo rustica ( 12/14 ) Red-rumped Swallow Hirundo daurica ( 5/14 ) - Widespread in small numbers right up to our last day House Martin Delichon urbica ( 6/14 ) Tree Pipit Anthus trivialis ( 14/14)- 2 at Tarifa on 14th Meadow Pipit Anthus pratensis ( 7/14 ) -All our sightings came after 7th . Yellow Wagtail Motacilla flava ( 10/14)- Records included 100+ in a ploughed field at La Janda on 2nd Grey Wagtail Motacilla cinerea ( 5/14 ) White Wagtail Motacilla alba alba ( 4/14 ) Wren Troglodytes troglodytes ( 1/14 ) Robin Erithacus rubecula ( 2/14 ) Black Redstart Phoenicurus ochruros ( 4/14 ) - Singles near Llerena on 10th ; Sierra de Hornachos on 11th and Los Lances on 14th Redstart Phoenicurus phoenicurus ( 2/14 ) Whinchat Saxicola rubetra ( 6/14 ) Stonechat Saxicola torquata ( 14/14 ) Northern Wheatear Oenanthe oenanthe ( 8/14 ) Black Wheatear Oenanthe leucura - 5+ in the Sierra de Hornachos on 11th and a single during our flying visit to Grazalema on 12th ( 2/14 ) Blue Rock Thrush Monticola solitarius ( 6/14 ) - Ones and twos at Tarifa and Sierra de la Plata Blackbird Turdus merula ( 3/14 ) Song Thrush Turdus philomelus ( 1/14 ) Mistle Thrush Turdus viscivorus ( 2/14 ) Cetti 's Warbler Cettia cetti ( 10/14 ) Fan-tailed Warbler Cisticola juncidis ( 14/14 ) Reed Warbler Acrocephalus scirpaceus ( 3/14 ) Subalpine Warbler Sylvia cantillans ( 1/14 ) - A male at Algaida Salinas on 6th Sardinian Warbler Sylvia melanocephala ( 12/14 ) Blackcap Sylvia atricapilla ( 2/14 ) Common Chiffchaff Phylloscopus collybita ( 4/14 ) Willow Warbler Phylloscopus trochilus ( 2/14 ) Firecrest Regulus ignicapillus ( 1/14 ) - 2 in the Sierra de Hornachos on 11th Spotted Flycatcher Muscicapa sriata ( 3/14 ) Pied Flycatcher Ficedula hypoleuca ( 1/14 ) Blue Tit Parus caeruleus ( 2/14 ) Great Tit Parus major ( 5/14 ) Long-tailed Tit Aegithalos caudatus irbii ( 1/14 ) Nuthatch Sitta europaea ( 1/14)- 2 in the Sierra de Hornachos on 11th Penduline Tit Remiz pendulinus ( 2/14 ) - At least 2 alongside the Rio Guadaira from the road to Isla Menor on 8th and at least 1 there on 12th . This was exactly the same spot where we found the species in 2002 . Southern Grey Shrike Lanius meridionalis ( 5/14 ) - Small numbers at La Janda and Brazo del Este/Isla Menor . Much commoner in Southern Badajoz with up to 10 per day seen . Jay Garrulus glandarius ( 1/14 ) Magpie Pica pica ( 4/14 ) Azure-winged Magpie Cyanopica cyana ( 3/14)- None seen in Algaida Pinewoods but widespread and numerous north of Seville . Several sizeable flocks seen but the largest gathering was at the Black-shouldered Kite site east of Fuente de Cantos where c200 were seen going to and leaving a roost . Chough Pyrrhocorax pyrrhocorax ( 1/14 ) - Several seen and heard whilst looking for accommodation in Grazalema Jackdaw Corvus monedula ( 2/14 ) Raven Corvus corax ( 5/14 ) Common Starling Sternus vulgaris ( 3/14 ) - Small numbers seen amongst the Spotless Starling flocks at La Janda and around Tarifa Spotless Starling Sturnus unicolor ( 14/14)- Very numerous House Sparrow Passer domesticus ( 14/14 ) Spanish Sparrow Passer hispaniolensis ( 5/14 ) - Small numbers found amongst the large sparrow flocks at several sites whenever we could be bothered to look through them Tree Sparrow Passer montanus ( 2/14 ) - 1 at Brazo del Este on 7th Rock Sparrow Petronia petronia ( 1/14 ) - 3 on wires below the dam at embalse west of Monesterio on 11th Chaffinch Fringilla coelebs ( 2/14 ) Serin Serinus serinus ( 4/14 ) - 1 at Bolonia on 3rd was our only record until we got north of Seville where they were more common . On our return to Tarifa on 13th/14th , they had become quite numerous with birds often passing overhead . Greenfinch Carduelis chloris ( 3/14 ) Goldfinch Carduelis carduelis ( 12/14 ) Linnet Carduelis cannabina ( 13/14 ) Corn Bunting Miliaria ( 11/14)- In sharp contrast to home , very common and numerous , often still to be heard singing Common Waxbill Estrilda astrild ( 6/14 ) - Flocks of up to 20 at Brazo del Este/Isla Menor and 1 at Tarifa on 13th/14th Golden Bishop Eupletes afer ( 1/14 ) - A stunning male at Brazo del Este on 7th Why not send us a report , or an update to one of your current reports ? </text>
<text id="btsmp" url="http://www.trainingservicesindex.co.uk/newsletter_aug04.html">
During July the most popular areas of training that we have received additional enquiries have been : Speedwriting Word/Excel/Access/PowerPoint Finance for Non-Financial Managers Redundancy Emotional Intelligence The popular ares of consultancy that we list are those areas that members have enquired about in particular , and it is always interesting , because each month the areas change . CIPD ANNUAL CONFERENCE & EXHIBITION October 27th - 29th , Harrogate - For all people management and development specialists - the latest thinking and business strategies , debate topical issues , explore new ideas , and network with your fellow professionals . For further information : training . h otline@cipd . c o. u k TRAINING SERVICES INDEX - PUBLICATION - Latest issue Work is well under way for the new edition of the Index , which will be published in early October . SNIPPETS - from providers : CAPITA : Bite-sized Learning Would Attract ' Switched Off ' People , Study Disadvantaged individuals from 19-24 years old are often " switched off " when it comes to learning , and thus ill equipped for the modern workforce . But they would be receptive to learning offered in bite-sized chunks in an informal environment and a short-term commitment , concludes a new study from the Campaign for Learning and Ufi . This so-called " rejector " group represents 16 percent of the population and is largely untouched by government learning campaigns , it claims . The research , entitled First Steps into Learning , recommends that the government speed up the creation of a credit framework which incorporates bite-sized learning , enabling the accumulation of credits towards recognised qualifications from a wider range of courses . It also recommends that a variety of learning styles be offered to the group . Increase in Stress-Related Absences is Cited by CIPD . Stress-related absences are on the rise within UK workplaces , but many employers are addressing the problem with training and other initiatives , according to the latest survey on employee absence from the Chartered Institute of Personnel and Development ( CIPD ) . The organisation 's fifth annual report on employee absence found that 52 % of surveyed employers reported an increase of stress-related absences due to workload , management , organisational change and other reasons . Efforts in response include management training , improvement of work-life balance , stress audits , and employee assistance programs . " A large part of managing stress is about good people management " says report author Ben Willmott " It is about providing employees with well-defined job roles , challenging , but realistic targets and the support , training and recognition to help them achieve these targets " he says . Legislation Employers face hefty fines or even imprisonment if they fail to comply with the new duty to manage asbestos . What 's more , staff , former staff and even contractors could bring compensation claims for personal injury caused by exposure to asbestos . Company directors run the risk of being prosecuted if an offence has been committed with their consent , connivance or neglect ( pleading ignorance will be no defence ) . If the employer is the person responsible for the maintenance or repair of non-domestic property ( the ' relevant duty holder ' ) it must take active steps to identify , record and manage any asbestos that is or may be p resent . This duty will be enforced by HSE inspectors and any breach is likely to be treated very seriously - premises may even be shut down if an asbestos hazard is identified . Under the Control of Asbestos at Work Regulations 2002 ( which should have been complied with by 21 May 2004 ) this ' duty to manage ' requires duty-holders to pay for making safe or removing any asbestos that is in a poor condition or is likely to be disturbed by planned building work or routine maintenance . If it can be established that the asbestos is in a sound state and not likely to be disturbed , then it can be left there , although its location must be recorded and the record retained on site for the lifetime of the building . From 1 October 2004 new forms will have to be used where the questionnaire procedure is used in cases of disability discrimination . These can be found in the Disability Discrimination ( Questions and Replies ) Order 2004 . Currently employers have to respond to such questionnaires ' within a reasonable period ' ( unless they have a good excuse ) to avoid a tribunal drawing an adverse inference from the failure to reply . As of 1 October employers will have to respond within 28 days of receiving such a questionnaire ( unless they have a reasonable excuse ) to avoid any such inferences being drawn . Holiday pay Is a worker who has n't taken all the holiday to which he is entitled during a year entitled to pay in lieu of the untaken holiday ? The answer under the Working Time Regulations 1998 ( WTR ) is generally ' No ' . But , in Canada Life v Gray and Farrar , the Employment Appeal Tribunal ruled that , on termination , workers are entitled to backdate their claims for holiday pay to when the WTR were introduced ( 1 October 1998 ) . Whilst under the WTR no entitlement to holiday can be carried forward from one year to the next , post termination the position is different . The WTR specifically provide , on termination , for a payment to be made in lieu of leave to which a worker was entitled , but had not taken . Provided the claim is made within 3 months of termination , this can include unpaid holiday dating back to October 1998 ( regardless of whether the worker actually took holiday or not ) . Training Challenge - Speedwriting This is a topic that we have had before , but our top enquiry this month was on the subject of speed writing , so worth looking at the subject again . Speedwriting is an area that there should be a lot more choices available . The leading secretarial college that used to bombard the London Underground tubes with posters , which enabled you to try your hand at reading and translating Speed Writing messages has long disappeared . A shame it passed the time on the tube ! Now a thing of the past , yet we get a lot of enquiries about the subject . I have tracked down a distance-learning course on the subject . Distance Learning Foundation PO Box 2874 , Brighton BN1 2NX info@speedwriting . c o. u k Tel : 01273-773233 SAMPLE PAGE OF COURSE ( See for yourself ) http://www.speedwriting.co.uk/sample.htm Speedwriting Shorthand for Business and Notetaking . Correspondence course . You work at your own speed , in the time that you have available . Duration - participants will take between 8 and 12 weeks to learn the complete system . You are assigned your own personal tutor . Your tutor will work with you to make certain that you learn Speedwriting Shorthand . Your tutor will check your exercises , answer your questions , and show you in a practical way , stage by stage , how easy it is to learn speedwriting . However , most people are far too busy to cope with the discipline of a correspondence course . The other alternative is to undertake a short course on Teeline Shorthand , which uses the alphabet as its base , and is therefore fairly quick to learn . With centres all over the country try Pitman Training - covering flexible training to fit in with office or leisure hours . Good reputation or call/write to the following for your nearest centre : Pitman Training Group plc Sandown House Sandbeck Way Wetherby LS22 7DN Tel : 01937 548500 Fax : 01937 585 118 Website : www . p itman-training . c om July 2004 - TRAINING HIGH SPOT SCOTWORK LTD - Negotiating Skills Tel : 01252-862400 Website : www . g bscorporate . c om Email : theteam@gbscorporate . c om The Index has comprehensive information on this four day course , derived from appraisals submitted by an operations and business project manager , a commercial executive , a buyer , an operations manager , a UK amusement business manager , sales managers , a commercial team leader , a gas installation manager , an oil terminal supervisor , and a business development executive , in the wide age range 25 - 51 . The course aimed to improve participants ' negotiating skills , to establish a framework for understanding the negotiating process , to identify negotiating skills , and to provide an opportunity for delegates to practice negotiating in a non-risk environment . Objective achievement was considered good or very good . Two tutors appear on each holding of this course , names have included John McMillan , Richard Rowland , Chris Mitchell , Sue Paradise , Stephen White , Mike Roberts , Mike Hatton , Keith Risk , David Perry , Robin Copland , Mike Barrier , and David Durrant . Their standard was high , and each was well received . Delegates found most useful the coverage on learning the structured ( 8-step ) approach to negotiating , the different negotiating styles and their pitfalls , the video-taped role-playing of negotiations in areas ranging from prices to wage disputes , recognising the need to " trade " in any negotiation , the coverage on the way out of an argument , the vital importance of thorough preparation for negotiations , case participation and team evaluation ; and the abundance of practical advice . One delegate stated , " This is a very well-developed course , and the standard consistently good . " The only criticism was that they would have liked more time in which to practise negotiating . Those who have to undertake negotiating at work were thought to be the most suitable delegates , especially those involved in buying or selling . Course administration was very good , 10 - 12 delegates attending . Delegates comments : " Educational , relative to role and inspiring ! " " The long term benefits to the company - make this a very cost effective course " " Essential to all people who negotiate for the company or with employees of the company " " Both tutors fully in tune and very experienced in all aspects of negotiating . " </text>
<text id="btsxl" url="http://www.mediaweek.co.uk/search/index.cfm?fuseaction=details&nNewsID=560539">
ITV , National Heart Forum , NatMags , The Independent , KPMG , Thomson Intermedia , Benchmark Capital , Cobra Beer ITV is believed to be close to appointing its first director of advertising strategy . Nicky Buss , UK client services director of WPP customer marketing giant Research International , has been linked to the role . She was global strategic planning director of WPP 's Red Cell Network . The National Heart Forum , an alliance of health , medical and consumer organisations , yesterday ( Monday ) said it was preparing an application for a judicial review against the broadcast regulator , Ofcom , claiming its crackdown on junk food advertising does not go far enough . The heart charity alleges that it is unlawful and unfair of the regulator to exclude bringing in a 9pm watershed for junk food advertising in its ongoing consultation from " full and fair consideration " . NatMags has appointed Niall Hogan , former sales director at Emap Interactive , as its first digital ad director . Hogan joins ahead of the launch of websites for Country Living , Cosmopolitan and Good Housekeeping and six category-branded websites . The Independent 's sales for the 16 May issue , guest edited by Bono , were up by more than 30 % , producing its best sale since 9/11 , according to editor-in-chief Simon Kelner . The paper has also partnered with Renault and Rough Guide travelbooks to produce a guide to Mediterranean festivals , which it will give away on Saturday . Spending on digital and direct media rose by 22 % year on year in the first three months of 2006 , with the two media now accounting for a quarter of all ad media spend , a study by KPMG and Thomson Intermedia claims . Though traditional media spend fell year on year for the first time in three years , overall ad spend was up 3.2 % . Benchmark Capital , the venture capitalist behind Irish pay-TV group Setanta , eBay , Betfair and MySQL , has invested £ 8m in social networking site Bebo . c om . The site , a rival to News Corp 's MySpace . c om , will use the funding to expand the US team and open a London office . Cobra Beer is to target female beer drinkers with a £ 1m integrated ad campaign for its Cobra Lower Cal brand . The campaign , which breaks on 29 May , will run in magazines including Grazia , OK ! and Glamour as well as supermarket titles and websites . </text>
<text id="btvti" url="http://www.i-dj.co.uk/artists/artistspage.php?ID=204&page=3">
' The scene was about a young man in a club who makes a call to his girlfriend , ' explains Jon . ' I gave John the music and the whole idea inspired him to think of a time when he 'd been in the garage , the phone had gone and a woman had asked him for help , but he was on his way to work and could n't do anything . The resulting track is a melancholic folk song about how the wire enables you to say no to human suffering . I like the way that idea randomly flowed and came out of another project ; that 's pretty much the history of Coldcut . ' One path Coldcut have consistently followed is that of dissent . Eloquent and well read , Matt and Jon have always made their opinions heard . Back in 2001 they released ' Re : V olution ' to coincide with the General Election and drove a double decker bus around Westminster ; a commentary on politicians promoting themselves like pop stars . This album 's no different . Topics range from Roots Manuva 's criticism of ' plastic Gods ' to Annette Peacock 's musings on CCTV surveillance and 21st Century paranoia . Even their new website features a downloadable set of politically satirical Top Trumps cards . Rather than being driven by a revolutionary zeal , though , the pair are happy simply to comment . In fact , Matt is keen to point out that ' hate ' does n't even enter his vocabulary . ' I 'm not anti anything . If I do n't like something I just say I ca n't love it . We 're pro people . ' ' Turning negative into positive sounds like a hippy thing , ' adds Jon , ' but it 's about engagement and being part of the village community . Communication is important . ' Thankfully that message is evident in the music . Eschewing lofty ideals for damn good tunes , Coldcut have made an album that seeks pleasure rather than conversion . While tracks such as Saul Williams ' touching reflections on the diminishing role of manhood are overflowing with sentiment ( ' I ca n't play that track without blubbing , ' admits Matt ) , at their core is an energy certain to detonate any dancefloor . ' Activism means taking action and being personally responsible , it does n't necessarily mean going around and telling people what they should do , ' comments Matt on Coldcut 's reluctance to release a series of didactic polemics . ' I get very frustrated . But I do believe you can cure a lot of these problems with some pragmatic sensibility , ' continues Jon . ' We 're all lazy fuckers , but we 're equally clever and we could design things to sort our shit out if we thought about it beforehand . ' Now fully in theorist swing Matt is on a roll . ' Fela Kuti said music is the weapon of the future , but I would say art is the weapon of now . It is the future . New types of weapons are available if we 're prepared to find new ways of effectively doing battle without reaching for the sub-machine gun . When I hear the word gun I reach for my culture , ' he then adds , cleverly twisting a famous quote by Goering . Green living Like many eco-sensitive artists trying to operate within the record industry , Matt and Jon are constantly called upon to compromise their ethics . From taxi rides necessitated by urgent photo shoots to long haul flights for live shows in Japan , they struggle with a series of daily dilemmas . </text>
<text id="bukcu" url="http://www.ukpages.freewire.co.uk/buying-property-continent.html">
mainland Europe . Before you know it you could be rubbing shoulders with Claudia Schiffer in Majorca , Elton John in the south of France or Madonna and Cliff Richard in Portugal . But if you 're buying as an investment , you 'll have to wait some time before you make a profit as prices rise more slowly on the Continent than they do in the UK . Another option is letting through an agent when you 're not using your holiday home . Property in ski resorts can be particularly profitable when used in this way . And remember that even though property is cheaper , the purchase process is more expensive than at home , adding 10 to 15 per cent to the initial price . Add to that renovation costs and the expense of getting there and you 'll end up paying substantially more . " Contact your lender to find out costs because they do vary considerably from country to country , " says David Wells of Abbey National France . " And budget before you commit yourself . Do n't buy on impulse . Instead , take time to look around and compare and contrast prices . " Just like buying in the UK , it 's vital to do your research first . Check local services like doctors , schools and transport , and look into the taxes , especially if you 're planning to live there full-time . It 's also a good idea to find out what the weather 's like off-season . The most popular areas to buy in France include the Cote d'Azur , alpine ski resorts and Normandy . Italy is more expensive , especially the popular Tuscany and Umbria regions . And in Spain the Costa del Sol remains the number-one choice for British buyers , followed by the Costa Blanca and the Balearic and Canary Islands . Sales go through much quicker on the Continent . Legally-binding contracts are usually signed within one to two weeks so make sure you have all the financial and legal details sorted out in advance . Abbey National , Barclays , the Woolwich and the Norwich and Peterborough all offer loans on property overseas . Or you could go through a British broker like John Charcol who can put you in touch with a local mortgage provider . Your lender will also help you set up a local bank account . Or if you 've paid off a chunk of your home in Britain , you can remortgage and use the released equity to buy overseas . Remember that if you borrow in sterling and then convert the cash , there may be a currency risk as conversion rates can change overnight . It could be a better idea to borrow in euros so that if the currency does depreciate , at least the mortgage will , too . A local , bilingual solicitor can help the whole process go smoothly . Your lender should be able to suggest one . Notary fees are unlikely to be much more than five per cent of the value of the property in France , Spain , Italy or Portugal . However , your lawyer might collect stamp duty and tax direct , so it might look like more . Estate agents ' fees also vary , and they usually charge the buyer rather than the seller . But your first step should be to take advice from experts like Abbey National ( freephone 0800 449 090 ) . Alternatively , visit a Homes Overseas exhibition . Call 020 7939 9852 for more details . THE KINSELLAS : MALAGA TONY Kinsella and his wife Elizabeth , from Molesworth , Cambridgeshire , have just bought a villa near Malaga in Spain for £ 146,000 . They have two children , Leanne , eight , and Vaughan , five . IT'S always been our dream to buy overseas and we 'll eventually retire there - but for now it 's a holiday home . We bought about a month ago and have already had a two-week holiday there , although we spent most of the time hanging curtains and fitting carpets . We needed to move quite quickly when we saw the house . We had enough to pay the deposit and we sorted out a mortgage with the Norwich and Peterborough building society as soon as we got back . We borrowed about £ 70,000 and it all went through their Gibraltar office . Our rate is 5.74 per cent and we have a five-year fixed deal . It 's remarkably simple if you take the same precautions as you would at home . You need a good solicitor and must make sure your finances are sorted . Friends recommended a Spanish lawyer who speaks perfect English . All the documents were translated and verified before we signed . Elizabeth and the kids will spend the school holidays there and I 'll join them as much as I can . The kids are even learning Spanish . THE BUCKLES : DORDOGNE NEVILLE and Kirsten Buckle , from Swindon , Wilts , bought a gite in the Dordogne , France , three years ago for £ 72,000 . They have two children , Morgan , two , and Imogen , 18 months . WE did n't have any particular reason for choosing the Dordogne . We liked France and knew we wanted to buy in the south . We fell in love with the property . We found it through a local agent that advertised in the British press . Once you 've made an offer it 's legally binding , so your finances have to be sorted out beforehand . We could n't afford it right out , so we got a mortgage with Abbey National France . You set up an account in the UK and pay into it monthly . They transfer it to a French account and we pay the mortgage in euros . We budgeted £ 350 a month to allow for currency fluctuations . At the moment we pay just £ 330 a month . Luckily my mother-in-law spoke French and Abbey National do all their documents in both languages . You need to do your research - the legal system , inheritance laws and so on . The fees and taxes add 14 per cent on the purchase price . We rent it out during the summer which helps pay the mortgage . If you like red wine and good weather , it 's a great place to be . UK Pages - Vauxhall Zafira Spare Wheel Theft - Holiday Apartments Spain - Website Promotion - Work Advice - Site Map - Spanish Villas - Website design - Wireless networking - Home Shopping </text>
<text id="bvaif" url="http://www.uservision.co.uk/usability_articles/print_wud.asp">
World Usability Day at User Vision User Vision , November 2005 The User Vision office was a hive of activity on November 3rd as over 50 visitors tried to meet the challenges of User Vision 's ' Usability Obstacle Course ' . Visitors from a wide variety of companies came to User Vision to learn about usability first hand by trying to meet some of the common usability challenges we face in our modern world . User Vision prepared a series of ' obstacles ' to reveal the design features that can make or break the user experience , and everyone had a chance to see if they could succeed in the tasks such as : Setting the VCR to record a TV programme Buying a product online from a website Changing the ring tone on a mobile phone Transferring a song to an MP3 player - and then playing it Guessing the icon functions on a printer Opening the plastic packaging on a product - without using their teeth ! The epic battle : Man vs . VCR Some of the results are worth noting : Only half the vistors could change the ringtone on a Nokia 6630 mobile phone and most gave it a rating of ' very difficult ' , whilst 92 % could perform the task on a Samsung D500 It took an average of 3.12 minutes to set the VCR ( the slowest was over 6 minutes , and there was notable ( and audible ) exasperation in front of the telly ! Opening the packaging of a plastic wrapped CD took nearly 1 minute on average with the record being set at 9 seconds ( and a few broken nails in the process ! ) In the battle of the MP3 Players , the iPOD won handily over Creative 's Zen Micro , although previous familiarity with the popular pod no doubt helped some 9 % were unable to make an e-commerce purchase due to difficulties in using the site - something that many e-retailers should note Less than 60 % of people could figure out what the icons on our printer mean ( that 's why we 've had to stick little labels on them ! ) Printer icons - are these symbols supposed to MEAN something ? Now , there must be ringtones in here somewhere . . Many Eyes on Usability Testing - and Ears on Accessibility The other main event of the afternoon was a rolling programme of usability tests on a variety of sites , including e-government , finance , online travel and e-commerce . On one side of a one-way mirror in User Vision 's Usability test lab a test subject worked through tasks and described their impressions to a User Vision consultant , whilst on the other side up to a dozen observers were riveted on their every move and comment . There were some moments of teeth-gnashing frustration from the observers , who thought they could see what would be the most logical next step , which often was not seen by the test subject . The value of usability testing was clearly demonstrated , and the subject 's comments and actions clearly showed up some issues in the sites tested . In User Vision 's focus group room a demonstration of screen readers used by blind and partially sighted web users was a compelling introduction to web accessibility . Many visitors took the opportunity to ' hear ' their sites as a blind user would , whilst User Vision consultants explained the accessibility features or shortcomings . Certainly the importance of creating accessible sites was highlighted after getting an insight to how many disabled people use the web . Overall , World Usability Day at User Vision proved to be very successful and enjoyable for everyone taking part in the event . Not only did it help to raise awareness of usability but it allowed people to have an understanding of some of the obstacles that consumers and end users have when faced with the task of using an everyday product , software or website . More photos from the day A room with a view . Observers in User Vision 's usability test lab Viewers watching a compelling usability test from the observation room If you think its so funny , just wait until you try it ! Serious concentration from web and MP3 users Press enquiries : For further information on User Vision members of the media should contact Richard Leonard at Brazil PR on Tel : 01865 725 269 or email : </text>
<text id="bvhab" url="http://agrifor.ac.uk/browse/cabi/3736cbd2e5895cf49854f8d70494bae7.html">
The Web site of the Institute of Shortening and Edible Oils ( ISEO ) . This site provides resources relating to the edible fats and oils industry , including various published materials ; extensive information on fats and oils , nutrition , processing methods and related technical information ; statistics ; and contacts and links to manufacturers , refiners , trade associations , and government agencies . A ( members only ) library is available and individual study on trans fats , obesity and food allergies is given . The ISEO is a trade association representing the refiners of edible fats and oils in the United States . trans fatty acids ; trade associations ; statistics ; publications ; oils ; obesity ; food sciences ; fats ; IFST : Trans fatty acids This discussion , dated November 2004 , from the IFST ( Institute of Food Science & Technology ) provides information on the topic of trans fatty acids and their relevance to the food industry . A general overview of trans fatty acids is given , along with suggested food sources , possible health effects and details on current government legislation on food labelling . trans fatty acids ; labelling ; health hazards ; food industry ; Formulating food products with low trans fats This document by the Oklahoma State University Food and Agricultural Products Research and Technology Center discusses the production of low trans fat foods . The document gives an overview for manufacturers of what trans fats are , current fat replacers , and their use and limitations . The document is applicable to food production systems that wish to transfer away from trans fats . It is in pdf format and requires Adobe Acrobat Reader . trans fatty acids ; nutrition ; lipids ; food technology ; fat substitutes ; Trans fats , health , and nutritional labeling of foods This food technology fact sheet produced by the Oklahoma State University gives details on trans fats in foods . The document gives an overview of trans fats , which food typically contain trans fats and how American food manufacturers are obliged to label all foods containing trans fats . Examples of a revised nutrition facts labels and details of the trans fats content of a range of dairy products are given . This document is in pdf format and therefore requires Adobe Acrobat Reader . </text>
<text id="bvqzk" url="http://www.elsham.pwp.blueyonder.co.uk/cx500/oil_pump/">
This site will tell you how to remove the oil pump mechanism . I am very receptive to comments and suggestions but you use this information at your own risk . Skill Levels explained . Skill Level with engine out : 1. with engine in frame : 2. Personally dirty : 2. Work mess : 1. Tools : 1. Space : 1. You do n't need to remove the engine from the frame . In most of these pictures , Valiant 's engine is removed , but it was out anyway , for other work to be done . All nut and bolt sizes are given as the spanner size required to fit them . Warm the engine and then drain the oil . It is not absolutely essential to remove the radiator , as you can get by with just lifting it out of the way after unbolting it , but really it 's better to remove it . The front casing is much easier to remove if the radiator and fan are not in place . Disconnect the clutch cable at the clutch end . This is secured by two 10mm nuts ; slacken them full off , use a pair of pliers to raise the clutch arm , and slide out the nipple ( at the end of the cable ) from the clutch arm . Remove the 8mm head bolts which attach the front crankcase , and gently pry off the front cover . Do n't use force , and especially do n't use a screwdriver between the mating faces . In the photo ( right ) the clutch cover has been taken off as well , but you need n't do this . The bendy black tube is one of the oil feeds . Carefully remove all traces of the old gasket . Inside the open engine ( left ) . The oil pump itself is hidden behind the large shiny sprocket . This is driven by a chain directly from the crankshaft . Close-up of the crankshaft end , the oil pump drive chain , its sprocket and you can just see the oil pump behind the sprocket . The large outer pinion on the crankshaft is what drives the clutch outer basket . This drives the inner basket and that connects to the gearbox . Remove the bolt which holds on the sprocket , and pull it off with the chain ( left ) . Unbolt the oil pump from the opened crankcase , and pull it off complete with its lower pipe and the metal strainer . Frightening is n't it , what was caught on the strainer ? Having upturned ( left ) the strainer , this is what I found . Tiny bits of metal , plus some slivers of gasket and sealing compound . If you are not replacing the pump , wash off all these bits in paraffin or petrol . The oil pump chain is a continuous one and does not have a split link . If it shows sign of wear , or on reassembly it cannot be correctly tensioned , you should replace it . The CX500 oil pumps are extremely simple in operation and correspondngly reliable ; they often go to 100,000 miles without replacement . They are what 's called trochoidal , which means that they work rather like a heart . An inner star-shaped steel rotor , with four arms , rotates inside an outer rotor with five corresponding cutouts . Oil is pumped between the chambers as the assembly rotates , and goes out into the oil passageways inside the engine . I 'd recommend changing the chain at 40,000 miles but the pump will be good for more than this . If you want to dismantle the pump itself , do so under surgically clean conditions . You can check the internal tolerances if you want to , but you 'll probably need an impact driver to get the holding screws out . If you dismantle the pump , there should not be more than 39/1000ths clearance between the inner and outer rotors , and no more than 138/1000ths between the outer rotor and the body of the pump . On reassembly , note that the punch mark on the outer rotor faces outwards , you should be able to see it during reassembly . Before reassembly , wash or wipe out the oil sump at the bottom of the crankcase area ( left ) . You can see the dipstick poking through in the picture . Any sludge or muck shows neglect in changing the oil and filter . A well maintained engine should be free of all deposits . Reassembly is a simple process . Do n't forget to renew the O-rings around the oil transfer passages . Ensure the 2 hollow dowels are in place ; the one at the top ( right ) and the one between the oil pump body and the front casing . Do n't omit the oil jet and O-ring adjacent to the clutch ( right ) . Finally remember to replace the O-ring directly beneath the oil pump . This feeds into the curly pipe built into the front crankcase cover . To correctly tension the chain , replace the oil pump on its mountings and insert the holding bolts not quite finger tight . Loop the chain over the crankshaft pinion and over the oil pump sprocket and locate the sprocket on the pump . It sits in a shaped slot on the oil pump 's spindle . Insert the sprocket 's locking bolt and tighten it to 6-9 ft lbs . Now wiggle the pump on its mounting bolts so that there is no slack in the chain and tighten the bolts to 6 ft lbs . Check the chain again afterwards . When replacing the front cover , I recommend using a gasket sealant like Hylomar , spread thinly onto both faces , with the actual gasket in between . Insert the 8mm head bolts and tighten finger tight , then in a diagonal sequence to not more than 6 ft lbs - they are easily stripped . Wipe off any excess sealant . Tachometer ( rev counter ) drive CXs sometimes develop an oil smear from the behind the radiator . This weep comes from a failed oil seal on the tachometer casing . It is easily replaced without removing the front cover , but you do need to remove the radiator and fan . You 'll need a new oil seal and tacho casing gasket . The tacho drive assembly is bolted over the front end of the camshaft , directly behind the radiator and directly above the crankshaft . It 's held on with four bolts , and then the assembly can be gently prised off ( left ) . Carefully remove all traces of the old gasket . The leaking seal is the one which fits inside the tacho drive casing , over the end of the camshaft . Poke out the old seal and insert the new one , it goes with its closed end facing outwards , towards the fan . Before refitting the casing , smear a glob of grease over the camshaft 's end . Then fit the new casing gasket , again with a sealant like Hylomar . Tighten the four holding bolts back to 6-9 ft lbs . I recommend changing the oil and filter after 500 miles . </text>
<text id="bvxom" url="http://www.schools.co.uk/index.php?name=News&file=article&sid=34">
Schools are able to screen pupils for weapons using " arch " and " wand " metal detectors , the government has said , after a quick check of what the law actually says on such issues . Education Secretary Alan Johnson is also giving headteachers and school staff new powers to search pupils for weapons as part of his policy to ensure schools are " knife and weapon free " zones and safe and secure places to learn . Staff will be able to use blanket non-contact or minimal contact screening for weapons without needing consent or grounds of suspicion to do so . Random checks could be used to catch offenders unawares . If screening arouses suspicion that a pupil is carrying a weapon , school staff will then be able to use the new powers in the Violent Crime Reduction Bill to carry out a hands-on search . Screening involves pupils walking through a " bleeping " arch or being checked with a metal detector wand . Heads will still be able to call in the police if they need to in order to deal with incidents . </text>
<text id="bwale" url="http://www.poptel.org.uk/scgn/articles/9902/inbrief.html">
The Swansea talkathon of the National Policy Forum on 15-17 January considered three final-year documents and six first-year documents . Reports of group discussions were collated and fed back to the whole Forum , where we had another attempt at inserting points unaccountably omitted by the note-takers , like the merits of universal benefits against means-testing . Every set of New Labour papers has its mantra . The Third Way was last year 's fashion , and in 1999 ' joined-up thinking ' is all the rage . In fact , Forum members proved rather more joined-up and forward-looking than the authors . Robin Cook stressed that Labour will only win a second term with fresh ideas and a full programme . Yet the papers concentrated on the Tory legacy and current government activity , not on plans for the next century . While this stuff belongs in campaign material , reminding people that there are worse beasts out there , by the election we will have to defend a four-year Labour legacy as well . There were many requests that second-year documents should highlight changes resulting from party comment , to counter cynicism about what happens to constituency resolutions and views from local forums . Several common themes emerged . First , all policies should be set in a European context . Tony Blair will have the support of activists , if not of Rupert Murdoch , whenever he calls the single currency referendum . Many people highlighted the rural dimension . Problems are different and less visible in the countryside , and they cannot just be relegated to agriculture , only six per cent of the rural economy . Existing differences between Scotland , Wales and England will increase with devolution , and were barely acknowledged . Joined-up thinking is not carried through where it might involve conflict . Health and education see family-friendly policies as essential in allowing staff to combine work with other commitments , while the economic commission praises the Private Finance Initiative and proposes a panel of business managers to advise on public service productivity . Warm words will clash with hard-headed accountancy . Wiltshire Healthcare Trust saved £ 315,000 with a rotating shift system , but lost at an industrial tribunal because this prevented nurses both working and caring for their children . Unpaid parental leave is useless to the many , and paid leave will make the CBI scream . Labour in government will have to choose . Revised papers will be published for discussion in CLPs and local policy forums . On second-year documents health , welfare reform , crime and justice constituencies can submit formal amendments . These go only to the policy commissions , so please copy everything to your Forum members . Final drafts for conference will be sent out in mid-June and we will have just a week to propose alternative positions , so we must know your concerns before then . Two problems . The papers were widely described as ' vacuous ' . If you 've never tried to amend a blancmange , now is your chance . And look for what is missing . How can we discuss health policy for the next five years without mentioning the private sector , and what it takes from the NHS and the taxpayer ? Over to you . We need the ammunition . Ann Black represents South East CLPs on the National Policy Forum . Blair floats PR for local government A report in the Financial Times on 26 January indicated that Tony Blair is planning to introduced proportional representation for local elections . The report says that Blair believes that PR would end years of Labour one-party rule in some of Britain 's cities a most helpful contribution to Labour 's campaign for the local elections in May ! Jack Straw apparently backs the move , telling the BBC : ' I 've said there 's a very different case when it comes to the voting systems at a local level . I do n't think the system of first past the post in multi-vacancy wards at a local level is necessarily the best one . ' The FT concluded : ' The introduction of PR for town hall elections would delight the Liberal Democrats , who have been pressing for the reform for years . ' Campaign Group AGM The Socialist Campaign Group of Labour MPs held its 1999 annual meeting on 20 January . John McDonnell MP was elected chair . Vice chairs are Tess Kingham , Lynne Jones and Jeremy Corbyn . Alan Simpson remains the secretary of the group and Bill Michie treasurer . The group has welcomed a number of new members over the year - most recently Frank Cook and Ian Gibson . 9 April for NEC nominations The NEC has ignored the objec-tions of the majority of constituency representatives on the national executive and brought forward the deadline for constituency nominations to the NEC , Conference Arrangements Committee , National Constitutional Committee and National Policy Forum to 9 April . Policy consultation deadline Labour Party policy documents on wel- fare reform , health and crime and justice will be circulated to local parties and affiliates in February for consultation . This follows their presentation to the National Policy Forum meeting in Swansea in January ( see report , page 3 ) . All three will be put to a final vote at this year 's annual conference . Responses to this consultation , including any amendments to the text of the documents must be received by Millbank not later than Tuesday 6 April only two months or less for local parties to respond . The National Policy Forum the only body which can amend policy documents or put forward minority reports to conference meets on 2-4 July . Any amendments or minority reports will need to be decided at this meeting . However , proposers of amendments which are not endorsed by the Joint Policy Committee have to show that 5 per cent of the NPF ( at least 9 representatives ) from three of the seven sections support the amendment . Members should make sure that copies of amendments are sent to NPF members . Campaign for Labour Party Democracy AGM Saturday 6th March - 10.30am to 4pm Conway Hall , Red Lion Square , London WC1 Details from 0181 458 1501 </text>
<text id="bwvhf" url="http://www.tameside.gov.uk/tmbc6/cycling/withoutmycar.htm">
In Town Without My Car Every year between 16th and 22nd September , " In Town Without My Car " is promoted as part of European Mobility Week . In 2005 , fifty two ( 52 ) towns in the United Kingdom took part in this activity . European Mobility Week has become established in both the UK and abroad and traditionally culminates with In Town Without My Car ! Day on 22nd September . This involves the closure of streets ( car parks ) to cars and lorries in participating towns , allowing people to enjoy walking , cycling , street theatre , live music , public art and children 's play areas . It creates a less polluted , quieter urban area for a day . It helps us rediscover our towns and encourages us to think about the ways in which we travel in them . Further information can be obtained at the following sites : </text>
<text id="bycul" url="http://www.mubs.mdx.ac.uk/Staff/Personal_pages/Ifan1/Booth/Notebooks.htm">
Booth 's poverty notebooks For each of London 's streets , Booth extracted information from the detailed record sheets kept by the small army of attendance officers employed by the London School Board . He and eight collaborators entered this information by hand ( mostly using pencil ) , in a total of 65 notebooks . The first 55 notebooks contain highly detailed family data , the remaining 10 notebooks contain less detailed street information . The family notebooks Early in the poverty survey , Booth began to collect information for every family in each street of London that had children . He and his collaborators entered this information into notebooks that Booth had specially printed for his inquiry . During the early part of the family survey , Booth actually had three different notebook layouts printed . As the example illustrated below reveals , the notebook entries include the street number , occupation of the head of household ( usually highly abbreviated ) , an indication of the wife 's occupation ( especially if they were the household head ) , the number of childen in various age groups , the number of rooms occupied and rent paid ( often a single summary for an entire street ) , and notes on the social position of the household . Here is part of a page of the notebook recording informaiton for families in a street in Poplar : When the original information had been gathered from the attendance officers , Booth and his co-workers converted the head of household occupations into a ' section ' number , and gave each family that had children a letter ( A to H ) that indicated to which of seven social classes they belonged . Finally , each street was given a colour which indicated its general social condition . ( Booth devised a set of eight colours based largely on the social mix of street residents . ) These additional items of information can all be seen on the example notebook page above . Note how the employment section number is entered in the ' Rent ' column , and the family social class letter is written in the ' Wages ' column . The street colour ( ' l bl ' for light blue ) is written alongside the street name . The street notebooks As the poverty survey progressed , Booth began to record information for entire streets ( or parts of streets ) , rather than for individual families . Again , he had notebooks specially designed and printed to record the information gathered from the School Board attendance officers . As the example illustrated below reveals , the notebook entry for individual streets includes comments on the character of the housing , the number of children of school-going age , general comments on the social character of the street , and the number of families in each social class . Because the street entries occupy a two-page spread of the notebook , the extract below is split into two sections . This is the left-hand side of the entry for five streets in Lambeth : Here is the right-hand side of the entry for the same five streets : Again , Booth assigned a colour to each street according to the social mix of its residents and its general condition . It is not entirely clear whether the street colour was assigned during discussions with the attendance officers , or following subsequent analysis of the summary data . </text>
<text id="byegq" url="http://www.thehealthierlife.co.uk/article/3603/reduce-cancer-reoccurrence.html">
Reduce Cancer Reoccurrence , Wheatgerm Extract , Cancer : The Wheatgerm Extract That May Help Reduce Cancer Reoccurrence Cancer treatment has come a long way since the use of mustard gas derivatives in the early 1900s - or has it ? When doctors discovered during World War I that mustard gas destroyed bone marrow , they began to experiment with it as a way to kill cancer cells . Although they had little success with the mustard gas , it did pave the way for modern chemotherapy - which involves the most toxic and poisonous substances anyone deliberately puts in his body . These treatments kill much more than cancer cells - they have a devastating effect even on healthy ones . Sometimes it seems as if only a miracle could provide a cure that 's both safe and effective . And a miracle is just what Dr . Mate Hidvegi believed he found when he patented Avemar . Studies have shown that Avemar , a fermented wheatgerm extract , helps reduce cancer reoccurrence , possibly speed up cancer cell death and helps the immune system identify cancer cells for attack . A miracle in the making Back in World War I , Dr . Albert Szent-Györgyi ( a Nobel Prize recipient in 1937 for his discovery of vitamin C ) had seen the effects of mustard gas personally and was determined to find a safer alternative for cancer treatment . His goal was to prevent the rapid reproduction that is characteristic of cancer cells . He theorised that supplemental quantities of naturally occurring compounds in wheatgerm called DMBQ would help to chaperone cellular metabolism , allowing healthy cells to follow a normal course but prohibiting potentially cancerous ones from growing and spreading . His early experiments , published in the 1960s , confirmed his theory . But then the science community shifted its focus to killing cancer outright . It was n't until the fall of communism in Hungary in 1989 - when scientists were allowed for the first time to pursue independent , personal interests - that Dr . Hidvegi picked up where Szent-Györgyi left off . He was able to patent a technique of fermenting wheat germ with baker 's yeast . He named this fermented product Avemar and it became the standard compound for research and later commercialisation because it assured a longer shelf life while maintaining its live food status . Reduce cancer reoccurrence Since 1996 , over 100 studies done on Avemar have impressed oncologists and cancer researchers . Studies have shown that when Avemar is used as an adjunct treatment , it enhances the effects of the standard treatment agents . It 's particularly effective in reducing the chances of cancer reoccurrence . In a controlled study , 170 subjects with primary colorectal cancer either had surgery and standard care with chemotherapy or the same plus 9g of Avemar taken once a day . Only 3 per cent of the people in the Avemar group experienced a reoccurrence , vs . more than 17 per cent of those in the chemo-only group . The Avemar group also showed a 67 per cent reduction in metastasis and a 62 per cent reduction in deaths.1 In a randomized study , 46 stage III melanoma patients with a high risk of reoccurrence either had surgery and standard care with chemotherapy or surgery plus standard care and 9g of Avemar taken once a day . Those taking Avemar showed approximately a 50 per cent reduction in risk of progression.2 Avemar also reduced the frequency and severity of many common side-effects , including nausea , fatigue , weight loss and immune suppression . Avemar speeds cancer cell death The second way Avemar works against cancer is to help keep cancer cells from repairing themselves . Cancer cells reproduce quickly and chaotically , producing many breaks and other mistakes in the cellular structure . Because of this , cancer cells need a lot of the enzyme known as PARP ( poly-ADP-ribose ) to help repair breaks in DNA before the cells divide . For daily reports on the very latest health breakthroughs , join our FREE daily email service : It is thought that without adequate PARP , cancer cells cannot complete DNA replication . When there 's no PARP to repair the damage , an enzyme called Caspase-3 initiates programmed cell death . Avemar has been shown to potentially speed up the death of cancer cells by helping inhibit the production of PARP and enhancing the production of Caspase-3.3 US researchers at UCLA also showed that Avemar may reduce the production of RNA ( ribonucleic acid ) and DNA associated with the rapid reproduction of cancer cells . It also helps restore normal pathways of cell metabolism and may increase the production of RNA and DNA associated with healthy cells.4 Undercover cancer cells exposed Avemar may also act as a biological bounty hunter for hidden cancer cells . Healthy cells have a surface molecule called MHC-1 that tells natural killer ( NK ) cells not to attack . Virally infected cells do n't display this molecule , which makes them targets . However , cancer cells have also been shown to display the surface molecule MHC-1 , which means that cancer cells may actually be able to hide from NK cells . Avemar is thought to help the immune system identify cancer cells for attack by suppressing their ability to generate this MHC-1 mask , which allows the NK cells to recognize it as a target for attack.5 What to take for best results The Avemar product is an instant drink mix called Avé , which combines Avemar with natural orange flavouring and fructose in pre-measured packets . As a dietary supplement , the recommended usage is one packet per day mixed with 8oz of cold water . You should consume it within 30 minutes of mixing a batch . Also note that it 's a good idea to take Avé one hour before or after a meal and two hours before or after any drugs or other dietary supplements . If you weigh over 200 pounds ( 14 stone ) , use two packets per day . If you weigh less than 100 pounds ( 7 stone ) , only use half of a packet per day . Although some people reported uneasiness in their stomachs during the first few days of using Avemar , the effect only lasted a few days . No vomiting , diarrhoea , or any other symptoms were reported . Contraindications : Since this is a wheat product , there is the potential for allergic response . Avemar should not be consumed by people who have had an organ or tissue transplant , those who have malabsorption syndrome , or those with allergies to foods containing gluten , such as wheat , rye , oats and barley . It 's also not recommended for people with fructose intolerance or hypersensitivity to gluten , wheatgerm , or any of the components or ingredients of this product . If you suffer from bleeding ulcers , you should stop using Avemar two days before undergoing a barium X-ray contrast examination and resume taking it two days after the completion of the examination . This precaution is necessary because wheatgerm contains lectin , which can potentially cause red blood cells to clump . If you are currently taking medications or have any adverse health conditions , you should consult with your pharmacist or physician before taking Avemar . Sources : 1. British Journal of Cancer 2003 ; 89(3 ) : 465-9 2. International Journalof Cancer 2002 ; 100(S13 ) : 408 3. " A medical nutriment study has supportive effect in oral cancer " ( unpublished , Marta Ujpal et al ) 4. Pancreas 2001 ; 23 : 141-7 ; Drug Discovery Today 2002 ; 7(6 ) : 18-26 5. Journal of Bilogical Chesmistry 2002 ; 277 : 46,408-14 ; International Journal of Oncology 2002 ; 20 : 563-70 05.05.2006 Sign up for FREE Health Email : Save article | Printable version | Email to a friend See more articles about Cancer : Promising Progress in Cancer Treatment ( Cancer ) Breast Asymmetry Linked to Cancer ( Cancer ) Cancer : Are you at risk of colorectal cancer ? ( Cancer ) Colorectal Cancer : New Research Findings On Colon Cancer ( Cancer ) Breast Cancer & Antibiotics : When You Should Question What Your GP Prescribes ( Cancer ) Mobile Phone Health Risks : Is Your Mobile Risking Your Health ? ( Cancer ) Mammogram Problems : Mammograms , Biopsies , And Lumpectomies ( Cancer ) The breast cancer , radiation therapy and anaemia link ( Cancer ) How vitamin D can help protect against cancer ( Cancer ) Cancer : Gene Therapy Tested to Fight Cancer ( Cancer ) </text>
<text id="bykkm" url="http://jobs.leaddiscovery.co.uk/job.aspx?jid=11535&cd=1">
Contact Details : James Melody Stelfox UK Ltd +44 1273 727 930 james@stelfoxuk . c om Stelfox UK Ltd Albert House 82 Queens Road Brighton East Sussex BN1 3XE United Kingdom Medical Director - Pharmacovigilence Business Type : Clinical Research Organisation , Contract Research Organisation Job Type : Pharmacovigilance , Medical Director Position : Full Time Salary : On Application Location : Germany Reference : JM0MfD Background : My client , a world renowned CRO , is currently seeking to recruit a Medical Director to oversee and supervise the activities of the Pharmacovigilance Department in order to ensure compliance with ethical , legal , and regulatory standards . This is an exciting opportunity for a pharmaceutical physician to head up a well established group . Primary Duties : -Oversee safety issues of clinical studies conducted which will include , but not be limited to , the following : -Adverse event reporting to the sponsor -Follow up of adverse events as necessary -Communication of safety issues to Chief Medical Officer -Participate in the on-call safety monitoring procedure . -Provide all necessary medical support functions which will include , but not be limited to , the following : -Medical information source -Ongoing training for project teams in therapeutic areas as requested - Review of study documentation ( protocol , CRF etc . ) -Contribute to investigator meeting presentations -Ongoing safety review of individual patient laboratory reports generated by central laboratories ( if requested by the Sponsor ) -CRF safety review -Contribute any necessary clinical interpretation into integrated clinical and statistical reports -Assist senior management in making presentations to potential clients when appropriate . -Demonstrate a thorough understanding of Standard Operating Procedures ( SOPs ) and ensure that all activities are conducted in accordance with current SOPs . -Demonstrate a thorough understanding of applicable regulatory standards in the country where clinical studies are to be conducted and ensure that all activities are conducted in compliance with current regulations . Qualifications : -Medical degree and broad based post graduate experience -Ability and willingness to travel approximately 15 % of the time ( 4 days per month ) -Ability to review and evaluate clinical data -Good oral and written communication skills -Ability to liaise with senior management team Additional Information : Stelfox operates on a very simple maxim : Find out what people want and give it to them . The primary focus of each Stelfox consultant is to cultivate a relationship with both client and candidate based on professionalism , speed and accuracy . The latter being the obvious competitive advantage offered by Stelfox afforded through the knowledge and experience of each individual consultant . The Stelfox team know exactly what type of individuals and skillset each of our clients repeatedly look for . Please contact James Melody for details of this or any other opportunities Posted by : : Stelfox ( View all our vacancies ) Apply Online | Contact Recruiter Unless otherwise stated , if applying for a job , you must ensure that you are already authorised to work in the country in which the job is based Posted : 03/08/2006 LD Ref : 11535 </text>
<text id="bynxp" url="http://www.syscom.plc.uk/solutions_distrib.asp">
It is an old maxim , but delivering the right goods to the right customer at the right time and at the right price remains more important than ever in today 's world . In order to stay profitable and remain competitive , distribution companies need to be able to provide the highest levels of customer service , yet maintain a streamlined and efficient organisation behind the scenes . An organisation must provide effective control over the entire business to ensure agile response to challenges and that supply and demand is continually and carefully matched . Syscom works with many distribution companies across a range of industry sectors including consumer electronics , industrial , food and textiles and apparel . Our people have extensive experience of the industry and deliver the knowledge and understanding of issues that matter to make a real difference . We offer a range of state of the art , flexible and scaleable end to end solutions specifically designed and for small and medium sized businesses . </text>
<text id="bytvq" url="http://personalfinance.iii.co.uk/articles/articledisplay.jsp?section=Banking&article_id=64923">
A current account that pays 5 % AER - a Moneywise award winner 06.07.05 For far too many of us , our relationship with our bank is all give and no take . But in a year that has seen banks competing for new business like never before , a new breed of accounts have emerged offering high interest on your balance , and low interest ( or even no interest ) on overdrafts . It 's even possible to find a bank whose customer service does n't drive you round the bend . In our second annual survey of British banks we examined the best banks for sensible money managers , serial overdraft dippers , and for those who just want an all round decent deal . For the first time the same bank took the title in EVERY category -- Alliance and Leicester . For up to date current account information visit our banking section </text>
<text id="bzamy" url="http://www.evolutec.co.uk/06_chairman.asp?thesub=6.0">
The past financial year has been an important one in the development of Evolutec as the company moves towards its objective of becoming a diversified biopharmaceutical company capable of the discovery , development and commercialisation of important therapeutic products . Evolutec made progress an all fronts as it obtained positive clinical results with its lead product candidate , rEV131 , positive trial results in cattle with its lead vaccine candidate in collaboration with Merial and exciting preclinical results with rEV576 in a myasthenia gravis model . The Company is in a position to make significant progress in the coming year . Evolutec now has the funds to conduct at least three definitive Phase II clinical studies on rEV131 during 2006 in a range of respiratory and ophthalmic indications . Furthermore it can also conduct the work to bring additional molecules into clinical development . This is due to the strong support that we received from our investors during two placings that took place in 2005 . Evolutec has recruited a team of experienced individuals to carry out our plans . The team brings to Evolutec a broad range of expertise in the key areas of discovery , drug development and business development . This is coupled with an experienced executive team to provide the leadership skills that Evolutec requires . The Company has also built up very good relations with a range of contract organisations both in the US and Europe to use in sub-contracting the development work . I would like to thank all the individuals both within Evolutec and our supplier companies who have worked on our projects for their dedicated efforts in the past year . In addition to the progress in products and people , Evolutec continues to evolve rapidly into a significant biotechnology company . The Company has moved its location to a business park in Reading which we believe is an attractive location to grow and commercialise our business . The Company has made significant strides in complying with the regulatory requirements placed on the Company both as a consequence of its public listing on the AIM Market as well as those imposed by international regulatory agencies in the drug development process . Our objective is to meet the highest regulatory standards wherever possible . In particular , we will be looking to strengthen the Board by the appointment of an additional Non-Executive Director in the coming year . Looking forward we expect the Company to deliver significant value to its shareholders . In addition to the scientific and clinical progress we will be looking to establish commercial relations with partners in both the biotechnology and pharmaceutical sectors . </text>
<text id="bzfki" url="http://www.truststfc.co.uk/meeting_27_09_2006.php">
The meeting opened with Paul Davis ( PD ) outlining the structure of the agenda , stating that the evening would be segregated into defined sectors to address the following issues ; Andrew Hounsell : Précis of the content of the recent meeting held between Bob Holt and recognised supporters ' group Paul Davis : T he current situation and events leading up to it . Mike Wilks : T he way forward - what can we do ? Open Forum : T he fan 's opportunity to reflect on , and comment on the situation . Andrew Hounsell ( AH ) AH reported on the meeting of fans ' groups ( TrustSTFC , Supporters ' Club , Disabled Supporters ' Group , Loud and Proud ) with the club on Monday 25th September 2006 called by STFC , who were represented by Bob Holt , Ben Lambert , Martin Starnes , Sandy Gray 's husband and Sarah Mildenhall . It was agreed that Bill Power ( Bill Power ) had made capital outlay to the club to the tune of £ 1,120,00.00 . The clubs view of this investment was that it fell into two categories : £ 1,000,000 as a share issue £ 120,000 as a loan Bill Power has disputed this and states that the full amount was made as a loan and is requiring repayment . BH stated as a separate issue that Mark Devlin ( Mark Devlin ) still had a role to fulfill within the club , and also assured those present that the door was left open for Bill Power to return to the club in the future . BH confirmed that , although a clause in the manager 's contract exists that would enable him to speak to a higher level club , no approach has been made . It was also confirmed that Mike Diamandis ( Mike Diamandis ) had instigated the approach for the current management team and brought them in to the club . BH said that club accounts are prepared and are ready to issue to the shareholders . However he said a £ 700,000 overspend had occurred , although it was then further clarified that that was an overspend even taking into account the improved gates , so against budget it would more likely be over £ 1 million . BH said Linda Birrell ( LB Club Secretary ) had been made redundant as part of a cost cutting exercise , although she had not been required to work her month 's notice . The board felt that LB 's duties could be absorbed within the existing structure . This decision was taken without any consultation with the members of the existing structure that it affected , including Dennis Wise . Paul Davis ( PD ) PD gave a chronological summary of events that have developed with regard to Bill Power 's involvement with the club dating back to late March/early April 2006 . In late March , the Trust were told in a meeting with Mark Devlin that Bill Power was going to be coming on board , and that he would put in an initial investment of c £ 1million . He and Mark Devlin were going to effectively run the ' football ' side of the business , leaving Mike Diamandis free to withdraw from that area of the club and concentrate on the ground redevelopment and his other business interests . A few weeks later , after a meeting with Mike Diamandis , he himself restated that this was to be the way things would operate and expressed his considerable relief at being able to withdraw from the day-to-day running of the club . So there was a clear understanding that Bill Power and Mark Devlin would run the football side of the club . It may have been a surprise then when Mike Diamandis brought in Dennis Wise and Gus Poyet ( and negotiated their pay structure ) , as this would clearly indicate Mike Diamandis was still very active in the ' football ' side of the business . That said , there is no indication that Bill Power or Mark Devlin were anything other than delighted to have Dennis and Gus on board . PD then referred to the official club statement issued on Monday which confirmed that a spending structure had been agreed for this season , which included a budget for the playing side , in a meeting during the close season between Sir Seton and James Wills , Mark Devlin and Bill Power . The statement made specific reference to the fact that Mike Diamandis was not present at that meeting but it was this meeting at which the spending plans for this current season were established . This is the agreement which was then rejected ( again according to the club 's own statement ) at the board meeting three days before the start of the season - as spending and commitments on the basis of that plan must already have been undertaken ( it is ludicrous to suggest that Dennis Wise would not have been allowed to bring in backroom staff , players etc until a spending plan had been formally ratified a few days before the start of the season ) , this in essence amounts to a fundamental breakdown in the agreement reached during the close season . It is believed that this was the culmination of a series of ongoing disagreements throughout the close season between Bill Power and Mark Devlin on the one hand and Sandy Gray and Mike Diamandis , regarding how much freedom Bill Power was to have in the running of the football side of the business . And that the rejection of this agreement essentially marked a fundamental breakdown in the relationship between the two parties . The meeting of the football club board then finished and immediately after the board of the holding company met and ( again as referred to in the club 's official statement ) at the end of that meeting , Bill Power and his business partner Phil Emmel were offered the opportunity to buy the club outright if they did not like the way it was currently being run . Bill Power and Phil Emmel went away to consider their options . Sadly , shortly afterwards Bill and others were injured in the plane crash which obviously interrupted that consideration . In terms of there being a ' rift ' , it is significant that no member of the board visited the Bill Power or the club employees injured in the crash while they were in hospital , except Willie Carson , who visited Mark Devlin and Mike Sullivan to his credit . According to statements by Bob Holt at the meeting on Monday , this was because club officials were asked not to visit the injured parties . Both Bob Holt and Mike Diamandis have repeatedly stated that there was no rift between Mike Diamandis and Bill Power and asked ' How could there be when we 've not spoken to them since the accident ? ' . PD said that the fact that the man charged with securing inward investment in the club had not spoken to the club 's first major external investor in 5 years , not even to pass on his best wishes , in itself spoke volumes . During this period of hospitalization the Paul Ince deal was being negotiated , if the board had misgivings about the deal then the signing should not have gone ahead . With regards to Linda Birrell it was widely recognized that she played a vital role within the club and that when she was made redundant she was given a month 's pay in lieu of notice , which if the reason for her redundancy had genuinely been cost-cutting would have been vital to ensure a smooth transition . PD said that the departure of Linda is what effectively brought the whole situation to a head . The following Wednesday there was a meeting between the board of the club plus Mike Diamandis on the one hand ; and Bill Power 's wife Terry and business partner Phil Emmel on the other . Bill Power had specifically requested that Mike Diamandis not attend , again further evidence of a fundamental breakdown in the relationship between the two , but he did so apparently at the insistence of the Wills family . That meeting was the one ( again referred to in the club statement ) which resulted in Bill Power and Phil Emmel requesting the return of the money they had invested in the club and the well-documented disagreement as to whether that money was a purchase of share capital or a loan . Although PD believed that both parties would have been happy with the ' polite fiction ' of a statement saying Bill Power was withdrawing due to ill-health - no-one likes to wash their dirty linen in public - in the event a joint statement could not be agreed ( as Bill Power 's side would not agree to a joint statement without resolution of the disputed shares/loan issue ) and the club decided , quite properly , to issue their own statement . No direct statement has yet been forthcoming from Bill Power due to legal complexities surrounding the investment issue . Mike Wilks ( MW ) MW introduced himself as a lifelong fan , former chair of the Supporters ' Club , and current executive member of the club , and as someone who certainly had no axe to grind . He confirmed that he had no issues with Sir Seton Wills ( SSW ) , in fact quite the opposite and publicly thanked him for his continued support over the years , a point continually reiterated by all speakers MW explained he was a successful senior business executive and based on his substantial business experience said that basically the club as a business was technically worth virtually nothing , with a CVA in place , a 700,000 overspend and no accounts being filed . MW stated that the annual spend was £ 2.6 million and that was simply staggering for a league 2 club . MW would like to propose a consortium with the approval and support of the fans to replace the current ownership . The consortium primary role would be to secure financial investment to ensure the survival of the club . The investment would be conditional on the following points Linda Burrell be reinstated immediately Independent auditors to examine the affairs of the club over the previous 5 years All Dunwoody contracts to be immediately terminated and investigated A fans representative to be elected to the board . Mark Devlin to be retained as Chief Exec . MW stated that the level of finance required to undertake this action could be in the region of £ 2 - 3 million , although that would depend on whether a complete buy-out was necessary . MW also stated that Bill Power was aware of the views of the fans The floor was then thrown open to a general question and answer session . Votes from the meeting : Following the Q&A several motions were tabled and voted on : 1 ) To instigate active protests ( ie demonstrations etc ) against the non-football management of the club DEFEATED UNANIMOUSLY It was widely felt that this would be counter-productive at this stage and that no action should be taken which may have a negative impact on the players/football management 2 ) That the fans have lost confidence in the non-football management of the club and that the non-football management team should be replaced , but that this was not a criticism of the Wills family who continue to retain the utmost respect of the fans . CARRIED UNANIMOUSLY It was suggested during discussion of this motion that the admittedly awkward phrase ' non-football management of the club ' be replaced with ' board of the club ' ; this was rejected as it was pointed out that James Wills was on the board and the motion did not reflect any criticism of the Wills family . A rider was added to the motion expressing the respect of the fans to the Wills family . 3 ) That Mark Devlin should be allowed to resume his position as Chief Executive as soon as he is well enough and should be retained in that post ; and that the board should resolve the uncertainty over his future as soon as possible CARRIED UNANIMOUSLY 4 ) That Mike Wilks and TrustSTFC have a mandate to actively seek out investment from third parties and/or explore alternative ownership models for the club in order to secure the club 's future CARRIED UNANIMOUSLY 5 ) That fans were united in their desire to see Bill Power re-engage with the football club and that Mike Wilks and TrustSTFC should attempt to enter into discussions with him to achieve this </text>
<text id="bzicn" url="http://www.macintyrecharity.org.uk/transition/personal_experiences/michael.html">
Learning & Further Education - Michael My name is Michael . I am 17 years old and I have been to 2 different colleges . I had learning support when I was in school because I have a learning difficulty . I first found out about Workforce through my careers office . I went for an induction and they showed me round the building . I worked through a couple of assessments to decide what level I should work at . T hen I had an interview . I had to bring my National Record of Achievement , Birth Certificate , GCSE certificates and my National Insurance number - you get paid a small sum of money for coming to Workforce . As I did n't have very good grades , they started me on a Lifeskills course . M y main reason for coming to Workforce was to improve my grades . I wanted to get an NVQ in IT , but first I had to do a taster course , to decide which course I liked best . I 've gained new skills since coming to Workforce . I have more confidence and motivation to get up in the mornings . My next step is to find out what opportunities are available to me when I leave Workforce . I would like to get a job but would n't mind doing another course if it meant that I could get a better job . </text>
<text id="bzizf" url="http://union.ic.ac.uk/scc/icsf/library/library_history/library_history_3.html">
Deep in the Bowels of Beit Basement ( June 1998 - October 1999 ) [ Photo Gallery ] In mid-1998 , a Union Sabbatical , who was also a member of Jazz and Rock society , happened to mention that they had a old room in the Beit basement that was n't in use . The committee of the time proceeded to make a nuisance of themselves until the society was given permission to take over this much larger room for the library . The room was a mess - cigarette ash several inches deep , the walls covered in eggboxes ( sound proofing ) , and some wooden construction in the middle of the room . After much effort ( and the smashing of a light fitting ) , the place was cleaned out and made ready for painting . The room became white with a dark blue network of piping . Two giant metal struts , studded with bolts , were carefully painted to resemble Daleks . It was a strangely industrial room , with large apparently random concrete blocks ( which made for good seating but inconvenienced shelf layout ) , an abundant selection of different pipes , complete with taps and broken-off ends , and one particularly large and complex ' feature ' ( a sewage output ? ) that was a real pain to paint . A large dragon mural ( " Flarebright " ) covered one stretch of wall , designed by karne , and painted by karne , Viv , and Liz . The door was covered with blackboard paint , so that ' useful ' messages could , theoretically , be written on it in chalk . A large sign declaring something about parking was obtained , and the back also painted with blackboard paint , and ICSF in large white letters . This started off on the door , but eventually made its way to in front of the TV . For this brief time when the society had possession of two rooms , people would occasionally adjourn to the new one to take advantage of the floor space to play Tragic . The room was only 10m or so away from the old library - down a tunnel on the left of the old library , which led under the Quad , past store rooms of Outdoor Club , Canoe , ? ? , and opposite a room belonging to " Tools for Self Reliance " or various others . Karne notes : " ownership varied wildly - mainly various charity groups and 3 world help people - I 'm convinced they kept stealing our paint . . " It was at the end of the accessible corridor , approximately under the Beit Archway . Extract from Wyrmtongue , Oct . 1998 To find it , go to the Union Building , as you enter Beit Quad ( just after the archway ) you should turn left and continue walking until you reach some railings . On your right , is an iron staircase heading downwards . The library is actually in the basement , so go down the stairs and continue until you reach the white door , turn left and go through the brown door . You 'll find yourself in a twisty tunnel , turn right , then left and walk to the end of the corridor . The library is on your right and has a black-door covered in chalk . The tunnel continued , but was blocked by a locked door beyond which was a forbidden zone . However , sometimes this door was unlocked for mysterious reasons , and it was discovered that the tunnel continued down some rickety old wooden steps and right across the Quad , to join up to the NE corner of Beit . The tunnel had a similar unfinished , industrial feel to the room - numerous coloured wires and pipes showing in the ceiling and walls , loose planks with large gaps between them forming the floor , through which miscellaneous small items were occasionally lost . People were known to pull up these planks to retrieve dropped possessions , revealing a 1.5m deep grimy hole with yet more pipes . A blinking amber road light sat cheerily outside the new icsf library door , which was fortunate , as the corridor light seemed to break/become ' lost ' with surprising regularity . Being so close to the old library , the books were transferred by hand by a convoy of icsf committee and proto-committee . The shelves were bolted to the walls with power tools ( thanks to Alan ! ) . Several sets of cheap black metal shelves were bought - these turned out not to be such a good investment , as they tended to buckle under the weight of the books . It was resolved to buy the more expensive grey British Standard shelves next time . This new room served the society with distinction . It was huge , with ample room for all the shelves as well as a large area for sitting and watching TV . The stifling heat led to the purchase of a fan for the library ; a bin was also acquired to control the spread of Union curry . The room became almost respectable over the course of the next year , with the acquisition ( thanks to certain members of the society and monitoring of the , ahem , abandoned goods in Beit Quad ) of a wooden coffee table ( often used for Tragic ) , a really really nasty orange-brown sofa ( later binned on health & safety grounds by the Union ) , 5 good quality reception chairs , another swivel chair , a dusty green carpet , and even a fridge ( belonging to Adam , who did n't have room for it in his flat ) . The wooden stool and increasingly dead black swivel chair were also transferred to the new library , along with ( of course ) First and Second Stage , the video cabinets , and the nasty cushions . A large piece of mattress foam , minus any sort of covering , was also obtained and placed on one of the aforementioned concrete blocks as convenient seating for people watching the TV , or wanting somewhere to collapse . This piece of yellow foam was never covered , resulting in small pieces continually breaking off and being distributed around the floor and on people 's clothing . ( Karne mutters something about Robin , a party , and a large amount of port , related in some way to a stain on the underside of the yellow foam . I do n't want to know . ) The walls were again covered with posters . Two large plastic ' trays ' of spare books were piled in the corner - these were duplicates of books already in the library , acquired from various donations . The library did n't want to keep these ( no room ! ) , but sold them to members at a minimal cost . Being in the same basement , this room suffered the same wildlife problems as the previous one , but for some reason it was less noticeable ( probably more chairs for them to hide under ) . However , Outdoor Club members were known to employ a hammer when entering their stores ( in the same corridor ) , in an attempt to take the cockroaches unawares . This library saw a lot of use during its year . It was frequently open outside official opening hours , turning into a common room for the members , who would turn up whenever they were in college without a lecture to go to . There were regularly 6-15 people in the library at lunchtimes , and much Babylon 5 was watched ( Robin having temporarily loaned his collection to the library ) . Unfortunately , this library also seemed to suffer more than its fair share of security problems in its short existence , possibly aided by the number of people going in and out . Certain valuable items were lost , as well as multiple left-over buckets of paint , and the entire Amber series by Zelazny . At one point the lock was forced , but ( thanks to Alan again ) it was replaced with a new one , plus much chemical metal , which solved that problem . In this year , the library was honoured by the temporary presence of the RCSU mascot , Theta . Several Theta bearers were active icsf members , and for a few weeks between public appearances , Theta ( a large and heavy thermometer ) resided among the shelves . Many of the pictures on this page were taken from a Half-Life map that was made - for more and larger pictures , see Mapping and Modelling - icsf Library . [ Can you add anything to this history ? ] -- Back : The First Library : Beware of the Leopard Next : The Portacabin Experience -- </text>
<text id="bzlqz" url="http://www.socialistunitynetwork.co.uk/news/g8jepps.htm">
' Fight poverty not wars ' : reflections from the Edinburgh march Jim Jepps reports from the scorching streets of Edinburgh I 've been told that Madonna began her set with her hit ' Music ' whose main refrain goes " Music unites the rebel with the bourgeoisie . " I can think of hardly any other song that sums up Live8 better than this . But if the ideas of the gig goers and TV viewers must have been mixed , what of those who actually came to the protests in Edinburgh ? Having spent the weekend diligently vox popping and discussing the mood there are some clear pictures emerging , of who is here and why . There are of course three main ' camps ' . The NGO/Make Poverty History crowd who range from ' let 's hope Gordon makes some good decisions ' to a fairly clear , if fluffy , anti-capitalist consciousness . The opposite camp is the dissent/indymedia crew with their formidable logistical acumen and clear intent to both protest and have fun at the same time . These two camps have no cross over what-so-ever as far as I can see . Sitting cheerfully in the middle is the G8 Alternatives/socialist/radical grouping . This middle group certainly has the advantage of wanting to talk and discuss with the more Christian/NGO elements of the demonstrations , but I ca n't help feel it 's often in a very sterile and unimaginative way . Having taken a random sample of paper sellers its pretty clear the left found the new ' white bloc ' impenetrable and often were irritated by a perceived blandness . A few self deluded souls aside it was clear that the old style revolutionary literature was not ' selling like hot cakes ' - part of the question is , is this because the demonstrators were to the right of the anti-war demonstrators or because parts of the left is putting their message across in a tired and stale way that leaves one hungry for less ? The Edinburgh demo itself was scorching hot and enormous . Clearly something between two and three hundred thousand strong . Whilst many went on the march others found queuing for hours in the park just to get on the march less appealing and ' the Meadows ' was thronging all day with those listening to the music on big screens , having fun with various family friendly activities or simply catching up with old friends . Great fan of route marching for justice though I am I thought I 'd do my duty and quiz those remaining in the Meadows on how they thought things were going . There was certainly a real carnival atmosphere and part of the reason for this has been the incredible diversity of the hundreds of thousands of participants . I do n't just mean the obvious political differences , but the cultural breadth of it as well . I think this demo had far more young people on it than even the great two million demo against the war that seems like many years ago - and it 's clear there were a high proportion of families and groups of friends there . Another obvious difference between the mass anti-war demonstration and today is that Saturday 's demo was very very white - and I 'm not referring to their shirts . I think part of this is the product of NGO and church involvement that have brought people on mass from the middle of England and also the apparent non-involvement of the Muslim community that made the anti-war movement so inspiring . A few placards ( chosen at random ) " send my friend to school " , " George Bush number one terrorist " , " no man is an island " , " left to die by G8 con " , " dirty aid , dirty water " and the clear and simple " fight poverty , not wars . " It was also nice to see Daily Mirror placards - with their headers torn off . Speaking to people about the relationship between the mass gigs and the demo I got some interesting responses . Dave from Oxford thought that in the media the gigs will have surpassed the demo and that the music was guaranteed press coverage in a way that the G8 ' Alternatives ' were not . However , as a veteran of Prague , Nice and Genoa anti-capitalist protests he still felt that it was the direct action that was the most important part of the anti-G8 protests . However important this mass involvement was ( and he clearly thought it was ) this was not an anti-capitalist mobilisation , but a demo for a " nicer world " with anti-capitalists in it , as a radical rump . We chatted about whether this G8 was more like previous mobilisations Genoa or Birmingham . It feels like the size and emotion was at the level of Genoa but the predominant ideas were often that of the NGO dominated Birmingham mobilisation . Matthew from Leeds thought this underplayed the diversity of the Genoa protests , because although they were explicitly anti-capitalist there were still pacifist , white handed , Christians there , who ironically took some of the worst of the beatings from the police . Martin from London pointed out the lack of trade union banners , but , in all fairness , as I wondered the crowd I later came across a gorgeous block of trade union banners and placards and the sectioning off was more of a sign of rigid and determined organisation of a very large demonstration than lack of union support . I hunted out some paper sellers of various left organisations who were , on the whole , fairly candid and said that whilst they 'd sold lots of merchandise they were having difficulty selling their papers . One seller saying " the Christians are impenetrable . " This was clearly not a traditional hard left protest . Speaking to Karen and Lindsey from Zimbabwe they asked " where are the African voices here ? " and felt that Africa probably did n't even know about the G8 and their protests were taking place . But they also seemed to reflect some of the tabloid worries about African corruption and felt that any benefits the G8 should bestow had to be tied to advances of democracy against dictatorship . I really pressed them on this because it seemed unrealistic to me to say unless you 're nicer to your people we will let them starve . But they were pretty clear , no debt relief et al without attacking corruption . Later in the day George Monbiot ( star of the Stop the War rally in my view ) addressed this point really well when he said that " It 's the Western multinationals that are the biggest bribe givers in the world - who are they to lecture anyone on corruption ? " There was another clear worry on the part of the protesters - that of being used by the G8 and the demonstration being seen to be owned by Brown , Geldof and co . Jo from Inverness went so far as to say that she should have been marching separately to make it clear she wanted to abolish the G8 , not simply appeal for it to have a cuddly side . Nan , Jo 's vociferous yet jovial friend , said that although " folk sometimes need a spokesman " they " forget we have all have a mind " and even people who are seen to be leading the movement need to listen and respect the opinions of this broad mass . This point was also picked up on at the Stop the War rally when John Rees quite rightly proclaimed that we should never let anyone " use a mass movement for their own purposes " and I could n't agree more with John on this ( cough ) . David and Lorna , from ' the north ' ( of England ) put it well when I asked if they 'd come to demonstrate for or against the G8 . " We think the G8 should just get off the backs of the poor . That 's what we think , but I 'm not sure everyone here agrees . " It was also clear they were pulled by two different arguments . Whilst on the one hand they felt that many of the NGO style protests seem politically bland and they were very keen to say that it 's the corporations that are one of the prime creators of injustice in the poorest parts of the world . They were frustrated that the mainstream acceptance of the campaign had also diluted the message far too far - simultaneously they believed that Geldof had made " this all possible " . Now in terms of numbers I actually believe it 's the descendents of Jubilee 2000 that mobilised the bulk of demonstrators on Saturday but it 's certainly true that Geldof has helped create what Monbiot described as " the false consensus " that we are all on the same side . That 's why brilliant African activist Trevor Ngwane had his invitation to speak at the Make Poverty History rally withdrawn because his message of opposition to privatisation and neo-liberalism was " too radical " . But if we 're not going to address the conditions of structural adjustment that further impoverish the impoverished and create massive human catastrophes then are n't we just saying " let 's throw a few coppers in the charity bowl to make ourselves feel better rather because it 's too radical to actually make a difference . " John , from Edinburgh Unison was also very clear . It 's true that the voices of Africa had been virtually ignored in the debate on what should happen there but it 's also true that the people of the West have to take responsibility and do what they can to make the world a better place - " we ca n't simply leave the fight up to them [ Africans ] , because the same problems of workers ' rights and privatisation come from here " and although we ca n't end the problems ( unlike the implication of the Live8 memento stalls labelled " the final push " we have to try . The separation of the radical and mainstream elements of the demonstrations also led to a split in the way the more radical participants reacted to the whole affair . Some began to see themselves as the ' real ' protesters accompanied by far more politically backward elements - others developed a kind of frantic self delusional style trying to convince themselves that the entire thing was in support of their own views of the world . I found both these solutions wholly unattractive , although thankfully not everyone feel into these polarised camps . The Stop the War rally on Saturday saw a whole string of shrieking speakers barking at the rather small crowd ( estimates between 500 and 2,000 ) which felt very small because of the size of the earlier demo . Speaker after speaker referred to how ' we ' had made this all possible ( which ' we ' they did n't say ) and the how the war was central to it all , or who poured hatred and scorn upon Make Poverty History for its insipid message of collaboration with the enemy . The fantastic antidote to this was George Monbiot who not only had something to say of interest but actually spoke to the crowd rather than shouting at them . And , incidentally , on the question of the war , there were a large number of " George Bush World 's #1 terrorist " placards both on Saturday and on the Sunday anti-war demo which I ca n't help feeling is the wrong message for the left to send out . I liked the occasional " fight poverty not wars " placards that I saw which genuinely drew the issues together , but to tell tens of thousands of people who want to do something about global injustice that actually the only real issue is the war on terror I fear is to try to pull people away from making those connections and saying something that we hear every day , even in the mainstream press . Just a little niggle really . Anyway , having tried to record fairly faithfully a flavour of the conversations I had with the actual participants on the demo as an antidote to the rewriting of history that will inevitably take place , I 'll give the last word to Diane and David , the two demonstrators standing right at the back . " The whole idea is to end poverty , but these are all interlinked issues , we 've not got much faith in the G8 but I just hope that they 've watching and listening . " </text>
<text id="bzors" url="http://www.weirdwiltshire.co.uk/250703.html">
First published on 25 July 2003 The last laugh DOUG Bower , who claims to have been Britain 's first crop circle hoaxer , has been on the Marlborough Downs showing a Japanese film crew how it 's done . Mr Bower and his late friend Dave Chorley became famed as Doug and Dave when they claimed ten years ago that they had produced most of the crop circles for many years . The Southampton pair appeared on TV programmes showing how they made the cornfield patterns with trampling devices made from pieces of wood and rope . They managed to achieve the complex patterns , they said , with the aid of wire sights on the peaks of baseball caps . Mr Chorley died a couple of years ago but by that time the pair had long given up going out under the cover of darkness to make crop circles all over the South of England . On Thursday Mr Bower , who is now 79 , showed a Japanese film crew making a documentary how he could still make a crop pattern using the same piece of wood and rope he started out with in the late 1970s . The film company , Media Nations Inc , is making a documentary about Doug and Dave and their claim that they were the first people in the UK to make crop circles . And it paid dozens of local people £ 50 a day to act as extras . At the end of the first day 's filming Mr Bower , an artist and picture framer , told the Gazette that the only crop patterns that could be found until he and Mr Chorley teamed up were simple circles and swirls made by gusts of wind . Mr Bower said he had spent eight years living in Melbourne in Australia . " It was while I was there in 1962 that I read about three circles appearing on a farm at Tulley in Queensland , " he said . He returned to England in 1966 to live at Southampton where he opened an art gallery and became friendly with fellow painter Mr Chorley . Mr Bower said : " We got to know each other well because we had the same interests and were both artists . " They went out and about together painting on location and , said Mr Bower , it was while walking in fields near Winchester in 1978 that the idea of making crop circles came up in conversation . That was the start of Britain 's first crop circle making team . " Until then all the so-called crop circles had been the result of wind damage , " said Mr Bower . On evenings over the next 14 years they travelled hundreds of miles from their homes in Southampton to make elaborate patterns in cereal crops as far away as Gloucestershire and Oxfordshire . Meanwhile they sat back and laughed , said Mr Bower , as so called experts began giving reasons for the crop circles ranging from inter-galactic messages to UFO landings . Mr Bower , who is still sprightly , said : " We went as far as Eastbourne in the east and as far north as Wantage making crop circles at every opportunity we had . " Sometimes , he said , they would make several in a night before returning home to Southampton by dawn , tired but ecstatic at the way they had the world hoodwinked . He said : " We made a lot in Wiltshire because that is where the most fuss was being made about them because of the Avebury and Stonehenge link . " We used to work out the designs on paper so that we knew what we would be doing when we got to a suitable field . " I still have those original designs which prove how early we started making them . " Mr Bower said he and his friend used to spend the winter in his studio planning bigger and more complex patterns to make the following summer . " For 14 years we had everyone fooled , we were the only ones making the patterns although of course we never let on , " said Mr Bower . He said one reason they continued for so long without telling the world what was causing the mysterious crop pictograms was to poke fun at the establishment and the many so-called experts who expounded serious and complex reasons for the phenomenon . " We did it for 14 years without anybody being able to prove they were man-made , " he said . " Our big reward was in winding up those people who regarded themselves as experts and claimed they knew what was causing them . " We knew what was causing them , it was us , and at that time we were the only people making them . " Mr Bower said nowadays there are a number of teams competing to see who can make the biggest and most complex patterns . The documentary was filmed on Richard Hues ' land at Stanton St Bernard and the farmer was compensated by the Japanese production company for the damage to his crop . Among those paid to act as extras was Marlborough mum Bryony Sutton and her 20-year-old daughter Rosie . Both had just completed a film making course at Swindon College and were interested in seeing how the professionals worked . Mrs Sutton said : " The director recruited extras from the Barge Inn at Honeystreet and from some other places and we spent three days filming at Alton Barnes and Stanton St Bernard . " Rosie played a journalist ostensibly reporting on the crop circle mania . Mrs Sutton said : " The film crew and the director were all fine , they were very sweet . " There was a terrible problem though with the language barrier which caused a few difficulties to start with . " They spoke little English and our Japanese was non existent but it was all a good laugh . " The programme will be show on Nippon TV in Japan but may be syndicated worldwide . Back to 2003 index </text>
<text id="bzsxn" url="http://www.tsha.nhs.uk/modernising-healthcare-in-trent/the-local-supervising-authority-midwifery/lsa-guidelines/maternal-deaths">
Guideline Written : Guideline and Education Group Date : 2005 Consultation process : Reviewed by the LSA Guideline and Education Group , East Midlands at 1 st and final draft stages . Comments invited from all Supervisors via the Contact Supervisor mechanism . Final draft reviewed by each LSA . Approved by : LSA Guideline and Education Group and Local Supervising Authority Midwifery Officers . Date : April 2006 Implementation date : April 2006 Review Date : October 2008 GUIDELINES FOR SUPERVISORS OF MIDWIVES IN THE EAST MIDLANDS MATERNAL DEATHS BACKGROUND The Confidential Enquiry into Maternal and Child Health ( previously CEMD ) is a triennial report , which provides on overview of the numbers and causes of maternal death in the United Kingdom . The collated and anonymised information shows where improvements in clinical practice or service provision may help to prevent future deaths . It is therefore important that all cases are notified promptly so that full information on each case is readily available . CEMD and the Confidential Enquiry into Stillbirths and Infant Deaths ( CESDI ) merged to form the Confidential Enquiry into Maternal and Child Health ( CEMACH ) on the 1 st April 2003. These enquiries form part of the National Institute of Clinical Excellence ( NICE ) work programme . It is statutory requirement that all health professionals provide information and participate in confidential enquiries and supervisors of midwives should ensure that other areas of the health service , such as Accident and Emergency units and Intensive Care are aware of this requirement and have a local process in place to report maternal deaths to the supervisor of midwives . The aims and objectives of the CEMACH Enquiry are to ; · Assess the main causes of and trends in maternal deaths , to identify any avoidable or substandard factors and to share these findings with all relevant health care professionals . · Improve the care that women receive and to reduce maternal mortality and morbidity rates . · To make recommendations on clinical care and service provision , including audit . · To suggest areas for future research and audit at a local and national level . · Produce a triennial report on behalf of CEMACH . DEFINITION OF A MATERNAL DEATH A Maternal Death is defined as any death , which occurs during or within one year of pregnancy , childbirth or abortion . This may be directly , indirectly or unrelated to the pregnancy . Direct - a death resulting from obstetric complications of the pregnant state ( pregnancy , labour and puerperuim ) , from interventions , omissions , incorrect treatment , or from a chain of events resulting from any of the above . Indirect - a death resulting from previous existing disease , or disease that developed during pregnancy and which was not due to direct obstetric cause , but which was aggravated by the physiological affects of pregnancy . Coincidental - a death that occurs from unrelated causes , which happens to occur in the pregnancy or puerperuim e. g . road traffic accident . Late - a death occurring between 42 days and one year after termination of pregnancy , miscarriage or delivery that are due to direct or indirect maternal causes . Pregnancy related deaths - a death occurring in women while pregnant or within 42 days of termination of pregnancy , irrespective of cause of death . All Maternal Deaths should be notified to the LSA Midwifery Officer on the following working day , using the specific proforma that accompanies this document . IMMEDIATE ACTIONS - DIRECT MATERNAL DEATH IN HOSPITAL The on call Supervisor of Midwives ( SoM(s ) ) and Consultant on call should be contacted and asked to attend . The following procedures outline the key responsibilities of the SoM . · The Consultant on call should be asked to attend . They should meet relatives as soon as possible . The women 's named Consultant should be informed when he/she is next on duty . · Support and information must be given to the immediate relatives/next of kin . Relatives may wish for religious or spiritual support . The Hospital chaplain may be contacted if appropriate . · Ensure that the Coroner has been notified . The Coroner 's office should be contacted ( cross reference your Local Policy for contact numbers ) . Out of hours a Coroner 's officer is available for emergencies ( 24 hour service ) . · The attending doctor cannot issue a death certificate without first referring for consideration by HM Coroner ( The mortuary department should be informed that a maternal death has occurred and to expect the patient without a death certificate ) . · Ensure appropriate provision is made for the baby ; consider social services for help and advice particularly if the couple are not married . · The senior clinician present should inform the family that it is not possible to issue a death certificate without consideration of post-mortem by the Coroner . · The Serious Untoward Incident Policy should be initiated and details of the incident made available ( if appropriate a Root Cause Analysis ( RCA ) will be undertaken by the Risk Management Team , a SoM must be involved in the RCA ( cross reference Reporting and Monitoring of Serious Adverse Events , Investigation of Incidents and the Role of the LSA ) ) . · The medical records should be reviewed and the SoM involved should complete a summary of the case . It is important to note the names of all staff involved , particularly those staff that do not normally work with the Maternity Unit ( i. e . Operation Department Assistant ( ODA ) or Operation Department Practitioner ( ODP ) , crash teams , attending anaesthetists etc . ) . · The case notes and all documentation should be completed , photocopied and secured at the first opportunity . There should be an early review of the records ; the midwifery care given should be reviewed by the SoM . · The SoM will ensure that appropriate support is offered to the staff involved . Personnel such as the staff counsellor or Hospital chaplain may support the SoM with this . · The SoM responsible for CEMACH and the Head of Midwifery ( HoM ) should be informed as soon as possible within normal working hours . Appendix 1 offers a checklist that may be used . IMMEDIATE ACTIONS - DIRECT MATERNAL DEATH IN PRIMARY CARE The woman 's Midwife is responsible for ensuring that a SoM is informed of any maternal death that comes to her attention in the Primary Care setting . The SoM will notify the HoM and the LSA and CEMACH . The GP should also have notified the Hospital if the woman has delivered or received care there . ROLE OF THE CEMACH SUPERVISOR OF MIDWIVES · The CEMACH SoM may need to be released from duties to undertake this role . · The CEMACH SoM should ensure that the local Trusts policies have been followed . · The death is reported as a Serious Untoward Incident ( SUI ) . This is usually undertaken via the Trusts Governance leads . · The death will be reported the Local Supervising Authority Midwifery Officer ( LSAMO ) as soon as practicably possible initially verbally followed by the maternal death proforma . · The SoM should ensure communication takes place within and across the primary and secondary sector , including the family GP , and any other statutory agency connected to the family . · The CEMACH SoM will arrange a debriefing of all staff involved . OTHER DEATHS ( INDIRECT , CONICIDENTAL AND LATE ) All other deaths should be dealt with on an individual basis as these may include , murder , suicide , road traffic collision , women with known terminal illness . COMPLETING THE ENQUIRY FORM The CEMACH SoM coordinating the enquiry should send a copy of the CEMACH notification form to the regional coordinator . On receipt of the booklet it is essential that the CEMACH SoM tracks the progress of the booklet internally and seeks to have the booklet returned to the regional coordinator at the earliest convenience . WHERE TO GO FOR FURTHER ADVICE South Yorkshire Jean Hawkins - LSA Midwifery Officer South Yorkshire Strategic Health Authority Fulwood House Old Fulwood Road Fulwood Sheffield S10 3TH Tel : 0114 2263352 Email : jean . H awkins@yorksandhumber . n hs . u k Trent Shirley Smith - LSA Midwifery Officer NHS East Midlands Octavia House Interchange Business Park Sandiacre Nottingham NG10 5QS Tel : 0115 9684557 Email : Shirley . s mith@eastmidlands . n hs . u k Maternal Enquiries Midwifery Assessors Ms Dotty Watkins Director of Nursing and Midwifery Royal Hallamshire Hospital Sheffield Tel 0114 2268429 Ms June Lovett Head of Midwifery Rotherham General Hospital Tel 01709 304255 REFERENCES AND BIBLIOGRAPHY CEMACH ( 2000-2002 ) ' Why Mothers Die . The sixth report of the confidential Enquiries into Maternal Deaths in the United Kingdom ' . www . C EMACH . o rg . u k LSA ( 2005 ) " Reporting and monitoring of serious adverse events , investigation of incidents and the role of the LSA " , Local Guideline APPENDIX 1 MATERNAL DEATH CHECKLIST 1 Contact SoM and Consultant on call . Clinical Manager/CEMACH SoM/Named Consultant should be notified when next on duty 2 The Coroner 's office should always be notified . A death certificate cannot be completed until consideration has been given by the Coroner ( Local Coroner 's advice available 24 hours per day on Tel : _____________ ( enter local number ) 3 Inform mortuary that a death has occurred and that a body will be sent without a death certificate . 4 Photocopy and secure medical notes at earliest opportunity . Make appropriate arrangements for admin support . 5 Social Services should also be notified if the family social circumstances are applicable , or if a live baby requires care and the family support . 6 The Trusts Chief Executive , the directorate Clinical Director , Risk Manager and the Strategic Health Authority Clinical Governance Lead , should be notified when next on duty . The SUI Policy should be instigated . 7 The CEMACH Regional Coordinator should be informed on the next working day , see local contact numbers . 8 The Regional Midwifery Assessor should be informed on the next working day , see local contact numbers . 9 Inform the woman 's GP , Midwife and Health Visitor as soon as possible on the next working day . 10 Inform LSA Midwifery Officer as soon as possible on the next working day and a brief report submitted with details of any supervision/practice/support issue as well as precise description of events . 11 If the woman has been admitted having been treated or booked in another area , the Senior Midwife and Consultant at that Hospital must be informed . 12 If the death of the baby has also occurred , the Local Confidential Enquiry into Stillbirths and Infant Death office must be notified . If the baby is born , dies or is dead , the procedure for CEMACH should be followed . </text>
<text id="bzxmk" url="http://www.buildingproductexpert.co.uk/ExpandedEntries/expandedentry.asp?cid=212046&cname=Mark+Simpkin+Ltd&frmBPE=&frmCD=N&mopt=dpe&dpid=2302">
Standard and bespoke bench-seating fittings available from Locker Solutions are designed to meet the stringent requirements of many new locker-room environments . The standard range of bench seating is available in limited sizes and colours . Lockers Solutions offers a bespoke range of bench seating which is professionally designed in-house . All bench seating is suitable for use within dry- and wet-area environments , such as leisure centres and swimming pools . Composition and manufacture All bench seating is manufactured from mild-steel tubular frames , with soft or hard wooden slats . All slatting used is sourced from sustainable forests . Laminate bench seating is also available for wet-area environments . Size and weight Stock bench seating is available in 915 , 1,220 and 1,525mm lengths , in various standard designs . Bespoke bench seating can be created to individual specifications . Appearance Bespoke products are available to client 's individual specifications . A standard range is available for urgent project requirements . Sitework Locker Solutions undertakes site surveys , offers professional advice on design and product selection , and produces and works to layout drawings . </text>
<text id="cahel" url="http://www.siba.co.uk/about.asp">
SIBA PRESENTS THE PROFESSIONAL FACE OF A PROFESSIONAL INDUSTRY PROMOTING THE INTERESTS OF INDEPENDENT BREWERIES SIBA goes about highlighting the interests of beer drinkers and independent breweries in a number of other ways : Politically : SIBA is consulted by governing bodies such as DEFRA , Office of Fair Trading etc . regarding issues relevant to the industry . For example , the Review of Beer Orders , the Review of Duty systems , Drink Driving and the National Alcohol Strategy Promotionally : SIBA actively raises the profile of genuinely independent small breweries so as to provide a greater choice of craft beer to the public through the organisation of such events as regional beer festivals and the SIBA National Beer Challenge . Co-operatively : SIBA is divided into regions , which hold regular meetings , where members are able to express their views and concerns . These concerns are taken by regional representatives to the National Council who are then able to address them officially . The SIBA grapevine is highly efficient and is an invaluable tool in encouraging co-operation in such areas as highlighting changes that need to be made on behalf of the beer drinker and the exchange of expertise Professionally : SIBA members sign-up to a series of By-laws and a Code of Practice , which helps ensure that high standards of business practice and beer production are maintained Informatively : SIBA publishes its own magazine every two months . The SIBA Journal carries technical articles covering all aspects of brewing , by expert authors . It also keeps members informed of the Society 's campaigning activities and contains vital industry information Intro | SIBA 's role | SIBA Council The Society of Independent Brewers was founded in 1980 under the title The Small Independent Brewers Association ( SIBA ) to represent the interests of the growing numbers of independent brewing companies in the UK . It changed its name in 1995 to reflect better the changing aspirations of its members , but maintained its original acronym . SIBA aims to ensure that its members ' products are always of high quality and membership is conditional upon adhering to the Society 's Code of Practice and Bye-Laws . Beer and ale have been traditional and wholesome foods and beverages for well over 2000 years , and many styles are indigenous and unique to the British Isles . SIBA members seek to preserve these traditional styles and their traditional methods of manufacture , whilst at the same time demonstrating the skill of their craft through creativity , invention and innovation . SIBA is a Company Limited By Guarantee . That means that it is run by a Council of ' Trustees ' . These are appointed to represent members from each of SIBA 's Seven regions . In addition members with particular skills can also be co-opted onto Council </text>
<text id="cbfpd" url="https://secure.advanceperformance.co.uk/acatalog/Men_s_Wave_Nirvana_2_Mizuno_Running_Shoes.html">
Men 's Mizuno Wave Nirvana 2 Running Shoes ( 08KN540 62 ) By using their innovative Wave Technology , the Mizuno Wave Nirvana 2 not only offers full length cushioning , for impact protection , but full length support as well , to help reduce over pronation , when the arch of your foot collapses too far , which can be the cause of many running related injuries . The Wave plate is made from different materials throughout the shoe , the outside of the shoe ( lateral , non arch side ) is made form rubber to absorb and dissipate shock while the inside ( medial , arch side ) is made from Pebax which as well as absorbing and dissipating shock adds stability by being harder to compress than the other side , which helps to reduce over pronation . Additional cushioning is provided by VS-1 inserts in both the heel and forefoot . Comparable shoes ; Asics Gel Kayano , Brooks Trance , New Balance 1220 series , Nike Air Kantara , Saucony 3D Grid Hurricane . Full Spec and what has changed form the previous model . For a glossary of MIZUNO technologies click HERE </text>
<text id="cbukt" url="http://www.deafnessresearch.org.uk/?lid=1944&tmpl=ddmainprint">
Deafness : the facts Hearing aids How do I get a hearing aid on the NHS ? How do I get a hearing aid on the NHS ? If you are having difficulty hearing and think you might benefit from hearing aids , visit your family doctor , who may refer you to an audiology ( hearing aid ) department depending on local arrangements and what other symptoms you may have . Do n't forget to mention all possible relevant symptoms to your GP and specialist , for example , if you are experiencing noises in the ear or having difficulties with balance . All NHS ENT and Audiology departments will have a waiting period . If your GP refers you to an audiologist , you will go on a waiting list for an appointment . UK citizens and residents are entitled to free hearing aids through the NHS . However , if you are in a hurry to get aids , or want a particular type of aid that is not available through the NHS , an alternative is to go to a private hearing aid dispenser or audiology department . Some NHS audiology clinics have links with private clinics and may be able to offer guidance , or you can contact the Deafness Research UK Information Service . Before your first audiology appointment It is best to take the person you have the most conversation with along too , particularly if you are worried about being able to hear the audiologist . This will help the audiologist adjust the hearing aid to the voice you hear most often , and you will both understand the process involved in getting , using and adjusting to , your hearing aid . Ask the audiologist to speak slowly and more clearly if you cannot hear them . Think about which situations you have trouble hearing in . For example , one-to-one , watching television , hearing when you are with several friends , certain types of voices ? What to expect at your first appointment It will be explained what tests you are having . It will be explained if you need a hearing aid in one or both ears and why . Your audiologist will write down the name and type of hearing aid you are getting , and whether it is a digital or analogue aid . Your audiologist will show you your audiogram and explain the extent of your hearing loss . Your audiologist will show you how to care for your aid and how it works . Initial testing At your first audiology appointment , your medical history will be taken , your ears will be examined and your hearing tested . The main test is to find out the quietest sounds that you can hear at different pitches or frequencies , presented either over earphones or via a vibrator attached to your head . Additionally , a detailed questionnaire of your listening needs will normally be carried out . These simple tests will determine whether you need one hearing aid or two . If you need an aid , an impression of your ear will be taken , which will be used to create your earmould for your hearing aid . You will return several weeks later to get your aid fitted . At the initial appointment you will be asked a list of questions about your hearing to help determine how best to adjust your aid for different situations . Ask your audiologist to print out a copy for you so that you are able to monitor the situations where you have difficulty hearing . Keep a list of all the different situations you have difficulty hearing in and tell the audiologist at your fitting appointment . The more information you can give the audiologist about the different situations that you have difficulty hearing in , or hear well in , the better they will be able to adjust the hearing aid for your individual needs . Fitting Once your hearing aid is ready , you will return for a fitting appointment . Most people will receive one hearing aid , but in some cases the type of hearing loss ( bilateral ) makes it more beneficial for the patient to receive two aids . However , resource limitations mean that not everyone who would benefit from two hearing aids will get them . Your aid will be chosen to suit the degree and type of hearing loss you have . You will be shown how to put in the earmould . You will also be shown how to operate the controls and how to change the batteries . Your audiologist will help you to manage your hearing loss , improve your communication skills and enable you to participate fully in daily activities . Follow up care You will have a follow-up appointment around 6 to 12 weeks after your fitting appointment . Here you can discuss any problems you may be experiencing and any necessary adjustments will be made to the earmould and/or the programming of the hearing aid . For example , you may still have trouble hearing individual voices in noisy situations , or the aid may be amplifying sound too much in some situations . At this appointment , you may also get further information about getting used to , and looking after , the hearing aid . After your follow-up appointment you will not normally be sent another audiological appointment unless you request one . However , some audiology departments conduct a routine follow up after a period of one or two years . If you are not happy with the sounds the hearing aid produces and this is stopping you using it in all the situations you want to , you should request another appointment to make further adjustments to your hearing aid . Ongoing support You do n't usually need an appointment to get new hearing aid batteries . Check with your local department when facilities are available as opening times can vary . These are supplied free of charge from your local audiology department and may be available from local GP surgeries and health centres . If you have ongoing problems adjusting to your hearing aid , check if there is a hearing therapist in your area . They can offer ongoing support in helping you to manage your hearing loss , improve your communication skills and enable you to participate fully in daily activities . You can be referred by your family doctor or check with your local audiology department . If your hearing aid or earmould needs repairing you may or may not need an appointment , depending on local policy . </text>
<text id="cbxvh" url="http://www.port.ac.uk/departments/services/campusenvironment/">
Welcome to the Campus Environment home page The team has a wide area of responsibilities within the University , which include Caretaking duties , Security , Cleaning , Refuse/Recycling , Grounds , Redundant Equipment , Archives , Postal Services , Car Parking and Transport . The aim of the department is to provide all services to staff and students with the minimum of disruption to the daily schedule . Please follow the links on the left of your screen to what we hope will be an enjoyable and enlightening visit , we are always open to new suggestions and ideas for the content of the pages , your input will help us provide a more comprehensive service to all . " ... provide all services to staff and students with the minimum of disruption to the daily schedule . " </text>
<text id="cckmj" url="http://www.dillington.co.uk/day_course_details.asp?ED=Arts+and+Crafts&offset=66">
This classroom-based dayschool aims to introduce participants to the various approaches to photographing people and places , using monochrome and colour . An illustrated talk will be followed by the showing of distinctive photographs , black and white and colour , and a discussion . This relaxing and enjoyable workshop will introduce a range of techniques to enable you to improve your skills . The dayschool is offered in association with the Royal Photographic Society and tutored by one of its award-winning Fellows . The course is limited </text>
<text id="cdfcq" url="http://www.fst.rdg.ac.uk/news-archive-2004-11.htm">
26 November 2004 : Andrew Wilbey appointed President of the Society of Dairy Technology 18 November 2004 : Professor Glen Gibson to give University 's Christmas Lecture for Children - 20 December 2004 16 November 2004 : Visits to Taiwan help strengthen research links with National Pingtung University of Science and Technology 4 November 2004 : BSc Nutrition and Food Science now recruiting ! 3 November 2004 : " Obesity and health : Is Santa Claus a good role model ? " - Public Lecture on 15 December 2004 2 November 2004 : Prizes for excellent student performances 1 November 2004 : School welcomes visitors from Henan University , China 26 November 2004 : Andrew Wilbey appointed President of the Society of Dairy Technology Andrew Wilbey , a lecturer in the School of Food Biosciences , has been appointed as President of the Society of Dairy Technology . Andrew joined the School of Food Biosciences having worked for several years in the diary industry . At the University he has maintained this specialism with work on dairy products and , in particular , ice cream . The Society of Dairy Technology is dedicated to the advancement of dairy science and technology across all areas of the agri-food sector , to the mutual benefit of milk producers , dairy processors , food retailers and consumers , by the dissemination , and application , of knowledge gained from experience and experiment . Its primary publication is the International Journal of Dairy Technology . For more details of the Society , visit their web site at : http://www.sdt.org / 18 November 2004 : Professor Glen Gibson to give University 's Christmas Lecture for Children - 20 December 2004 Each year , the University of Reading hosts a ' Christmas Lecture ' for school children . This year , Professor Glen Gibson , Professor of Food Microbiology in the School of Food Biosciences , is giving the lecture on the 20th December at 3.00pm in the University 's main Palmer Lecture Theatre in the Palmer Building . The lecture has the title : " Bugs in the Gut " and will include interesting facts about : the trillions and trillions of bacteria inside you what they are about to do to your Christmas dinner how to build models of the human gut how to use diet to feed the friendly flora how to assess the sweetness of the diet and what this does to the germs Update ( 6 December ) : Due to a very high demand , we have been informed that all tickets have now been allocated by the University 16 November 2004 : Visits to Taiwan help strengthen research links with National Pingtung University of Science and Technology A series of symposia are being held as part of the events to mark the 80th anniversary of the founding of the National Pingtung University of Science and Technology , Taiwan . The School has close links with the University through a former PhD student , Dr Mei-Jen Lin . Dr Mike Lewis has just returned from participation in one of the symposia . The subject of his paper was " Raw milk quality and its role in the safety and quality of heat treated milks " . This week , Dr Alistair Grandison is in Taiwan giving a paper on " Manufacture and Purification of Prebiotic Oligosaccharides " and , in early December , Dr Niranjan will also be visiting and giving a paper on " Engineering Challenges in Modern Food Manufacturing " The National Pingtung University has strong research programmes in flavour science , milk stability , prebiotics and probiotics and biotechnology . We hope that the attendance of our staff at these anniversary symposia will further strengthen our relationship with the University . The English version of the University web site can be found at : http://www.npust.edu.tw/english/index.htm 4 November 2004 : BSc Nutrition and Food Science now recruiting ! Official approval has now been given to the launch of our new degree programme - BSc Nutrition and Food Science . Following a detailed scrutiny of our proposed degree by a panel including external assessors , the Faculty Board has given the green light to this expansion of our programmes . The BSc programme will be accepting students from October 2005 . The School has been expanding its work in areas of nutrition and health . We launched our MSc Nutrition and Food Science in 2000 and our increasing activity now enables us to provide an undergraduate programme combining studies in nutrition with our more traditional food science . The combination of the two areas will provide graduates who will be of great value at a time when consumers are increasingly interested in the functional properties of foods . For more details of the new degree programme , please see BSc Nutrition and Food Science 3 November 2004 : " Obesity and health : Is Santa Claus a good role model ? " - Public Lecture on 15 December 2004 A free public lecture is to be given by Professor Christine Williams Professor of Human Nutrition and Head of the School of Food Biosciences here at the University of Reading . The lecture will be given at The Madejski Lecture Theatre Agriculture Building Whiteknights Campus The University of Reading 8 pm Wednesday 15 Dec 2004 The lecture is given in association with the Thames Valley Branch of the British Association for the Advancement of Science Ideally , you should register for the lecture by e-mailing petergraves@warfieldsberks . f snet . c o. u k . But if you wish you can just turn up 2 November 2004 : Prizes for excellent student performances Congratulations to Chris Armah for winning the student competition for the best presentation at the Oxford Nutrition Group 's 10th Anniversary meeting held in Oxford yesterday . Chris is a research assistant studying for a PhD degree . The title of his talk was ' Dietary fat and vascular tone ' . He is working with Dr Anne Marie Minihane . Two of our new second year students have been awarded Prizes as a result of their excellent performance in their Part 1 examinations : Miss Sonam Sanghi , studying Biotechnology , achieved the best results in the Faculty of Life Sciences and was awarded the Ede and Ravenscroft Faculty Prize . Miss Jessica Jin , studying Food Science , achieved the best results for a student on a food related programme and was awarded the Sainsbury 's Prize . Congratulations to them all ! 1 November 2004 : School welcomes visitors from Henan University , China As part of our developing link programme with Henan University , the School welcomed 3 members of their staff to the School . Henan University of Technology ( HUT ) , formerly Zhengzhou Institute of Technology , is running a 2 year international programme from which students can progress onto the second year of BSc degree programmes within the School . The first students from this programme will come to Reading in October 2005 . The visit today was part of the preparation for the arrival of the new students . The picture shows ( from left to right ) : Mr Wilbey ( SFB ) , Xaioxi Wang ( Associate Dean and Associate Professor , HUT ) , Lan Kuang ( Vice President and Associate Professor , International College , HUT ) , Professor William s ( Head of School , SFB ) , Professor Lou Yuangong ( Vice President , HUT ) and Dr Gordon ( Director of Teaching and Learning , SFB ) . For more details of this link , </text>
<text id="cdngg" url="http://www.aslib.co.uk/training/careers/9.htm">
Vacancies are advertised in the national daily press and LIS journals . The Guardian is a particularly good newspaper to check out ; LIS journals are CILIP 's Library and Information Appointments which can also be viewed at www . l isjobnet . o rg . u k and The Society of Archivists ' Careers Opportunities . CILIP has also taken over LIBEX , the online clearing house for library and information staff looking for exchange experience abroad . The service is available exclusively to CILIP members at www . c ilip . o rg . u k/jobs_careers/libex . h tml . Registering with specialist recruitment agencies e. g . Aslib Professional Recruitment is also strongly advised . These should have details of a wide variety of vacancies within the LIS industry and may give advice on CVs and interview techniques . Aslib Professional Recruitment Ltd Aslib Professional Recruitment Limited is a licensed employment agency for library and information staff , and a source of professional , unbiased advice on the availability and suitability of posts in information handling . Its consultants are notified daily of a wide range of vacancies in libraries and information centres throughout this country and in Europe . This service is free to those seeking employment . Aslib-IMI Aslib promotes better management of information as a resource . We help organisations to become more effective , by enabling them to base their decision-making on timely and appropriate information . We help to develop and implement improved methods for the collection , storage , retrieval and transfer of information . Aslib acts as a focal point for all those concerned with the effective management of information . Our member organisations include industrial and commercial companies , academic and research institutions , central and local government departments and international bodies . Aslib 's activities include : · a recruitment agency · training courses , seminars , and conferences · open learning programmes · consultancy For further information about Aslib Membership , please contact : The Membership Manager , Aslib , Holywell Centre , 1 Phipp Street , London , EC2A 4PS / Tel : +44 ( 0 ) 20 7613 3031 / Fax : +44 ( 0 ) 20 7613 5080 / E : </text>
<text id="cdqvl" url="http://www.ncl.ac.uk/undergraduate/course/A106/profile/Can-I-spend-time-on-an-elective">
Can I spend time on an elective ? Yes . At Newcastle , we realize it 's important for you to gain as broad an experience as possible . This is why we give you the chance to spend 11 weeks ( including a fortnight 's holiday ! ) studying medicine outside Newcastle University as part of Phase II . You can choose any aspect of the subject and go anywhere in the world . Many students go to Africa , India or the United States . Recent students have worked in : the Paediatric Department at Kilimanjaro Medical Centre in Tanzania ; the Accident and Emergency Department at University Hospital in Malaysia ; Community Medicine at Chieng Yun Hospital in Thailand ; the Department of Medicine Santa Lucia , in the Carribean ; Paediatric Emergency Medicine at the Royal Children 's Hospital in Brisbane , Australia . Our Electives Supervisor will give you advice and help you choose where to go . We can even offer competitive grants of up to £ 350 to help you out . </text>
<text id="cedie" url="http://www.incomesdata.co.uk/europe/duediligence.htm">
IDS International HR Due Diligence Checklist Assessing risk and finding value in mergers and acquisitions Over the past decade this publication has been used by hundreds of companies . Now a new edition is available - updated , expanded and enhanced in the light of users ' experience . Of all business situations , the most rife with uncertainty and risk is when two organisations are moving towards each other with merger - or acquisition - in mind . All too often , the human aspects of mergers are ignored until late in the process . And yet the chance of success or failure frequently hinges on people . Increasingly , due diligence assessments are being extended to take fuller account of HR . Since its launch a decade ago , many hundreds of companies have used the IDS International HR Due Diligence Checklist to help them in this process . Now there is a new edition of the checklist , updated and revised in conjunction with consultants Cornwell Consulting . It provides a practical intelligence-gathering tool to help HR specialists get to grips with the challenge of conducting broad-based HR due diligence . How does it work ? The publication contains a set of checklist , ordered to ensure that examination of a target company begins by looking at deal fundamentals , and access to data , followed by the cultural and business context . It then follows the logic of the employment contract from recruitment to termination . The publication aims to ensure that you do not leave any important - and potentially costly - aspect of HR policy unexplored . What 's in the checklist ? Work through a series of structured checklists , either by desk research or local interviews , to answer questions covering all the key areas of concern , including : recruitment contracts of employment training and development pay , pensions and benefits performance and quality management working time equal treatment representation and communication security , safety and other liabilities termination retirement and pensions View the contents list in PDF Who uses it ? With over 100 pages of questions , the checklist provides a structured approach for HR professionals . It offers help for those : involved in exercising due diligence as part of an overseas - or domestic - acquisition undertaking a strategic review of personnel policies in another country or entering international HR management for the first time , using the checklist as an orientation tool . Buying your copy You can purchase a copy of the IDS International HR Due Diligence Checklist for £ 148 + £ 25.90 VAT ( IDS Members can purchase a copy for £ 108 + £ 18.90VAT ) + £ 5 postage ( £ 10 for overseas ) . Order your copy online or call IDS Customer Services on 020 7324 2599 . Search the IDS website Advanced search Site map Buy your copy You can purchase a copy of the IDS International HR Due Diligence Checklist for £ 148 + £ 25.90 VAT ( IDS Members can purchase a copy for £ 108 + £ 18.90VAT ) + £ 5 postage ( £ 10 for overseas ) . Order your copy online I would prefer to telephone or fax my order </text>
<text id="cegcr" url="http://www.pennine.demon.co.uk/NPC/1982/MEXICOSP.HTM">
NPC Journal 3(3 ) , 1982 , pp 11-17 Mexico 1981 - Spring Project Departing from Heathrow in typical British rain and low cloud I expected sunny Texas to be a pleasant improvement , but arriving in Houston six hours late , I got a bus to Austin and found the weather was just the same - a poor start soon to be improved upon as frantic last minute food and gear buying took place in increasingly hot conditions . After five days of this , based at AMCS ' headquarters ' as a guest of Peter Sprouse and Terri Treacy we hit the road to Mexico , the sheer length of the drive across Texas starting to bring home the size of this continent . We reached Ciudad Victoria , Mexico , the next day and from there we headed towards the mountains and the Río Purificación at Barretal . After a last swim in the river we set off up the long dirt track into the hills , starting out flat and straight past large cacti in the fields , but becoming abruptly steeper as the Sierra Madre Oriental reared up ahead . The track soon became a four wheel drive test piece like the Alum Pot track laid over Hardknott . This lasts for a good fifteen miles passing over the Paso del Muerte , an entertaining bit of road eight feet wide cut into a cliff face rising several hundred feet on the right , and adding an air of seriousness to the almost sheer half mile drop into thick forest on the left . Rounding a tight bend , a vista opened up on the right , of the Cañon Infiernillo , in the steep headwall of which is the massive entrance of Cueva Infiernillo , the bottom entrance to La Sistema Purificación . As darkness descended , we arrived at Conrado Castillo , a tiny forestry hamlet , which was to be our base for the next seven weeks . The first day was spent organising gear , and in finding our way round the immediate area . Our first trip into the Sistema was via the Entrada de los Franceses , an entrance direct into the highest part of the system , Valhalla , a complex fossil phreatic maze in somewhat crumbly rock . The first part of the cave is generally dry and we caved in jeans and shirt sleeves down a series of low passages and then many climbs always leading down over solution etched rock in wierd forms . One or two parts of this area are quite narrow , and as we were carrying quite a bit of gear , our progress was not too fast in the warm cave ( generally about 15° in the upper part of the system ) . A change of character in the cave to darker , firmer limestone somewhat reminiscent of OFD was closely followed by the sound of running water and we soon emerged at roof level above a five metre climb into Valkyrie River , a recently discovered stream passage whose source and destination are unknown . We unpacked gear and got changed into wetsuits in the roof passage and then climbed down into the stream . Upstream through beautiful blue dolly tubs , a series of shallow lakes led to a wide sump pool held back by extensive gravel banks . Here Randy Rumer donned a mask and tried free diving with an electric lamp . The roof levelled out at about -2m in very clear water but Randy needed a large rock in his wetsuit to get enough weight to go further . A small bell about 2m in had no air and as the sump could be seen to go many metres in crystal visibility he retreated . Don Coons dived a couple of times finding nothing new , but the visibility started to deteriorate , so we decided to head downstream to survey in going leads . Downstream from our entry point , deep canals in blue water with calcite encrustations made pleasant going to a sump with a bypass . From here we split into two parties to survey cave which soon degenerated into muddy grovels which closed down or sumped . We reached the surface after 13 hrs underground . After a couple of days rest , we planned a week long trip to Camp 1 in Infiernillo to explore leads in the lower part of the system . Since the cave entrance is halfway up a large cliff at the head of a cañon about an hour and a half from the nearest road access , and major leads are up to 3 miles inside the cave , camping is almost obligatory . We took the trucks down a rough 4-wheel track to where it fizzled out in the middle of the forest . A long trek down into the cañon following an ill-defined trail led to the base of the cliff . Peter Sprouse climbed up and rigged a rope for hauling . It was during the hauling that Peter 's pack broke loose and crashed down into a boulder wiping out one set of surveying gear and all our water purifier . Once we were all assembled in the 20m high entrance , it was getting quite late , but it was only a half hour trek in huge passage to Camp 1 in a side passage above a large static sump . The first day from Camp 1 established a general pattern as we split into three surveying groups working in different areas . I went with Jerry Atkinson , Del Holman and Duwain Whitus into a complex area near the Confusion Tubes on a photographic and surveying trip . The American style of exploring new caves is the only one possible in an area with so much open and going , so we started surveying into virgin passage , eventually extending this area down to the first running water found at Gnome Springs . The second day out , Jerry , Randy , Don and myself went into Moria , the westernmost area of the lower cave , discovered the previous year , which was near base level , and had a powerful draughting choke heading out towards the Great Western System . Jerry placed a substantial charge in the choke , but failed to clear it . The fumes soon cleared in the draught and we spent two hours digging but without success . On the next day a " Glub Glub " trip was planned into Isopod River in which a small stream had developed into a canal downstream . This necessitated heading along the route toward the top of the system , climbing up into the Confusion Tubes . From here we trogged along for half a mile in huge passages to a boulder area which got quite thrutchy . Duwain and I opened up a route to a deep blue canal which we decided to survey . This soon proved abortive in one direction due to low airspace , and the other way eventually led back to known passage , so we tried a dry route which turned out to be an alternative route through the Breakdown Maze back toward Infiernillo . Having spent several hours on this investigation , we decided that we no longer had time to visit Isopod River and so thrashed back to Camp 1 at high speed . On day four , Jerry and I planned to return to the Gnome Springs area with Don and Sheri , but when we got to Misty Borehole , we decided to look briefly at an unpushed climb at the end of this tube . Don tried out a few moves and suddenly shot up the wall , into a hole and out at roof level , much to our surprise . He then traversed over the top and into going passage and vanished for some time , only to return with news of a major borehole . We hurriedly rigged a handline and ascended to start surveying . The rift above soon turned into a tube and then developed into something unusual for the cave - a classic keyhole passage some 2-5m deep below a 2m tube . There were lots of side leads , but the main way carried all the air and we emerged into a sizeable tube . Unfortunately this did n't continue too far before a large flowstone blockage , but a side passage led to an area with cave ice pools and bacon rind stal , from where a beautiful flat flowstone floored tube ascended steeply to a series of climbs . Here we met a small stream depositing calcite which we thought could well feed Gnome Springs , but the water sank into a tiny vertical tube and our route was up the small waterfall into another tube almost blocked by flowstone . The water came from a small passage but the way continued to a deep rift in the floor which we traversed , past a pom-pom stalactite to a climb down into an increasingly complex and muddy area . Here we ran out of time and after a short run ahead we headed back to Camp 1 , pausing only to name the area Ithilien . Back at Camp 1 we found that the " 40 kilometre " party had taken place on the assumption that we had bagged enough booty , but that we had been so long that everyone else had now crashed out . Owing to lack of motivation , and one illness , day 5 was declared the last day of the camp , so we decided to get as far into the cave as possible in two groups - one finally getting into Isopod River and one to take photographs in the Netherhall , a very large chamber about two and a half miles into the system . Beyond the Breakdown Maze , the South Trunk continued very large again to the turn off to the lower Isopod River where the wet team were getting changed . We left them and headed into the Monkey Walk , an awkward stretch of passage with low roof and bouldery floor , leading eventually to the Isopod River , a large passage with a small stream meandering between gravel banks , and containing colonies of troglobytic isopods like little piles of white rice in the stream , which gave the passage its name . By traversing the few pools which blocked the passage , we were able to reach the site of Camp 2 on a shingle bank in dry gear , and from here we started to climb up immediately to reach the Netherhall , which contains a 500 ' high boulder pile - like climbing Great Gable at night . After about half an hour of upward slogging on scree , we reached the summit and spread out to get an idea of scale before spending the next five hours taking photos . This involved firing off over 60 large flashbulbs for two exposures , each with three cameras set up and the second involving various minions from the Isopod River team . Unfortunately , these photographs later proved to be useless and by the time we had made our way back to Camp 1 we had been caving for eleven hours . The next day , everyone had entrance fever to a greater or lesser extent , but by the time we had taken in the shock of all those COLOURS on the eyes and abseiled out into the heat and the flies , it was mid-afternoon . The slog up to the trucks seemed much longer on the way back , and it was dark by the time we reached Conrado Castillo . The Yerbabuena fiasco While the main group went to look at some old mines and possible leads , Jerry and I set off for La Yerbabuena , a small village about 7 km to the south where a sizeable cave ( Calenturas ) had been explored and a resurgence had been seen but not yet reached . We intended to abseil down the cliff that had stopped the previous party , but when , the next day , we struggled down through dense forest on a steep slope to reach the top of the cliff , we found that our 40m rope was hardly sufficient to descend what turned out to be very much the same size and shape as Malham Cove . A large stream was emerging from under an overhang , and we were able to drop rocks into the water about 80m below . The stream falls over a further large cliff into an inaccessible cañon , making an abseil from above the only feasible method of access to what may well be a significant cave . We retreated much frustrated and next day returned to Conrado Castillo to complain about inaccurate information from the previous party . Brinco Camp 3 After this , there was a rapid personnel change - Duwain and Del left and Louise Hose had arrived with Jim Pisarowicz from elsewhere in Mexico . Shortly later , Don and Sheri left , and Jerry , feeling ill , went with them , numbers being made up by the arrival of Patty Mothes and Roy Jameson . The next major project was to be Camp 3 - another major camp , this time a new camp to be set for the first time in the upper cave , about 350m below the Cueva del Brinco entrance and around two miles inside the cave . As the entrance series of the upper cave is much smaller than Infiernillo , but also wet , we had to arrange for gear packs to split into smaller units and be completely waterproof . As this was a new camp , it was thought best to have a supply run to set camp up , followed by a lighter trip to move in any gear which did n't make it first time . We spent a lot of time preparing for the first trip , finally getting underground at 2 pm on Monday 6th April . It is the norm here to spend a long time eating before a long trip and to set off fairly late - there is n't the usual Yorkshire problem of getting out in time for the pub ! Despite its proximity to the fieldhouse , this was the first time I had been into Brinco , but with the heavy gear , we were all moving slowly , so I had a reasonable chance to look around . The first part ( Historic Section ) is roomy and dry with many dead formations . We descended a fair way , mostly in steep passage but with a few climbs , until we reached the Dressing Room . This is where the fun starts with a wet thrutch , The Chute , followed by a narrow fissure , The Crack of Doom . This was quite time consuming with large packs , but once through , progress in the Lunar Way was faster , though strenuous , until another delay at Mud Ball Crawl . Beyond the crawl , the passage opened out into Rio Verde , a steeply descending streamway with steep gours and deep green pools , leading pleasantly to Flowstone Falls , a 20m freeclimb which we , however , rigged with a line to facilitate descent with heavy packs . The falls drop straight into a swimming canal and further cascade before a series of squeezes obstructed the way . Another steep climb led to the beginning of The Canal - a low airspace wade for some way in muddy water . This ended in a climb up and over a barrier and through a lake to the Speedway Bypass - a somewhat awkward passage breaking out dramatically at The World Beyond . The World Beyond is a major trunk passage carrying the largest stream in the system directly away from the resurgence for almost two miles . The going varies from deep swims of up to 100m , to a meandering stream among gravel banks , to climbs over large scale collapse . This ends abruptly where the stream , augmented by a major inlet of unknown source ( possibly Valkyrie River ) , cuts down to the right to form the Angel 's Staircase , eventually sumping at -600m . The main way on to Infiernillo and Camp 3 is to the left starting a series of steep climbs over rotting flowstone and a major change of direction at a pitch . Shortly below this was the site of Camp 3 - a roomy chamber with a coarse gravel floor and a couple of deep pools . Here we dumped the gear and had a rest before setting out for the surface . The trip back out , while not particularly fast , was a good deal easier without too much gear , and we arrived fairly fresh at the Dressing Room , and DRY GEAR . It was only a short run to the surface where we emerged to pleasant sunny daylight at 8.30 am - it had taken us 18½ hours to set Camp 3. Needless to say , this was followed by three days of rest before we set off for the real camp . Carrying only sleeping bags and light gear , we moved much faster - the whole party knew the way this time which also helped , so we got back to the camp in just over six hours . Day one of Camp three ( camp days were on average 28 hours , so we went quite a long way ' out of synch ' with the surface ) we set out in a " boys party " of Peter , Roy and myself to investigate southbound leads nearer to Infiernillo , while the " girls party " of Terri , Louise and Patty went surveying in Gypsum Passage - the southernmost part of the system . It turned out that the passages we surveyed had been explored by the team who first found the connection from the Infiernillo side , but which were generally rather unpleasant with muddy chalkification of the walls . Saturnalia did not lead anywhere of great note , and we returned to camp to find that the girls had reached a solid aragonite blockage in a very pretty passage with no draught . Day two saw the girls surveying a large passage leading from beyond Saturnalia , but which soon broke up into small pointless tubes , while we headed nearer to Infiernillo to investigate a side passage heading north parallel with the main route . Ganymede Passage proved to be a major trunk passage but ended in small tubes which descended abruptly over rotting travertine to a lower series which we did not investigate . Instead , we traversed over lakes in the main route to Infiernillo to find another large passage parallel with the main line , which had also been found from the Infiernillo end . This was easy surveying until the tape got clogged with mud . Day three saw me back in this passage , this time with Louise and Terri , and we reached a complex junction area from where our route turned out to be a dead end . Returning to the junction , we folowed footprints into a large maze area , Medusa 's Maze , which descended down the dip of a major joint to an area with attractive formations . On day four , both parties worked in and around Medusa 's Maze , and we extended the area downwards until stopped by a large phreatic lift going steeply up , The Wall , which proved rather loose at the top . Below this , however , we found yet another downward lead into smaller passages but with a strong draught . This area , Yawndwanaland , continually stepped north , then down dip , then south along the strike , then down dip , then north along the strike and so on , moving very slowly west on balance until at the end of the day we reached a steep climb down . Louise went to investigate , and found that it dropped into a major north-south passage which must by now be both deeper and further west than the main route to Infiernillo . As this passage seemed to promise the major breakthrough needed to extend the system at depth under the ridge to the south , where sinks lie up to 1600m above the Infiernillo sumps , both parties were fielded into it the next day . We elected to survey north while Peter , Roy and Patty went south . Our lead , Death Coral Rift , headed dead straight in a high rift floored with death coral , a sort of muddy calcite encrustation that seems to grow in passage annually flooded with turbid saturated water which drains slowly . We shot leg after leg , mainly easy and long , until we came to a shattered chamber . Climbs led to more bouldery passage , still heading north , until we came to a conclusive , but draughting choke apparently close to the Netherhall . From here we headed back the 800m we had surveyed to see how the others had got on . After stopping for a few photos , we met the other group just beyond the entry point in enlarging passage . They had surveyed over 1200m in generally large draughting passage heading south all the way . This passage was now nearly as far south as the southernmost point of the system . We returned to camp elated after fourteen and a half hours , and discussed stretching food supplies to allow one survey team to carry on south . When Peter , Terri and Louise set off next " morning " however , they quickly returned , having found the system was in flood . This meant that the World Beyond would be difficult , but more important , the Canal might be sumped . Roy , Patty and I set off for the surface immediately , while the others packed up their camp gear . As we ascended the pitch , we could hear the roar of the World Beyond Stream . Fortunately , the passage is large , and the stream by no means impassable , so we quickly hurried on . When we reached the passage just before The Canal , we were relieved to be free of the roar of the stream but worried to find that the draught appeared to be absent . I lowered myself gingerly into The Canal and swum to the lowest point where I found that , though the water was higher , there was still a draught howling through the small airspace . At some risk to lights , we all got through , thinking that our troubles were now over - but the sight that greeted us at the end of The Canal soon changed all that . The Rio Verde stream had risen from a tiny trickle to a sizeable torrent crashing down the climbs , making these very sporting , and causing havoc with the lights in the squeezes . When we reached the Flowstone Falls , it became apparent that it could n't be climbed , even with my Oldham lamp , so we were very glad of the rope we had rigged , though somewhat worried about possible abrasion in the water . I prusikked first , and re-rigged the rope to move the fairly minor abrasion clear , then illuminated the pitch while the others climbed . The rest of the Rio Verde was equally sporting and it was a relief to reach dry passage at Mud Ball Crawl . A brief panic hit us as we heard a loud roar from the Crack of Doom , but the torrent here proved to be mainly illusory . We did n't bother to change into dry gear as we slogged slowly out of the Historic section to be met by Jim Pisarowicz just inside the entrance as we emerged just before midday after ten hours caving . We crashed out quickly in case we had to go back in to take a food stash for the others , as we were sure that The Canal would soon sump behind us . But in fact the others came out about three hours after us , having dumped some gear at the World Beyond . We learned from Jim that almost four inches of rain had fallen in the previous three days , as the start of the wet season was approaching . While Camp 3 was busily succeeding , Jim had not been idle , having spent the time in surface prospecting on the ridge to the south . Of several holes he had investigated , two looked particularly promising , situated above the area that the new Camp 3 passage was heading for , and we soon set off to investigate these . The large hole was a 5m diameter shaft in the bottom of a wooded shakehole , which sounded very deep . We put a 93m rope down it and Jim set off only to find that it was too short . I was volunteered to go next , with two spare ropes to tie on . In fact only one was needed , and when I had passed the knot and sorted out the tangle of rope below it , I was able to reach the floor 105m below the takeoff . The shaft was slightly damp and distinctly chilly , suggesting that it was n't going to go , but as my eyes adjusted I found a small rift in the wall leading to a further pitch , so as Louise came down with the survey rope from above , I rigged the remaining rope and descended to a ledge about -15m overlooking a further drop with large flowstone cascades on the far side ; we were clearly going to have to come back another day . I reascended the small pitch to meet Louise , talking to Peter , who had the top of the tape about halfway down the pitch . The survey showed it to be 105.5m long , but as further progress was impossible , I set off to reascend . About 10m from the top , hidden in vegetation , an unprotected rub had cut into even super-resistant PMI enough to cause concern , and several minutes were spent arranging some protection before Peter and Louise came up . On the next trip , Jim descended the smaller pot to find it choked at -36m so we quickly abandoned Pozu del Peso and returned to the deeper Sotano del Rama . Jim , Lousie and Peter set off down , and about two hours later returned having found a choke at about -140m . After this , Jim and Louise left , leaving just Peter , Terri and myself to spend the final week in sundry pursuits , such as retrieving the last of the gear from the World Beyond , surveying in some of the smaller local caves and surface surveying , before returning to the US . The Spring Project was pretty successful , extending the system from 38km to 45.5km , closely challenging Easegill in the world length stakes . A lot of extremely high quality caving was done and I would like to express my most sincere thanks to Peter and the Proyecto Espeleologico Purificación for allowing me to join them in 1981 . I hope to be able to return to assist in future years in this magnificent system . Andrew Waddington NPC Large Pot Journal 1982 : Next page : Back to contents Previous page : Mexico 1981 - the background Out of print publications list Northern Pennine Club Home page </text>
<text id="celpi" url="http://www.hsl.gov.uk/publications/car.htm">
Publications - Committee on Analytical Requirements ( CAR ) The Committee on Analytical Requirements ( CAR ) comprises occupational hygienists and other stakeholders from HSL , external agencies and industry . Its aim is to identify new or improved tools to assess exposure to harmful substances in the workplace and disseminate information to potential users . Terms of Reference Minutes of Meetings News Methods in Preparation Useful Links Terms of Reference The aims of the Committee on Analytical Requirements and its working groups , in liaison with other organisations are : To advise on the need for new or improved tools to assess exposure to harmful materials in workplaces covered by HSE and Local Authorities ; To evaluate and peer review the tools to ensure they are fit for purpose ; To disseminate information about the assessment tools to potential users ; To encourage good quality in the application of the tools . Back to the top Minutes of Meetings Meeting 48 , 27 October 2005 - click here to download ( PDF ) Workshop , 8 June 2005 - click here to download ( PDF ) Back to the top News The next CAR meeting is scheduled for 16 May 2006 at HSL . MDHS39/4 Asbestos fibres in air sampling and evaluation by Phase Contrast Microscopy ( PCM ) under the Control of Asbestos at Work Regulations and Asbestos in bulk materials , and MDHS 77 Sampling and identification by polarised light microscopy ( PLM ) have now been incorporated into HSG248 ' Asbestos : the analysts ' guide for sampling , analysis and clearance procedures ' and will be withdrawn by the end of 2006 when the new regulations are due to come into force . MDHS 63/2 - 1,3-Butadiene in air - Laboratory method using diffusive samplers , thermal desorption and gas chromatography was published March 2005 MDHS 101 - Crystalline silica in respirable airborne dusts was published February 2005 . This method replaces MDHSs 37 and 51 . MDHS 53/2 1,3-Butadiene in air . Laboratory method using pumped molecular sieve sorbent tubes , thermal desorption and gas chromatography was published August 2003 . MDHS 95/2 Measurement of personal exposure of metalworking machine operators to airborne water-mix metalworking fluid was published August 2003 . Back to the top Methods in Preparation New MDHS on Asbestos contaminated land New MDHS on ICP/AES MDHS 97 Methods for sampling surface contamination MDHS 61/2 Total hexavalent chromium compounds in air MDHS 59/2 Man-made mineral fibre </text>
<text id="cesta" url="http://www.baronage.co.uk/bphtm-01/const-02.html">
N AN EARLIER ISSUE of this magazine we noted that in the approach to the 1997 general election the public debate on constitutional issues covered a wider range of topics than perhaps ever in the history of the British Isles . Regrettably , after the date of the election was announced these issues were almost ignored as the party propagandists and the editors of the news media concentrated their thoughts on the corruption seemingly then inseparable from political life . The serious consequences of this unbalanced approach aggravated one of the greatest weaknesses of the British style of democracy ~ the confrontational two-party system that suppresses those issues neither of the two main parties wishes to have fully discussed , and then claims that the winning party has " a mandate " to execute whatever policies have been included in its manifesto , whether or not they have been adequately debated in public . The electorate that traditionally accepted the limitations of the system has begun to question it , partly because there is growing unease about the competence and integrity of the nation 's politicians , of course , and partly because a constitution which is not yet proved to have " broken " is about to be " mended " for no obviously rational purpose . Voters now have to recognise that if they supported Tony Blair because they believed John Major to be incompetent , they are claimed as supporters of a Scottish Parliament ( and to have voted for the disintegration of the United Kingdom that may one day follow in consequence ) . But voters who supported John Major because they believed Tony Blair to be soft on militant Trade Unionism can be claimed as supporters of near-total privatisation ( and to have voted for the consequent economic disintegration that will afflict the more geographically remote regions of the United Kingdom ) . This View from Westminster column looks at one aspect of the weakness of a system that allows governments to claim imaginary support for specific measures on the basis of the generic support manifested by an election victory . This is the threat to the nation 's constitutional stability offered by Labour 's intention to " reform " the House of Lords into a kennel of obedient poodles dependent on the patronage of an elected dictatorship . A View from Westminster Tom and the House of Lords A S A YOUNG OFFICER in a county regiment he had been wounded in 1918 and still limped . In 1939 he carried a stick both when he was in uniform , a major in the Home Guard , and in a tweed suit , the headmaster of a village school . Although he would not have known it , he was the " Middle England " of the war years . Tom was a small man , slight of build , who carried authority as one born to it and treated all who met him , staff and parents and pupils , with great dignity and kindness . He was a disciplinarian who believed in the virtue of hard work , the inculcation at an early age of team spirit ( the " British " quality he insisted would win the war ) , and the encouragement of ambition through the promotion of individual competition . In consequence his school of 150 children aged between five and ten was well-drilled ( an essential factor in the management of young children during air raids ) , played football and cricket ( the boys ) and hockey and cricket ( the girls ) , and strove for academic excellence . ( Pupils who performed badly were helped with improved teaching , not with requests for more money . ) During the period I knew Tom , only one child passed his seventh birthday unable to read . ( Little was understood about dyslexia in those days , but Tom recognised that a boy who was average in arithmetic and played games well could not be stupid and took him for personal tuition . ) In the senior class occupied by the ten-year-olds a typical examination question * required the calculation of the time taken to fill a swimming bath with water flowing at a constant rate ( gallons per minute ) . The bath was rectangular with the addition of a level half-circle at one end and a constant slope down to the other end . The cubic volume of a gallon of water was given as a rounded figure . ( A teacher recently confessed that most of her class of fourteen-year-olds would be unable to calculate the correct answer , even with the pocket calculators unknown in Tom 's days ~ but , this being England in 1998 , many in her class could not have read the question anyway . ) Tom has gone now , as did his education system as soon as the reformers seized power . Discipline was judged harmful to the full development of a child 's latent abilities , so the neat rows of desks seating attentive pupils were replaced by scattered groupings of noisy and distracted rebels . Competition , with its inescapable consequence that if one child is to win ( that is , to be rewarded for its effort ) , another will appear to lose , was deemed to destroy a child 's confidence . Games that required physical stamina were discouraged because gifted children made their less gifted friends feel inferior , a deficiency inconsistent with a world in which all were to be equal . And thus to achieve the parity these social engineers sought , there was a levelling down . The fall in educational attainment in British schools , for which anecdotal evidence was overwhelming , was hidden by the reformulation of " standards " and highly prejudiced reports . Centres of excellence were almost wholly destroyed in the state-financed sector while plans were laid for the abolition of the private sector , necessary measures to eliminate comparisons . But the world moved on and grew smaller . New comparisons appeared , this time with the nation 's commercial competitors . Asian students living thousands of miles away were two or three years ahead of their British counterparts . Asian students living in the next road and attending the same school were , in response to the encouragement of their parents , studying hard and achieving more than their indigenous classmates . The Germans and the French , the Dutch and the Belgians were all leaving school with better mathematics and science , two or more languages , and going into better jobs . In the United Kingdom the illiteracy rates were becoming evermore horrific and a new generation of social engineers had become forced to recognise a new cycle of deprivation . Britain at the time of Rab Butler 's Education Act had a traditional system of education that worked . Butler 's measures did not set out to " mend " it ( because it was n't " broken " ) , but did intend to improve it . His measures succeeded , but unfortunately the social engineers who followed Butler had a different agenda . They wanted to restructure society . To do so they were willing first to destroy it . While today all the major political parties can recognise the awful state of British education , they can agree neither on the causes nor the cures . The most recent scapegoat has been the " lack of leadership in the education profession " ~ yet really there has been no lack of leaders , merely a shortage of leaders willing to recognise that what had not been broken should not have been mended . From the masses available , one anecdote should suffice . A six-year-old boy left his village school ( two classes , two teachers , fifty pupils , an ancient building ) when his father 's work took him to a new post . His new school was modern , larger , and its teachers younger with better qualifications , but he very quickly became unhappy . At home he was uncharacteristically ill-behaved . At school his conduct deteriorated to such an extent that the headmaster asked his father to come for a meeting . The father quickly recognised the headmaster to be a natural leader who appeared to understand his job , was eloquent and expansive in his explanations of what was wrong with the boy , and was sufficiently self-assured to countenance no theories other than his own . The principal factor in the creation of the problem was the boy 's father , who obviously expected far too much . That the boy had been taught to read while so young was manifestly wrong , just the sort of mistake these little village schools always made and reactionary parents ill-advisedly encouraged . Now the boy was incapable of working within his own age group , which would not make a formal start to reading until next year , so for his own sake he was to be pushed backward . He would be helped to forget that he could read . He could thus be prepared to fit in with his classmates when they started . The father was asked to ensure that the boy had no access to books at home . The critical factor that justifies the telling of this anecdote is that this headmaster was an intelligent man , albeit of extreme left-wing political views , who truly believed that a fairer and more honest society would be built if the education system could be manipulated wisely . He and his fellows have led the English education system for three decades , almost uncriticised by the major political parties until this last couple of years . Now , far too late for millions of young Britons , far too late for the health of the nation 's industrial economy , British education is to recognise once again the benefits of Tom 's principles . Schools are to return ( slowly , because there will be substantial opposition from some sections of the teaching community ) to disciplined learning and the encouragement of hard work . Tom believed in the greatness of Britain and the benefits the British Empire spread around the world . He believed in the " British way of life " and the virtue of its system of government . He believed in tradition and would never have agreed to anything of well proven value being destroyed to engineer social changes of doubtful or impractical benefit . Tom would never have agreed to what the reformers did to the education of British children . He would have asked first why his system was wrong ~ and he would have received no rational answer . Tom would never have agreed to the dismemberment of the United Kingdom . He would have asked first for an analysis of the losses the Union had created , of the suffering it had inflicted ~ and , again , he would have received no rational answer . Tom would never have agreed to the abolition of the rights of hereditary peers . He would have asked first what damage had been done to the nation , during the lifetime of the oldest Member of Parliament , by the present operation of the House of Lords . He would have asked who stood to gain from the elimination of voices at Westminster who were independent of government patronage . And , yet again , he would have received no rational answer . Tom might never have said , " If it ai n't broke , do n't mend it . " That was not his language . But he would have been the first to stress the unwisdom of wantonly destroying any institution that can demonstrate the value of its contributions , especially when the destruction is irreversible and the supposed benefits of that destruction remain unspecified by its advocates . And , speaking for a people who today find their parliamentary representatives increasingly unrepresentative , he would have questioned the sanity of those who would with Britain 's traditional system of government commit the same tragic errors perpetuated by the social engineers let loose thirty years ago in our traditional educational system . *The typical examination question mentioned above was : Calculate the time taken to fill a swimming pool shaped as a rectangle measuring 30 yards by 15 yards with an additional semicircular pool of radius 14 feet attached . The semicircular pool is 2 feet deep . The rectangular pool is 3 feet deep at the edge of the shallow end and slopes down to 9 feet deep at the edge of the deep end . The water flow is 60 gallons per minute . Take one gallon of water as equal to one-tenth of a cubic foot . Show ALL your working . </text>
<text id="cewpo" url="http://www.assureweb.co.uk/public/Main.asp?Params=65C5B21F70C4D12078C6116FD0FD01ED50A0B7BBFBEBBDC7F85DB3C8C41964AFCF3977972B54AAC68E8AE50A7AB1888C6DEE8379864B7E79F21CA9025DF7DD55D14C83960FBA06562FFBA3B67013B5558FE96AD7">
HSBC may quit UK - papers 6th October From : IFA Online , 6/10/2006 9:44:00 AM It says HSBC moved its headquarters and tax domicile to the UK from Hong Kong in 1993 as a condition of its takeover of the troubled Midland bank . It pays more than £ 370m into the chancellor 's coffers each year . But the international nature of its business and the jet-setting tendencies of its top executives have regularly provoked speculation about the bank 's long-term plans . The bank makes no secret of the fact that it reviews the location of its head office every three years but has so far concluded it should stay in the UK , illustrated by the construction of a new tower in London 's docklands . The next review is expected in six months ' time and will be closely watched by international companies . In a speech last week , Chris Spooner , head of financial planning and tax at HSBC , suggested that the issue of the bank 's tax domicile was back on the agenda . " The UK used to be a good place to be for purely tax reasons , " he said . " I am not sure if that is the case any more . " HSBC pays a large amount of tax and we are the ones who decide who gets it . We take the competitive environment seriously and there are others like us . " The comments first appeared in Accountancy Age magazine after a speech given by Spooner at a Chartered Institute of Taxation conference in London . HSBC is likely to be one of the 10 biggest tax payers in the country and its tax bill is the main criterion when it decides where to be based , along with other issues such as regulation , transport and quality of life . HSBC 's senior executives have not tried to hide their irritation about the regulatory environment , particularly following changes brought in after the Cruickshank review of the industry . At the bank 's annual general meeting in 2002 , the then chairman Sir John Bond told shareholders of the bank 's concerns that new regulations were not in their interests or those of its customers . But speculation about HSBC 's intentions has escalated after last month 's ruling from the European Court of Justice that seemed to clear the way for companies wanting to take advantage of lower tax rates in some EU states . In a case against Cadbury Schweppes , the European court concluded it was legal for companies to exploit tax differentials as long as the employees were carrying out real work . A number of Lloyd 's of London insurance brokers have moved their domiciles recently . The European Central Bank has raised interest rates a quarter point to 3.25 % and signalled a further rise in December , despite fears that monetary overkill could smother Europe 's fragile expansion and cause a sharp slide in global asset prices , reports the Telegraph . It says Jean-Claude Trichet , the ECB 's president , warned of " serious risks " to price stability even though inflation dropped sharply to 1.8 % last month from highs of 2.5 % in June . " Further withdrawal of monetary policy is warranted . Money and credit growth are strong and liquidity in the euro area is ample by all plausible measures , " he said . The ECB is alarmed by property booms in Spain , Ireland and parts of France , fearing credit growth running at 11.9 % is stoking up inflationary pressures . The latest wage deals in German industry have seen rises of 3.8 % , the highest in a decade . " We have a compass , we have a needle in our compass . It is price stability , " Trichet said . The rate rise comes despite an increase in euro-zone unemployment to 7.9 % in August , the first move up in over four years . Joachim Fels , Morgan Stanley 's credit chief , said there was a mounting risk that the ECB would over-tighten , with serious spill-over effects for the rest of the world . " The ECB 's easy stance has supported the euro economy , asset markets , and the global liquidity cycle for no less than five years , " he said . " The impending return to monetary neutrality in Europe may well turn out to have more dire consequences for the economy and global asset markets than generally assumed , " he said . Fels said the shock could be similar to the effect of America 's shift to " restrictive " rates this spring , which set off a worldwide slide in asset prices . " A similar shiver may well go through the system once it becomes clear that the next provider of excess liquidity - the ECB - has turned off the tap , " he said . Trichet hinted yesterday that the ECB was having to grapple with incipient stagflation " , warning that inflation would remain stubbornly above the ECB 's ceiling of 2 % well into 2007 despite " downside " risks to growth . Bernard Connolly , global strategist for AIG , said the ECB was in effect setting interest rate policy to head off incipient inflation in Germany , obeying an implicit contract built into Europe 's monetary union that German price stability must never be sacrificed . The result is a long-term risk of " recession , deflation and default " for the Club Med bloc of Spain , Italy , Portugal and Greece . There are increasingly ominous signs of trouble in France as well . The information contained in the public areas of this website is targeted at UK individuals and businesses . Assureweb Ltd is authorised and regulated by the Financial Services Authority . Assureweb Ltd is entered on the FSA register ( www . f sa . g ov . u k ) under reference 217364 . VAT No GB 795 509874 . Privacy Policy | Site Terms & Conditions | Use of Cookies </text>
<text id="cfecj" url="http://www.myleedsjobs.co.uk/jobdetails-11834.html">
Advertising Sales Executive Bradford £ 14k to £ 20k basic + Comm ( £ 35k OTE ) An exciting opportunity exists within this expanding Media organisation to work within a team to build and develop an exciting niche publication . Reporting to the Publication Director , you will be responsible for using your initiative and previous experience in building relationships and generating new business to achieve monetary and yield targets . You will also get involved with editorial and feature content , web based projects and company visits . Proven track record in achieving sales results is essential . You will also have an outgoing personality with the ability to work under your own steam and strive to succeed . This is a great opportunity for someone who is seeking responsibility and career development . If you wish to be considered for this role , click ' apply ' and attach your CV . Clear Resourcing is an employment agency and operates as an equal opportunities employer . </text>
<text id="cfuhe" url="http://www.paperairplanes.co.uk/orplan.php">
Take a square piece of paper and fold it down the middle then open it out and fold along the lines AB in DIG . 1 . Now you should have a shape like DIG . 2 . DIG . 1 Now fold along the line AB in DIG . 2 you should get DIG . 3 . It is important that the fold AB is midway up the flaps created in STEP 1 DIG . 2 Now fold along the lines XZ on DIG . 3 and unfold having creased very well along these lines . Then fold them in the other direction creasing well and unfold . DIG . 3 Tuck the flaps produced in the previous step inside as the arrows show on DIG . 4 . This should give you DIG . 5 . DIG . 4 Fold the tip down along the dotted line in DIG . 5 to give DIG . 6 . DIG . 5 Now fold along the two dotted lines in DIG . 6 giving DIG . 7 . DIG . 6 To finish the model off fold along the dotted lines in DIG . 7 to give you the form at the top of the page . DIG . 7 Origami Paper Airplane Flying Lesson This plane is basically a dart . Throw it as hard as you can straight in the direction you want it to go overarm . It flies equally well indoors and out and does n't really have any lift or do stunts . It is just a challenge to make and a pleasure once you succeed . </text>
<text id="cfvqe" url="http://www.eca.ac.uk/tacitus/news.htm">
If you would like a CD please send a stamped addressed envelope to : TACITUS PROJECT EDINBURGH COLLEGE OF ART 79 GRASSMARKET EDINBURGH , UK EH1 2HJ Past Events September 14th , 2004 ' Creative digital interaction ' symposium . September 13th , 15th , 2004 Demo days for designers to try haptic system September 8th-10th , 2004 Ann Marie Shillito presented a paper at the Challenging Crafts conference in Aberdeen . July 2004 Idea Storming with members of the design and art community about ways haptics and colocation can aid and benefit computer aided design . July 2004 The Tacitus project has been awarded funding from Scottish Enterprise 's Proof of Concept fund . June 2004 Mark Wright presented a Tacitus paer ' 3D Modelling is Not For WIMPs Part II : Stylus/Mouse Clicks ' at Eurohaptics 2004 . May 2004 David Gauldie and Ann Marie Shillito gave a demo day to the student of Edinburgh College of Art . July 2003 The Tacitus Team has entered the Research Councils 2003 Business Plan Competition . June 2003 Mark Wright presented a Tacitus paper ' 3D is not for WiIMPS ' at the HCI International Conference in Crete . April 2003 Ann Marie Shillito presented a Tacitus paper ' HAPTICS : FOR A MORE EXPERIENTIAL QUALITY IN A COMPUTER INTERFACE ' at the European Academy of Design Conference held in Barcelona . December 2002 Ann Marie Shillito presented the Tacitus Project at the AHRB/Design Council event " Design research - Design and education working for each other " at The Design Council , London . November 2002 Ann Marie Shillito presented a Tacitus paper at the Conference " Craft in the twenty-first century " , held at the Edinburgh College of Art . An opportunity to try out the haptic system was taken up by conference delegates . Her work was used on the poster and in the website . Conference website . There was also an exhibition of Ann Marie 's Fellowship work . July 2002 Open Lecture by Professor Malcolm McCullough , author of a major influential book , ' Abstracting Craft - the practiced digital hand ' . He presented his Eurohaptics International Conference keynote lecture at Edinburgh College of Art . The Eurohaptics 2002 international conference was been hosted jointly by Edinburgh College of Art and Edinburgh University on 8th - 10th July 2002 . March 2002 Ann Marie Shillito gave a talk at Pixel Raiders , Victoria & Albert Museum . The Tacitus Project was presented to the Society of Designer Craftsmen . November 2001 Ann Marie Shillito and Dr Mark Wright presented at ' Capturing the Real World - The Role of 3D Imaging ' . Edinburgh College of Art . July 2001 Ann Marie Shillito , Karin Paynter and Steven Wall presented a poster at the Eurohaptics 2001 conference in Birmingham Steven Wall presented a paper entitled ' Design of a Multiple Contact Point Haptic Interface ' at Eurohaptics 2001 and was a member of the conference programme and organising committee . April 2001 Ann Marie Shillito and Karin Paynter presented the project at the CADE conference and the resulting paper will be published in Digital Creativity Journal in December 2001 . Upcoming Events & News . : : T acitus project : : . Prior of using any material on this web site please contact </text>
<text id="cfwje" url="http://www.casino-avenue.co.uk/2004/06/duuuuh.html">
Duuuuh . Bloggers ' block . This is worrying : " A controversial chain of schools teaching Biblical " creationism " has been given Tony Blair 's personal support despite serious doubts raised by parents and teachers , The Independent on Sunday can reveal . Mr Blair , said to be the most religious Prime Minister since Gladstone , has backed the millionaire car dealer Sir Peter Vardy in his attempt to take over seven comprehensives and turn them into Christian Academies promoting Old Testament views of the world 's creation . This includes the claim that it was made in six days , 10,000 years ago . " ( more ) The man is mad , is n't he ? Right , off to the pub . Fingers crossed for tonight . . . - posted by Inspector Sands @ 4:30 PM </text>
<text id="cfwtc" url="http://www.dwp.gov.uk/lifeevent/penret/penreform/5_reg.asp">
The Pensions Regulator " The Pensions Bill sets out proposals for a new pensions regulator to give better protection to members of work-based pension schemes and to reduce the compliance burden on well-run schemes . " It will focus on protecting the benefits of pension scheme members , concentrating its effort on schemes where it assesses that there is a high risk of fraud , bad governance or poor administration . The Pensions Regulator will have important new powers to tackle under-funding . " The Regulator will not overburden employers who provide pension schemes , enabling well-administered and funded schemes the freedom to continue supporting their schemes without being subject to constant , intrusive and burdensome regulation . " Andrew Smith , Secretary of State for Work and Pensions , 12 February 2004 . Find out more at the Pensions Regulator website . Find your way around this site </text>
<text id="cfxpi" url="http://www.framearch.co.uk/projects/T5/excavation.html">
T5 : The Excavation Archaeological excavation began at T5 in April 2002 , with the construction work on the Terminal itself beginning in December 2002 ; the terminal is due to open in spring 2008 . The site is the largest ever excavated in Britain . It has also been innovative in the way that the archaeology has run alongside major construction work by BAA and in the way that interpretation of finds has taken place on site . No single archaeological unit had enough staff to tackle the project alone . Instead , two long-established practices , Oxford Archaeology and Wessex Archaeology , formed a joint venture called Framework Archaeology to work at T5 and all other BAA airports . The excavation was a major challenge to the staff , who worked amid the noise and fumes of the world 's busiest international airport . The project was unique in the way that it integrated the archaeological and the commercial . Framework 's staff spent seven years designing and planning the project and working in the Heathrow area . The result was a focussed way of carrying out archaeology which allowed the excavators to know which areas were important and so avoid wasting time and money . BAA encouraged the best archaeology possible . They hired archaeological consultant Gill Andrews and Professor John Barrett , from Sheffield University , who , together with Framework Archaeology , developed a unique working method at T5 . By analysing and recording finds on site during excavation , rather than waiting until the end as is usual , staff were able to interpret their findings as they were made as well as ensuring that their work followed the most interesting and important directions . The excavation was rare in having computer terminals onsite and its own post-excavation department . The excavation suggested that people first began to create fields owned individually , as opposed to farming communally on open land , as early as 2,000BC , some five hundred years earlier than has been thought . Some of the Bronze Age field boundaries remained in use until the airport was built in the 20th century . The excavation : revealed objects including the only wooden bowl found dating to the Middle Bronze Age ( 1,500BC-1,100BC ) ; one of only two wooden buckets from the same period ; and a log ladder leading down into a pit dug during the Middle Bronze Age containing a wooden axehaft and a Neolithic stone axe , itself 2,000 years old when it was placed there . Two beautiful Iron Age pottery cups were also found . shed new light on the development of farming during the Bronze Age . Farming began during the Neolithic - New Stone Age - period ( 4,000BC- 2,400BC ) when forests were gradually cleared and crops were planted and gathered communally . It had been thought that communal farming continued on open land until the Middle Bronze Age ( 1,500BC-1,100BC ) . However , at Terminal 5 , pollen found from hedges used as field boundaries showed that people here were creating fields with boundaries from around 2,000BC , during the Early Bronze Age , 500 years earlier than archaeologists have previously thought . revealed how the religious focus of people changed over the centuries . The excavation looked at the Stanwell Cursus , a four-kilometre ( 2.5 mile ) pathway about 20 metres wide and flanked by ditches , which was built as early as 3,800BC and cuts across the Terminal 5 site . The cursus was a pathway with religious significance which linked important sites . Archaeologists believe that processions took place of important members of tribes along the Stanwell Cursus and along several other shorter cursuses in the area . The excavation revealed that when the first field boundaries were created in the Early Bronze Age ( around 2,000BC - 1,500BC ) , they ran around the cursus and not across it , as a mark of respect for its religious significance . But during the Middle Bronze Age , from 1,500BC , field boundaries were created across the cursus itself , a sign that it was no longer venerated , and that people now had to live within a world defined by hedges and fields rather than communal living . At the same time , access to the local rivers for people 's livestock was harder because it would mean driving them across others ' land , so waterholes were dug instead . These then became the focus of religious rituals , with important objects such as pottery and wooden objects placed in them as a sign of their religious significance . These changes show how man changed the religious significance of sites according to how useful they were to early farming . charted the changes in the landscape made by man from 6,000BC . These included : pits where meat was cooked by hunter gatherers during the Mesolithic ( Middle Stone Age ) period , c6,000BC , when the landscape was heavily forested ; large cursuses created during the Neolithic era ( New Stone Age , 4,000BC-2,400BC ) ; fields and boundaries and the first small permanent settlements in the Bronze Age ( 2,400BC-700BC ) ; and a small village in the Iron Age ( 700BC-AD43 ) and Roman times . The excavation reveals how the settlement died out at the end of the Roman era , but another settlement appeared in the mid-12th century . Some of the field boundaries created in the Bronze Age are still visible on maps and were still in use in the 20th century . </text>
<text id="cgbzt" url="http://www.redcross.org.uk/section.asp?id=49633">
In the last year , the British Red Cross has reclaimed over £ 5.4 million in Gift Aid tax . Please help us to make this figure even bigger . Commit to making a regular gift today and offer a secure and brighter future for people in crisis , both in the UK and overseas . Money is the lifeblood of rapid response . It can be instantly transferred and converted into whatever is most needed , anywhere in the world . </text>
<text id="cgelv" url="http://www.forestforum.org.uk/jobs/forestsmonitor2001.htm">
Forests Monitor is an environment and development NGO ( Non-Governmental Organisation ) based in Cambridge , UK . Established in 1993 , our work focuses on the activities of forestry companies around the world , in particular in tropical forest areas . We aim to increase transparency and accountability in the forestry sector and projects include researching and publishing information on the environmental and social impacts of forestry companies ; supporting local NGOs and community groups in efforts to achieve sustainable forest management ; lobbying at international fora , such as the UN , to raise awareness of and improve the operations of forestry companies . Forests Monitor is looking for a project co-ordinator to work on current and help develop new work programmes . The appointee will be responsible to the two directors . The ideal candidate will have the following skills : Experience in undertaking thorough and accurate research using a number of different sources , and writing briefings and reports in an NGO/advocacy environment . Be prepared to attend international meetings and undertake field work in challenging places . Be a confident communicator and computer literate Be able to work to agreed schedules as part of a team as well as using own initiative . Experience of writing project proposals and managing project budget lines is desirable but not essential . The post is based in the Forests Monitor office in Cambridge , UK . Salary : £ 19,000 - £ 21,000 p. a . depending on experience If you are interested , please send CV and covering letter to : Joan Booth Administrator Forests Monitor 69A Lensfield Road , Cambridge , CB2 1EN or by e-mail : fmonitor@gn . a pc . o rg For more information about Forests Monitor , please see our website : </text>
<text id="cgjxf" url="http://www.twickenham-museum.org.uk/kids_detail.asp?ContentID=189">
The most celebrated actor of his day David Garrick was one of the most successful actors of his time . He was very good at playing many different kinds of people on stage . He first became well known in 1741 for acting as Richard III in Shakespeare 's play , but he was also good at other more modern roles . As well as being an actor he was also manager of the Drury Lane Theatre in London . He even wrote plays himself . His acting took London by storm New ways of doing things He brought many new techniques to the English theatre . These included introducing a new style of acting and a way of hiding the stage lights so that they did n't obstruct the view from the audience . Peace and Quiet In 1854 Garrick came to live in Hampton to escape his busy London life . The house where he lived is now called ' Garrick 's Villa ' . He built a Temple to Shakespeare in his riverside garden . </text>
<text id="chnsk" url="http://www.sitcom.co.uk/tlc/characters.shtml">
Laurence Flynn Surgical House Officer played by Reece Shearsmith Laurence is a doctor that is not cut out for his job . Fresh out of medical college with failed first time final exam results he is determined to redeem himself of his past . But with the help of his neurotic personality , lack of sleep and unpopularity among the rest of the staff , everyday he draws closer and closer to a nervous breakdown . His hobbies include ranting about his working conditions , banging into various objects , screaming and shouting ' No ' and acting wide-eyed around nurse Judy . Dr Stephen Noble Surgical Registrar played by Alexander Armstrong Stephen is Laurence 's mentor and only real friend however he mischievously enjoys the practical jokes played on Laurence ( some are set by himself ) . Although Stephen loves his medical career , he is world weary and cynical about the hospital he works in . If anything goes wrong in the surgical unit , Mr Ron usually blames Stephen . But Stephen does n't need to worry about that anymore because he can blame it all on Laurence ! Stephen 's hobbies include surviving on coffee , having endless sex with other members of staff and winding Laurence up . ( And playing/watching rugby ) . Nurse Judy Conway Staff Nurse played by Georgia Mackenzie Judy is a smart , caring but devastatingly cool nurse on the surgical ward . Laurence has huge romantic passion for Judy , which she cruelly takes advantage of and becomes responsible for most of the practical jokes played on him . Judy 's hobbies include playing practical jokes on Laurence , guarding coffee with the other nurses and hanging out with her nurse roommate Terry . Gasman Anaesthetist played by Erich Redman Gasman is a German anaesthetist that has an obsession with pain , which is worrying because his job is to relieve pain . He 's wonderful dream would be that a patient woke in the middle of an operation and is proud that the NHS is acceptable of meaningless suffering ! Gasman has only one hobby . Making sure he can get as much pain out of the patients ( and sometimes staff ) as he can ! Sister Charity Hope Ward Sister played by Llewella Gideon Charity is the sane mother figure of all the staff in the unit . She keeps everyone under control ( including Mr Ron ) and you can count on her to keep you safe if you 're a patient on her ward . Her hobbies include keeping her ward under control and using old body parts as earrings . Mr Benedict Ron Director of Surgery played by Richard Griffiths Mr Ron is the head of the department who is loving and caring towards his patients but sadly is n't a very good surgeon . Laurence is n't on Mr Ron 's good list since he will always find that he has been up to some sort of trouble . Mr Ron 's hobbies include shouting Laurence 's surname and blaming others for his failed operations . Terry Cheung Theatre Nurse played by Benedict Wong Terry is a gay nurse that has a crush on Laurence but is n't afraid to show it . In theatre he makes campy comments towards him embarrassing Laurence in front of the surgical team . Terry , in partnership with Judy , is also responsible for some of the practical jokes played on Laurence although want he really wants from him is a. . . Terry 's hobbies include flirting with Laurence and hanging out with Judy . Other Appearances Various other people appeared as patients in TLC . The actors included Paul Putner as the Chef , Edna Doré as Ethel , Pip Torrens as Mr . Copperfield , Frank Harper as Frank Briggs and Rebecca Santos as Juanita . </text>
<text id="chnyq" url="http://www.aberdeen-grampian.co.uk/whiskycountry_ess_walk.htm">
( 4 miles[7 km ] one way)This walk follows part of the old railway line between Dufftown and Craigellachie , now a spur of the Speyside Way . Start from the car park at Craigellachie , following the signs for Dufftown . For much of its length , the old line follows the course of the river Fiddich , name to one of Scotland 's most famous malt whiskies ( Glen Fiddich means Valley of the Deer ) . This walk lies in a wooded gorge cut by the peaty-brown river , and is peaceful throughout . Look out for red squirrels on the way . After crossing the river , the course of the walkway leaves the railway to cross farmland on the approach to Balvenie ( home to another whisky ) and then Dufftown itself . The walkway ends near the site of a former station , but it is worth continuing along the road for the double attraction of Balvenie Castle and Glenfiddich Distillery . Return to Craigellachie the same way , or by bus . </text>
<text id="cicug" url="http://www.shipleygreenparty.org.uk/sgpnewsarticle20051222a.htm">
Villagers in Shipley think someone has been stealing their water and spiriting it away in dawn raids . Officials believe gallons of the local supply have been surreptitiously syphoned from a hydrant into a road tanker . Yorkshire Water has launched an investigation after residents complained about disruption to supplies . The problem , in the Nab Wood area , is believed to have been caused by someone tapping into the mains without permission , says a councillor . Water bosses have enlisted the help of the Driver and Vehicle Licensing Agency in Swansea in an attempt to track down a vehicle which is thought to be linked to the problem . A spokesman for Yorkshire Water said : " All businesses which require water in the street - such as street cleaners - need to hold a valid standpipe licence to take water without disrupting supplies to nearby premises . " The licence ensures that only standpipes of the correct size can be used . " We are aware of the issue in the Nab Wood area and have been making investigations to trace the person responsible for reducing the water supply to customers . " We are currently awaiting details of the vehicle from the DVLA to help us in our investigations . " We would like to assure customers in the area that we are doing everything possible to trace this vehicle . " Councillor Martin Love ( Green , Shipley ) said : " People have approached me to tell me about the problem , which was a bit of a mystery for a while . " A lot of residents in Nab Wood found their water pressure was dropping every morning . It was happening at 7.30am every day . " There is a theory someone with a tanker has been taking water from a hydrant . " It went on for quite a few days and nobody was sure where the problem was coming from . " I think it caused a quite a lot of disruption to people in that area . I have spoken to Yorkshire Water and they say they are onto it . " Yorkshire Water said no problems had been reported in Nab Wood in recent days . It is believed the vehicle might have left the area and could now be operating elsewhere . Archive Home From the archive http://www.thisisbradford.co.uk © Newsquest Media Group 2005 </text>
<text id="ciprs" url="http://www.employment-solicitors.co.uk/Employer1.htm">
1. The employer must draw up a plan to decide who will be kept on and who will be made redundant and why . 2. The employer must inform the workforce as soon as possible , so they have a chance put forward alternatives or apply for other jobs with the current employer or with another employer . 3. The employer should consider any proposals that the employee 's or their representatives make as an alternative to redundancy . 4. The employer should decide as soon as possible how many employees will be made redundant . Consulting 1. The employer must consult the employee 's representatives ( this includes Unions ) if 20 or more people are going to be made redundant . 2. The employer must discuss alternatives to redundancy and the selection criteria for redundancy . 3. The employer can carry on the redundancy procedures whilst the consultation is going on ( for example , sending out redundancy notices to the effected employees ) . However , the employer should not issue redundancy notices before he has had a chance to consult properly . 4. . If the employer does not consult properly the Employment Tribunal can make the employer pay a ' Protective Award ' . This states that the employer must keep the employees on and must pay their wages for a certain amount of time ( whether they actually remain working or not ) . The length of this Protective Award period is usually fairly short . Department of Trade and Industry The employer must consult the Department of Trade and Industry ( D. T . I . ) 30 days before dismissal if they are going to make between 20 - 99 employees redundant . Or 90 days if over 100 are to be dismissed . One of the reasons for this is so that the DTI can compile accurate employment statistics and records . Selection Procedure If a group of employees are selected for redundancy the employer must show what type of work they do and why the demand for that work has decreased or stopped completely . If the amount of work has decreased so that only some of the employees within a group are selected , the employer must show how they picked those unlucky ones . The employer must show in detail the selection procedure and criteria . This can range from " last in first out " to a scoring system , with the employer giving points for certain job skills . The selection criteria should not be based upon an individual 's view of each employee ( for example , what the personnel manager thinks ) Once the criteria has been agreed it should be kept to . The employer should also try and agree the selection criteria with the employees ' representatives or Union . The selection procedure and criteria cannot be based upon unfair reasons such as : Trade Union membership or activity . If the selection criteria is based upon Race , Disability or Sex the effected employee can claim under Unfair Dismissal or the relevant discrimination law . The employer must consult each effected employee before dismissal notices are handed out , so that there is a chance of real consultation and time for the employee to respond . The selected group may change due to the consultation process . </text>
<text id="citxq" url="http://www.princessquare.co.uk/news/Food_Sounds_So_Good_at_DArcys/">
Food Sounds So Good at D'Arcy 's Food has never sounded so good at Darcy 's restaurant and bar in Princes Square have launched a relaxing night of entertainment for their customers . Talented three-piece band ' The Easy Orchestra ' provide a selection of soulful classics and easy listening standards for diners to enjoy whilst they sample the restaurant 's fantastic cuisine . The bustling restaurant , situated in the ground floor of the popular city shopping destination , kicks off the entertainment at 8.00pm every Thursday when ' ' The Easy Orchestra ' begin their set , playing fantastic classics such as Frank Sinatra , Dean Martin and Andy Williams ( the band will also takes requests from customers ) . Customers ' musical expertises are put to the test later on in the evening with D 'Arcy 's ' Name That Tune ' music quiz where diners can compete with each other for the chance to prove their superior music knowledge and can win a delicious bottle of wine in the process . A set menu is available from Sunday-Friday from 5pm and Saturday from 6pm for £ 9.95 for two courses and £ 13.95 for three . The menu includes a fantastic varied selection such as Soup of the Day or D 'Arcy 's Homemade Pate served with apple and cider chutney served with Arran oatcakes to start , Chicken fillet marinated in garlic and rosemary served with creamy spinach mash and a mild red wine gravy or Grilled sea bass fillet served with roast salmon fishcake drizzled with pesto which are just a few of the choices for the main course . Those opting for the three course menu are in for a treat with the tantalizing range of desserts on offer , such as Bailey 's cheesecake served with vanilla cream or hot rhubarb and apple crumble served with vanilla ice cream . All this mouth-watering food can be washed down with one of the bar 's speciality cocktails , all just £ 3.50 , including Mojito ( Bacardi , lime and gomme syrup finished with mint leaves and brown sugar crushed ice ) or a Scotch Monk ( J&B with Frangelico , honey and apple juice ) . Other drinks offers include a bottle of white or red promotional wine for just £ 8.95 and buckets of Corona , five for £ 10 . The Easy Orchestra live music night is on at D 'Arcy 's every Thursday from 8.00-11.30pm . D 'Arcy 's Lower Courtyard 0141 226 4309 </text>
<text id="cjiau" url="http://www.sweetsforu.co.uk/shipping.php">
The sweets will be shipped as soon as possible , if the items ordered are in stock UK delivery takes approx 3-4 working days , Highlands of Scotland 4-5 days Europe 10-12 days and World Wide allow up to 30 days . Items 2 Kilos or under are shipped through Royal mail . All items over 2 Kilos are shipped through Courier service . ( Delivery is quicker through courier ) . Items in stock will be dispatched the next working day after ordering . Occasionally an item will be out of stock if there has been a high demand for the particular item in which case delivery will take longer . We are unable to dispatch items at weekends or Bank holidays . PLEASE NOTE - For all orders over 2000 grams we use courier service . The courier will require a signature to ensure the safe delivery of your goods . If you wish your goods to be left in a safe place e. g . with a neighbour or in a porch please indicate this in the special delivery instruction box . If there is no one in to accept delivery they will leave a card , for you to arrange a convenient time in normal business hours . After two unsuccessful attempts of delivery the courier will return the goods to us . To resend the goods , the courier will require you to pay an additional postage charge . In the unlikely event that you are not entirely satisfied with the quality of the sweets , please return to us within 14 days , enclosing the original labelling & documentation . Items from the wholesale section are available in mainland England , Wales and southern Scotland only . BFPO Addresses We are always happy to accept orders from BFPO customers and there is no extra charge for postage to BFPO addresses Worldwide . The shipping costs are automatically added to the order during the checkout process and are clearly displayed before you confirm the order and make payment . As a guide the shipping cost are based on the following Royal Mail Zones : We are unable to ship to the U. S . A . at this time , as we are unable to obtain insurance , all our parcels are sent with insurance . If the situation changes we will include the U. S . A in our list of countries . Maximum UK Shipping £ 4.95 UK Up to 1200 grams = £ 3.59 then Up to 2000 grams = £ 3.75 Over 2000 grams = £ 4.95 Europe Up to 200 grams = £ 3.41 then Up to 400 grams = £ 3.88 then Up to 600 grams = £ 4.44 then Up to 800 grams = £ 5.41 then Up to 1000 grams = £ 6.23 then Up to 1200 grams = £ 7.17 then Up to 1400 grams = £ 8.10 then Up to 1600 grams = £ 9.05 then Up to 1800 grams = £ 9.99 then Up to 2000 grams = £ 10.93 Shipping costs within the EU are subject to Vat World Zone 1 Up to 400 grams = £ 6.00 then Up to 600 grams = £ 8.30 then Up to 800 grams = £ 10.56 then Up to 1000 grams = £ 12.28 then Up to 1200 grams = £ 15.00 then Up to 1400 grams = £ 17.00 World Zone 2 Up to 400 grams = £ 7.00 then Up to 600 grams = £ 9.00 then Up to 800 grams = £ 11.00 then Up to 1000 grams = £ 13.00 then Up to 1200 grams = £ 15.00 then Up to 1400 grams = £ 17.00 then Up to 1600 grams = £ 19.00 then Up to 1800 grams = £ 21.00 then Up to 2000 grams = £ 24.00 </text>
<text id="cjjcl" url="http://www.e.volve.org.uk/Listings.aspx?index=387&item=2929">
Association of Spina Bifida & Hydrocephalus ( S. E . Region Office ) ASBAH is the Association for Spina Bifida and Hydrocephalus . We are the national organisation providing information and advice about Spina Bifida and Hydrocephalus to individuals , families and carers via a network of advisers . Our unique services are targeted towards : Support to parents before and around the birth of their baby , or diagnosis of the condition ; Support to the child and family on educational matters ; Specialised information & help on health matters ; Helping young people access services to progress towards control of their lives and much more . more information Isle of Wight Association For Spina Bifida & Hydrocephalus </text>
<text id="cjqcv" url="http://www.verko.co.uk/product.aspx?catno=53&prod=HCAA6241">
This ingenious gadget takes three keys and offers an easier to use key keeper for greater leverage of the key turning in the lock . We 've all had instances where we 've found turning the key in our house lock difficult , even if it 's just because our figures are cold in the winter snow . A very popular and stylish gadget that just makes getting into your home that much simpler . Attractive blue durable plastic design Can take up to three keys </text>
<text id="cjtan" url="http://www.romancesouthwest.co.uk/main/en/att-provider-ROMA_6913.html">
Romantic Places to visit Stonehenge , near Amesbury , Wiltshire The ancient stone circle of Stonehenge is one of the wonders of the world . Stone Circle Access by advanced booking only Recommended last admission 30 minutes before closing time Now a World Heritage Site , Stonehenge and all its surroundings remain powerful witnesses to the once great civilisations of the Stone and Bronze Ages , between 5,000 and 3,000 years ago . Stonehenge is surrounded by 1,500 acres of land owned by the National Trust with excellent walks . Complimentary audio tours available in nine languages . There is catering on site at the Stonehenge Kitchen and there are family learning resources available . Directions Two miles west of Amesbury at junction with A303 and A344/360 . Rail : Salisbury station . Bus : Wilts and Dorset service No 3. Tourist Information Centre Amesbury Tourist Information Centre Amesbury library Smithfield Street Amesbury Tel : 01980 622833 / & Answerphone Fax : 0 1980 625541 Contact via email Salisbury Food and Drink Festival 2006 Salisbury 's fabulous Food and Drink Festival The George & Dragon Award winning pub specialising in fresh fish served in a friendly and informal atmosphere . Castle and Ball Hotel Wilton House Splendid house , magnificent art collection , home to Earl of Pembroke . Mompesson House A distinguished Queen Anne House situated in the stunning Cathderal Close in Salisbury . Salisbury Cathedral Salisbury is Britain 's finest 13th century Gothic Cathedral . </text>
<text id="cjton" url="http://www.art-works.org.uk/artworks/z030703b.shtml">
3 July 2003 CHILDREN DEPRIVED OF SPACE FOR ART , NEW REPORT FINDS The Clore Duffield Foundation publishes today Space for Art , the final report and recommendations based on a two year study of art-making and exploration spaces in schools , galleries and museums throughout the UK , on Children 's Art Day , Thursday 3 July . Space for Art is a practical handbook for teachers and educators in galleries and museums , to help them fight for the kind of creative spaces they need . It highlights the lack of resources and attention to detail given to art-education spaces , with senior management and architects still failing to understand the practical requirements of such spaces . Sally Bacon , Director of the Clore Duffield Foundation , comments : " I have been led round tiny spaces and been informed that a full class - in excess of 30 children - could work within them quite happily . Architects ' drawings sometimes blithely reinforce this impossibility . We want gallery and museum staff to have some clear guidance on dimensions to prevent this state of affairs from carrying on . " Space for Art explores the full range of issues surrounding such spaces , from the development process and working with architects to location and dimensions , storage and display , usage and management and services . Attention to detail and practical considerations are central to the success , or failure , of spaces . Too many educators have to fight for the basics : " One room gained black-out facilities this summer , the other one still has n't ( 8 years of asking ) . " Even temperature control is not a given : " The children work with their coats on due to the cold and wash equipment and hands in cold water . Most of my time and energy is spent trying to change the environment . " As one teacher sums it up : " generally premises are not suitable for creativity . " Technology and planning for change are vital issues , but despite significant recent investment in IT and ICT , many schools , galleries and museums still report inadequate provision . Access to the Internet in the vast majority of secondary school art education spaces is either restricted ( 69 % ) or impossible ( 24 % ) . Work with art-based software packages is also very limited ( 76 % ) or out of the question ( 18 % ) . Gallery educators report similar difficulties : almost three-quarters ( 72 % ) say that access to the Internet or working with art-based software is poor or restricted . Practice in primary schools is also restricted in photography ( 73 % ) , ceramics ( 63 % ) , and textiles ( 77 % ) . The report 's findings and recommendations for the future are at the heart of the Clore Duffield Foundation 's concerns as the founder of Children 's Art Day and the creator of Artworks : Young Artists of the Year Awards , as well as a funder of education spaces within galleries and museums . PRESS ENQUIRIES ERICA BOLTON/JANE QUINN 020 7221 5000 Notes to Editors : Space for Art is the result of a two-year research project devised , managed and funded by the Clore Duffield Foundation as part of its Artworks programme . The project has been run in partnership with Arts Council England , the Department for Education and Skills ( DfES ) , the Heritage Lottery Fund , the Qualifications and Curriculum Authority ( QCA ) , and others . The Clore Duffield Foundation carried out a wide-ranging consultative exercise to gather data , experiences and opinions on the ideal art education space . This included a series of focus groups with gallery staff , art teachers , architects , artists and pupils ; a questionnaire sent to 2000 art teachers ; a questionnaire sent to 845 galleries and museums ; workshops with children ; focus groups with architects ( the latter organised and funded by Arts Council England ) as well as in-depth case studies of art education spaces in 11 schools and ten galleries , in consultation with managers and users of the spaces , including gallery educators , artists , teachers , pupils and architects . These case studies were drawn from across the UK and spanned national and local-authority galleries , and state , independent , early years , primary , secondary and special schools in urban and rural environments . The full text of all 21 case studies , along with the full Space for Art report and background material from the research , can be found in the research section of the Artworks website : www . a rt-works . o rg . u k . Printed copies of the report are available from the Clore Duffield Foundation at a cost of £ 5.00 , including post and packing . Email cloreduffield@aol . c om for details . </text>
<text id="cjtub" url="http://www.jr2.ox.ac.uk/bandolier/booth/miscellaneous/wristgang.html">
Clinical bottom line In most cases wrist ganglia can safely be left alone , in the knowledge that they will fade away . Reference 1. FD Burke et al . Primary care referral protocol for wrist ganglia . Postgrad Med J 2003 79 : 329-331 . Bandolier has a wrist ganglion in its midst : it comes and goes ( more or less ) and causes mild to moderate pain from time to time , but only occasionally interferes with life . What can , or should , be done about it ? It is said that in olden days the standard treatment was to hit it with the family bible ( the size of the book is probably more important than the content ) , but in the absence of good quality studies of this approach , Bandolier looked further afield . There are several small randomised controlled trials and observational studies , but no systematic reviews . There is , however , an excellent review from Derby [ 1 ] , which although it does not claim to be systematic , does cover the important studies . Background Ganglia are benign fluid-filled lumps , formed when synovial fluid escapes from a joint and collects in the superficial layers . The ganglion capsule is formed from compressed stroma , with no cellular lining , and may be linked to the underlying joint capsule by a narrow channel acting as a one-way valve . Their cause is unclear , and only a small minority give a history of previous trauma . They are the most common swellings of the wrist , occurring more often in women than men , and in these aged 20 to 50 years . Many untreated ganglia resolve spontaneously , with 50 % of patients " ganglion free " at six years . Higher rates of spontaneous resolution ( 70 to 80 % ) are reported for ganglia in children . Despite this , a large number are referred to hand surgeons for advice and treatment . Patients seek advice mainly for cosmetic reasons , or because of concern about malignancy , or pain . Diagnosis in a primary care setting is usually straightforward . Wrist ganglia are site-specific : they overlie the scapholunate ligament on the dorsal surface , or the radiocarpal or scaphotrapezoal joints on the volar ( ventral ) surface , adjacent to the radial artery . Transillumination shows clear fluid , except where the ganglion is very deep or small , or where the skin is dark . Ultrasound is effective for demonstrating ganglia that are too small to palpate . A questionnaire survey of GPs in South Derbyshire showed that 90 % of responders ( 179 GPs ) felt that ganglia were fairly easy to diagnose , although the majority would not undertake any form of invasive treatment in primary care , and many would welcome a checklist to aid referral ( see below ) . GP referral letter for patients with wrist ganglia ( from Burke et al 2003 ) . All boxes in Section A should be ticked , along with the relevant boxes in Section B. I have assessed my patient using the Derby Ganglion Referral protocol and wish to refer the patient because : Section A 1. The ganglion transilluminates 2. The patient is aware that most ganglia resolve spontaneously with the passage of time 3. The patient is aware of the complications of ganglion excision ( 30 % recurrence and 15 % scar tenderness or numbness . Persistent wrist stiffness may also occur ) Section B 1. The patient 's ganglion is painful and restricts work and hobbies 2. The patient remains concerned by the risk of malignancy , despite aspiration and reassurance 3. The patient has failed to respond to aspiration of the ganglion 4. The ganglion is ugly 5. Other reasons ; please specify : Treatment options Reassurance should be the first therapeutic intervention for most patients ( and all children ) because of the high rate of spontaneous resolution and because it avoids the potential complications of invasive therapy . Aspiration alone can be successful , but recurrence rates are 60 to 70 % . For patients who remain concerned about malignancy , seeing the aspiration fluid can reinforce verbal reassurance , and reduce demand for surgical intervention . Aspiration with steroid injection does not show clear benefits over aspiration alone . The addition of hyaluronidase may reduce recurrence rates . Surgical excision is the most invasive therapy . Recurrence rates as low as 1 % have been reported , but most studies have rates between 14 and 40 % . In addition , 15 to 28 % of patients report scar sensitivity , joint stiffness or distal numbness . Patients should be made aware of these problems before referral for surgery . Arthroscopic excision may reduce recurrence and complication rates . Comment Bandolier is reassured that , in common with most wrist ganglia , this one should be left alone . It is always good to find a condition where the best treatment for most people is the simplest and cheapest : reassure and let nature take its course . </text>
<text id="cjwgx" url="http://www.changingdiabetes.co.uk/view.asp?ID=92">
Here you will find advice on what to consider when choosing a job - restrictions , working hours , work place , rights and responsibilities . Working life Very few occupations are off limits just because you have diabetes . Like anyone else , you can choose a job that fits your personal interests and abilities . There are , however , some points that you should keep in mind when choosing a job . </text>
<text id="ckcux" url="http://www.lashelmets.co.uk/las%20new%20bionix%20page.htm">
Design : Futuristic and aerodynamic with an aggressive look for competition . Used by Team Liquigas Bianchi . Adjustment : Adjustable size from 54 to 59 . The new CATEYES SYSTEM allows height and tension to be adjusted while on the move . Ventilation : Tested and developed using the wind tunnel , it has exceptional interior climate control thanks to an efficient ventilation system . Thanks to the triple wing directing the air to the vents allows air to be circulated around the head . Excellent ventilation without compromising aerodynamics . Inside : Removable and washable inside padding made of OUTLAST fabric , the most innovative fabric on the market and is used by NASA and has been awarded the Space Technology Certificate . OUTLAST is a heat regulator that keeps the temperature constant . A cotton anti-insect net is combined with the padding . Weight : 280g </text>
<text id="ckivb" url="http://www.cb-com.co.uk/listgen.asp?layout=results-brief.asp&page=37&sql=&sortup=sorttitle&bookstatus=OK">
Bondage Breaker ( With Study Guide ) ( Revised ) Anderson Neil T Knowing your spiritual identity and position in Christ is the essential truth that can set you free from habitual sins negative thoughts and irrational feelings . This best selling book will teach you who you are in Jesus and what it means to be God 's child . Monarch Books £ 7.99 The Book of God Walter Wangerin Reviewed The best-selling retelling of the Bible as an epic novel - for those who 've always meant to read the Bible but got stuck at Genesis . Paperback from Lion Publishing Available in North America from Zondervan Publishing House £ 9.99 NRSV , The Book of Gospels A fine-bound Book of Gospels , for use in the celebration of communion Leather bound from Oxford University Press £ 100.00 A Book of Prayers for the First Years of Marriage Prayers old and new in an elegant gift book to use and to treasure . Hardback from Lion Publishing £ 6.99 Book of Ruth Murray D. G ow Its structure , theme and purpose A carefully-researched , well-written study of the book of Ruth which deepens understanding of one of the world 's literary masterpieces . Hardback from IVP £ 26.99 Born Again 2 Corrinthians 5:17 Picture of statue with person " casting off " the old , revealing the new . poster from Victory Tracts £ 8.00 Born In A Stable Illustrated and modelled by experienced children 's artist Charlote Stowell , this is an original retelling of the story of Christmas bringing the nativity to life in a charming and most unusual way . With photographs of modelled figures in lifelike scenes complete with buildings and interiors . Candle Books £ 6.99 A Box Of Delights John J & Stibbe Mark An A-Z of over 400 of the funniest wisest and most poignant stories proverbs jokes and one-liners . This wonderful resource from two of Britain 's best loved Christian communicators is ideal for preachers as well as general readers . Monarch Books £ 8.99 Boxing Lamb ( cartoon)(landscape ) Tony Trimmer A3 poster using text from Romans 8. Part of the TT series of multi cultural bible text posters . Also available as VTtA2015 in A2 size A3 Poster from Victory Tracts £ 4.00 Boxing Lamb ( cartoon)(landscape ) Tony Trimmer A2 poster using text from Romans 8. Part of the TT series of multi cultural bible text posters . Also available as VTTA3015 in A3 size A2 Poster from Victory Tracts </text>
<text id="ckjul" url="http://www.wildlifetrust.org.uk/cheshire/proj_harvest_survey.htm">
The Harvest Mouse in Cheshire - 1999-2000 Survey Introduction : Harvest Mice ( Micromys minutus Pallas ) , are currently the subject of much debate in Cheshire . Chester Zoo is initiating a breeding programme with a view to re-enforcing populations in the county . Harvest mice weave nests in monocotyledonous herbs that are difficult to find as they are woven from living grass , but become more visible in early winter as the grasses die off ( Harris & Trout 1991 ) . Suitable areas of habitat include cereal fields , rough grassland , reedbed and fen , and the Harvest Mouse can be the most abundant small mammal in wetland ( Perrow & Jowitt 1995 ) . In Britain it is most common in the South and East , but its distribution in North West England is uncertain . The West Midlands and Lancashire yielded three and two records respectively during the Mammal Society survey of the 1970s , while Cheshire , sandwiched between these two regions , had 13 records . The Cheshire records were mostly from the fringes of metres ( Harris 1979 ) . Only one record for Cheshire was found during a re-survey of the 1970s sites , but five of the 13 original sites , including Rostherne Mere ( a National Nature Reserve ) , went unsurveyed . A record of a nest in Cock 's Foot grass ( Dactylis glomerata ) growing inside a tree guard in a young plantation was the only other recent record , ( 1997 , Aston ) . To investigate this apparent paucity of records in the last 20 years , a survey of the land covered by the Cheshire Wildlife Trust ( Cheshire , the Wirral , Stockport , Tameside and Trafford ) was planned for 1999 and 2000 . Methods : Methods currently employed for surveying include nest searching and stalk-zone trapping ( used here ) , hair tubes and baited tubes . Nest searching can be quantified in various ways ; in this survey , suitable habitat was searched in 30-minute blocks , recording the number of nests found per search , and the species of grass in which the nest was woven . All historical sites with adequate map references were surveyed by nest searching ; two of the most recent sites were also surveyed by stalk zone trapping . Additional sites were chosen for survey through consultation with Phase 1 habitat maps , advice from colleagues at the Trust , and requests from landowners and rangers . Trapping was carried out on a small number of sites , as there were a number of limiting factors , including the time of year , access , and the proximity of public byways . Longworth traps were placed on platforms constructed from hardboard , plastic tubing and bamboo canes . These were then placed in a grid of 20 x 3 at 10 metre intervals in areas of long grassland or reed . Trap sessions at each site lasted four days , making a total of 240 trap nights per site . Results : Signs of harvest mice were found in 24 one-km squares in Cheshire . 53 nests were found at 25 sites out of 126 sites surveyed ( 19.8 % ) . Table 1 Monocotyledonous herbs utilized for nest building by Harvest Mice in this survey , compared with national results from Harris ( 1979 ) : Species : Cheshire : National : number of nests % ( Harris 1979 ) Alopecurus spp . 1 1.9 % 0.1 % Arrhenatherum elatius 8 15.1 % 2.8 % Carex spp . 6 11.8 % 2.6 % Dactylis glomerata 12 22.7 % 20.7 % Deschampsia cespitosa 4 7.5 % 2.1 % Elymus repens 2 3.8 % 6.6 % Juncus spp . 2 3.8 % 1.9 % Phalaris arundinacea 16 30.2 % 13.8 % Phleum pratense 1 1.9 % 0.7 % Phragmites australis 1 1.9 % 9.9 % Other 0 0 % 38.8 % Table 2 Habitats from which Harvest Mice or their nests were recorded , in this survey , compared with national results from Harris ( 1979 ) : Habitat : Cheshire : National : No . of Records % ( Harris 1979 ) Field Edge 1 1.9 % 9.9 % Fen 31 57.4 % 5.1 % Rank Grassland 8 14.8 % n/a Reedbed 4 7.4 % 8.6 % Roadside Verge 2 3.8 % 4.5 % Stream/Riverbank 5 9.3 % 6.3 % Young Plantation 3 5.6 % 3.1 % Other 0 0 % 62.5 % For ease of comparison , " Marsh " from Harris ( 1979 ) was taken as " Fen " here . There was no corresponding habitat for " Rank grassland " in that study . 53 ( 98.1 % ) of records were nests , while only one ( 1.9 % ) mouse was trapped . While this seems a low yield for trapping , the other sites that were trapped yielded no records from either trapping or nest searching . In this study , all records came from land under 500 feet , and no Harvest Mice were found east of Holmes Chapel . In the 1970s survey of Britain , 90.3 % of all records came from land under 500 feet ( Harris 1979 ) , as did all 100 % from the Sheffield area between 1980 and 1996 ( Whiteley 1996 ) . Discussion : The Harvest Mouse is still present , though local in the county , despite the paucity in records over the last 20 years . The most common habitat for the mice in the county is fen ( with 57.4 % of all records ) , which occurs around the fringes of meres , along the bank of rivers and canals ( such as the river Weaver navigation ) , and in wet meadows . In contrast , Harris ( 1979 ) found 57.7 % of nest records were from " dry habitats " . The meres support reedbeds that dry out into Phalaris- and Carex-dominated fen beds , all habitats that support Harvest Mice . The fact that dairy grazing puts dry grassland at a premium also supports the bias towards wetlands . The Countryside Stewardship Scheme may benefit the species , by creating harvest mouse-friendly habitats such as field margins and hedgerows . A warm dry summer in 1999 may have meant that there was a large population produced that year . The increase in records may simply reflect increased surveying ; as 126 sites were surveyed during this study , resulting in 25 records ( 19.8 % ) , compared to one record from eight areas ( 12.5 % ) of suitable habitat surveyed during the 1997 re-survey ( T. Newman pers comm ) . One negative record from 1997 , at Pickmere , proved positive in 2000 . References : Harris S. ( 1979 ) History , distribution , status and habitat requirements of the Harvest Mouse ( Micromys minutus ) in Britain . Mammal Review 9:159-171 . Harris S. & Trout R C. ( 1991 ) Harvest mouse Micromys minutus pp 233-239 In : The Handbook of British Mammals , Eds . G B Corbet & S Harris 3rd Edition . Blackwell Scientific Publications , Oxford . Perrow M & Jowitt A ( 1995 ) What future for the Harvest Mouse ? British Wildlife 6:356-365 . · Whiteley D. ( 1996 ) Harvest Mice in the Sheffield Area 1980-1996 . Sorby Record 32:37-41 . Acknowledgements : Robert Carthy and The Cheshire Wildlife Trust wishes to acknowledge the financial support of English Nature . Thanks to P. Morris and D. W. Yalden for use of photographs . </text>
<text id="ckrqy" url="http://www.enemydown.co.uk/clancomments.php?id=35113">
Posted by Bergz from Hwired on May 25th 2006 GG lads , friendly bunch ! Great players , with a sense of humour ! GL in the rest of ED lads =D Posted by Justboy from =D . T = on May 26th 2006 No probs with these lads . Thanks for playing that custom . Your choice next time . 10/10 . Posted by Stat ! c ` ` from -bGz- on May 26th 2006 GG Wp , Good Guys Reccomend 10/10 Posted by Mentality from Talon . on May 27th 2006 GG guys , had a good match , our first win GL in ED Posted by - Bull3tPr0of - from #Scuf on May 30th 2006 play for a good game shame that things went all pete tong for ya but rematch when u reform 10/10 gl in Ed Posted by vK | IceD ^uK from Team vK on Jun 2nd 2006 gg lads well played we came back in the end of bouth game 's but what can i say it took a while to get into it Posted by sHiN^ #Flavour from Flav | on Jun 4th 2006 GG 10/10 lads nice game ... what can i say about our server ... . BAD ! Posted by Karlos^ from NEG| on Jun 7th 2006 gg guys , was a good game , keep at it ! stop puttin urselves down ! cu agen soon i hope gl in future Posted by Beebz from #Panda on Jun 7th 2006 10/10 Good guys , no moaning , just a clean game . Posted by Str ! k3 from Touch on Jun 13th 2006 provoked the peace , the peace shall not be broken , 1/10 Posted by Cuddles -- from NmS|~ on Jun 30th 2006 strange match Posted by Spawnâ¢ from Pro . G on Jul 3rd 2006 gg Posted by drake_ from ALL4 on Jul 4th 2006 one warning , they have a bad server and will not accept that as fact . therefore be wary of them making you play on it . also they said i ' teleported ' ' wallhacked ' and other things . i think their age gets in the way of their talent . Posted by wkf from S-m-K on Jul 5th 2006 gg lads , another time perhaps Posted by FbN | Sk1nNeR from FbN | on Jul 5th 2006 GG SHAME ABOUT YOU SILLY PLAYER Posted by ry-DangRï¸»â '³â-ä¸ from t4s * on Jul 6th 2006 they are rubbish , we dint know the hltv had no delay but no1 was watching ? we were being sarcastic about cheats as u were not good ... grow up ? </text>
<text id="ckymf" url="http://www.scis.org.uk/search/menu_new.asp">
SCIS maintain a database of all independent schools in Scotland . To view the details of any school in a particular category click the appropriate category . To see a list of all independent schools in Scotland , and browse their details , click All Schools at the top of the list . To view schools in a particular region , make a selection from Schools by Location </text>
<text id="clezz" url="http://www.uk-wholesaler.co.uk/softbook/clickbankmembership/clickbankprotector.htm">
Only a person forwarded from ClickBank ( TM ) after successful payment , will be able to access the Sign-up page to create his membership account . When they create their account you will get an email notification instantly . The whole system is fully automated . Software Requirements : - A PC with a Windows 95/98/ME/2000 system . Your host must be able to support Perl . 99 % of hosts support it . You are responsible to verify whether your host supports Perl , cgi-bin , SendMail etc . Satisfaction Guarantee Your satisfaction is our utmost priority . We want you to be 100 % satisfied with our products . Try it for a full 90 days and if at any time you 're not happy with our product , just email us with your receipt number and we will cheerfully refund you . No questions asked . </text>
<text id="clslk" url="http://www.blewa.co.uk/project5/teachers/T5-0-1.htm">
To join in as members of a group , pupils should be taught to : ( 3a ) take turns in speaking , ( 3c ) take different views into account . Drama To participate in a range of drama activities , pupils should be taught to : ( 4b ) create and sustain roles individually and when working with others . Both POS 3 and 4 can be achieved through the ' Letters Home ' activity and a hot seating session . Breadth of study Listening . The pupils will be given opportunities to listen to each other through the activities in ' Impressions of War ' . ( 9 ) En2 Knowledge , skills and understanding Literature To develop their understanding of fiction , poetry and drama , pupils should be taught to : ( 3a ) identify and describe characters , events and settings , ( 3f ) respond imaginatively in different ways to what they read . The pupils can achieve this through exploring the adverts and letters that are in activities ; ' what would you send him ? ' and ' Impressions of war ' . En3 Writing - Knowledge , skills and understanding Composition Composition ( f ) use the texts they read as models for their own writing . The advert activities are activities that will encourage this objective . Breadth of study The range of purposes for writing should include ( 9a ) communicatng to others , ( 9c ) to explore experience . Information and communication technology Breadth of study Pupils will explore through using the Children 's Zone ( 5b ) a variety of ICT tools . History Knowledge skills and understanding Historical interpretation ( 3 ) . Pupils should be taught to identify different ways in which the past is presented . All of the images and resources provided in this theme will help to encourage the children to achieve this objective . Breadth of study Pupils will look at the lives of people who lived in Britain ( 6b , 6c ) by looking at the adverts and letters and discussing their content . Then assess how these people lived and what they were interested in . </text>
<text id="cmnal" url="http://www.politicalwizard.co.uk/administration/childsocnew/index.php?category=campaigns&c=i&uid=2130">
There are currently only three refuges for young runaways in the UK with ten beds to meet the needs of 100,000 children . The Children 's Society is calling on the Government to provide funding to meet the urgent need for a national network of refuges for young runaways . You can help us achieve a network of refuges for young runaways by contacting your Member of Parliament . Simply ENTER YOUR POSTCODE - It 's quick and it 's the most powerful way you can help us . </text>
<text id="cnosx" url="http://www.kent-ccc.co.uk/news_story.php?id=660">
Michael Yardy anchored Sussex 's 355 for eight with an unbeaten hundred which spanned almost the whole of the first day against Kent at Hove . The stoic left-hander came in to face the second ball of this Liverpool Victoria Division One match - after Sussex had lost Richard Montgomerie for nought - and remained an immovable object until stumps . Yardy ( 126 not out ) faced 298 balls and managed 13 fours - his watchfulness a necessary foil to the shot-makers who came and went around him , notable among whom was Murray Goodwin ( 82 ) for his domination of a third-wicket stand of 141 . The hosts , who chose to bat first on a sunny morning , closed day one already in possession of four of the seven points they need from this fixture to usurp Lancashire at the top of the table . But as championship cricket returned following the mid-summer Twenty20 break , they could hardly have got off to a worse start when Montgomerie went lbw pushing forward to Amjad Khan . The Kent fast bowler thought he had struck again three balls later , but this time Yardy survived on nought despite a significant appeal for caught behind . He remained in situ on an even batting surface for another six-and-a-half hours , having been heavily outscored in his 29-over association with Goodwin who hit 11 fours and a six in a fluent 108-ball stay . After South Africa seamer Tyron Henderson had opener Carl Hopkinson lbw padding up for a maiden championship wicket , Goodwin was initially circumspect . But the Zimbabwean gradually took the initiative either side of lunch with a clutch of crisp drives down the ground and good runs square of the wicket as well . With Yardy content to continue at his own unhurried tempo , though , Goodwin eventually paid for his adventure . Two balls after hitting Min Patel for a straight six , he again went down the wicket and was unable to regain his ground when the slow left-armer pushed the ball wider and flatter . Chris Adams and Matthew Prior both went cheaply , the captain lbw offering no stroke to Khan and the wicket-keeper becoming Dwayne Bravo 's first championship victim when he plonked a drive straight to short extra-cover . When Luke Wright somehow propelled an abortive leg-side thrash at Patel only as far as short mid-off to go for a duck Sussex had lost four wickets for only 44 runs . Yardy was unperturbed , however and - as the likes of Yasir Arafat and Ollie Rayner took transient responsibility for the run rate in a series of handy late-order stands - he inched into three figures by midway through the evening session . Along the way , there was plenty of lapping and sweeping of spinners Patel and James Tredwell as well as canny placement of pace and the occasional full-blooded pull . Yardy 's ritual and plentiful movement in the crease against the seamers resulted only in conspicuous strokelessness for long periods once the ball arrived . But when the loose deliveries came his way they were regularly dispatched as he continued his unfussy accumulation . His innings will rarely have anyone on the edge of their Hove deckchairs . Even so this second hundred of an injury-interrupted season could yet prove a springboard for Sussex as they go in search of championship title number two in the second half of the summer . Liverpool Victoria County Championship Division One Sussex v. Kent Hove : Thursday 13 July 2006 ( day 1 of 4 ) Toss : Sussex won the toss and elected to bat Umpires : V A Holder , R A Kettleborough Sussex First innings RR Montgomerie lbw b Khan 0 CD Hopkinson lbw b Henderson 20 MH Yardy not out 126 MW Goodwin st O'Brien b Patel 82 *CJ Adams lbw b Khan 3 +MJ Prior c Tredwell b Bravo 15 LJ Wright c Key b Patel 0 Yasir Arafat c Stevens b Patel 31 OP Rayner st O'Brien b Tredwell 23 RJ Kirtley not out 22 Extras ( b 5 , lb 14 , nb 12 , w 2 ) 33 Total for 8 wkt ( 104 overs ) 355 To bat : JD Lewry Fall of Wickets : 1-0 ( 0 RR Montgomerie ) , 2-39 ( 39 CD Hopkinson , 45 mins ) , 3-180 ( 141 MW Goodwin , 143 mins ) , 4-199 ( 19 CJ Adams , 14 mins ) , 5-223 ( 24 MJ Prior , 25 mins ) , 6-224 ( 1 LJ Wright , 2 mins ) , 7-268 ( 44 Yasir Arafat , 49 mins ) , 8-308 ( 40 OP Rayner , 32 mins ) Bowling A Khan 20 3 57 2 T Henderson 20 4 57 1 DJ Bravo 16 1 74 1 DI Stevens 3 0 14 0 JC Tredwell 16 1 52 1 MM Patel 29 4 82 3 Sussex : R R Montgomerie , C D Hopkinson , M H Yardy , M W Goodwin , C J Adams , M J Prior , O P Rayner , L J Wright , Yasir Arafat , R J Kirtley , J D Lewry Kent : R W T Key , D P Fulton , M van Jaarsveld , M J Walker , D I Stevens , D J Bravo , J C Tredwell , N J O'Brien , T Henderson , M M Patel , A Khan </text>
<text id="cnozg" url="http://beehive.thisisexeter.co.uk/default.asp?WCI=SiteHome&ID=9908&PageID=56638">
This page aims to keep you informed with what 's happening within the Sensory Garden Project ( Latest developments within the garden and website , plus the latest Natural Health and Fundraising News and Events ) Ebay raises funds for MS Society We currently have a number of items which are listed on Ebay to raise funds for the MS Society , including Healing Art with 100 % of proceeds donated . To date during 2006 we have raised over £ 200 . Please look for our Ebay listings under ' MS Healing Art ' Artist Christine Mallaband-Brown donated a beautiful ' dreamscape ' painting , depicting mid-summer at a stone circle . This is featured in our ' Links - Natural Health ' Artwork Gallery and was auctioned on E-Bay to raise funds for the MS Society . MusketeerS Carers Directory The Carers directory produced by the MusketeerS Multiple Sclerosis support group has been launched on-line . This directory contains the contact and telephone details of many useful services , covering Money Matters , In the Home , Mobility and Other Useful Contacts - see Links - Multiple Sclerosis , Disability & Carers for more details www . t hemusketeers . o rg Garden Openings raise funds for Charities During the summer of 2004 we raised £ 492 for the National Gardens Scheme and £ 864 on behalf of the North Staffs Branch of the Multiple Sclerosis Society by opening the Sensory Garden to the public . During 4 open days , more than 300 people visited the garden and special guests were the Deputy Lord Mayor of Stoke-on-Trent , Councillor Maurice Lewis J. P . and the Deputy Lady Mayoress , Mrs Shirley Lewis . Our highlight was during August when we had a visitor from Tasmania , Australia . She had seen the guided tour on the internet and was visiting the UK for a holiday . Multiple Sclerosis is the most common disabling neurological condition affecting young adults . Around 85,000 people in the UK have MS . The MS Society is the UK 's largest charity dedicated to supporting everyone whose life is touched by MS . They provide Respite Homes , a freephone MS Helpline , specialist MS nurses , grants for home adaptations and mobility aids , education and training , and a wide range of information in their Information Centre . They also fund over 70 vital research projects in the UK . Local Branches and Regions cater for people of all ages and interests and are run by people with direct experience of MS . ( for more details of planned dates see our Events page ) . Natural Health News NATURAL HEALTH LINKS We are aiming to build one of the best set of Natural Health links available on the internet . From Aurasonics to Zen Chi , we will endevour to provide links to all aspects of natural health , which could be useful for People with a Disability and equally important for the Carers of these people bringing you the latest Mind , Body and Spirit news . Reducing stress levels - Gardening is good for your mind , body and spirit . Researchers at the University of Florida have found that just walking through a beautiful sensory garden , lowers peoples ' stress levels . Cannabis and cannabis based medicines Potential benefits and risks to health A report of the findings of the working party has been published by The Royal College of Physicians - December 2005 The illegality of cannabis in many countries has perhaps obscured proper examination of cannabis-based medicines in clinical practice . On the one hand , many sufferers from multiple sclerosis testify to its efficacy in relieving pain and spasticity , while others have serious concerns about its ability to cause dependence and possibly lead to harder drugs . This report takes an objective and careful look at the evidence on cannabis-based medicines . Their ability to treat conditions such as multiple sclerosis and chronic pain , to reduce the sickness caused by chemotherapy , and to counteract the loss of appetite in AIDS patients , is examined . Each is considered in the light of the pharmacological effect of cannabinoids , their efficacy in comparison to other medicines , and the results of clinical trials . Their efficacy in treating a range of other conditions is also assessed , along with their overall safety , including the possible link between cannabis and psychosis . The fact that the body produces its own cannabis-like substance has raised interesting new possibilities for research into drugs for the treatment of obesity , heart disease and osteoporosis . With a clear patient information section , the report provides an informative guide in a contentious area of medicine for general practitioners , hospital doctors , psychiatrists and patients suffering from multiple sclerosis . Contents * Chemistry and pharmacology of cannabinoids * Cannabinoids and the treatment of multiple sclerosis * Cannabinoids as a treatment for chronic pain * Cannabinoids , appetite regulation and body weight * Other potential medicinal uses of cannabinoids and cannabis-based medicines * Safety of cannabis and cannabinoids * Appendix : Patient information Buy a copy of the report ( £ 12.00 UK £ 14.00 overseas ) , or view the summary on-line at The Royal College of Physicians website ( see Links - Natural Health ) www . r cplondon . a c. u k December 2005 Medical Cannabis Links New Links Added 2006 ( see Links - Natural Health ) Marijuana : The Forbidden Medicine - A place to learn about patients ' experiences with medical marijuana - Lester Grinspoon , M. D International Association for Cannabis as Medicine - Society advocating the improvement of the legal situation for the use of the hemp plant Patients Out of Time - Cannabis as medicine A compassionate , science-based educational forum for the restoration of medical cannabis knowledge Therapeutic Help from Cannabis for MS - THC4MS aims to supply medicinal cannabis chocolate to bone-fide MS sufferers in emergency situations The American Alliance For Medical Cannabis - Facts re medical marijuana ( Cannabis ) as medicine , laws for medicinal marijuana - great recipes The Compassion Club - Canada 's largest medical marijuana buyers ' club . Natural therapies in a safe , healing environment Bud Buddies - a medical marijuana co-operative providing advice on medicinal cannabis cannabis . c om : Medical Cannabis Resources - Read about the amazing medicinal benefits of cannabis . . . . MAPS : Medical Marijuana Research - Practical resource of scientific information relating to marijuana as an effective medicine The Science of Medical Marijuana - Website sponsored by Americans For Medical Rights </text>
<text id="cnqwk" url="http://bookshop.blackwell.co.uk/jsp/id/0340894342/Divine_Madness.html">
James and his fellow cherubs infiltrate an Australian cult , in the most exciting CHERUB story yet . When a team of CHERUB agents uncover a link between eco-terrorist group Help Earth and a wealthy religious cult known as The Survivors , James Adams is sent to Australia on an infiltration mission . It 's his toughest job so far . The Survivors ' outback headquarters are completely isolated . It 's a thousand kilometres to the nearest town and the cult 's brainwashing techniques mean James is under massive pressure to conform . This time he 's not just fighting terrorists . He 's got to battle to keep control of his own mind . </text>
<text id="cntup" url="http://www.newble.co.uk/chalmers/innes.html">
THE QUESTION IN SCOTLAND FIFTY YEARS AGO . I. One of my earliest recollections is the rattle of the muskets when a company of soldiers , marched into Easter Ross to keep down the excited population in 1843 , grounded their arms in the High Street of the old burgh of Tain . They were drawn up in front of the grey tower on the Castle hill , which half hid the long blue line of Sutherlandshire hills , while far to the right our horizon showed the ruined Keep of Lochslin , the birthplace of the Bloody Mackenzie . It was the centre of a district in which the display of some military force had become necessary . About a year before , the Church of Scotland had solemnly undertaken to disestablish itself ; and that promise had now to be fulfilled , but by a very different process from the comfortable euthanasia of retaining a life-interest in the benefices . Most of the Northern ministers adhered to their pledge ; but each of them still held that the church of the parish belonged to its congregation , and the congregations ( who were with them almost unanimously ) held still more strongly that the manse ought to be left with the outgoing minister . That was not to be . It was found not easy to drive the Gaelic congregations from the low grey walls of the Easter Ross churches , each surrounded by the generations of its dead . And though it was easy enough to send out from his home each minister and his family , the actual accomplishment of this , which was now going on , filled every household in the Highlands with a dangerous mixture of anguish and indignation . In this particular district there were special reasons for strong feeling . The people were not under the control of one great proprietor , ducal or otherwise ; but still there were attempts to terrorise . A powerful landholder in the neighbourhood announced that no labourer should be permitted to do a stroke of work on his estates , unless on the previous Sunday he had attended the religious service provided by the State . The labourers , backed by their friends in the towns , stood shoulder to shoulder , and escaped the whole evil so threatened . But their spiritual leaders , the ministers in town and country , did not escape from any part of what had hung over them . Accordingly , a stranger scene than even that which Ross-shire peasants and burghers now gazed upon had been transacted a few days before in the metropolis of Scotland . It was a grey and cloudy afternoon on the ridge of the new town of Edinburgh , where masses of spectators gathered in breathless expectation round the tall spire of St . Andrew 's Church . Into its interior , crowded since early dawn with a like eager multitude , the members of Assembly and the glittering cortege of the Queen 's Commissioner had just disappeared . The doors were now shut , and all Scotland seemed to wait outside . Suddenly they were broken open , and a roar of acclamation rent the air as the ex-Moderator in his robes , and by his side the venerable face of Chalmers , were seen to appear . For following these two came the leaders of the Evangelical revival in the Church of Scotland from Highlands and Lowlands alike . The crowd surged in emotion around them , so as to make the old men in front the head of an involuntary procession . It took a few steps westward , and then , turning to the right , moved down the steep brow of that long slope which connects northern Edinburgh with the sea . One by one the ministers then in Edinburgh , who had resolved to cast in their lot with the Church , fell into the moving line . But after them marched a train of young men , " licentiates " or candidates , who had looked forward to its benefices , but who ( like all its missionaries without exception in foreign lands ) chose now to belong to this its forlorn hope . Together they set their faces to the long descent into that valley of humiliation . Before them the waters of the firth gleamed under the blue and bitter north , and beyond it stretched many a moor and strath , with the manses which the old men were in a few weeks to leave and the young men were never to enter . To one of those manses I had paid an unseasonable morning visit two months before . There was a bright March sunrise , and I had jumped early out of bed , for my head was full of marbles and peg-tops , and a dozen or so of games before breakfast has , at that age , its attractions . To my astonishment , I found my father down before me ; indeed , he had evidently been there for some time , for the moment I appeared he folded up the newspaper in which he had been so unseasonably engaged , and - with a break in his voice indicating an emotion that was unaccountable to me - asked me to take it at once over to the manse , with his compliments to his friend the minister . I went very readily , for the hedgerows were full of young birds upon whom legitimate hostilities could be waged in passing . But as I went I reflected on the austere and stately , image of our pastor , - a man everywhere venerated , but whose face inspired awe rather than love in the beholder - ( had I not seen the town-boys break and scatter round one corner of the street as he appeared at the other ? ) - and I resolved that my interview with him should be short . It was shorter than I expected , for I had scarcely got out of the sunshine into the manse evergreens , when I found him in the porch and when I offered him the newspaper , he showed me that he had already got the Times by some unusual express , and as he spoke he patted my head and smiled - but such a smile , so full of radiant kindliness ! I was confounded ; and as I went back between the hedges the birds sang unheeded while I thought what could have happened to the minister . Had anybody left him a fortune ? or had he met one of the Shining Ones walking among the hollies in that early dawn ? And it was not for some weeks that I found out that this was what had happened - the newspaper that morning had brought him the vote of the House of Commons , finally refusing an inquiry into the affairs of the Scottish Church , and so making it certain that within a few weeks he and his aged mother would leave for ever the home , at the door of which I found him . But the " gentleness and gaiety " of heart with which we are told , in a memorable passage of Lord Cockburn , that the country ministers faced the coming of the crisis , did not free them from having to go through with it afterwards in all its grinding detail . This was the point of one of the most striking reminiscences of Dr . Thomas Guthrie at a later date ; " I remember passing a manse on a moonlight night , with'the minister who had left it , for the cause of truth . No light shone from the house , and no smoke arose . Pointing to it in the moonlight , I said , ' Oh , my friend , it was a noble thing to leave that house . ' ' Ah , yes , ' he replied ; ' it was a noble thing , but for all that it was a bitter thing . I shall never forget the night I left that house till I am laid in my grave . When I saw my wife and children go forth in the gloaming ; when I saw them for the last time leave our own door ; and when in the dark I was left alone , with none but my God in that house ; and when I had to take water and quench the fire on my own hearth , and put out the candle in my own house , and turn the key against myself , and my wife , and my little ones that night - God in His mercy grant that such a night I may never again see ! " Those who left their homes at once , as most in Ross-shire were now doing , had perhaps the best of it . But some were gladly allowed to linger on till the early Northern winter . " One minister writes to us that he left the manse with his family in a snow storm , when the mountain was white with snow , and the sky was black with drift ; but that he never knew so much of the peace of God as he did that night , when following his wife and children as they were carted over the mountain , without knowing where they were to find a place to dwell in . Some of our ministers write that they live in crofters ' houses ; some in places as damp as cellars , where a candle will not burn . One says he sits with his great coat on ; another that the curtains of his bed shake at night like the sails of a ship in a storm . One minister , a friend of mine , lives in a house which every wind of heaven blows through . On getting up one morning he found the house all comparatively comfortable , and wondered what good genius had been putting it in order , when he discovered that a heavy shower of snow had fallen , and stopped up the crevices of the roof . " It must always be remembered that the country , and especially the Highlands , were different in this respect from the great towns , even after that first winter of 1843 . It was some years before the Northern manses were built , and homelessness , added to poverty , pressed heavily on the ejected ministers . I remember how , as a boy , I used to watch one of them , a scholarly , and in his college days a rather distinguished man , who after 1843 was unable to find a home within his own parish , and who besides now laboured under a weak chest and a threatening of heart complaint . Yet week after week , as each Sunday morning came round , he persisted in driving away for miles through those inclement winters to meet his congregation ; and I can remember to this day his keen , delicate face set to meet a heavy snow-storm from the northwest , while a hacking cough shook his whole frame as he set out on his journey , four miles of which must pass ore he caught sight of the well-sheltered and well-remembered manse . But those who , like him , found shelter in a town dwelling , however humble , were not worst off . The great difficulty was in the country , even when harbouring the minister was not forbidden by the great landlords . But in many cases , and occasionally over whole districts or counties , it was forbidden . And where a foot of ground was forbidden to the minister , as well as to his congregation , the results , always depressing to him , and cruelly distressing to his family , sometimes reached a pitch of strange and memorable oppression . I have myself often conversed with the minister of " Small Isles " - four inhabited rocks clustering together out in the wild Atlantic - whose ministry , forbidden on those morsels of the land , was carried on in the boat upon the billow which his school friend , Hugh Miller , celebrated as the Floating Manse . ( see Intrusion for more , and some pictures ) And I stood as a boy in the mighty cavern near Cape Wrath beside the pure-hearted pastor who , when ejected with his people from their church and manse on the ground of a site-refusing Duke , worshipped throughout the winter under those humid arches , while the only " iife interests " conceded him were in the savage rock and resounding shore . In the awakening of thought which such scenes stirred in the young , there was a strong moral element , not stimulating only , but animating . " All good things have not kept aloof , nor wandered into other ways , " was the irrepressible feeling of lads who had been drifting on towards the dull afternoon of the century , and were suddenly surrounded by this illuminating glow . Apparently then , their country , too , was to have a future as well as a past . For it was plain , oven in 1843 , that the great event of that year was essentially transitional . It left Scotland in a state of unstable equilibrium , and confronted it with a problem , political no doubt , but moral as well . And what might a history not call for in the future which revealed such gulfs and altitudes in the present ? What might such a country not yet claim of its sons ? Above all , what did it not already deserve at their hands ? Those of them who are most conscious of having failed in obedience to the early vision , do yet , in looking back , recognise the nobility of its call - a call which they have found most noble and most adequate precisely when they are brought nearest to some crisis of public duty . Those , on the other hand , who " think they pay every debt to virtue when they praise it , " have never had a comfortable time in Scotland . The occasions for not merely admiring but imitating return too frequently . And for some time past there has been a well-founded apprehension in all parts of the Scottish Church that its complete freedom or its complete union may involve some of its members in a share - say , one-sixteenth or one- sixtieth part - of the same self-sacrifice as was shown in 1843 . That , of course , is not a plea that can be nakedly stated , nor is it one which many men in their hcarts entertain . The mass of the Scottish people , even when within the establishment , hold the principles which in that year drove their brethren out of it . And the only recent occasions , when illusory legislation in its favour has had even a passing chance of success , were when it was promised as " on the lines of 1843 , " or as " all that was asked for " in that year . But the contact of the unsatisfied claim of past history with the demand of present duty is far too suggestive to be safe ; and from time to time we hear , even in Scotland , unmeaning and gratuitous protests that the Disruption happened a long time ago - that it is now happily forgotten - and that , perhaps , to tell the truth , it never deserved to he remembered . As Free Churchmen born in the Scottish Highlands hear these recurrent clamours , we seem to see rising before us once more those grave suffering faces , most of them by this time gone down into a deeper silence ; and the utterance of their stillness is not nnlike that of our new Norse poet , - " When thou hearest the fool rejoicing , and he saith , ' It is over and past , And the wrong was better tban right , and hate turns into love at the last And we strove for nothing at all , and the gods have fallen asleep , For so good the world is growing that the evil good shall reap , ' Then loosen thy sword in the scabbard , and settle the helm on thy head , For men betrayed are mighty , and great are the wrongfully dead . " Bnt may the dead not have made a heroic mistake ? Was there , after all , any reason why they should sacrifice themselves and go out ? The answer must be given ; but readers who find constitutional facts too dry may pass over the next few pages . III In Scotland , which , as a whole , has been Presbyterian since the Reformation , the Church party has generally been the popular party . What is more strange to English ears , the Evangelical party has , on the whole , been the Church party , all revival here of religions feeling or individual conviction tending to take shape in public and organised action . Ten years before 1843 the General Assembly , or representative body of the ministers and laity of the Church , had begun to show an " evangelical majority . " It at once set about the work of Church reform , and especially of Church expansion , in two directions . The Church , by its own authority , welcomed to a seat in its courts the pastors of the two hundred new congregations , which had been gathered together chiefly through the devotion and eloquence of Dr . Chalmers . At the same time , and in the same way , it admitted a considerable number of Original Secession and other ministers who had returned to the reviving Establishment . Church Extension and Church Union , indeed , were supposed to be the great aggressive duties of the new time ; and the fact that ordinary Church administration has always been left in Scotland to the Church itself - the ordinary jurisdiction of its courts has never been intorfered with either before or after 1843 - naturally led to the belief that Church legislation and Church development might also be free . This was found to be a mistake , amid the refusal of places and votes to those who had been admitted by the Ecclesiastical body was in the long run the immediate cause of the Protest and Disruption of 1843 . But the third and earliest occasion of the quarrel with the State was the old question of patronage , which has broken out in so many lands , and which , under the name of Investiture , caused , in the eleventh century , the greatest conflict of Church and State which the world has seen . In Scotland , however , the veto upon arbitrary nomination by a patron was now declared to belong , not to pope , churchman , or chapter , but to the whole " congregation of the faithful people . " And this third measure was represented by the Assembly which passed it in 1834 , as a defensive rather than aggressive regulation - founded , indeed , on what was at all times a " fundamental law of the Church . " Suddenly , in the midst of so much expansive energy and enthusiasm , a crushing blow fell upon them . All three reforms were declared by the Law Courts to be incompetent ; but what was far more alarming was the ground on which in each case the conclusion was based . It was , that the Scottish Establishment is absolutely subject , even in matters ecclesiastical , to the State and to its enactments , past and future . The present constitutional law , that the Church of Scotland is in no sense independent of the State , but is absolutely subject to Parliament and to Statute , was then , for the first time , solemnly laid down . Take the three heads of the Court alone . President Hope put it thus : " That our Saviour is the Head of the Kirk of Scotland in any temporal , or legislative , or judicial sense , is a position which I can signify by no other name than absurdity . The Parliament is the temporal head of the Church , from whose acts , and from whose acts alone , it exists as the National Church , and from which alone it derives all its powers . " Again , " Who gave the Church courts any jurisdiction ? The law and that alone gave it ; and the law defines what it has so given . " And as the Church was not independent , they denied the possibility of any original compact , or of any real conflict , between Church and State , as an " indecent supposition . " Even the courts of the State were entitled to fix for the Church its separate province granted by the State . So President Boyle : " There exists , in reality , no such thing as a conflict between the civil and ecclesiastical courts of a country , in which a church is established and endowed by the State . " And so Lord Justice- Clerk Hope : " I cannot admit that an Establishment can ever possess an independent jurisdiction . " And of course , on these principles , the courts made short work of the claim , that the Church was not bound to obey Acts of Parliament which proposed to regulate spiritual or Church actings . Several of the judges put it that the Church is " the creature of Statute ; " all of them that it is bound to obey Statutes which regulate , or , in its own view , interfere with , its proper church action . Take again only two of the utterances , and both from the chair of the court . In the third Auchterarder case , the Presbytery had pleaded that what they were called on to do was strictly ecclesiastical , was against their conscience , and against the commands of the Church . Lord Justice-Clerk Hope answered that although these functions are " strictly ecclesiastical , and to be exercised by them in their ecclesiastical capacity , yet the obligation to perform them is statutory - Statute imposes the duty on the Church courts of the establishment , " and the courts must enforce the statute . And when in the still higher sphere of the House of Lords it had been pleaded in addition , that there was a " fundamental law " of the Church of Scotland which forbade such Church action , even in compliance with statute , the Lord Chancellor of Great Britain , sitting as chief of the Jurisprudence of Scotland , enounced the general rule which has ever since been the law , as follows : " Whether that is , or ever was , a law of the Church of Scotland , is perfectly immaterial , if the Statutes contain enactments and confer rights inconsistent with any such principle , or with the execution of any such law . " ( Chalmers held otherwise , based on an Act of 1600- ish , which he could quote , by which the Church of Scotland was specifically given certain defined rights . These points were never addressed by the Courts . - Webmaster ) It followed that the Church and its office-bearers were bound legally , and if they accepted the law would be bound legally and morally , to obey any statute the State might pass in the future , no matter how inconsistent it might be with the present or past principles of the Church - to obey it not merely passively , but actively , and as ecclesiastical functionaries . The obligation of individuals to obey actively received great prominence at an early stage of the decisions ; but before their close it was plain that on the principles now laid down the Church itself was in a worse case . For , in the event of its being thereafter dissatisfied with these or any worse incidents of its connection with the State , it would have no power either to abandon that connection , or to treat for new terms as a party able to accept or to refuse . This is the present law of establishment in Scotland , unchanged since 1843 ; and the principles I have quoted were laid down in great leading cases with cumulative emphasis and solemnity . But all of them were in themselves general statements of law , addressed to the constitutional question of Church independence , - a question which did not depend on the special matters of non-intrusion or Church extension , though they depended upon it . They were given as the ground , and they were the ground , of the innumerable decisions and orders of the court enforced against the Church . And they were intended to settle , and they did settle , what both parties knew and confessed to be the great constitutional question then in dependence . How opposed they are to the ancient theory held by the Church as to its independence I need not here say . But the law laid down long before May 1843 would have abundantly justified it even then in separating from the State , protesting that its constitutional liberties had been authoritatively subverted . Fortunately for the future of the country , it did otherwise . It appealed to the State itself , that is , to the Legislature and the Crown , against the decision of the judicial organs of the State . And it was only upon their neglect - and indeed rejection - of the Claim , Declaration , and Protest of 1842 , that the Free Church went out in 1843 . But when it did so , it combined the two considerations , of the authority of the Courts on the constitutional question , and the supereminent power of the Legislature , with great felicity , in its Protest , which ran " Considering that the Legislature , by their rejection , etc . , . . . have recognised and fixed the conditions of the Church Establishment , as hence-forward to subsist in Scotland , to be such as these have been pronounced and declared by the said Civil Courts , in their several recent decisions , in regard to matters spiritual and ecclesiastical . " The one matter on which the Civil and Church Courts , otherwise so keenly opposed , were agreed , was this , that the claim of the Church was really one of independence - independence not merely of the Civil Courts , but of the State and Parliament . Therefore it became necessary for the Civil Courts , in enforcing their decrees against it , in matters ecclesiastical , to affirm its dependence upon both in the broad terms we have quoted . And therefore also the Church , in taking up its position in the Act of Assembly 1838 , affirming " the independent jurisdiction , " put it upon the ground that the " power ecclesiastical flows immediately from God " to the Church , and not through the mediation of the State or Parliament . But what probability was there that the Scottish Church could persuade the Legislature of Great Britain in 1842 , to affirm such an abstract proposition as this in regard to one of its Established Churches ? None whatever . Its only chance was that the Legislature might so far interfere as to prevent the enforcement of the orders and interdicts already based by the Court upon these general principles . In that case the Church could perhaps have honestly stayed in , as standing npon its own declaration of independence ; the denial of which by the Courts they would then have regarded as brutum fulmen , and no longer authoritative , because , at least virtually , disclaimed by the State . Even early in 1842 both parties were thus already agreed that the practical question must decide the constitutional question . Was the Church to obey , or was it not ? The Church made the most of its last hope in that massive and magnificent state-paper , the Claim , Declaration , and Protest of 1842 ; in which , while founding its jurisdiction not on law but on Gospel , and protesting that it was for maintaining the Headship of Christ and not of the State over the Church that it was called to sufifer , it laid at the same time great stress on the limited and civil jnrisdiction of the Court of Session , And while it enumerated here , as afterwards in its separating Protest , the long roll of cases in which the Court enforced the State 's supremacy even in spiritualibus , - by which , " no one function of the Church , " " and no one item mentioned by the laws as belonging peculiarly to its judgment , " had been spared , - it passed over in silence the loud denials of Church independence upon which these encroachments were based . But what it did not omit was to affirm its own independence , and solemnly to " declare " to both Houses of Parliament and the Crown , that the Church could not in conscience obey or submit as the Court demanded , and that " at the risk of losing the public advantages of an Establishment " they " must , as by God 's grace they will , refuse to do so ; for , highly as they estimate these , they cannot put them in competition with the inalienable liberties of a Church of Christ . " The claim was rejected by the other great parties concerned with an equally fatal explicitness . Crown and Legislature declined to interfere ; and that not merely tacitly , which would have been abundantly enough . In the answer from the advisers of the Crown , ' and in the refusal of the House of Commons ' to entertain even a motion for enquiry , it was no doubt not concealed that they were zealous for the existence of Patronage , and knew the Church to be pledged against it . But in both of them the refusal was put explicitly upon the constitutional question stated by the Court , by the Assembly , and in the Claim of Rights , as the only one of chief importance ; and the legislative interference which all parties looked forward to was delayed in order , as the Prime Minister put it expressly in the House , that the pretensions of the Church to independence and co-ordinate jurisdiction might be first surrendered or crushed . I know not how a constitutional question such as the future relation of Church and State could be more solemnly and conclusively settled , than ( first ) by the authoritative and repeated utterances of the Supreme Courts , appealed against ( secondly ) by the National Church as fatal to its very existence , and ( lastly ) confirmed upon this appeal by the supreme power of the State as before all things necessary and right . And yet this was not all - not nearly all . It might have been a mere abstract question that was thus solemnly settled . But this abstract question was to be settled , as we have seen , - by the practical method of enforced obedience , and the constitutional disturbance attending it amounted to a long agony . Even before 1842 the Church and its Courts had solemnly protested that it could not obey the State in spiritualibus in the matters already enjoined it . And so during the eighteen months that followed , while it made its vain appeal to the Legislature , the mace of the law fell heavily and cruelly upon every part of the ecclesiastical body . In Perthshire , in Ayrshire , in Aberdeenshire , in every corner of the country , the principle of subjection to a civil statute in ecclesiastical matters was enforced by fines and interdicts , until the Church at last went out bruised in every quivering limb . But these sufferings - and even tbe fines and expenses which some of the houseless ministers had to pay , after being turned out of their livings - were not felt so much by the Church as the taunts which accompanied them . The Court of Session , in utterance as well as action , refused to tolerate even that interim refusal to obey while the Church was making its appeal to the Legislature . " I wish , " said Lord President Hope , speaking as the bead of the Court , " to speak with all respect of the General Assembly , of which body I was for so long a period a member ; but if any other body of men , or if any individuals had done what they have done , I should feel constrained to designate their cpnduct as profligate . The Presbytery of Auchterarder came to this Court and pleaded here . Judgment went against them . The General Assembly sanctioned and directed an appeal to the House of Lords . . . . But the decision of the House of Lords affirmed the decision of this Court , and these same Church Courts absolutely refuse to give obedience to the judgment . To conduct like this I have already given its appropriate designation . In point of candour and fairness it is no better than the old shuffle , ' Odds I win , evens you lose . ' " And this terrible imputatien of dishonesty , flung from the judgment-seat against those who should continue to eat the bread of the State , and yet refuse the legal conditions of establishment , was repeated more decorously again and again as the case went on . " If these gentlemen , " said President Hope in the second Auchterarder Case , " wish to maintain the situation of what they call a Christian Church , they would be no better off than the Catholic Church , or the Episcopal Church , or the Burghers or Anti- Burghers ; but when they come to call themselves the Established Church , the Church of Scotland , what makes the Church of Scotland but the Law ? " And the House of Lords was equally intolerant of men claiming to be free who remained in this law-made Church . " It is fit , " said Lord Brougham in the same case in the House of Lords , " that these men at length learn the lesson of obedience to the tribunals which have been appointed over them ; a lesson which all others have long acquired , and which they , on learning it , should also practise . " And this obedience , Lord Campbell went on immediately to explain , could not be evaded by those " who continue members of the Establishment " abandoning tbe temporalities to the State or the patron . Disestablishment was the only honest remedy . " While the appellants remain members of the establishment , they are , in addition to their sacred character , public functionaries appointed and paid by the State , and they must perform the duties which the law of the land imposes on them . It is only a voluntary body , such as the Relief or Burgher Church in Scotland , self-founded and self-supported , that can say they will be entirely governed by their own rules . " Now all these , whether we call them kindly suggestions or cruel taunts or statements of principle , came from the Supreme Courts as parts of their solemn judgments , and were authoritative . We need not therefore recall the far more violent attacks on the Church in the Legislature , the demand of the Moderate League , that the Government should choose which of the two parties was to remain in the Establishment , and the bitter inculpation of the Whig government by the Conservatives generally , and Lords Aberdeen and Brougham in particular , for its hesitation to enforce the new constitutional law . For the great strength of these hostile utterances during that last lingering year of the controversy , was that they were true - that the Church knew them to be true , and had made them part of its principles . The right of the State to fix its own conditions of establishment , whether those conditions be right or wrong , had been admitted in the most absolute way in the Church 's Claim , Declaration , and Protest of 1842 , and is made the foundation of the Free Church Protest in 1843 . We , looking back , may be disposed to think that the denial of Church independence and the demand of subjection to Statute , affirmed by the Courts in and before 1842 , were final conditions of Establishment oven then , and that they might have come out before . But it is not for us harshly to judge Churchmen , who at the cost of uninterrupted taunts and insults , clung to the State till every method of appeal was exhausted - till , in fact ( as comes out so curiously in the Protest of 1843 ) , waiting in for a quarter of an hour longer had become practically and morally impossible . For thus it was that the constitutional question of subjection , now broadly separated from the previous one of patronage , and already decided by the Supreme Courts , was with due solemnity referred by the National Church to the Crown and Legislature , and was deliberately decided by the Legislature and the Crown . There are countries in which even this accumulation of reasons would not amount to reason f or revolution ; for in these lands the original independence of the Christian Church has faded out of the convictions of men . But in a country with such a history as Scotland , the Disruption was a necessity of conscience . It was not the less a memorable self-sacrifice . A quarter of an hour after it happened the news was brought to Lord Jeffrey as he sat in his room , and the old judge , springing from his seat , exclaimed , " I am proud of my country ; there is not another upon earth where such a deed could have been done ! " A quarter of a century after it happened Mr . Gladstone , speaking as Prime Minister in his place in Parliament , proclaimed that to the moral attitude of the new-born Church " scarcely any word weaker or lower than that of majesty , is , according to the spirit of historical criticism , justly applicable . " But the more that Scotland rocognises the deed of 1843 as flowing from her previous history and ancient convictions , the less will she be disposed to dwell upon it in any mood of transient exultation . Rather she will hear its voice at the close of the half-century as the same great Saga speaks it , - " Wilt thou do the deed and repent it ? Thou had'st better never been born . Wilt thou do the deed and exalt it ? Then thy praise shall be outworn . Thou shalt do the deed and abide it , and sit on thy throne on high , And look on to-day and to-morrow as those that never die ! " ( William Morris ' Sigurd the Volsung . ) III . But , in truth , the deed of 18th May , 1843 , is one which will never need to be repeated . What must in some form be repeated , and what may in many forms require to be imitated or improved upon - what , therefore , now deserves study not from Churchmen or Scotsmen alone - is the re-construction by which that deed was followed . For the reconstruction was the act of the people . " Contrary to all anticipations , the people had forsaken the establishment in a much higher ratio as to numbers than the ministers ; and it would have required more than seven hundred churches to accommodate the congregations who were ready to attach themselves to the Free Church . " Around us in the Highlands this side of the thing came out very strongly . Where the minister had resigned his living , the people followed him enthusiastically ; where he did not , they left him in a body . But in the Highlands , as much as in the Lowlands , an almost hopeless problem remained . In some places the people were numerous , but they were poor . In others they were a little better off , but they were few . But neither in the Highlands nor in the Lowlands had they been trained to act for themselves . It was a feudal country , and the natural leaders of the people - the chiefs in the north , like the lairds in the south - had in this matter failed them . Local self-government was not yet thought of . Voluntary parochial union had been evoked by Dr . Chalmers , and was one of the things now being crushed . But mere parochial union could not solve the problem how things were to be carried on upon a national scale , and for all time to come . In previous national efforts Scotsmen had the civil law of the nation behind thorn , obliging all citizens to religious union , and appropriating to the uses of the majority , in the name of their common country , the fruits and possessions of those who should refuse to obey . In the present ease that law was no longer at their back ; in so far as it survived , it worked now to enfeeble arid impoverish them . The experiment , whether a whole people could be banded together to work out by means of individual self-sacrifice one great common and permanent result , was to be tried under new conditions . And some of the conditions were not only new , but hard . For all over Scotland the congregations called to this problem were left houseless in one day . In one class of cases alone they earnestly attempted to save themselves . The Church Extension edifices had been raised chiefly , in some cases almost wholly , by the money of those who were now members of the Free Church , and the ministers officiating in them had been denied recognition by the Courts on the ground that they and their congregations were wholly a creation of the Church . But even these churches were now taken by the Courts from the Church which had erected them , and that on the paradoxical ground that they had been erected for the Church of the State . In south and north alike the congregations had thus to seek immediate shelter from the elements , as well as sites for more permanent homes of worship . But in south and north even sites for building were very often denied them . And this brought up , for the second time in this century , that inevitable Land Question which , in the previons generation , had been stirred in our Highlands by the bitterly remembered " clearances . " The amazing power which our law entrusts to private landholders , of excluding a whole community from purchasing a foot of ground in their own parish , or even their own county , came ont now for the first time in its intolerable extent . The clearances had sometimes swept out whole bodies or communities . " I stood on the top of that hill when the evictions were going on , " an old Sutherlandshire woman said to me , speaking of her youthful days , " and I saw sixty cottages burning in the strath at one time . " And I well remember the consternation in the Gaelic congregation to which in her age she belonged , when , one morning after 1843 , the announcement of an interdict drove them out from an ancient churchyard - a churchyard , too , distant half a mile from the parish church - amid whose moss-grown stones the people had met for many and many a sacrament before that mournful day . The preacher , who was that Sabbath to address four or five thousand Gaelic hearers , was Dr . John Macdonald of Ferintosh ; and he pointed ont , whother by way of defence or of aggravation , that the ground from which the people of the parish were so driven out was common and parochial property . The more usual case was that which happened , at almost the same time , to Dr . Thomas Guthrie of Edinburgh . In this case the Duke - Janet Fraser 's Duke - was proprietor of the parish , and as landlord refused a site . The miserable people quietly withdrew to a waste spot of barren moor , and met there in the open air . The Duke 's factor and agent instantly served an interdict on the trespassers , evicting them from even their open-air meeting on the waste . Henceforth they had no place on which to worship except the cross-roads on the public highway , and one Monday morning , after preaching to them there , Dr . Guthrie sat down to tell his experiences . " Well wrapped up , I drove out yesterday morning to Canobie , the hills white with snow , the roads covered ankle deep in many places with slush , the wind high and cold , thick rain lashing on , and the Esk by our side all the way , roaring in the snowflood between bank and brae . We passed Johnnie Armstrong 's Tower , yet strong even in its ruins , and after a drive of four miles , a turn of the road brought me in view of a scene which was overpowering , and would have brought the salt tears into the eyes of any man of common humanity . " Dr . Guthrie 's driver broke into sobs as he explained that the five hundred people waiting under some leafless trees on the turnpike road were the congregation who bad been refused first a site to build , and then a site to stand upon ; and who now waited on for hours under the driving rain till they had sung their last psalm on that fierce February day . It was not there only . So late as 1847 there were still thirty-one cases in Scotland in which sites were absolutely refused ; besides many others in which very inconvenient and humiliating places were deliberately offered - offered , toe , to tenants who frequently had the threat of eviction held over them if they ventured to build even upon these . Now what was the problem which the laymen of this Scottish Church , itself universally left houseless , had first of all to face ? It was not their own support , but that of their ministers and of many besides . The income of every Free Church minister ceased at Whitsunday , 1843 , and at the same date ceased his tenancy of the " manse " or parsonage , with its " glebe " of four acres of parochial ground . But along with them one hundred and thirty " probationers , " or preachers waiting for appointments , had , on the same day , thrown up all their prospects . The foreign missionaries sent out to India . , with Dr . Duff at their head , had likewise , without exception , sent in their adherence to the disendowed community . An old statute obliged all teachers , within or without the Universities , to be members of the Establishment , and the theological professors who , like Dr . Chalmers , had moved with the Church , were by this enactment obliged to resign their posts . A more cruel case remained . Every parish schoolmaster throughout Scotland who adhered to the Church going out was ejected from his small house , and deprived of his income . Ministers , missionaries , probationers , schoolmasters , and professors were in a day reduced to beggary . A small army of educated men , with their families , were left destitute and houseless , and thrown upon the congregations whose own necessities we have seen . In the days to come many hard questions will have to be dealt with in our own and other lands . The rights of labour , the claims of the poor , the division of the soil , the education of the young , the home-rule of our young empires , and the self-support of the Church - all these will bring round many a crisis in many a family of Western man . But can any of them ever present a harder problem than our fathers in Scotland had that day to solve ? Yet it was done - by Christian enthusiasm , no doubt . But that enthusiasm found or made fit channels for its flow . And among these we may mention first what is familiar in Scotland , but most strikes the observer outside . " The Kirk , " Sir Roundell Palmer told the House of Commons in 1869 , " had her Kirk Sessions , her Presbyteries , her Synods , her General Assemblies , each step of self-government rising above the other , so that she had been well exercised in the whole art and power of self-government , self-legislation , and self-expansion , no State power coming in to prevent her Syneds from meeting . There the great men who afterwards became the leaders in the Free Church movement had as much liberty of speech as we have in this place . There they formed their parties ; there they organised their system ; there they collected together such a power and bond of moral public opinion as enabled them to go forth triumphantly , even when leaving all which in this world they possessed . " It is a lesson for us all . For in Scotland , as elsewhere , there are now men who hate the whole system of Parliamentarism , in Church and State alike ; men who would rather shelter under any form of epicurean despotism than take their share of the risks and responsibilities of self-government . But that system has great tasks still to accomplish in the future , and there is no surer omen of its victory in these than that under it , in 1843 , the terrible crisis of Disestablishment was carried through . It was carried through , indeed , with scarcely any constitutional change . The Church remained the same , except as now founded on its Protest for freedom . The Presbyteries which had sat the week before as Courts of the Church of Scotland established , sat this week again - with frightful gaps and rents no doubt - but as Courts of the same Church unestablished . Legislation was held now , as before , to belong to its General Assembly , with consent of the Presbyteries ; for the refusal of the State to permit this , the Church had met by the last remedy . And none of these Church Courts are mere " convocations of the clergy ; " in all of them the representative layman , elected by the whole members of the congregation , decides upon the most sacred matters , with a vote equal to that of the Churchman at his side . And as with " self government " and " self-legislation , " so with the third function assigned to our classic hierarchy by Lord Selborne - " self-expansion . " Its rights of creating new congregations , recognising new ministers , and incorporating with itself other religious bodies - all repressed with fines and prohibitions only a few months before - were now exercised freely . It was all within the common law of Presbyterianism - a code of authoritative principles , whose breadth , forgotten so long as our branch of the system flowed in a merely national and statutory channel , was soon to be restored to the view of all in the ecumenical assemblies or Councils of the communion . But the feature in the new organisation of most interest , not so much in the past as for the future of our own and other lands , was what Dr . Chalmers , with his usual passion for sonorous phraseology , called a Sustentation Fund . ' It was , in truth , a new and great experiment in altruism or Christian solidarity . The local enthusiasm which had everywhere arisen of course received fit embodiment . Long before the Disruption Dr . Chalmers had given forth as his watchword , " Organise , organise , organise ! " And while in response congregational associations were everywhere instituted , and great numbers of women collectors gathered weekly the contributions of the faithful , the old order of deacons was revived for what was supposed to have been in apostolic times their exclusive function - the receiving and administering of the monies of the local church . But through all these organisations there passed the breath of one new life , when , in autumn 1842 , it was proposed that they should no longer retain their own contributions for their separate benefit , hut should send the mass of them on to one central fund for the Church as a whole , to be again divided equally from that centre among all the ministers . The idea was almost new then , but in that time of common suffering it commended itself irresistibly ; and it has ever since been acted on to an extraordinary extent . Some Free Church congregations send to the Sustentation Fund annually from £ 1,000 to £ 3,000 ; others in poorer districts can only send from £ 10 to £ 50 . But the small and the large contribution go alike into the common purse , and , as the time of annual division comes round , the minister of the poorer congregation receives from it the same amount as the minister of the greater - no less , and no more . This national voluntaryism , as Dr . Chalmers pointed out , really becomes an establishment of the Church from its own resources , and while it " coincides in principle " with that former method of support , it is free from some of its obvious disadvantages . In particular , it leaves to the Church itself the more complicated adjustment of the remaining question , how the salary from this equal dividend may be locally added to . For , as Dr . Chalmers originally urged , mere equality would not be justice where one minister with city burdens was giving up a stipend of £ 1,000 a year , and another in the country lost only £ 200 . Besides , it is not even desirable that the minister of a congregation , however he may be protected by the Central Fund from the possibility of being starved out , should be removed from the stimulus which most other workers have in the prospect of a larger income for successful work . How all this was met by the institution of congregational supplements , - a variable accretion of local voluntaryism , added on to the solid nucleus of the Church 's own establishment in the Sustentation Fund ; - and how the two combined have , through many years of not yet ended experiment , become a backbone to the Free Church ( a back bone whose value seems to be owing nearly equally to its firmness and its flexibility ) , we need not here inquire . ' What is important to notice is , that the idea which it embodies , which men have new come to speak of as a kind of national altruism , pressed outwards at the same time in many other directions , and beyond all merely patriotic bounds . We have seen the houselessness of the congregations in every county throughout the hard north . But a hundred thousand pounds were subscribed for building even before the Disruption day dawned , and within the first year five hundred churches were erected . Then came the effort necessary to provide manses or pastorages for the ministers . And then it was recollected that the evicted schoolmasters and their children were homeless too . Yet all this concerned no city Scotsman who doubted whether he were his brother 's keeper , and who reflected that the raising of such edifices implied a certain obligation in all time coming to those for whom they were built . Almost the only enterprise indeed , in which the centres were not able to sacrifice themselves for those outside , was the raising of the three colleges - two of them soon permanently endowed by private munificence , and the third now , with all its imperfections , the most fully equipped theological institute in theological Scotland . But the impulse was one which , in its own nature , could not be restricted to self-regarding or self-conserving effort . All the missionaries had joined the Church in its conflict , and , as might be expected , all now fulfilled their pledge . But the disestablished Church , instead of recalling them , commenced to double , and more than double , the sum previously sent out to maintain them . Missions to spread Christianity among the Jews followed , and missions to fan the flame of evangelism in Catholic countries . New missions to colonies , where Scotsmen so abound , could scarcely be called outside enterprises ; and these bring us back to the special funds instituted for the Highlands and Islands , and to the new and great enterprise of a Home Mission , partly consisting of Extension Charges throughout the country , and partly of Territorial Charges , " excavated , " to use Dr . Chalmers ' word , in our great towns . For instead of gradually abandoning the stations whose support was forced upon it in 1843 by the necessities of its local adherents , the pastoral charges of the Free Church have by this time nearly doubled . In view of the openings which the future is certain to bring to other communities , not necessarily in similar forms , nor , indeed , in religious relations at all , the study of some of these various channels and moulds as they were filled at once by one glowing enthusiasm , will always be important . But for my purposes , and with a view to the suggestion that in the future the Free Church too may hopefully hear itself called to a renewal of self-sacrifice , and that not in one form but in many , it is well to pause upon the results of the half-century . Three years before its close the Christian givings of this fragment of a poor country , stripped in one day to the very bone , had already amounted to more than twenty millions . Yet during the first half of the half-century they reached only about eight millions . From time to time the figures have varied , as represented by the following , which gives the amount for the opening year of each of its decades 1843 . . . . £ 363,871 1853 . . . . £ 289,670 1863 . . . . £ 343,626 1873 . . . . £ 511,084 1883 . . . . £ 628,222 The leap to the higher platform , which is here so visible at one point , happened , strange to say , just about the time when the last of the old Disruption leaders was taken away , and the glory of the separate communion they formed might seem to have departed . But , in truth , it happened in accordance with all the deeper instincts of history - at the very time when that communion announced a resolve to sacrifice its long-prized separation , to refuse the bribe of re-establishment , and to claim henceforward part in the whole burdens of our country 's future . And the result was in no respect strange . For the future of a country is to its Church " such a burden as wings are to a bird . " The Free Church and its Sustentation Fund embody ideas important for Presbyterianism , and even for Congregationalism , in America and our Colonies and many a distant hand . But their first duty is to their own country . And it seems to me that the time has at last come when the finance and other schemes of the Church of 1843 may frankly assume the aspect of provisional and experimental scaffolding - scaffolding in whose construction those now without should be consulted or considered as much as those within , because the Building which already rises behind it is one in which all Scottish Presbyterians have a right to dwell . From " Studies in Scottish History " by A. T aylor Innes , Hodder and Stoughton , London 1892 . </text>
<text id="codym" url="http://www.searchenginespy.co.uk/article0027.html">
After studying the Wordtracker results for the MSN and Google search engines for words that include " massage , " we picked the third result , " Techniques of Massage , " because it 's an excellent and appropriate angle for our client . The #1 result in MSN has a KEI of 3696 , but it would n't work with our client 's site . You have to be sure to choose keyword phrases that are appropriate for your particular client 's site . At MSN , " Techniques of Massage " has a KEI of 255 . Within a 24- hour period , if your site was placed well in the MSN engine , you could expect to get 90 visitors from MSN alone . What is your competition ? 1954 . " Techniques of Massage " in Google has a KEI of 900 , 165 potential visitors through Google alone in a 24-hour period , and competition of only 555 . Remember that a " good " KEI is anything over 100 , and an " excellent " KEI is anything over 400 . Let 's be honest here . You could manage a top 10 for this keyword phrase with your eyes closed ( and your computer turned off ) . So , for our aromatherapy client , we could create a page on the various techniques of massage , including ( of course ) her oils and aromatherapy products . We would spend time on the page and give it true value to both the engines and the target audience . And , we would subtly add graphics and link text that points to the client 's products in various areas of the page . John gave another example He says , " If you 're selling ' digital cameras , ' do n't optimize for ' digital cameras . ' Did you know that everyone is searching for ' Digital Cameras Review ' ? Build a page offering reviews of digital cameras , which has a KEI that just blew me away . " Another effective strategy : Top Reports Besides Comprehensive Search , John also likes to look at the top reports for high performance keywords or topics that are related to his client . John explains , " I 'll review the Long Term Reports , which are the top 1000 keywords over the past 24 hours . Then , I cut and paste any topics related to my client into Comprehensive Search to get streams of currently ' hot topics . ' I define a hot topic as a popular topic in high demand , which may also have lists of related keywords phrases also in high demand . " What happens if you ca n't find a hot topic that relates to your site in the top 1000 ? John answers , " Many people do not know that Wordtracker offers extensive top word reports beyond the database . All you have to do is ask , and they 'll sell you : * The Top 20,000 words $ 99 * The Top 100,000 words $ 500 * The Top 500,000 words $ 2000 " Additional suggestions * When John goes to Comprehensive Search , he does n't put in a huge list of keyword phrases . He types in one single word , then lets Comprehensive Search do the rest . This allows him to come up with ideas and angles that he would have never considered before . * Like John , spend a lot of time thinking of your target audience . Who are you trying to sell the products or services to ? There may be several target audiences , as in the case of our aromatherapy example . If so , go after keyword choices to target each of those audiences . * Do n't be afraid to let your creativity take hold . If your first few choices do n't work , continue trying . Using Comprehensive Search , it does n't take long to go back through the system with a different keyword idea . Keep going back until you find a possibility that might work for your site or the site of a client . * Be sure to give the surfer what they 're looking for when they choose your site from the search results . If you promised them " techniques of massage , " then be sure to give them good , solid content in that area , including related links . Weave your products and services throughout the page as you can . But , do n't ever try to trick a surfer . * If you get stuck and just ca n't find a keyword phrase with a high KEI and a low level of competition that will work for you , take a slightly different approach . Instead of trying to bring in a large amount of traffic through one single window , try creating several windows and bring in a little traffic through each one . Though more time consuming , this strategy can be equally effective in the long run . * If you are n't already a member of Wordtracker ( http://www.wordtracker.com ) , sign up for the free trial and test the system out for yourself . Pricing is very reasonable , depending on your needs . For example , you can use the service for a week for $ 19.94 , and many other plans are available . The bottom line is this : if you are serious about your Web site , you 've got to be serious about keyword choice . If you 're serious about keyword choice , Wordtracker is a " must have " service for you . Robin Nobles , Director of Training , Academy of Web Specialists , ( http://www.academywebspecialists.com ) has trained several thousand people in her online search engine marketing courses ( http://www.onlinewebtraining.com ) and is the content provider for ( GRSeo ) Search Engine Optimizer software ( http://www.se-optimizer.com ) . She also teaches 3-day hands on search engine marketing workshops in locations across the globe with Search Engine Workshops ( http://www.searchengineworkshops.com ) . Reproduction rights You may reproduce this article in any format as long as the content is not edited and the " About the author " portion above remains intact . </text>
<text id="coipg" url="http://www.scottishcorpus.ac.uk/corpus/search/document.php?documentid=1211">
Title : Scottish Parliament : Business Bulletin 158/2001 Author(s ) : Scottish Parliamentary Corporate Body Copyright holder(s ) Scottish Parliamentary Corporate Body : © Scottish Parliamentary copyright material is reproduced with the permission of the Queen 's Printer for Scotland on behalf of the Scottish Parliamentary Corporate Body . Text Business Bulletin No . 158/2001 Monday 5 November 2001 Contents Section A : Daily Business List Section B : Business Programme Section C : Agendas of Committee Meetings Section E : Written questions lodged on 2 November 2001 Section F : Motions and Amendments Section G : Bills : Notices and Amendments Section H : New Documents Section I : Petitions lodged on 2 November 2001 Section K : Progress of Parliamentary Business Business Bulletin No . 158/2001 Monday 5 November 2001 Section A : Daily Business List Meetings of Committees All meetings take place in Committee Chambers , Edinburgh unless otherwise indicated . Education , Culture and Sport Committee 28th Meeting , 2001 The Committee will meet at 2.00 pm in the Volunteer Hall , St John Street , Galashiels 1. Scottish Borders Education Inquiry : The Committee will take evidence fromâ ' Scottish Borders Council representatives Mr John Campbell , Acting Chief Executive Mr Alan Bowman , Head of Financial Administration Lifelong Learning Department Officials Mr Graeme Donald , Assistant Director Mr David Mallen , Assistant Director Mr Kenneth Paterson , Assistant Director Ms Maria Lucia Macconnachie , Senior Education Officer Scottish Borders Council Councillors Councillor Tulley , Council Leader Councillor Anne Younger Councillor Thomas Dumble Trade Unions Ms Sue Roberts , Educational Institute of Scotland Mr Brian Bishop , Scottish Secondary Teachers Association UNISON Borders Equality in Education Ms Eileen Prior Ms Donna Allen Ms Catherine Maxwell Stuart . European Committee 14th Meeting , 2001 The Committee will meet at 2.00 pm in Committee Room 2 1. Item in private : The Committee will consider whether to take item 6 in private . 2. Convener 's report : The Convener will update the Committee on- Letter received from John Home Robertson MSP regarding the recent decision of the EC Standing Veterinary Committee rejecting proposals to recommence lamb exports to Scotland . 3. Scottish European Structural Funds Forum : The Committee will discuss the agenda and papers for the forthcoming meeting of the Forum , scheduled for 12 November 2001 . 4. Governance in the European Union and the Future of Europe : The Committee will hear from and discuss a draft report produced by its adviser , Dr . Amanda Sloat . Not before 3.15 pm : 5. UK Minister for Europe : The Committee will hear from the Rt . Hon Peter Hain MP on issues relating to the Future of Europe debate . 6. The euro and state-of preparation in Scotland : The Committee will consider a draft report into the preparation for , and policy implications of , the single currency in Scotland : a contribution to the euro debate from a Scottish perspective . Business Bulletin No . 158/2001 Monday 5 November 2001 Section B : Business Programme As agreed by the Parliament on 1 November 2001 Wednesday 7 November 2001 2.30 pm Time for Reflection - The Very Reverend Dr Hugh R Wyllie , lately Minister at The Old Parish Church of Hamilton followed by Parliamentary Bureau Motions followed by Executive Debate on Reports into the Investigation , Legal Proceedings and Family Liaison Arrangements in the Case of the Murder of Surjit Singh Chhokar followed by Parliamentary Bureau Motions 5.00 pm Decision Time followed by Members ' Business - debate on the subject of S1M-2300 Bruce Crawford : Rosyth-Zeebrugge Ferry Service ( for text of motion see Section F of Business Bulletin for Friday 5 October 2001 ) Thursday 8 November 2001 9.30 am Scottish Conservative and Unionist Party Debate on Foot-and-Mouth Disease - Public Inquiry followed by Scottish Conservative and Unionist Party Debate on The Scottish Economy followed by Business Motion 2.30 pm Question Time ( for text of questions see Section D of Business Bulletin for Thursday 1 November 2001 ) 3.10 pm First Minister 's Question Time 3.30 pm Stage 1 Debate on the School Education ( Amendment ) ( Scotland ) Bill followed by Parliamentary Bureau Motions 5.00 pm Decision Time followed by Members ' Business - debate on the subject of S1M-2081 Mr John Home Robertson : Regulation of Opencast Mining in the Lothians ( for text of motion see Section F of Business Bulletin for Monday 1 October 2001 ) Wednesday 14 November 2001 2.30 pm Time for Reflection followed by Parliamentary Bureau Motions followed by Executive Business followed by Parliamentary Bureau Motions 5.00 pm Decision Time followed by Members ' Business Thursday 15 November 2001 9.30 am Executive Business followed by Business Motion 2.30 pm Question Time 3.10 pm First Minister 's Question Time 3.30 pm Executive Business followed by Parliamentary Bureau Motions 5.00 pm Decision Time followed by Members ' Business Business Bulletin No . 158/2001 Monday 5 November 2001 Section C : Agendas of Committee Meetings Justice 2 Committee 6 November 2001 30th Meeting , 2001 The Committee will meet at 9.45 am in Committee Room 2 1. Items in private : The Committee will consider whether to take item 2 in private and whether to consider in private lines of questioning for witnesses on the inquiry into the Crown Office and Procurator Fiscal Service at its meetings on 14 , 20 and 28 November . 2. Inquiry into the Crown Office and Procurator Fiscal Service : The Committee will consider lines of questioning for item 3. 3. Inquiry into the Crown Office and Procurator Fiscal Service : The Committee will take evidence from- Richard Stott , President and Helen Nisbet , Secretary , Procurator Fiscal Society ; Bernard Harkins , Branch Secretary , Alan Marshall , Treasurer and Debbie Hilton , local representative , Public and Commercial Services Union . 4. Sexual Offences ( Procedure and Evidence ) ( Scotland ) Bill : The Committee will consider a revised draft report on the general principles of the Sexual Offences ( Procedure and Evidence ) ( Scotland ) Bill . Finance Committee 6 November 2001 21st Meeting , 2001 The Committee will meet at 10.00 am in Committee Room 1 1. PFI/PPP Inquiry ( in private ) : The Committee will consider its lines of questioning for agenda item 2. 2. PFI/PPP Inquiry : The Committee will take evidence from- Professor Michael Mumford , The Management School , University of Lancaster ; Matthew Farrow , Head of Policy , CBI Scotland ; Amanda McIntyre , Head of Modernising Government , CBI . 3. Items in private : The Committee will decide whether to take agenda item 4 in private , and whether to consider lines of questioning for future evidence taking sessions in relation to its PFI/PPP inquiry in private . 4. Adviser on the Budget Process : The Committee will consider potential candidates for appointment as adviser to the Committee on the Budget Process . Public Petitions Committee 6 November 2001 13th Meeting , 2001 The Committee will meet at 10.00 am in the Chamber , Assembly Hall , The Mound , Edinburgh 1. New Petitions : Consideration of new petitions 2. Current Petitions : Consideration of current petitions 3. Convener 's Report : Subordinate Legislation Committee 6 November 2001 30th Meeting , 2001 The Committee will meet at 11.15 am in Committee Room 3 1. Delegated Powers Scrutiny : The Committee will consider the delegated powers provisions in the following Bill- Water Industry ( Scotland ) Bill at Stage 1. 2. Delegated Powers Scrutiny : The Committee will consider the delegated powers provisions in the following Bill- Fur Farming ( Prohibition ) ( Scotland ) Bill at Stage 1. 3. Delegated Powers Scrutiny : The Committee will consider the delegated powers provisions in the following Bill- Scottish Local Government ( Elections ) Bill at Stage 1. 4. Executive Responses : The Committee will consider the responses from the Scottish Executive to points raised on the following- The Processed Animal Protein ( Scotland ) Amendment Regulations 2001 , ( SSI 2001/383 ) The Abolition of the Intervention Board for Agricultural Produce ( Consequential Provisions ) ( Scotland ) Regulations 2001 , ( SSI 2001/390 ) . 5. Draft instruments subject to approval : The Committee will consider the following- The Budget ( Scotland ) Act 2001 Amendment Order , ( Draft ) . 6. Instruments subject to annulment : The Committee will consider the following- The Import and Export Restrictions ( Foot-and-Mouth Disease ) ( Scotland ) ( No.2 ) Amendment ( No.4 ) Regulations 2001 , ( SSI 2001/394 ) The Housing ( Scotland ) Act 2001 ( Transfer of Scottish Homes Property etc . ) Order 2001 , ( SSI 2001/396 ) The Import and Export Restrictions ( Foot-and-Mouth Disease ) ( Scotland ) ( Recovery of Costs ) Regulations 2001 , ( SSI 2001/401 ) . 7. Instruments not subject to Parliamentary control : The Committee will consider the following- The Food Protection ( Emergency Prohibitions ) ( Amnesic Shellfish Poisoning ) ( West Coast ) ( Scotland ) Partial Revocation Order 2001 , ( SSI 2001/395 ) . 8. Instruments not laid before the Parliament : The Committee will consider the following- The Housing ( Scotland ) Act 2001 ( Commencement No.2 , Transitional Provisions , Savings and Variation ) Order 2001 , ( SSI 2001/397 ) The Standards in Scotland 's Schools etc . Act 2000 ( Commencement No.3 and Transitional Provisions ) Amendment Order 2001 , ( SSI 2001/400 ) . Rural Development Committee 6 November 2001 24th Meeting , 2001 The Committee will meet at 2.00 pm in Committee Room 1 1. Item in Private : The Committee will decide whether to take item 4 in private . 2. Subordinate Legislation : The Committee will consider the following instrument under the negative procedure- The Potatoes Originating in Germany ( Notification ) ( Scotland ) Order 2001 ( SSI 2001/333 ) . 3. Protection of Wild Mammals ( Scotland ) Bill : The Committee will consider written evidence and take oral evidence at stage 2 from- Ronnie Rose ( Scottish Gamekeepers Association ) Tom Parker ( National Working Terrier Federation ) Paul Crofts ( Scottish Hillpacks Association ) . 4. Budget Process 2002-03 : The Committee will consider a draft stage 2 report . Local Government Committee 6 November 2001 28th Meeting , 2001 The Committee will meet at 2.15 pm in the Chamber , Assembly Hall , the Mound , Edinburgh 1. Items in Private : The Committee will consider whether to take items 3 and 4 in private . 2. Local Government Finance Inquiry : The Committee will take evidence from- COSLA : Councillor John Pentland , Finance Spokesperson Councillor Drew Edward , Chair of Capital Task Group Norie Williamson , Director of Finance Brenda Campbell , Financial Policy Officer . 3. Community Care and Health ( Scotland ) Bill : The Committee will consider a draft Stage 1 report . 4. Scottish Local Government ( Elections ) Bill : The Committee will consider a draft Stage 1 report . Health and Community Care Committee 7 November 2001 26th Meeting , 2001 The Committee will meet at 9.30 am in Committee Room 1 1. Item in private : The Committee will consider whether to take item 5 in private . 2. Time limit on debates : The Committee will be asked to agree to limit debate on emergency affirmative SSIs to 15 minutes . 3. Community Care and Health ( Scotland ) Bill ( Stage 1 ) : The Committee will take evidence from- Scottish Care Annie Gunner , Jim Jackson and Shona Barcus , Community Care Providers Scotland Malcolm Chisholm MSP , Deputy Minister for Health and Community Care . 4. Subordinate Legislation : The Committee will consider the following affirmative instrument- The Food Protection ( Emergency Prohibitions ) ( Amnesic Shellfish Poisoning ) ( West Coast ) ( No.8 ) ( Scotland ) Order 2001 , ( SSI 2001/374 ) The Food Protection ( Emergency Prohibitions ) ( Paralytic Shellfish Poisoning ) ( East Coast ) ( No.2 ) ( Scotland ) Order 2001 , ( SSI 2001/387 ) The Food Protection ( Emergency Prohibitions ) ( Amnesic Shellfish Poisoning ) ( West Coast ) ( No.9 ) ( Scotland ) Order 2001 , ( SSI 2001/388 ) The Food Protection ( Emergency Prohibitions ) ( Diarrhetic Shellfish Poisoning ) ( Orkney ) ( Scotland ) Order 2001 , ( SSI 2001/391 ) and the following negative instruments- The Feeding Stuffs and the Feeding Stuffs ( Enforcement ) Amendment ( Scotland ) Regulations 2001 ( SSI 2001/334 ) The National Health Service ( General Dental Services ) ( Scotland ) Amendment ( No.2 ) Regulations 2001 , ( SSI 2001/368 ) . 5. The Scottish Budget 2002/3 : The Committee will consider the draft Stage 2 Budget Report to the Finance Committee . Standards Committee 7 November 2001 14th Meeting , 2001 The Committee will meet at 9.30 am in Committee Room 3 1. Items in Private : The Committee will consider whether to take item 3 in private . 2. Complaint in Relation to Annexe 5 of the Code of Conduct : The Committee will take evidence from Tommy Sheridan MSP . 3. Complaint in Relation to Annexe 5 of the Code of Conduct : The Committee will resume its consideration of the Adviser 's report . 4. Complaint in Relation to Annexe 5 of the Code of Conduct : The Committee will consider whether there has been a breach of the Code of Conduct . 5. Replacing the Members ' Interests Order : The Committee will consider a paper on possible new categories of registrable interests . Transport and the Environment Committee 9 November 2001 27th Meeting , 2001 The Committee will meet at 10.30 am in the Council Chamber , Aberdeen Town House , Aberdeen 1. Lines of Questioning ( in private ) : The Committee will consider possible lines of questioning for the witnesses on the Water Industry ( Scotland ) Bill . Not before 10.40 am 2. Item in Private : The Committee will consider whether to take item 6 in private . 3. Integrated Transport Issues in Aberdeen Area : The Committee will take evidence on integrated transport issues in Aberdeen and the surrounding area , and on Petition PE357 by Aberdeen City Council , from- Councillor Len Ironside , Leader , Aberdeen City Council Councillor Alison McInnes , Chair , Infrastructure Services Committee , Aberdeenshire Council Ed Gillespie , Chief Executive , Scottish Enterprise Grampian Amanda Harvie , Chief Executive , Aberdeen and Grampian Chamber of Commerce . 4. Subordinate Legislation : The Committee will consider the following negative instruments- The Fossil Fuel Levy ( Scotland ) Amendment Regulations 2001 , ( SSI 2001/335 ) The Wildlife and Countryside Act 1981 ( Amendment ) ( Scotland ) Regulations 2001 , ( SSI 2001/337 ) . 5. Aquaculture Inquiry : The Committee will receive an interim report from the reporters on the Committee 's inquiry into aquaculture . 6. Aquaculture Inquiry : The Committee will consider possible witnesses on its inquiry into aquaculture . Not before 12.45pm 7. Water Industry ( Scotland ) Bill : The Committee will take evidence at Stage 1 on the general principles of the Water Industry ( Scotland ) Bill from- Alan Sutherland , Water Industry Commissioner for Scotland Tim Hooton , Colin McLaren , and Dr Donald Reid , Scottish Executive Drinking Water Regulation Team Patricia Henton ( Chief Executive ) and Tom Inglis ( Head of Policy Co-ordination ( Water ) ) , Scottish Environment Protection Agency Dr Jon Hargreaves ( Chief Executive ) and Councillor Robert Cairns ( Chairman ) , East of Scotland Water Authority Katharine Bryan ( Chief Executive ) , Colin Rennie ( Chairman ) , and Doug Sutherland ( Director of Finance ) , North of Scotland Water Authority Charlie Cornish ( Chief Executive ) , West of Scotland Water Authority . Business Bulletin No . 158/2001 Monday 5 November 2001 Section E : Written questions lodged on 2 November 2001 S1W-19630 Stewart Stevenson : To ask the Scottish Executive what contracts with a value of £ 100,000 and over it and the Scottish Office placed with PricewaterhouseCoopers and their predecessors , Price Waterhouse and Coopers and Lybrand , in each year since 1993 . S1W-19631 Stewart Stevenson : To ask the Scottish Executive whether it will make funding available to Grampian Health Board to enable it to make available the anti-tumour necrosis factor alpha drugs Enbrel ( Etanercept ) and Remicade ( Infliximab ) for the treatment of rheumatoid arthritis . S1W-19632 Stewart Stevenson : To ask the Scottish Executive which health boards currently make available the anti-tumour necrosis factor alpha drugs Enbrel ( Etanercept ) and Remicade ( Infliximab ) for the treatment of rheumatoid arthritis . S1W-19633 Stewart Stevenson : To ask the Scottish Executive , further to the answer to question S1W-17239 by Ross Finnie on 21 August 2001 , whether all local authorities have completed rebilling those on low incomes under the Water and Sewerage Charges Reduction Scheme . S1W-19634 Mr Andy Kerr : To ask the Scottish Executive what plans there are to implement the proposals on the registration of births , deaths and marriages in Scotland outlined in the consultation paper Civil Registration in the 21st Century . S1W-19635 Mr Andrew Welsh : To ask the Scottish Executive what pilot projects have been , or are being , conducted whereby paramedics deliver clot-busting drugs before patients are taken to hospital for emergency treatment . S1W-19636 Mr Andrew Welsh : To ask the Scottish Executive what risks there are to patients from the use of clot-busting drugs . S1W-19637 Mr Andrew Welsh : To ask the Scottish Executive what research has been carried out into the delivery of clot-busting drugs by paramedics before patients are taken to hospital for emergency treatment . S1W-19638 Mr Andrew Welsh : To ask the Scottish Executive what research has been carried out into the effectiveness of clot-busting drugs . S1W-19639 Mr Andrew Welsh : To ask the Scottish Executive how much it will cost Tayside University Hospitals NHS Trust annually to run the community thrombosis service in Angus , whereby paramedics deliver clot-busting drugs before patients are taken to hospital for emergency treatment . S1W-19640 Mr Andrew Welsh : To ask the Scottish Executive whether heart attack patients in Angus who are not suitable for treatment with clot-busting drugs will be at greater risk of death or permanent disability following the proposed closure of the Coronary Care Unit at Stracathro Hospital . S1W-19641 Dorothy-Grace Elder : To ask the Scottish Executive , further to the answer to question S1O-2005 by Henry McLeish on 22 June 2000 , whether it has any plans to revise its approach to ensuring availability of skilled labour in Glasgow in light of the concerns expressed by the Chief Executive of Scottish Enterprise Glasgow in The Herald on 4 October 2001 . S1W-19642 Lord James Douglas-Hamilton : To ask the Scottish Executive , further to the answer to question S1W-18538 by Mr Jim Wallace on 9 October 2001 , whether The Land Reform ( Scotland ) Bill will be published in November . S1W-19643 Michael Russell : To ask the Scottish Executive whether the issue of site ownership was a factor in the decision to choose Galashiels over Irvine as a base for the relocated jobs in the Scottish Public Pensions Agency . S1W-19644 Michael Russell : To ask the Scottish Executive whether the explanation given by the Minister for Finance and Local Government in his interview with the Irvine Times published on 2 November 2001 for the decision to relocate jobs from the Scottish Public Pensions Agency to Galashiels rather than Irvine is consistent with the previous explanation given by its officials to North Ayrshire Council . S1W-19645 Michael Russell : To ask the Scottish Executive how many civil service jobs it plans to relocate to North Ayrshire as part of its commitment to decentralising government departments and what the timescale is for any such relocation . S1W-19646 Michael Russell : To ask the Scottish Executive what progress is being made in producing and providing support and teaching materials for schools for the new National Qualifications ; what its timetable is for the completion and provision of this material , and whether this timetable is on schedule . S1W-19647 Stewart Stevenson : To ask the Scottish Executive what programmes exist for serious sex offenders serving sentences of more than four years and in which prisons these programmes are delivered . S1W-19648 Stewart Stevenson : To ask the Scottish Executive how many psychologists are employed or contracted to the Scottish Prison Service for the treatment of sex offenders and in which prisons they are based . S1W-19649 Stewart Stevenson : To ask the Scottish Executive how long the governor of each prison establishment had been in his or her present position as at 31 October 2001 . S1W-19650 Nicola Sturgeon : To ask the Scottish Executive why there has been a rise from 273.4 in 1998 to 802.9 whole-time equivalents in 1999 in the number of NHS nurses whose specialty is classified as " other " as opposed to a more specific specialty according to Skipper ( 3 ) published by the Information and Statistics Division of the Common Services Agency and whether it will give a more detailed breakdown of the specialities or areas within which those nurses classified as " other " work . S1W-19651 Nicola Sturgeon : To ask the Scottish Executive what plans it has to reclassify the categories of nurse used in NHS statistical returns so as to make the published statistics more informative . S1W-19652 Brian Adam : To ask the Scottish Executive whether it has any plans to allow compulsory repair orders to be served on commercial properties . S1W-19653 Iain Smith : To ask the Scottish Executive , further to the answer to question S1O-3798 by Lewis Macdonald on 20 September 2001 , how many responses it has received in total to its consultation document Review of Strategic Planning ; how many related to strategic planning arrangements in Fife , and how many were opposed to the proposals for strategic planning in Fife . S1W-19654 Nora Radcliffe : To ask the Scottish Executive how many sections of trunk road were ( a ) opened and ( b ) significantly upgraded in order to increase capacity in each year since 1979 . S1W-19655 Nora Radcliffe : To ask the Scottish Executive how many significant upgrades to sections of trunk roads it is currently planning in order to increase capacity . S1W-19656 Nora Radcliffe : To ask the Scottish Executive how many miles of trunk road were ( a ) created and ( b ) substantially upgraded in order to increase capacity in each year since 1979 . S1W-19657 Nora Radcliffe : To ask the Scottish Executive how much was spent on the enhancement of the trunk road network in each year since 1979 . S1W-19658 Stewart Stevenson : To ask the Scottish Executive whether it will detail any performance or achievement related awards that have been made to prisons since 1997 . S1W-19659 Stewart Stevenson : To ask the Scottish Executive how many prison officers have attained qualifications at higher national diploma level and above since 1997 , broken down by qualification and by prison . S1W-19660 Stewart Stevenson : To ask the Scottish Executive how many sex offenders were serving sentences of four years or over in each prison for part or the whole of each year since 1993 . S1W-19661 Stewart Stevenson : To ask the Scottish Executive how many sex offenders undertook the Stop programme at ( a ) HM Prison Barlinnie and ( b ) HM Prison Polmont in ( i ) 1999 , ( ii ) 2000 and ( iii ) so far in 2001 . S1W-19662 Stewart Stevenson : To ask the Scottish Executive whether sex offender programmes are operated at HM Prison Saughton ; if so , whether it will detail the programmes which are operated and how many prisoners undertook them in ( a ) 1999 , ( b ) 2000 and ( c ) so far in 2001 and , if no programmes are operated , why this was and what plans it has to start such programmes . S1W-19663 Stewart Stevenson : To ask the Scottish Executive how many prison visiting committees have made representations to it or the Scottish Prison Service on the treatment of sex offenders in prisons since 1997 ; whether it will detail any such representations , and what the outcomes were of any such representations . S1W-19664 Stewart Stevenson : To ask the Scottish Executive what the current status is of the Investors in People ( IiP ) programme in each prison and when IiP status was awarded to each prison . S1W-19665 Stewart Stevenson : To ask the Scottish Executive how many senior management staff are currently employed at the headquarters of the Scottish Prison Service and how many of these have had work experience within a prison in the last ( a ) one , ( b ) three and ( c ) five years . S1W-19666 Nora Radcliffe : To ask the Scottish Executive what measures it is planning to introduce in areas where peak-time concessionary fares for bus travel are available to pensioners and/or disabled people in order to ensure that any such fares continue to be available following the introduction of free off-peak bus travel for pensioners and disabled people . S1W-19667 Dennis Canavan : To ask the Scottish Executive when it expects to publish its consultation document on the review of the European Blue Badge Scheme of parking concessions for disabled people . S1W-19668 John Farquhar Munro : To ask the Scottish Executive how many digital hearing aids have been distributed by Highland Health Board in each of the past three years . S1W-19669 Mr Adam Ingram : To ask the Scottish Executive how many ( a ) paediatricians and ( b ) psychiatrists have undergone specific training in attention deficit hyperactivity disorder . S1W-19670 Mr Adam Ingram : To ask the Scottish Executive when it will make an announcement on the establishment , remit and budget of the Scottish Medicines Consortium . S1W-19671 Mr Adam Ingram : To ask the Scottish Executive how many qualified psychiatric nurses are currently employed on the NHS 24 helpline . S1W-19672 Mr Adam Ingram : To ask the Scottish Executive what plans it has to ensure that special educational needs training is a core unit within teacher training courses . S1W-19673 Mr Brian Monteith : To ask the Scottish Executive when it first learned of Scottish Amicable 's decision to make 430 compulsory and voluntary job cuts at its headquarters at Craigforth , Stirling . S1W-19674 Mr Brian Monteith : To ask the Scottish Executive what meetings it has had with representatives of Scottish Amicable or the Prudential to discuss the 430 job losses at the headquarters of Scottish Amicable in Craigforth , Stirling , and whether it will make available any papers or documents referred to at these meetings . S1W-19675 Fergus Ewing : To ask the Scottish Executive whether it will make representations to the European Commission in opposition to the draft Physical Agents Directive on vibration and place copies of any such representations in the Scottish Parliament Information Centre or , if it will not make direct representations , whether it will make such representations to Her Majesty 's Government and place copies of these in the Scottish Parliament Information Centre . S1W-19676 Fergus Ewing : To ask the Scottish Executive what savings will result from the establishment of NHS Highland to replace Highland NHS Board , Highland Acute Hospitals NHS Trust and Highland Primary Care NHS Trust in the current and in each of the next two budgetary years and whether it will place a breakdown of such savings in the Scottish Parliament Information Centre . S1W-19677 Mr Adam Ingram : To ask the Scottish Executive , further to the answer to question S1W-17592 by Susan Deacon on 6 September 2001 , when it will publish the review by the Chief Medical Officer on the mapping of the relationship between the various bodies with an interest in clinical quality . Business Bulletin No . 158/2001 Monday 5 November 2001 Section F : Motions and Amendments A full list of outstanding motions is available to view each Monday in paper copy at the Chamber Desk or alternatively on the Scottish Parliament web site as Outstanding Motions . Items marked with an asterisk ( * ) are new or have been altered . Asterisks in the text show the extent of alterations made . Motions which members wish to be considered for debate as members ' business in the Parliament are marked with a hash symbol ( # ) *S1M-2404# Iain Smith : Strategic Planning in Fife-That the Parliament notes the strong opposition from Fife Council , residents and community councils in Fife to the proposals contained in the Scottish Executive 's consultation document Review of Strategic Planning which would split Fife for strategic planning purposes between the cities of Dundee and Edinburgh ; further notes that Fife Council is the only local authority area proposed to be split for strategic planning purposes ; recognises that Fife Council shares boundaries with other major public sector agencies such as Scottish Enterprise Fife , NHS Fife and Fife Tourist board which , together with its unique geography , make Fife ideally suited for strategic planing as a single unit , and therefore considers that the Scottish Executive should review its proposals in the light of the consultation and retain Fife as a single strategic planning area . Supported by : Robin Harper* *S1M-2403# Margaret Smith : Edinburgh Tourism Action Group-That the Parliament acknowledges the work and success of Edinburgh Tourism Action Group ( ETAG ) in a difficult financial and international climate ; commends its work as a model of best practice in private and public sector partnership , between private companies and the City of Edinburgh Council , Edinburgh and Lothian Tourist Board and Scottish Enterprise Edinburgh and Lothian ; acknowledges Edinburgh 's position as a tourist gateway to Scotland and one of the world 's premier city destinations , and believes that the Scottish Executive should do all it can to support ETAG and the 25,000 people who work in the tourist industry in Edinburgh . Supported by : Robin Harper* *S1M-2402# Alex Fergusson : Research into Myalgic Encephalomyelitis-That the Parliament notes the privately funded research to be carried out by Dr Derek Pheby in Bristol , and that being carried out by Dr Vance Spence in Dundee , into the factors which may be involved in the development of severe myalgic encephalomyelitis ( ME ) ; recognises that ME is a condition growing in incidence among both adults and children in Scotland , and considers that the Scottish Executive should take the lead within the UK by commissioning further research under the remit of the NHS into the causes of , and cures for , this debilitating condition . Supported by : Mr John McAllion* , Mary Scanlon* , Nicola Sturgeon* , Tommy Sheridan* , Margaret Smith* , Robin Harper* *S1M-2401# Cathy Peattie : 15th Anniversaries of Greentrax and Kilbirnie Records-That the Parliament congratulates Greentrax and Kilbirnie Records on their 15th anniversaries ; recognises the contribution of these companies , and in particular Ian Green , to traditional music in Scotland , and hopes that together they will continue to build upon their achievements . *S1M-2400# Bristow Muldoon : Proposed Closure of Binny House , Sue Ryder Care-That the Parliament condemns the unilateral and disgraceful decision by Sue Ryder Care to close the Binny House care centre in Ecclesmachan , West Lothian ; considers that this shows a complete disregard for the interests of the residents and staff of the centre ; believes that by walking away from very substantial offers of additional finance from health boards and local authorities Sue Ryder Care has demonstrated bad faith , and further believes that , unless this decision is reversed , local authorities and the NHS should regard Sue Ryder Care as an unsuitable partner for any future care projects . Supported by : Mrs Mary Mulligan* , Robin Harper* S1M-2399# Proposed New Testing System of Scallops ( lodged on 1 November 2001 ) Mr Andrew Welsh* , Robin Harper* S1M-2398# Digital Hearing Aids ( lodged on 1 November 2001 ) Dorothy-Grace Elder* , Mr Andrew Welsh* S1M-2397# Arbuthnott Formula and Funding of Grampian Health Board ( lodged on 1 November 2001 ) Richard Lochhead* , Robin Harper* S1M-2396 Moratorium on GM Foods ( lodged on 1 November 2001 ) Roseanna Cunningham* , Alex Neil* , Robin Harper* , Fergus Ewing* , Dorothy-Grace Elder* , Mr Andrew Welsh* S1M-2395# Remploy and Social Inclusion ( lodged on 1 November 2001 ) Robin Harper* S1M-2393 Science and the Parliament Event , November 15 2001 ( lodged on 1 November 2001 ) Mr Andrew Welsh* , Robin Harper* S1M-2392 Enough is Enough ( lodged on 1 November 2001 ) Robin Harper* S1M-2391 Recent Alleged Comments by Sheriff Ronald Smith on Peace Protestors ( lodged on 31 October 2001 ) Dorothy-Grace Elder* , Robin Harper* S1M-2389 Centrally Held Information ( lodged on 31 October 2001 ) Robin Harper* S1M-2388# Son-Rise Program ( lodged on 31 October 2001 ) Robin Harper* S1M-2387 The Charter for Equality and Diversity in Ageing ( lodged on 31 October 2001 ) Robin Harper* S1M-2386 Wallace Clan Contribution to New York Fire Department Fund ( lodged on 30 October 2001 ) Dorothy-Grace Elder* S1M-2376 Use of Cannabis ( lodged on 29 October 2001 ) Robin Harper* S1M-2375 Literature on Scottish History , Heritage and Culture ( lodged on 29 October 2001 ) Dorothy-Grace Elder* S1M-2374 Close the Cattle Incinerator at Carntyne , Glasgow ( lodged on 29 October 2001 ) Robin Harper* S1M-2373# Psychiatric Hospital Closures ( lodged on 26 October 2001 ) Dorothy-Grace Elder* S1M-2372 Institutional Racism ( lodged on 26 October 2001 ) Dorothy-Grace Elder* S1M-2371 Licensing of the Sale of Fireworks ( lodged on 26 October 2001 ) Dorothy-Grace Elder* S1M-2368 People Management in Scottish Universities ( lodged on 25 October 2001 ) Tavish Scott* , Maureen Macmillan* , Rhoda Grant* S1M-2367 Outdoor Access for All ( lodged on 25 October 2001 ) Maureen Macmillan* S1M-2366# Consultation and Advocacy Promotion Service ( lodged on 25 October 2001 ) Maureen Macmillan* S1M-2360 The Pearce Institute in Govan ( lodged on 24 October 2001 ) Dorothy-Grace Elder* S1M-2359 Sue Ryder Care Home , Marchmont House , Greenlaw ( lodged on 24 October 2001 ) Alex Fergusson* S1M-2339# Violence Against Women - 16 Days Campaign 2001 , 25 November - 10 December 2001 ( lodged on 22 October 2001 ) Brian Fitzpatrick* , Maureen Macmillan* S1M-2337# Scottish Science Library ( lodged on 22 October 2001 ) Lord James Douglas-Hamilton* , Dorothy-Grace Elder* S1M-2335 16 Days Campaign ( lodged on 19 October 2001 ) Dorothy-Grace Elder* S1M-2332 Devolution of Broadcasting ( lodged on 18 October 2001 ) Dorothy-Grace Elder* S1M-2331# Scottish Agricultural College , Auchincruive ( lodged on 18 October 2001 ) Mr Murray Tosh* , David Mundell* , Stewart Stevenson* , Lord James Douglas-Hamilton* S1M-2329 Afghanistan ( lodged on 17 October 2001 ) Dorothy-Grace Elder* S1M-2327 Binny House , Ecclesmachan , West Lothian ( lodged on 16 October 2001 ) John Scott* S1M-2326 Importance of the Construction Industry ( lodged on 16 October 2001 ) Dorothy-Grace Elder* S1M-2325 Liquid-based Cytology/Human Papilloma Virus Test ( lodged on 16 October 2001 ) Dorothy-Grace Elder* S1M-2320 Water Charges Relief Scheme ( lodged on 11 October 2001 ) Alex Fergusson* S1M-2319# Future of Highland Air Services ( lodged on 11 October 2001 ) Maureen Macmillan* S1M-2318# The First Scottish Ecumenical Assembly ( lodged on 9 October 2001 ) Maureen Macmillan* S1M-2316# Reversal of Her Majesty 's Government 's Decision on Mixed Oxide Fuel Plant at Sellafield , Cumbria ( lodged on 9 October 2001 ) Dorothy-Grace Elder* S1M-2305# Scottish Huntington 's Association ( lodged on 4 October 2001 ) Dorothy-Grace Elder* S1M-2304# Foot-and-Mouth Disease-Free Status ( lodged on 4 October 2001 ) Dr Elaine Murray* Business Bulletin No . 158/2001 Monday 5 November 2001 Section G : Bills : Notices and Amendments New amendments to Bills lodged on 2 November 2001 Protection of Wild Mammals ( Scotland ) Bill - Stage 2 After section 1 Mike Watson 53 After section 1 , insert- Exception : stalking and flushing from cover ( 1 ) A person does not contravene section 1(1 ) by using a dog under control to stalk a wild mammal , or flush it from cover ( including an enclosed space within rocks , or other secure cover ) above ground for the purpose of- ( a ) protecting livestock , fowl ( including wild fowl ) or game birds in , or crops growing at , a particular place from attack by wild mammals ; ( b ) providing food for consumption by a living creature ; ( c ) protecting human health ; or ( d ) preventing the spread of disease , but only if that person acts to ensure that , once a wild mammal is found or emerges from cover , it is shot , or killed by a bird of prey , as soon as possible . ( 2 ) A person does not contravene section 1(1 ) by using a dog under control to flush a fox from below ground , but only if that person- ( a ) acts to ensure that the fox is flushed as soon as possible after it is located and shot as soon as possible after it is flushed ; ( b ) takes all reasonable steps to prevent injury to the dog ; ( c ) holds a valid firearms licence or shotgun certificate ; and ( d ) is either- ( i ) the owner or lawful occupier of the land on which the activity takes place ; or ( ii ) has the written permission of the owner or lawful occupier of that land to undertake that activity . Section 3 Mike Watson 54 In section 3 , page 2 , line 30 , leave out rabbit or Section 7 Mike Watson 55 In section 7 , page 4 , line 34 , at end insert- ( ) does not include a rabbit Mike Watson 56 In section 7 , page 4 , line 34 , at end insert- ( ) does not include a rodent Proposals for Members ' Bills Names marked with an asterisk ( * ) are new names of support . Proposals that have attracted 11 supporters have those supporters ' names shown in bold . The member who lodged such a proposal has the right to introduce a Member 's Bill to give effect to that proposal under rule 9.14 . Robin Harper : Proposed Organic Food and Farming Targets Bill-Proposal for a Bill to require the Scottish Executive ( a ) to establish targets to increase the proportion of land that is certified organic , by a specified date ; and ( b ) to take steps including the preparation of an action plan to ensure those targets are met . ( lodged 1 November 2001 ) Supported by : Tavish Scott , Irene McGugan , Donald Gorrie , Tommy Sheridan , Dennis Canavan , Colin Campbell , Linda Fabiani , Kenny MacAskill , Bruce Crawford , Richard Lochhead , Fiona McLeod , Ms Margo MacDonald Iain Smith : Proposed University of St . Andrews Medical Postgraduate Qualification Bill-Proposal for a Bill to amend the Universities ( Scotland ) Act 1966 to allow the University of St . Andrews to introduce a postgraduate research degree for qualified medical practitioners . ( lodged 1 November 2001 ) Supported by : Keith Raffan , Mr Keith Harding , Brian Monteith , Marilyn Livingstone , Murdo Fraser , Helen Eadie , Bruce Crawford , Margaret Smith , Tavish Scott , Nora Radcliffe , Donald Gorrie , Ian Jenkins , Scott Barrie , Tricia Marwick Business Bulletin No . 158/2001 Monday 5 November 2001 Section H : New Documents Other Documents The following document was laid before the Parliament on 2 November 2001 and is not subject to any Parliamentary procedure Scotland 's Budget Documents 2001-02 : Budget ( Scotland ) ( No.2 ) Act 2001 for the year ended 31 March 2002 ( SE/2001/253 ) Committee Reports The following Reports are being published on 5 November 2001- Equal Opportunities Committee , 3rd Report 2001 : Civic Participation Event on the Race Relations Acts ( SP Paper 427 ) Transport and the Environment Committee , 13th Report 2001 : Report On Subordinate Legislation ( SP Paper 439 ) European Documents Members wishing to see a list of European documents received in the Parliament should contact the clerk to the European Committee ( stephen . i mrie@scottish . p arliament . u k ) . Members are reminded that a complete set of all documents received is held by SPICe in G15 , PHQ and copies can be made available on request . Additionally , SPICe holds a set of Briefing Papers produced primarily for MEPs covering the views of the UK Government on proposals for EC/EU legislation . These are now being made available to all MSPs and parliamentary staff . Copies can be obtained on the SPICe page of the Parliament 's intranet . Business Bulletin No . 158/2001 Monday 5 November 2001 Section I : Petitions lodged on 2 November 2001 The following Petitions were lodged with the Parliament on 2 November 2001- PE417 Petition by Brian Smith calling for the Scottish Parliament to take the necessary steps to ensure that the Cowal Peninsula and the islands of Bute and Inchmarnock become part of the core area of the proposed Loch Lomond and Trossachs National Park . PE418 Petition by Mr Gordon Clyde Ford calling for the Scottish Parliament to take the necessary steps to ensure that ( a ) objectors are consulted on the choice of the Reporter in a Local Plan Public Inquiry or , ( b ) in case of multiple objectors the choice is made by the Inquiry Unit in Edinburgh alone and not by the local authority and , ( c ) the final Report is returned to the Scottish Executive for decision instead of the local authority . Business Bulletin No . 158/2001 Monday 5 November 2001 Section K : Progress of Parliamentary Business For further information on the progress of Bills , subordinate legislation and committees shown in this section , please contact either the relevant clerk or web site ( end of Section for addresses ) Bills in Progress Note : Where a Bill is listed below with a date for Stage 2 ( or for a day at that Stage ) , the deadline for lodging amendments for that Stage ( or that day ) is 2.00 pm , two sitting days earlier ( e. g . 2.00 pm on Monday for a Stage 2 meeting on Wednesday ) . Where a Bill is listed with a date for Stage 3 , the deadline is 4.30 pm , three sitting days earlier . Amendments should be lodged with the clerks to the Stage 2 committee . Community Care and Health ( Scotland ) Bill Stage 1 ( evidence , Health and Community Care Committee ) 7 November Freedom of Information ( Scotland ) Bill Stage 1 ( evidence , Justice 1 Committee ) 13 November Fur Farming ( Prohibition ) ( Scotland ) Bill Stage 1 ( evidence , Rural Development Committee ) 27 November Police and Fire Services ( Finance ) ( Scotland ) Bill Passed 1 November Protection from Abuse ( Scotland ) Bill Passed 4 October Protection of Wild Mammals ( Scotland ) Bill Stage 2 ( evidence , Rural Development Committee ) 6 November Public Appointments ( Parliamentary Approval ) ( Scotland ) Bill Stage 1 ( evidence , Local Government Committee ) 18 December School Education ( Amendment ) ( Scotland ) Bill Stage 1 ( debate , meeting of the Parliament ) 8 November Scottish Local Government ( Elections ) Bill Stage 1 ( Local Government Committee ) 6 November Sexual Offences ( Procedure and Evidence ) ( Scotland ) Bill Stage 1 ( Justice 2 Committee ) 6 November Water Industry ( Scotland ) Bill Stage 1 ( evidence , Transport and the Environment Committee ) 9 November Subordinate legislation in progress ( date of laying ) ( Lead Committee ) Affirmative Instruments The Food Protection ( Emergency Prohibitions ) ( Amnesic Shellfish Poisoning ) ( West Coast ) ( No.8 ) ( Scotland ) Order 2001 ( SSI 2001/374 ) ( 11 October 2001 ) ( Health and Community Care ) The Food Protection ( Emergency Prohibitions ) ( Paralytic Shellfish Poisoning ) ( East Coast ) ( No.2 ) ( Scotland ) Order 2001 ( SSI 2001/387 ) ( 22 October 2001 ) ( Health and Community Care ) The Food Protection ( Emergency Prohibitions ) ( Amnesic Shellfish Poisoning ) ( West Coast ) ( No.9 ) ( Scotland ) Order 2001 ( SSI 2001/388 ) ( 22 October 2001 ) ( Health and Community Care ) The Food Protection ( Emergency Prohibitions ) ( Diarrhetic Shellfish Poisoning ) ( Orkney ) ( Scotland ) Order 2001 ( SSI 2001/391 ) ( 24 October 2001 ) ( Health and Community Care ) The draft Sheriff Courts ( Scotland ) Act 1971 ( Privative Jurisdiction and Summary Cause ) Order 2001 ( 25 October 2001 ) ( Justice 2 ) The draft Small Claims ( Scotland ) Amendment Order 2001 ( 25 October 2001 ) ( Justice 2 ) The draft Budget ( Scotland ) Act 2001 ( Amendment ) Order 2001 ( 1 November 2001 ) Negative Instruments Subject to annulment until 11 November 2001 The Highlands and Islands Agricultural Programme and Rural Diversification Programme ( Scotland ) Amendment Regulations 2001 ( SSI/2001/319 ) ( 21 September 2001 ) ( Rural Development ) The Farm and Conservation Grant Amendment ( Scotland ) Regulations 2001 ( SSI/2001/321 ) ( 21 September 2001 ) ( Rural Development ) Subject to annulment until 14 November 2001 The Building Standards ( Scotland ) Amendment Regulations 2001 ( SSI/2001/320 ) ( 24 September 2001 ) ( Transport and the Environment ) Subject to annulment until 17 November 2001 The Housing ( Scotland ) Act 2001 ( Registered Social Landlords ) Order 2001 ( SSI 2001/326 ) ( 27 September 2001 ) ( Social Justice ) Subject to annulment until 18 November 2001 The Education and Training ( Scotland ) Amendment Regulations 2001 ( SSI 2001/329 ) ( 28 September 2001 ) ( Enterprise and Lifelong Learning ) Subject to annulment until 21 November 2001 The Feeding Stuffs and the Feeding Stuffs ( Enforcement ) Amendment ( Scotland ) Regulations 2001 ( SSI/2001/334 ) ( 1 October 2001 ) ( Health and Community Care ) Subject to annulment until 22 November 2001 The Potatoes Originating in Germany ( Notification ) ( Scotland ) Order 2001 ( SSI 2001/333 ) ( 2 October 2001 ) ( Rural Development ) The Fossil Fuel Levy ( Scotland ) Amendment Regulations 2001 ( SSI 2001/335 ) ( 2 October 2001 ) ( Transport and the Environment ) The Wildlife and Countryside Act 1981 ( Amendment ) ( Scotland ) Regulations 2001 ( SSI 2001/337 ) ( 2 October 2001 ) ( Transport and the Environment ) Subject to annulment until 25 November 2001 The Foot-and-Mouth Disease ( Marking of Meat , Meat Products , Minced Meat and Meat Preparations ) ( Scotland ) Regulations 2001 ( SSI 2001/358 ) ( 5 October 2001 ) ( Rural Development ) The National Health Service ( General Dental Services ) ( Scotland ) Amendment ( No.2 ) Regulations 2001 ( SSI 2001/368 ) ( 5 October 2001 ) ( Health and Community Care ) Subject to annulment until 28 November 2001 The Import and Export Restrictions ( Foot-and-Mouth Disease ) ( Scotland ) ( No.2 ) Amendment ( No.3 ) Regulations 2001 ( SSI 2001/367 ) ( 8 October 2001 ) ( Rural Development ) The Processed Animal Protein ( Scotland ) Amendment Regulations 2001 ( SSI 2001/383 ) ( 19 October 2001 ) ( Rural Development ) Subject to annulment until 1 December 2001 The Abolition of the Intervention Board for Agricultural Produce ( Consequential Provisions ) ( Scotland ) Regulations 2001 ( SSI 2001/390 ) ( 23 October 2001 ) ( Rural Development ) Subject to annulment until 2 December 2001 The Legal Aid ( Employment of Solicitors ) ( Scotland ) Regulations 2001 ( SSI 2001/392 ) ( 24 October 2001 ) ( Justice 1 ) Subject to annulment until 4 December 2001 The Import and Export Restrictions ( Foot-and-Mouth Disease ) ( Scotland ) ( No.2 ) Amendment ( No.4 ) Regulations 2001 ( SSI 2001/394 ) ( 26 October 2001 ) ( Rural Development ) Subject to annulment until 8 December 2001 The Housing ( Scotland ) Act 2001 ( Transfer of Scottish Homes Property etc ) Order 2001 ( SSI 2001/396 ) ( 30 October 2001 ) ( Social Justice ) Subject to annulment until 10 December 2001 The Import and Export Restrictions ( Foot-and-Mouth Disease ) ( Scotland ) ( Recovery of Costs ) Regulations 2001 ( SSI 2001/401 ) ( 1 November 2001 ) Committee Business Dates indicate when the next meeting is due to take place on the relevant subject . Audit 13 November Education , Culture and Sport See Section A Enterprise and Lifelong Learning 14 November Equal Opportunities 13 November European See Section A Finance 6 November Health and Community Care 7 November Justice 1 13 November Justice 2 6 November Local Government 6 November Procedures 20 November Public Petitions 6 November Rural Development 6 November Social Justice 14 November Standards 7 November Subordinate Legislation 6 November Transport and Environment 9 November [ CENSORED : table inserted here in original giving contact information ] This work is protected by copyright . All rights reserved . The SCOTS Project and the University of Glasgow do not necessarily endorse , support or recommend the views expressed in this document . </text>
<text id="cpljw" url="http://www.peterhead.org.uk/familyheritage/forum/topic.asp?TOPIC_ID=26&">
Hello : We 're doing my grandmothers genealogy - Knight/Morrison from Peterhead . William Morrison married Isabella Knight on 6-8-1892 in Peterhead . They had 7 children - Louisa , William , Jemina , George , Alex , Jack and Isabella . Jemina Helen was my grandmother , b. in Peterhead on 5-16-1899 - passed away in USA in the 1980 's . Jemina married David Donald Middleton in the USA in 1923 . If you think you may have a family connection or could give me any info on where to start my search on the Morrison/Knight their time in Scotland , would be glad to hear from on and all . Thanks so much ! ! Sandi USA </text>
<text id="cpnwa" url="http://www.frenchhouserestoration.co.uk/franceproperty150to200/propertyandhousesforsalelimousinabn0509263.html">
This two bedroom cottage is in a small hamlet about 5 mins from the village of Dournazac which has bar/restaurant , some small shops , post office . It is all on one level and is being sold with most of it 's furniture and fittings . Limoges airport is 40mins with flights to Stansted , Liverpool & Southampton . It is in the National Park of the Perigord/Limousin which is renowned for it 's beauty , lakes , woodlands and rolling countryside . The property is in good order throughout and the roof was renewed about 4 years ago . There are lovely views to the open countryside from the garden and there is a separate garage/workshop . The layout is as follows ( all measurements are approximate ) : SITTING ROOM 20.7m2 tiled floor , woodburning stove , wood ceiling , large window , glazed door togarden . SHOWER ROOM 5.5m2 tiled floor & walls , shower , toilet and wash-hand basin , electric radiator , w ashing machine , gas water heater , adjacent UTILITY ROOM 4.1m2 . BEDROOM 1 14.9m2 window to garden , wood burning stove , good parquet floor . BEDROOM 2 12.85m2 parquet floor , window to garden . KITCHEN 14.4m2 some fitted units , electric hot water heater , electric radiator , parquet floor , fridge </text>
<text id="cqham" url="http://www.rcpsych.ac.uk/college/faculties/liaison/documents/servicedevelopment/managerialfacilities.aspx">
Most liaison psychiatry posts are now managed and administered by a mental health trust . The consultant is therefore likely to be employed by the mental health trust although many people believe this is not an optimum arrangement . There is usually a Service Level Agreement ( SLA ) between the mental health trust and the acute general hospital trust for the provision of a liaison psychiatry service . In a few hospitals the liaison psychiatry service forms part of the acute general hospital trust and is managed by that organisation . The funding arrangements should be clarified . If the liaison psychiatry service forms part of a Service Level Agreement it should be established what budget the acute trust makes for the service and what level of provision is agreed . Ideally the budget for the liaison psychiatry service should be identified and the consultant should have considerable influence in determining how this is deployed . The joint report on " The psychological care of medical patients " ( RCP and RCPsych , 1995 ) recommended that funding for a liaison psychiatry service should come from a medical and surgical budget but should be managed within a mental health service . There should be one manager who has direct responsibility for the service , who works with the liaison psychiatry consultant and who reports to the relevant Chief Executive . After you have started your post it is helpful to arrange business meetings every four to six weeks with managers from both the acute ( general medical ) and community trust ( psychiatry ) . These meetings can be extremely helpful in terms of resolving issues between the general hospital and psychiatry . They can also be helpful in terms of future expansion of the service . Facilities Accommodation is a vital component of the service and should be located in a convenient position within the main general hospital where the service is provided . A consultant 's office is essential . This should be identified and shown to the consultant before taking up the appointment . It is also essential that there is secretarial and administrative support with appropriate office accommodation and space for filing and record keeping . One secretary should be identified to provide secretarial support to the consultant . It should be explicitly stated in the job description which consultant has clinical responsibilities if a patient needs to be admitted to a psychiatric ward . Likewise , if a patient is admitted to a medical ward , the medical responsibility for that patient should be clearly stated . If the post holder is to retain medical responsibility for patients admitted to psychiatric services , the location of the beds should be identified and the number specified although it is likely that the full bed complement will not always be taken up . An acute adult psychiatry admission ward is often not ideal for the management of patients with combined medical and psychiatric problems but very few services have access to a special ward devoted to this type of patient . In many cases it is preferable to manage patients with physical and psychiatric co-morbidity on a medical ward , ideally a side room , with special psychiatric nursing ( RMN status ) provided for as long as is required . In these circumstances the funding for the RMN should be clarified . It is usual practice for this to come from the budget of the medical division from which the patient has been referred . If the liaison psychiatrist has no access to in-patient beds there must be an agreement with psychiatric colleagues to admit patients who require in-patient care to the relevant catchment area psychiatric ward . The medical responsibility of patients in the Accident & Emergency Department should be clearly established and stated in the job description . The position of patients seen by psychiatric nurses , but not by psychiatric junior staff , should be explicitly stated . </text>
<text id="cqngo" url="http://www.tlchm.bris.ac.uk/safety/various/rass/kmweb/safety/msds.htm">
MSDS are documents describing the known hazards associated with a material , indicating safe handling procedures and recommending responses to accidents and thus are invaluable sources of safety information . They are prepared by the chemical suppliers and by UK law must be sent to you if you buy a chemical ( CHIP2 ) but can be requested even if you are only thinking of buying . If you already have the chemical but the MSDS is lost or the material is so old that none came with it , most manufacturers are happy to Fax a relevant MSDS on request . Many even make compilations of their data sheets available free of charge . If you order a chemical , you are strongly advised to read the MSDS that comes with it and to file it away in a safe place for future reference . A laboratory library of MSDS relevant to the chemicals kept there constitutes a valuable safety resource . ( In the United States the law requires that MSDS be kept available for all materials in an establishment . ) How to read an MSDS First of all , the MSDS from different manufacturers are usually different in layout and the amount of detail they give . However a typical MSDS delivered in the UK will contain ( this is taken from the Fisons model ) the chemical name of the compound and its CAS Number ( Chemical Abstracts Number ) , perhaps some other identifying number , a product code and the name of the supplier . If the material is a mixture , its composition will be given . Regulatory information is often given in terms of Risk Phrases and Safety Phrases . Risk Phrases , e. g . R26 , consists of R followed by a number , in this case indicating that the material is " toxic by inhalation " and the Safety Phrases e. g . S29 " do not empty down the drain " . ( It is not necessary to know what all the Risk or Safety Phrases mean since they are usually quoted alongside their code . ) Hazard information will typically outline the main hazards of the material followed by fire fighting measures , First Aid measures , accidental release measures , handling and storage precautions , how stable is the material , and what protect ion clothing to wear , etc . There may be some description of the physical and chemical properties of the material and also toxicological information , ecological information and advice on disposal . All of this information is supplied and some people deliver it straight into the bin ! How to find an MSDS If you want to have this information e. g . for completing a COSHH assessment but you do n't have the MSDS what can you do ? The simplest thing is to ask the manufacturer for a copy . Some you do n't even have to ask since they publish free compilations of their sheets although this is now happening less . ( The set of BDH Hazard Sheets kept in the Worsley Library is no longer produced ) . The DSA has sets of sheets from Fisons and from Fishers on diskette which are available on request , the University Safety Office has an extensive and more general database and the very large Sigma-Aldrich set exists within the University . Otherwise there are now a large number of FREE sources on the Internet and some are outlined below . Vermont Safety Site has a huge collection MSDS Online - search for a chemical and this site will provide the links to connect to the data . MSDS-SEARCH -aims to be a single source for all Manufacturers ' MSDS but not yet up and running . Universities including : - Akron Cornell another huge list Oxford Utah and Chemical Manufacturers : Eastman Kodak BDH - select MSDS on the search options . Fischer -Use the catalogue search to select a specific compound and click on the MSDS logo at the foot of the information sheet . Rhone-Poulenc asks for your Organisation Name but then lets you in . Roche - find the product and follow through . Pointers : a few sites carry lists of links to MSDS sources some of which are too small to include here : University of Kentucky holds the definitive list . Chemfinder is useful . Worksafe Western Australia " MSDS- like " information is held at : Chemical Safety Data Sheets from the RSC accessible via BIDS . Chemical Substance Fact Sheets from the EPA or from Open Data Solutions . Environmental Chemical Data and Information Network , ECDIN . International Chemical Safety Cards Laboratory Chemicals Safety Data from the Howard Hughes Medical Institute Sigma for their products . Information on Chemicals with hazardous properties at : Carcinogens : A list of Known Carcinogens and Compounds Reasonably expected to be Carcinogens can be found in the NTP Annual/Biennial report on Carcinogens . A list of compounds described by the UK risk phrase R45 , " May cause Cancer " in the Bristol University Disposal of Chemical Waste Code of Practice - University of Bristol only . Cornell University list of ' Select Carcinogens ' which also includes chemicals known to be reproductive toxins . A list of compounds which are assigned a UK Maximum Exposure Limit ( MEL ) at the University of Oxford . ToxFAQ , Hazardous Substance Fact Sheets , from the Agency for Toxic Substances and Disease Registry . Stanford Hazardous Materials Index . Cornell University list of ' Acutely Toxic Chemicals ' . Related Information : Biological MSDS from Health Canada covers a variety of micro-organisms . Pesticide Information Profiles at Oregon State . Information on Pharmaceuticals and Drugs on PHARMINFONET . Realise that you must search around for what you want and also that , since many of these sites are in the United States , the MSDS are written with US laws and regulations in mind . You may find some unexpected information . Good Hunting ! Back to Safety Home Page or the School of Chemistry Home Page . Dr . K. MacNeil , DSA . This page was last modified . </text>
<text id="cqrdh" url="http://www.msabritain.co.uk/index.php?id=23&L=3&article=13">
Masks for Mask-Helmet-Combinations [ Unique Adaption : Adjusts like your mask ! ] Fire services are increasingly using maskhelmet-combinations [ MHC ] , which allow full face masks to be fitted with adapters directly to the firefighter 's helmet . MSA , the only mask and helmet manufacturer , offers an innovative and safe solution : An unique concept using adjustable adapters without springs . Not only do the adjustable rubber straps allow for a more comfortable fit for every head size and shape ; better positioning also provides more safety . The adapter lets the user adjust the mask just as you did with your full head harness . </text>
<text id="crkwd" url="http://www.frontier.net.uk/FAQsearch.asp?search_strFields=strMetaKeywords&search_strType=FAQS&search_strAreaNo=1053,2011&strKeyword=PS2006_4_3">
Your search returned the following results . Hosting questions to ask your ISP We know how important Internet connectivity is to your company . When you choose an Internet Service Provider make sure you ask them these questions : 1. Are they a backbone provider ? Most ISPs simply ... What is the Mistral Remote Hands Service ? Remote Hands is a team of dedicated Mistral Engineers that can perform console level tasks such as reboots and tape swaps on your co-located equipment 24x7 , when your own employees are not able to attend ... What can Remote Hands do for your business ? Anything that is required from installation and configuration to testing and troubleshooting , we will do as much or as little as you require . How much does the Remote Hands service cost ? Costs are based upon the type of activity required and the length of time taken . Customers can either choose from a ' Pay as You Go ' service where you receive an invoice at the end of the month for any ... Where is the Remote Hands service available ? Mistral is able to offer the Remote Hands service to all Co-location suites in Global Switch London 1 & 2 co-location facilities . Domain transfers Why should I transfer my domain to Mistral ? Transferring your domain name to Mistral allows us to provide an ´all in one´ service , where we manage connectivity , hosting , administration and automatic ... </text>
<text id="crsrx" url="http://www.itreviews.co.uk/games/g232.htm">
New Star Software - New Star Soccer 3 review Games reviews Sports sim reviews New Star Software New Star Soccer 3 cheap , cheerful and compelling football game ( 25/04/2006 ) If you 're a little tired of your football menu consisting of a mixture of Pro Evolution Soccer , FIFA , Football Manager et al , then help is at hand . Yet , as is increasingly the case in the PC software market , you wo n't find the antidote to brand dominance on the shelves of your local software emporium , nor by spending five minutes in the company of Amazon . No , instead you 've got a teeny weeny bit of work to do . It 's worth it though . What you need to do is navigate over to www . n ewstarsoccer . c om and download the trial version of New Star Soccer 3. At first glance it 's as rudimentary and out of date a football game as you can probably think up , mixing in graphics that Sensible Soccer was rivalling back in the mid-90s and an interface that 's lacking much in the way of visual punch . Yet in the same way that Sensible Soccer , and Kick Off before it , prioritised playability above all other factors , so New Star Soccer gets its house firmly in order , resulting in a supremely playable and fresh football extravaganza . The twist to it is that you take the role of one player . You set him up , choose a position you want to play , toggle appearance , favoured foot , that kind of stuff . Then as a youngster it 's off to a trial , to try to get a contract with a club . A trial involves completing certain challenges , such as dribbling , passing and shooting , and how well you fare determines any contract offer . Then , once you 've found a club , it 's down to business . As a young player there are plenty of influences to consider . You want to keep your friends and family happy by spending time and money with them , and likewise it 's worth keeping the fans and gaffer pleased too . You 'll need to get your confidence up and there 's also training to consider . Training , which forms a major part of the game , uses up energy ( you have a finite amount each week and you need to save some for match day ) , but boosts your player across numerous skills . Some training has instant benefits with no effort required , but if you want to improve your set pieces , shooting , passing , dribbling or tackling , you need to take on one of 30 training exercises in each discipline . Succeed and the relevant attribute is boosted . Fail and you 've just wasted energy . You also have temptations such as drink , drugs and gambling to distract you , but each of these naturally comes with consequences . All this though , ultimately plays second fiddle to the matches themselves , which are extremely compulsive . As one player on the pitch , you always need to be aware of your positioning , when to call for the ball , when to pass to a team-mate and when to carry on yourself . And it 's no pushover either , with three difficulty levels to keep you on your toes . In the early days you can expect a striker to find goals very hard to come by , and a defender to constantly be caught out of position . Practice makes perfect , of course , but this is a game with real , tangible appeal that 'll take some time to master on the top level . Fortunately , with transfers , new contracts , sponsorship deals and internationals to consider , there 's plenty of incentive to keep going . At a price tag just north of £ 12 , it 's also an astounding bargain . With playability that rivals much of the competition , what it lacks in spit and polish it compensates for in the sheer amount there is to do . And , given that we 've had the game for several weeks now with no sign of it being uninstalled on our test machine , we 're confident it scores well in the long term as well as the short . New Star Software - New Star Soccer 3 features - Verdict You can only buy it online , yet football game fans really should make the effort . It 's not without a few problems , but New Star Soccer 3 is the most interesting footie game we 've played in ages . At the very least it 's worth giving the demo a try . New Star Software - New Star Soccer 3 price Buy New Star Soccer 3 securely online at a bargain price $ 19.99 ( approx £ 12 inc . VAT ) Reviewed on : PC </text>
<text id="csahf" url="http://www.petergasston.co.uk/2002/09/to-quote-the-four-seasons">
Wed 11 Sep 2002 To quote the Four Seasons : Posted by StopsAtGreen under miscellanea To quote the Four Seasons : Oh What A Night . I just went down to Ministry of Sound ( World 's Biggest Club , and all that ) to support Paul ' Bigtime ' Stanway , my best friend , on his DJ debut . I do n't like Ministry . It 's too big and soul-less . But he was DJing , he 's my friend , and I wanted to give support . I intended to stay for an hour and then catch the last tube home . Then Grandmaster Flash came on . Now , everybody knows the guy 's a legend . I have a lot of his stuff from the early 80 's . But I never knew quite how good he is . Understatement : Flash is AMAZING . It was a proper Old School party . He mixed everything from OPP to Queen . And his scratching ... Wow . It was like a real ' back in the day ' affair . I just got home . And I 'll be knackered for work tomorrow . But ... I 'm almost speechless . It was awesome . Best night I 've had at Ministry . Bar none . And it was all captured on DAT ... ca n't wait to get a copy of it . I love it when a low-key night turns into a great one . And Arsenal beat Manchester City 2-1 . Good , great , fantastic night . </text>
<text id="csctp" url="http://www.kevinmayhew.co.uk/Mobile/default.aspx?group_id=16538&article_id=21979">
Michael Catchpool Michael Catchpool is currently the Primary Adviser for English and Drama for Hertfordshire LEA , though given the rate at which he changes jobs , he couldwell be doing something else by the time you read this . He has taught in a number of schools in the West country as well as being a Headteacher . Before going into teaching , Michael even spent some time as a cark-park attendant and a cleaner ! With life beginning at forty , Michael is limbering up ready to get into the starting blocks . Michael has collaborated on a number of books with Pat Lunt , including the very popular assembly resources ; ' Kings and Monkeys ' , ' Ugly bugs and Apple Trees ' and ' Cooks and Ogres ' . They have co-written a musical adaptation of the medieval mystery plays and have performed sketches on local BBC radio stations . Despite working on many projects together , Michael and Pat are still talking to each other . See books by Michael Catchpool Articles in this group Michael Apichella About our author Featured Author : Revd John Wright Revd John Wright has written very popular assembly resource books for us based on his own experience of leading school assemblies as a novice and all the anxiety that comes with it - now a past master John 's resource material has been tried and tested . Nicholas King about Nicholas Martin Leckebusch Martin Leckebusch Tony Lawson Born in Malaysia in 1959 Tony spent all his early childhood in the Far East between Kuala Lumpur and Singapore . He was educated at Wycliffe College and the London College of Printing ... Patrick Woodhouse __ Eleanor Watkins Eleanor Watkins Pete Townsend Pete Townsend Katie Thompson Katie Thompson Stuart Thomas Stuart Thomas Ken Taylor Ken Taylor Tim Storey Tim Storey Suzi Stock Suzi Stock Ray Simpson Ray Simpson Susan Sayers Susan is the author of many popular resource books for the church including our ever-popular Living Stones range . Susan has released her NEW RANGE of books : ' The Confirmation Exprience ' Andy Robb Andy Robb H. J. Richards H. J. Richards Clare Richards Clare Richards Alan Price Alan Price Tony Philpot Tony Philpot Denis O'Gorman Denis O'Gorman Pat Lunt Pat Lunt Rob Hurd Rob Hurd Joyce Huggett Joyce Huggett Janice Hodge Janice Hodge Susan Hardwick Susan Hardwick John Hardwick John Hardwick Nick Harding Nick Harding Phil Green Phil Green David Gatward David Gatward Michael Forster Michael Forster Nick Fawcett Nick Fawcett Steve English Steve English Ron Dale Ron Dale Peter Dainty Peter Dainty Tony Castle Tony Castle Joan Brown Joan Brown Tony Bower Tony Bower Liz Babbs Liz Babbs Michael Apichella Author - Michael Apichella David Adam Author - David Adam © 2006 Kevin Mayhew Publishers High Accessibility Version . ( Full Graphics Version </text>
<text id="csmwd" url="http://www.ceac.aston.ac.uk/research/staff/jpf/papers/paper26/index.php">
Paper 26 : The application of Clifford algebra to calculations of multicomponent chemical composition . Dr John P. Fletcher , Chemical Engineering and Applied Chemistry , School of Engineering and Applied Science , Aston University , Aston Triangle , Birmingham B4 7 ET , U. K. Email : J. P . F letcher@aston . a c. u k Abstract In a mixture of chemical compounds , the significant variable is often the proportion of molecules , normally expressed as a mole fraction in a particular sample . The fractions are constrained to add to one , so any change such as the addition of some more of any chemical component causes all of the mole fractions change in a nonlinear way . Lasenby et al [ 1 ] have applied Clifford Algebra to the problem of projection and shown that problems can be made linear and results obtained . In this paper a similar approach is used to show that some nonlinear problems , such as conversion between molar and mass basis , become linear when projected into a space of increased dimension . When this is done using the V product defined by Miralles et al this [ 2 ] can be done using a Clifford algebra with all positive signature . Examples are given of the results of the formulation . 1 Introduction Calculation of multicomponent chemical composition is necessary in many calculations in chemical engineering and chemistry . It is complicated by the fact the some of the calculations are on the basis of the mass of each component present , and others on the basis of the relative number of molecules . Different molecules differ in relative mass , expressed as the relative molecular mass , or molecular weight . The proportions of a mixture are often expressed as a set of fractions which are constrained to add to one . Both the mass fractions and the mole fractions are nonlinear functions of the total number of molecules of each component present . Conversion between them is a nonlinear operation . These calculations are often necessary in phase equilibrium calculations , where it is desired to calculate the compositions of a vapour phase and a liquid phase , or two liquid phases , which are in equilibrium . In general the two phases will be of different chemical composition . The calculation is often made difficult by problems of modelling the nonlinear behaviour of the properties of the chemical components . Such calculations are a vital feature of chemical engineering design , There are advantages to be gained if the basis part of the calculation can be made linear . This paper shows that the calculations needed for phase equilibrium calculations have some similarity in form to the projection calculations discussed by Lasenby et al [ 1 ] . They have shown that some nonlinear problems are linear when projected to an extra dimension using a Clifford algebra . In this paper consideration is given to applying these methods to the formulation of the algebra of multicomponent chemical composition using the same techniques . One issue in these calculaltions is the appropriate choice of the Clifford algebra to use . In this , use has also been made of the methods of Mirrales et al[2 ] who define a V product which is effectively a means of using one basis on Clifford objects defined in a different basis . This opens up the possibility of carrying out the projection calculations of Lasenby et al[1 ] while using a Clifford basis with all positive signature . These ideas have been applied to the calculation of the transformation from the mass basis to the mole basis , with particular emphasis on the formulation of phase equilibrium calculations . 2 Projection Lasenby et al [ 1 ] describe the use of a projective space for representation of invariants in computer vision . They introduce a vector X in a Clifford algebra of signature ( 1,3 ) with basis vectors with the signatures Taking the product of X with the basis vector 4 gives an expression in terms of a three dimensional vector x where x is defined in terms of the bivectors of the original algebra . This author considered this representation as possible way to represent the multicompent chemical composition , and has adapted it for the modelling of multicomponent chemical composition . 3 The V product Mirralles et al [ 2 ] discuss the algebra of signature change among Clifford algebras of the same total dimension . The example which is discussed in their paper . For the case of the Clifford(4 ) algebra they take two objects of any grade A and B with Clifford product AB . They define a Vee or V product such that A B is equivalent to the multiplication of objects defined in Clifford ( 1,3 ) . For two vector objects u and v in Clifford ( 4,0 ) the definition is where e 0 is chosen from among the basis vectors of the algebra . For theis definition the symmetric part is given by in comparision with the Clifford product They show that the unsymmetric part is the same as for the Clifford product . The definition extends to the grades of the multigrade objects as follows . This author considered this as an alternative for the representation of the multicompent chemical composition , and has applied it for the modelling of multicomponent chemical composition . 4 Multicomponent chemical composition 4.1 Projection Model The analysis of the multicomponent chemical composition follows the algebra of Lasneby et al [ 1 ] , using the Clifford ( 3,1 ) algebra rather than the Clifford ( 1,3 ) . Suppose that a closed chemical system contains a mass M i of each of 3 chemical components . Define an object M in a Clifford ( 3,1 ) vector space with orthogonal basis vectors i as follows The system is defined such that This will be referred to as the full system . A reduced coordinate system can be constructed by taking the geometric product of an object in the system with 0 . This will be called the reduced system . If the bivectors in this relation are taken as defining a three dimensional Clifford ( 3,0 ) algebra Then an object m in this new space is given by where are the mass fractions for the system . An object D in the full system is defined as follows . Then the dot product of D with M gives which represents the mass balance and the relation that the x i sum to unity . The advantage of this procedure is that M is linear in the components whereas m is nonlinear , but can be easily constructed from it . Thus 4.2 Conversion between mass and molar basis . To scale to units proportional to the numbers of molecules , using the relative molecular mass r i of each component , then a new vector N in the full system can be constructed as follows , using the inverses of the relative molecular masses then if M 0 = M 1 + M 2 + M 3 This is a linear operation , which in matrix terms can be written , with M 0 = M 1 + M 2 + M 3 , as and defined as The molar fraction vector n can then be found from N using the same method as before . where with are the molar fractions in the system . This can be expressed in terms of N i , the components of N , as This conversion is quite general , and the reverse operation can be written as If the two matrices are combined , the result is a matrix which transforms an object such as M into itself . This is defined to be I . and clearly 4.3 Vapour-Liquid Equilibrium The usual chemical engineering formulation of vapour liquid equilibrium is for each of the components , where x i are the liquid molar fractions and y i are the vapour molar fractions . K i is called the equilibrium constant and is in general a function of temperature , pressure and all the molar fractions in both phases . Defining objects for the two phases as previously , where X i and Y i are on a mloar basis , and then converting the equilibrium expression to this basis results in the expression Summing over all the components which implies that the K i are not independent . It follows that and This means that the Y i are in the same proportions as the K i X i and the following calculation yields some linear multiple of Y . so that , using the previous notation , 4.4 Flash calculation One application of these equations is to a flash calculation where a fixed amount of material is available , which will be distributed between the two phases . If that material is designated by Z such that then The matrix form of this is This is invertible as where This provides a formulation of the flash calculation which can be used for an iterative solution given models for the dependence of K i on the variables . 4.5 Chemical Reaction If a chemical reaction occurs transforming a vector A in the full molar system to a vector B then where Q is the effect of the reaction . If on a molar basis Q 1 moles of component 1 become Q 2 moles of component 2 then so that 4.6 Volume and thermodynamic functions Functions whose value is proportional to the amount of material , termed extensive functions , can be expressed in terms of the contribution of each component . For example the volume V of a liquid can be expressed in terms of the molar numbers N i of a vector N and the partial molar volumes V i as This can be represented in the full system as and the value of the property can be extracted as This can be extended to intensive properties such as density where and expressing with the value of the property given by 5 Vee product model The development of this model is very similar to the previous model , using a different Clifford basis . Suppose that a closed chemical system contains a mass M i of each of the components . Define an object M in a Clifford ( 4,0 ) vector space with orthogonal basis vectors i as follows The system is defined such that with The bivectors in this relation are taken as defining a three dimensional Clifford ( 0,3 ) algebra Then an object m in this new space is given by where are the mass fractions for the system as before . If an object D in the full system is defined as follows . then the symmetric part of the V product of D with M choosing 0 as the special basis vector gives which is the mass balance equation as in the projection model . Thus the alternative of the Clifford ( 4,0 ) basis can be used and still have the same relationship among the components . One difference is that the reduced basis now has an all negative signature . That is not a problem because it is the sum of the mass fractions which is significant in calculation and not their vector norm . The only calculation which depends upon the signature of the algebra is the extraction of an extensive property which now becomes 6 Generalisation The examples have been constructed using three chemical components . The method can be generalised to more components by increasing the number of basis vectors . No calculation makes use of any property of the Clifford Algebra which changes as the dimension increases . 7 Conclusions The projection method can be used to formulate the equations of multicomponent chemical composition , including phase equilibrium and chemical reaction , and both extensive and intensive properties which can be calculated from contributions from each component . This can be done either using the approach of Lasenby et al [ 1 ] or that of Miralles et al [ 2 ] . 8 References [ 1 ] J. Lasenby , E. Bayro-Corrochano , A. N . Lasenby and G. Sommer . " Geometric Algebra : a Framework for Computing Invariants in Computer Vision " Proceedings of the International Conference on Pattern Recognition ( ICPR '96 ) , Vienna . [ 2 ] D. Mirrales , J. M . P arra , and J. Vaz , " Signature Change and Clifford Algebras " , International Journal of Theoretical Physics , vol . 40 ( 1 ) pp . 227-238 , ( 2001 ) John Fletcher May 2001 , updated March 2003 . Aston University , Aston Triangle , Birmingham B4 7ET , United Kingdom Telephone : +44 ( 0 ) 121 204 3000 Fax : +44 ( 0 ) 121 333 6350 Copyright © 10.25.06 Aston University </text>
<text id="csqcw" url="http://www.all-energy.co.uk/newsletter45.html">
Issue 45 - Late November 2004 News@All-Energy , the free emailed newsletter is published by Media Generation Events and Aberdeen Exhibition and Conference Centre , organisers of the annual All-Energy renewable energy exhibition and conference . The fifth All-Energy will be held 25 and 26 May 2005 in Aberdeen . The All-Energy exhibitor list is growing fast -- indeed , over half the space has already been reserved with six months to go ! You 'll find the regularly updated floorplan and exhibitor list at www . a ll-energy . c o. u k - and on the All-Energy stand ( F89 ) at EWEC 2004 . There 's a pdf of the first in a series of All-Energy printed newsletters kindly sponsored by AREG ( Aberdeen Renewable Energy Group ) on the website too . The conference steering group meets 1 December --suggestions for speakers or topics should be sent to info@all-energy . c o. u k by 29 November please . CONTENTS 1. GENERAL -- UK 1.1 . G lobal warming a priority 1.2 . W orld Offshore Renewable Energy Report 1.3 . S cotland on target 1.4 . M ichael Howard 's views 1.5 . S anyo invests in Europe 1.6 . A sking the experts 1.7 . R E companies look for investment 1.8 . U KERC head appointed 1.9 . L ooking for board members 2. GENERAL -- OVERSEAS 3. GRID , TRANSMISSION AND RO 3.1 . R O plans 3.2 . L atest from Ofgem 3.3 . R eassurances from Scottish Executive 3.4 . G rid expansion in Scotland 3.5 . C o-op goes green 4. WIND -- UK 4.1 . E WEC 2004 opens 4.2 . R ecord wind farm construction 4.3 . £ 7bn of investment into wind industry 4.4 . C lean coal not wind is the answer 4.5 . N o significant risk to shipping 4.6 . F KI pulls out of turbine business 4.7 . S uccess of visitor centre 4.8 . T echnology transfer from RE to oil industry 4.9 . W ind farms and house prices 4.10 . T he big one ! 4.11 . P lans for new big Scottish windfarm 4.12 . C aton Moor goes to REpower 4.13 . P lanning sought for 500MW windfarm 4.14 . S W to have 280 wind turbines 4.15 . S upport for windpower in Devon 4.16 . C ontract win for Global Marine 4.17.100MW deal for Geotrupes 4.18 . B rian Wilson plugs in 4.19 . R esources will be strained offshore 4.20 . C ongrats to Wales on TAN8 4.21 . A dding excitement to the landscape 4.22 . F rom 3 to 11 ... ... 4.23 . M arine Renewables Directory 5. WIND -- OVERSEAS 6. WAVE AND TIDAL 6.1 . M inister briefed on Wave Hub 6.2 . S tingray news from EB 6.3 . T esting at NaREC 6.4 . P ort Kembla structure has arrived 6.5 . S MART award for Scottish wave device 6.6 . T idEl wins Technology Entrepreneur award 6.7 . G ood news for Tidal Electric 6.8 . A WS aims for Scottish manufacture 6.9 . A lderney tidal plans 7. BIOENERGY 7.1 . B iofuels offer opportunities for farmers 7.2 . W here there 's muck , there 's gas . 7.3 . G row with energy in mind 7.4 . U K push for biomass 8. FUEL CELLS AND HYDROGEN 8.1 . T omorrow 's petrol is a gas 9. HYDRO 9.1 . R oyal family 's green credentials 9.2 . C ontract for Dulas 10 . NUCLEAR 10.1 . N uclear power at the IoD 10.2 . D isposing of nuclear waste -- the options 10.3 . T en new nuclear stations for UK ? 11 . PV AND SOLAR 11.1 . T hree trophies for solarcentury 11.2 . S olargen look to Italy 11.3 . S olar and fuel cells to combat flooding 11.4 . B P Solar in profit 11.5 . S cotland 's largest PV installation 11.6 . S olar power in Spain 11.7 . S olar dish development 12 . AND OTHER SOURCES -- carbon sequestration ; geothermal and CHP 13 . JOB HUNTING ? 14 . KEEPING UP TO DATE 1 . G ENERAL -- UK 1.1 . G lobal warming a priority French President Jacques Chirac and UK Prime Minister Tony Blair pledged to make reducing global warming a priority when the UK takes over the presidency of the G8 in January 2005. http://dbs.cordis.lu/cgi-bin/srchidadb ? CALLER=NHP_EN_NEWS&ACTION=D&SESSION=&RCN=EN_RCN_ID:22948 1.2 . W orld Offshore Renewable Energy Report The second edition of The World Offshore Renewable Energy Report focuses on the period 2004-2008 . Building on the success of the first edition , published by the DTI 's Renewables 2010 Target Team , it considers offshore wind , wave and tidal power . CDs available from 01224 254087 or chris . k elly@dti . g si . g ov . u k 1.3 . S cotland on target First Minister Jack McConnell told a meeting that Scotland is on course to meet interim renewable energy targets www . s cotland . g ov . u k/News/Releases/2004/11/18141058 1.4 . M ichael Howard 's views Tory leader Michael Howard lays out his own vision for the countryside including his views on renewables www . w esternmorningnews . c o. u k/displayNode . j sp ? nodeId=143662&command=displayContent&sourceNode=143640& 1.5 . S anyo invests in Europe Sanyo Electric Company has launched its new Energy & Ecology Business in Europe , representing an investment of 150m Euros by 2006 http://sourcewire.com/releases/rel_display.php ? relid=19915&hilite = 1.6 . A sking the experts Is it possible to meet growing energy demands without causing catastrophic damage to the environment ? http://news.bbc.co.uk/2/hi/science/nature/4000225.stm 1.7 . R E companies look for investment siGEN , AWS Ocean Energy , and Puregen were amongst 14 growth-stage companies seeking funding at a recent Connect investment conference www . f uelcellsworks . c om/Supppage1394 . h tml 1.8 . U KERC head appointed John Loughhead , former Vice-President of Technology for Alstom , has been appointed Executive Director of the UK Energy Research Centre ( UKERC www . u kerc . a c. u k/newsindex . h tm 1.9 . L ooking for board members The community energy company being established by Highlands and Islands Enterprise , is looking for people to join its board of directors www . h ie . c o. u k/Default . a spx . L ocID-0finewkc3 . R efLocID-0fihiesv5007lat . L ang-EN . h tm 2 . GENERAL -- OVERSEAS The 90-day countdown to the Kyoto Protocol 's entry into force was started by the receipt of the Russian Federation 's instrument of ratification by the UN Secretary-General . The Protocol will become legally binding on its 128 Parties on 16 February 2005 http://unfccc.int/press/items/2794.php 1m Euro-worth of funding is available for the period 1 April 2005 to 31 March 2006 . The REEEP is seeking project proposals its next funding round www . r eeep . o rg/index . c fm ? articleid=1058 An investment of Euro 443bn is needed by 2020 if Europe is to meet its targets for renewable energies says a marketing report produced by the European Renewable Energy Council www . s parksdata . c o. u k/refocus/showdoc . a sp ? docid=52575320&accnum=1&topics = Gamesa 's interests in China - an overview www . g amesa . e s/ingles/noticias/noticias . h tm Canada 's Minister of the Environment outlined his perspective on renewable energy , indicating that Canada 's future is closely linked to the development of RE www . r enewableenergyaccess . c om/rea/news/story ? id=17687 3 . G RID , TRANSMISSION AND RO 3.1 . R O plans UK Energy Minister , Mike O'Brien , published the Government 's plans for the review of the Renewables Obligation www . g nn . g ov . u k/environment/detail . a sp ? ReleaseID=134485&NewsAreaID=2&NavigatedFromDepartment=False 3.2 . L atest from Ofgem BETTA open letter on likely late issuance of offers under standard licence condition C18 of the electricity transmission licence www . o fgem . g ov . u k/temp/ofgem/cache/cmsattach/9350_25704 . p df BETTA consultation on the recovery of costs incurred as a result of the run-off of the Settlement Agreement for Scotland ( SAS ) -- An Ofgem/DTI consultation www . o fgem . g ov . u k/temp/ofgem/cache/cmsattach/9329_25404 . p df Treatment of embedded exemptable large power stations under BETTA - An Ofgem/DTI conclusions and further consultation document www . o fgem . g ov . u k/temp/ofgem/cache/cmsattach/9173_25304 . p df BETTA consultation on outstanding matters concerning the Grid Code under BETTA and associated STC drafting www . o fgem . g ov . u k/temp/ofgem/cache/cmsattach/9169_25104 . p df BETTA consultation on CUSC Interface Agreements - comments on the issues discussed should be sent by 1 December 2004 www . o fgem . g ov . u k/temp/ofgem/cache/cmsattach/9134_24904 . p df 3.3 . R eassurances from Scottish Executive The Scottish Executive assured the renewable energy industry based in Scotland 's peripheral areas that it will fight its corner to secure fair access charges to the grid www . s hetland-news . c o. u k/pages/news%20stories/november%202004/executive_supports_renewable_industry . h 3.4 . G rid expansion in Scotland Highland Council 's planning committee opted for a proposal to take electricity from a proposed giant windfarm in the Western Isles to the national grid via a future submarine transmission cable , coming ashore at Dounreay in Caithness www . t hisisnorthscotland . c o. u k/displayNode . j sp ? nodeId=149475&command=displayContent&sourceNode=149205 Scottish Natural Heritage said five possible routes for the transmission line are all likely to have a significant impact and could affect a number of internationally important nature sites http://news.scotsman.com/scotland.cfm ? id=1331912004 The National Trust for Scotland has joined the chorus of protest against the plans www . s undayherald . c om/46189 3.5 . C o-op goes green The Co-operative Group has announced new deals worth more than £ 25 million to provide 100 per cent green electricity to its sites throughout mainland UK . http://icnewcastle.icnetwork.co.uk/eveningchronicle/ukandworld/page.cfm ? objectid=14846403&method=ful 4 . W IND -- UK 4.1 . E WEC 2004 opens The European Wind Energy Conference is being held until 25 November at Wembley , London . Pre registration closed with over 1500 delegates from 40 countries and 255 exhibiting companies www . e wea . o rg A2SEA 's MW Ocean Ady , carrying a Vestas V90-3.0MW nacelle and blades is moored to HMS Belfast just by Tower Bridge in Central London throughout EWEC www . a 2sea . c om / 4.2 . R ecord wind farm construction Construction of wind farms hit a record this year , Patricia Hewitt , trade and industry secretary , announced although the development of offshore schemes must accelerate if the government is to meet its climate-change targets http://news.ft.com/cms/s/23335e30-3c2c-11d9-8b17-00000e2511c8.html 4.3 . £ 7bn of investment into wind industry BWEA released new figures showing that 2004 is a record year for the rapidly expanding UK wind industry and predicting that expansion out to 2010 should result in some £ 7 billion of new investment into the sector www . b wea . c om/media/news/record2004 . h tml 4.4 . C lean coal not wind is the answer Britain could cut the cost of reducing greenhouse gases by £ 3 billion if it fitted clean-coal technology to its ageing power stations , rather than building wind farms . http://business.timesonline.co.uk/article/0,,8209-1369581,00.html 4.5 . N o significant risk to shipping Npower Renewables carried out navigational trials at North Hoyle with the Maritime and Coastguard Agency ( MCA ) and consultants QinetiQ . Most ships had no problems seeing the turbines on radar and other systems , and radio links between boats and shore also worked . http://icnorthwales.icnetwork.co.uk/news/regionalnews/tm_objectid=14900104%26method=full%26siteid=50 4.6 . F KI pulls out of turbine business FKI announced its proposal to exit the DeWind turbine business it acquired in 2002 - the rapid consolidation of wind turbine manufacturers and the increasing influence of major wind power developers have significantly increased competitive pressures www . f ki . c o. u k/newsdetail . c fm ? contentid=203 4.7 . S uccess of visitor centre E. O N UK 's Scroby Sands Information Centre has welcomed 30,000 people through its doors since it opened in May www . e on-uk . c om/Content/media/news . a spx ? MenuId=22 4.8 . T echnology transfer from RE to oil industry Lessons learned from working in the renewables industry helped Cns Subsea complete a £ 2m contractor for Shell repairing the Brent Charlie/Dunlin Alpha power cable in just three weeks cns@cns-ltd . c om 4.9 . W ind farms and house prices A planning application for a wind farm hits local house prices , but the negative impact diminishes as time goes by says RICS ( Royal Institution of Chartered Surveyors ) www . r ics . o rg/NR/exeres/C714E388-9C8E-4C90-858A-6EB4FF58EC1D . h tm BWEA revealed the results of a study conducted by Knight Frank which also shows it is too early to say categorically that wind farms are a serious threat to homeowners www . b wea . c om/media/news/houseprices . h tmL 4.10 . T he big one ! Lewis Wind Power Ltd , a joint venture of AMEC and British Energy , has submitted a planning application to the Scottish Executive for permission to build the world 's largest onshore wind farm in the north of the Isle of Lewis www . a mec . c om/news/media_releases_2ndlevel . a sp ? Pageid=34&MediaID=960 Comhairle nan Eilean Siar has set up a website to provide information on the Lewis Wind Power application . The site allows comments to be sent by email . www . c ne-siar . g ov . u k/lewiswindpower 4.11 . P lans for new big Scottish windfarm Plans have been unveiled to build one of the biggest wind farms in Scotland . Amec said the 100-turbine development in East Ayrshire and Dumfries and Galloway would generate 300MW www . t heherald . c o. u k/news/27142 . h tml 4.12 . C aton Moor goes to REpower REpower UK Ltd is supplying the repowering project " Caton Moor " with eight 2-MW , type MM70 units . This is REpower UK 's second contract a year after setting up the REpower : P eter Brotherhood joint venture www . r epower . d e / 4.13 . P lanning sought for 500MW windfarm Airtricity has sought planning permission in Scotland for one of the biggest onshore wind farms in the world www . b usinessworld . i e/livenews . h tm ? a=1040876 ; s=rollingnews . h tm 4.14 . S W to have 280 wind turbines Ministers say the South West of England must find room for 280 wind turbines to meet energy targets http://news.bbc.co.uk/2/hi/uk_news/england/devon/4017061.stm 4.15 . S upport for windpower in Devon A survey by MORI found that 71 percent of rural residents questioned , support the use of wind power in Devon . www . r egensw . c o. u k/documents/DevonMORIPollPR-091104 . p df 4.16 . C ontract win for Global Marine Global Marine Systems , now able to emerge from administration , has won two new contracts , the most recent is for subsea cabling for an offshore windfarm project off the coast of Kent www . b usinessweekly . c o. u k/news/view_article . a sp ? article_id=8861 4.17.100MW deal for Geotrupes Geotrupes has signed an agreement with a major electricity company to provide it with 100 MW of electricity , with wind turbines the initial focus. . www . b usinessweekly . c o. u k/news/view_article . a sp ? article_id=8868 4.18 . B rian Wilson plugs in The world 's first domestic windmill feeding electricity directly into the household power supply was switched at the Glasgow home of former UK Energy Minister , Brian Wilson MP www . w indsave . c om/news . h tm 4.19 . R esources will be strained offshore A rapid expansion of offshore wind farms in North Sea waters risks straining resources ... . One issue involves the provision of divers for maintenance and servicing work , with the North Sea oil and gas sector the obvious recruiting ground www . t elegraph . c o. u k/money/main . j html ? xml=/money/2004/11/11/cnwind11 . x ml 4.20 . C ongrats to Wales on TAN8 BWEA congratulates the Welsh Assembly on producing its new framework for a range of renewable technologies . Technical Advice Note ( TAN ) 8 includes a target of an additional 800MW of onshore wind by 2010 www . b wea . c om/media/news/tan8welcome . h tml 4.21 . A dding excitement to the landscape Wind farms could spell the way for artistic expression according to a partner at MosArt Landscape Architects . www . e die . n et/news/news_story . a sp ? id=9158&channel=6 4.22 . F rom 3 to 11 ... ... Two Cumbrian firms have been contracted to take the number of turbines at Winscales , near Workington , from three to 11 www . c umbria-online . c o. u k/viewarticle . a sp ? id=154387 4.23 . M arine Renewables Directory The Marine Renewables Directory is an up to date , online database of vessels , ports and harbours , companies and service providers , allowing developers to search for appropriate resources , and the supply chain to ' showcase ' their capabilities . http://www.marinerenewablesdirectory.com 5 . W IND -- OVERSEAS Gamesa sells 469 mw of windfarms to Iberdrola in Spain and Portugal for 566 million euros www . g amesa . e s/ingles/noticias/noticias . h tm The EWEA supports the intention to eventually adopt support mechanisms for renewable electricity that are compatible with an undistorted Internal Market www . e wea . o rg / The REpower 5M , is feeding electricity into the grid . REpower has been successfully awarded one of the five sites up for tender in the Cuxhaven test field . An application for planning permission will be made by the new year so a REpower 5M can be erected by the end of 2005 www . r epower . d e Endesa will purchase wind farms from Gamesa in Italy with a total installed capacity of 200 MW and at an estimated cost of Euros 250 million . http://home.businesswire.com/portal/site/google/index.jsp ? ndmViewId=news_view&newsId=20041103005621& REpower Systems has signed a licence agreement with China 's Dongfang Steam Turbine Works who will produce the MD70 and MD77 turbines to sell in China . www . r epower . d e A record number of new U. S . wind energy projects is expected next year , spurred by Congress ' decision to extend a federal tax credit for wind energy production www . p lanetark . c om/dailynewsstory . c fm/newsid/27956/story . h tm RES America Construction has ordered 36 Vestas V82-1.65 MW wind turbines . Nebraska Public Power District will own the wind power plant and utilize the power output www . v estas . c om/uk/news/press/newsSE_Detail_UK_04 . a sp ? ID=103 Winergy and Atlantis Power will jointly explore the development of offshore wind farms using Winergy sites and Atlantis Power offshore platform technologies www . e mediawire . c om/releases/2004/11/emw178477 . h tm The southern hemisphere 's largest wind turbines have begun generating electricity in South Australia . The Canunda wind farm site consists of 23 2MW turbines www . w indprospect . c om . a u The Swedish governing party and two coalition parties have agreed to speed up the installation of several big offshore wind farms . www . w indpower . o rg/en/news040929 . h tm With few serious concerns raised by the U. S . Army Corps of Engineers , the USA 's first offshore windfarm at Cape Cod could be under construction within a year www . c apecodonline . c om/cctimes/corpszxreport9 . h tm 6 . W AVE AND TIDAL 6.1 . M inister briefed on Wave Hub Energy minister Mike O'Brien was briefed on plans to create a Wave Hub off the coast of north Cornwall . A feasibility study on the revolutionary scheme is due to be completed by the end of the year . http://news.bbc.co.uk/1/hi/england/cornwall/4023341.stm 6.2 . S tingray news from EB EB has completed its programme to design , build , install offshore , test and decommission a full scale demonstrator of its Stingray tidal stream generator . The next phase is to design and build a 5MW pre-commercial power station to demonstrate the technology on a commercial scale , a project which would cost in excess of £ 20 million . EB alone cannot fund such a project and has put a hold on future development of Stingray until there are clear indications that this level of investment is likely to yield a satisfactory return . www . e ngb . c om 6.3 . T esting at NaREC Ecofys is testing a 1:10 scale model of Wave Rotor at NaREC in Blyth . Performance , blade configurations and inertia are being investigated . Funded under the Carbon Trust Marine Energy Challenge Programme the testing is being supervised by Halcrow www . e cofys . c om/com/news/news . h tm 6.4 . P ort Kembla structure has arrived The main structural component of the Port Kembla Wave Energy Project , weighing 485 tonnes and with dimensions of 40m by 35m by 18m has arrived at Port Kembla in Australia www . e nergetech . c om . a u / 6.5 . S MART award for Scottish wave device More than £ 1m is to be awarded to small Scottish companies under the latest round of the Scottish Executive 's SMART : S cotland R&D support programme - the development of a wave energy converter by Aberdeen company Nordeng benefits www . s cotland . g ov . u k/News/Releases/2004/11/01081903 6.6 . T idEl wins Technology Entrepreneur award SMD Hydrovision have been awarded 1 st place in the ' Technology Entrepreneur ' event sponsored by E-Synergy and The Carbon Trust . www . s mdhydrovision . c om/news/ ? news_id=22 6.7 . G ood news for Tidal Electric The Chinese government has expressed enthusiastic support of Tidal Electric 's 300 MW offshore tidal lagoon near the mouth of the Yalu River by signing an agreement pledging to cooperate with the development www . t idalelectric . c om/News%20China . h tm 6.8 . A WS aims for Scottish manufacture AWS Ocean Energy Ltd aims to bring manufacturing of the world 's largest wave power generator to Scotland www . t hisisnorthscotland . c o. u k/displayNode . j sp ? nodeId=149235&command=displayContent&sourceNode=149218 6.9 . A lderney tidal plans A panel reviewing alternative forms of power in the island of Alderney is recommending a tidal energy commission is set up http://news.bbc.co.uk/2/hi/europe/guernsey/4016665.stm 7 . B IOENERGY 7.1 . B iofuels offer opportunities for farmers Biofuels could become a major revenue earner for Britain 's arable farmers within 5-10 years - much will depend on government support , a major study into the UK cereals sector concludes http://story.news.yahoo.com/news ? tmpl=story&cid=570&ncid=753&e=2&u=/nm/20041122/sc_nm/environment_br 7.2 . W here there 's muck , there 's gas . Scientists have created genetically modified yeasts and fungi that can turn agricultural waste into fuel for cars and trucks http://observer.guardian.co.uk/uk_news/story/0,6903,1356121,00.html 7.3 . G row with energy in mind Scotland 's Rural Development Minister Ross Finnie urged arable farmers to be innovative in identifying new opportunities for their businesses and spoke of novel crops for biomass www . s cotland . g ov . u k/News/Releases/2004/11/09101847 7.4 . U K push for biomass Food and Farming minister Larry Whitty unveiled the £ 3.5million UK-wide Bio-Energy Infrastructure Scheme www . t hisisthelakedistrict . c o. u k/farm/farming/display . v ar.540683.0 . b iomass_gaining_energy . p hp 8 . F UEL CELLS AND HYDROGEN 8.1 . T omorrow 's petrol is a gas Shell 's first US hydrogen station is open reports John Vidal in The Guardian . But will we all be filling up soon ? http://education.guardian.co.uk/higher/sciences/story/0,12243,1347842,00.html 9 . H YDRO 9.1 . R oyal family 's green credentials The power of the River Thames is to be harnessed to help provide electricity for Windsor Castle in a scheme that underlines the Royal family 's green credentials . www . t imesonline . c o. u k/article/0 , , 2087-1337741,00 . h tml 9.2 . C ontract for Dulas Dulas Hydro has been awarded a £ 250,000 design , construct and commissioning contract by RWE npower , to refurbish a 700kW hydro scheme at Auchtertyre in Scotland www . r enewable-resources . c om/d_base/news . p hp ? category=dulas 10 . N UCLEAR 10.1 . N uclear power at the IoD Nuclear power featured at an energy seminar organised by the Institute of Directors . Delegates heard arguments for and against the role nuclear power should play in the UK 's future energy strategy www . i od . c om/is-bin/INTERSHOP . e nfinity/eCS/Store/en/-/GBP/IODDirectLink-Start ? Type=Content&TemplateNa 10.2 . D isposing of nuclear waste -- the options CoRWM , the Committee on Radioactive Waste Management , met to draw up , for the first time , a short list of options for dealing with the UK 's nuclear waste from its ' long list ' of 15 www . c orwm . o rg . u k/content-0 10.3 . T en new nuclear stations for UK ? the Committee on Radioactive Waste Management has raised the prospect that 10 new nuclear stations could be built in Britain http://news.independent.co.uk/business/news/story.jsp ? story=580268 11 . P V AND SOLAR 11.1 . T hree trophies for solarcentury solarcentury won three trophies at the annual " Inner City 100 " awards ceremony in the City of London - an annual league table of the hundred fastest growing inner city companies www . s olarcentury . c o. u k/news / 11.2 . S olargen look to Italy Solargen has formed a partnership with the Aprile Group to break into the Italian market http://icwales.icnetwork.co.uk/0300business/0100news/tm_objectid=14854449&method=full&siteid=50082&h 11.3 . S olar and fuel cells to combat flooding Dabbrook Services , the Environment Agency and BOC have joined forces on a project combining solar power with electricity generated by hydrogen fuel cells to control river levels and prevent flooding by powering an automated weir http://business.edp24.co.uk/story.aspx ? brand=BIZOnline&category=Business&tBrand=BIZOnline&tCategory= 11.4 . B P Solar in profit BP Solar is turning profitable for the first time in its 30-year history and aims to more than double its manufacturing capacity www . r euters . c o. u k/newsPackageArticle . j html ? type=reutersEdgeNews&storyID=618431&section=finance 11.5 . S cotland 's largest PV installation The largest photovoltaic installation in Scotland has been installed at Sir E. Scott School in the Western Isles www . c ne-siar . g ov . u k/press/041102 . h tm 11.6 . S olar power in Spain Spain is making solar panels compulsory in new and renovated buildings www . t imesonline . c o. u k/article/0 , , 3-1350946,00 . h tml 11.7 . S olar dish development Six solar dish-engine systems for electricity generation are being built and tested in the USA - they will provide enough grid-ready solar electricity to power more than 40 homes www . i nnovations-report . c om/html/reports/energy_engineering/report-36065 . h tml 12 . A ND OTHER SOURCES North Sea CO2 storage Environmental affairs minister , Elliot Morley , has asked for support for the country 's plans to store CO 2 in the sediments at the bottom of the North Sea www . b ellona . n o/en/energy/35951 . h tml Geothermal power for University Warmth from the earth will be used as a heat source in a new Environmental Centre for Wales , to be built on the University of Wales , Bangor 's Science Site www . n ewswales . c o. u k/ ? section=Environment&F=1&id=7488 CHP opening welcomed Margaret Beckett formally opened ConocoPhillips ' Immingham CHP project - at 730Mwe , one of the largest , cleanest and most efficient Combined Heat and Power ( CHP ) plants in Europe www . c hpa . o rg/press_releases/2004/Immingham%20Launch%2001%20Nov%2004 . d oc 13 . J OB HUNTING ? Garrad Hassan is looking to recruit civil / structural engineers www . g arradhassan . c om/jobs/index . h tm 14 . K EEPING UP TO DATE For daily news www . n arec . c o. u k For a regularly updated list of all known industry events go to www . a ll-energy . c o. u k/eventlist . p hp Data Protection Act 1998 Media Generation Events Limited will hold your email address on its computer database . This will only be accessed , retrieved and used for the purpose of distributing the News@All-Energy newsletter and providing information on All-Energy . Your data will not be passed to third parties , and the data owner will at all times be Media Generation Events Limited . If you do n't want to receive News@All-Energy , email info@all-energy . c o. u k with " Remove " in the subject line and your contact details in the message . Colleagues wishing to receive News@All-Energy free of charge should email the same address with their full contact details and " Subscribe " as the subject . </text>
<text id="csxju" url="http://socialistworker.org.uk/article.php?article_id=8138">
Scrap the education white paper Stop all the academies and defend comprehensive education by Ken Muller , assistant secretary Islington NUT ( pc ) Far more is at stake for the future of education than the fate of the hapless Ruth Kelly . New Labour 's White Paper on schools signals a thoroughgoing assault on the principle of comprehensive education . The planned education bill based on it would lead to all schools being encouraged to break from local democratic control and turn themselves into semi-independent trusts . Such is the scale of the mounting opposition that the government now appears to fear that it will be able to get the bill through parliament only by relying on Tory votes . Senior New Labour figures said this week that Tony Blair is looking to delay publishing the bill , which was due next month , until he has been able to buy off backbench opposition . Labour backbenchers have already produced an " alternative White Paper " . But leading rebels have also said they are prepared to compromise . The city academy programme , which takes schools completely out of public control and hands them over to businessmen , is already law . New Labour 's weakness and the rising opposition of parents mean the programme could be derailed . But that will not come by relying on MPs who voted for academies before . A possible compromise being floated over the new bill is that groups of schools could become a trust , rather than individual ones . But what 's so great about a cluster of schools in competition with another group for scarce resources ? Teacher union activists in London have called a protest march over the education proposals for 2 March . Other initiatives are taking place elsewhere across the country . © Copyright Socialist Worker ( unless otherwise stated ) . You may republish if you include an active link to the original and leave this notice in place . </text>
<text id="ctcuk" url="http://www.setdanceteacher.co.uk/newmarketmez.htm">
High gates : with L hand held in L , partners dance in and round to face their 1 st corner couple and make a ' gate ' with their raised L arms ( 2 steps ) . The dancing gent takes the lady facing him through the gate , R hand in R hand , and dances back towards the corner of the set to face both ladies who are now side by side ( 2 steps ) . The gent dances forward , turning both ladies underarm , his partner clockwise and his ' visitor ' anticlockwise , and turns anti-clockwise to face his partner ( 2 steps ) . His partner then dances through the gate formed by the gent and the visitor as he follows her round and the visitor dances back to place ( 2 steps ) . 8 bars 3 Lead around . Square the set . 16 bars 4 1 st side couple now dances 2. 16 bars 5 Lead around . Square the set . 16 bars 6 2 nd top couple now dances 2. 16 bars 7 Lead around . Square the set . 16 bars 8 2 nd side couple now dances 2. 16 bars 9 Lead around . Square the set . Four sevens . 24 bars Fifth Figure The Stalling ( Jigs ) 112 bars 1 Lead around . Square the set . 16 bars 2 Face the wall : Top couples dance at home to finish with 1 st tops facing out of the set and 2 nd tops facing in the same direction but 1 step inside their own place . 8 bars Side couples dance at home to finish with 1 st sides in line behind 1 st tops and 2 nd sides behind 2 nd tops ( RULE - dance into the space on the R ) . 8 bars Cast off : gents dance L and ladies R to complete 2 circles and meet up after the 2 nd circle to take waist hold with own partners , leading couple first . 8 bars 3 Lead around out of the circle and back to place . 8 bars 4 Square the set : 8 bars 5 Face the wall : Side couples dance at home to finish with 1 st sides facing out of the set and 2 nd sides facing in the same direction but 1 step inside their own place . 8 bars Top couples dance at home to finish with 2 nd tops in line behind 1 st sides and 1 st tops behind 2 nd sides . 8 bars Cast off . 8 bars 6 Lead around out of the circle and back to place . Square the set . Four sevens . 24 bars Sixth Figure - The Hornpipe 160 bars 1 Quarterhouse : Taking waltz hold , couples dance 1 step into the set and 1 step out then turn 2 steps on to the next place on their R. They repeat this 4 step movement into each place and back home . 16 bars 2 House around . 8 bars 3 Dance in and out and ladies move on : partners drop hands and all face into the set . All dance 1 step into the set and 1 step back to place and repeat this movement twice ( 6 steps ) . On the last 2 steps , while the gents dance in and out , the ladies dance around the outside of the set and turn in to face the next gent on their R. 8 bars 4 Quarterhouse , with new partners . House around . Dance in and out and ladies move on . 32 bars 5 Quarterhouse , with new partners . House around . Dance in and out and ladies move on . 32 bars 6 Quarterhouse , with new partners . House around . Dance in and out and ladies move on to their own partners . 32 bars 7 Quarter house . House around . 24 bars STEP In the Third Figure , the Turn the lady step in place is danced : 1 2 3 & 2 2 3 & 3 2 3 & 4 2 3 & L Rh Rt L Rh Rt L Rh Rt L L Rh Rt L Rh Rt L Rh Rt L 4 bars , repeated once , the weight being carried by the underlined foot , or toe . SOURCE Donncha Ó Muínneacháin at his Birmingham workshop , September 1991 . Tom Quinn demonstrates a couple of variations on this set on the video " Set Dancing Made Easy " . In his version of the First Figure , the dancing gent drops the lady he is swinging back in front of her own partner and turns twice to reach the next lady . The ' discarded ' lady stands for 4 bars and then walks into the next place on her L. In the Third Figure , he compresses the High Gates movement by turning both ladies as soon as the visitor has danced through the first gate , so the movement has to be danced quite slowly to use the full 8 bars . In the Hornpipe , he doubles from one place into the next in the Quarterhouse , and the Dance in and out is danced by the ladies only , the gents dancing in place for 6 bars and then dancing in 1 bar to let the lady past , then out 1 bar to meet her . He also has some interesting steps , and the video is worth watching for these alone . </text>
<text id="ctfdn" url="http://www.ebi.ac.uk/interpro/DisplayIproEntry?ac=IPR002824">
This domain identifies a group of enzymes belongs to the GHMP kinase domain superfamily in the archaea . GHMP kinases are a unique class of ATP-dependent enzymes ( the abbreviation of which refers to the original members : galactokinase , homoserine kinase , mevalonate kinase , and phosphomevalonate kinase ) [ 1 ] . Enzymes belonging to this superfamily contain three well-conserved motifs , the second of which has the typical sequence Pro-X-X-X-Gly-Leu-X-Ser-Ser-Ala and is involved in ATP binding [ 2 ] . The phosphate binding loop in GHMP kinases is distinct from the classical P-loops found in many ATP/GTP binding proteins . The bound ADP molecule adopts a rare syn conformation and is in the opposite orientation from those bound to the P-loop-containing proteins [ 2 ] . GHMP kinases display a distinctly bilobal appearance with their N-terminal subdomains dominated by a mixed beta-sheet flanked on one side by alpha-helices and their C-terminal subdomains containing a four stranded anti-parallel beta-sheet [ 3 , 2 , 4 , 5 ] . There are currently no experimental data for members of this family , and their exact biochemical and biological functions are not known yet . </text>
<text id="ctgol" url="http://www.garthyfog.co.uk/mawddach_valley.htm">
5 miles from Garthyfog ... . The Mawddach rises to the north of the Rhobell Fawr Mountain and flows through Ganllwyd , Llanelltyd and Penmaenpool and on through its long estuary to the sea at Barmouth . Upper reaches of the River Mawddach On the Mawddach , as with most other rivers in Gwynedd , there is a marked contrast between the upper reaches - steep and rocky , requiring great care in wet weather - and the gentler lower reaches , some of them quite short , where the course meanders through meadows or woodland . Bontwernddu pool on the River Wnion The Mawddach 's largest tributary is the Wnion , a very fine sea trout river , while the smaller River Eden is also a valuable game fishery . Following a major pollution in 1984 , when 2000 adult salmon and sea trout were killed along with many thousands of juvenile fish , The Mawddach Trust was formed to restock the river from a purpose-built hatchery . The Mawddach and its tributaries contain neither grayling nor coarse fish . As a result , coarse angling in this part of Wales is confined to stillwaters . Insect life Apart from some early season olives and the ubiquitous iron blue and blue-winged olive , it is to the sedge flies , stoneflies and , in particular , terrestrial insects that river trout fishers should turn their attention on the Gwynedd rivers , and the Mawddach is no exception . Season dates and byelaws Salmon and sea trout : 20 March to 17 October . Fly and spinner only from 20 March to 15 April and from 7 October to 17 October . Trout ( non-migratory ) : 3 March to 30 September , except for downstream of the following points : Mawddach , Llenelltyd Bridge ( A470 ) Wnion , Dr Williams ' School footbridge below Dolgellau . On these lower reaches the trout-fishing season dates are 31 May to 30 September . Note : Please check the Environment Agency Wales latest edition byelaws booklet before you go fishing , as changes may have occurred since our information was last updated . </text>
<text id="cvbwe" url="http://www.oca-online.co.uk/viewnews.cfm?news_id=177">
OFFSHORE CONTRACTORS ASSOCIATION ' CHALLENGE AWARDS ' LAUNCHED 28/07/2004 The search is on for this year 's Offshore Contractors ' Association ( OCA ) Challenge Awards winners . OCA - the lead representative body for the UK 's oil and gas contracting and supply industry - is today ( 16th June 2004 ) calling for its members to enter the prestigious awards which have recently been re-branded . The awards acknowledge and reward the outstanding achievements and successes of associated members of all sizes across the UK . Now in its eighth year , the accolades will be presented at the flagship annual OCA dinner which takes place on October 28 at the Marcliffe at Pitfodels in Aberdeen . Entrants are being sought after for the three categories of · Challenge Award for Health , Safety and the Environment · Challenge Award for Training · Challenge Award for Technology and Innovation Bill Murray , Chief Executive of the OCA said , " Each year 's applications highlight just how innovative and committed our members are . Last year more than 15 companies reached the shortlist for the awards and standards were , as always , incredibly high . I am sure this year will be as difficult a job for the judges as last . " " The winners are presented with their personalized trophies in front of an audience of their peers and influential industry figures . The Challenge Awards focus on the sheer hard work and determination of members , as well as the improvements of working practices and services they are making . These awards have gone from strength to strength in recent years , which confirm how much the industry is still achieving . " More information on the awards and entry forms can be found online at www . o ca-online . c o. u k . The closing date for entries is 27th August 2004 . Applicants with queries regarding filling in entry forms should call Fiona Watson at the OCA on 01224 326070 . </text>
<text id="cvgkz" url="http://www.chichester.co.uk/mk4CustomPages/CustomPage.aspx?PageID=24163&sectionID=4585">
Gentleman Jim , the greatest Blue of all He was one of the great names in football during the game 's golden age after World War Two when crowds flocked back to soccer in their millions . Born in Alton 1925 , Dickinson joined Pompey from Alton Youth Club . After three years in the Royal Navy , he made his league debut against Blackburn Rovers at Fratton Park in 1946 . He established the number six shirt as his own and helped steer Pompey to successive league championships . And a total of 48 appearances for England made him Pompey 's most capped player of all time . He played 764 league games for Pompey - a record for one player at a single club which was not broken until Swindon 's John Trollope went six better in 1980 . Dickinson was a gentleman both on and off the pitch . He was never booked or sent off in 800 Pompey and England matches . Dickinson was a Pompey stalwart for almost 20 years . Awarded the MBE in 1964 , he played his last match for the Blues a year later , helping Pompey to a 1-1 end-of-season draw at Northampton that secured safety from relegation . For more about Jimmy Dickinson and other Pompey legends , see Hall of Fame on the Pompey pages . </text>
<text id="cvqer" url="http://www.webstar.co.uk/~musnews/news/search.php?search=&start=12080">
Search results for Results 12081 to 12090 of 12872 . Search took 1.34 seconds Asylum seeker 's anger after stabbing 08-08-2001 An asylum seeker has spoken of his anger hours after being stabbed in a racially motivated attack on a Glasgow estate . Talks on anti racism conference feels US pressure 08-08-2001 Negotiators from more than 100 countries failed in a heated meeting Wednesday to break the deadlock over anti-Israeli references that threaten to provoke a U. S . and Israeli boycott of the World Conference Against Racism , diplomats said Christians burn mosque and Muslim houses in Macedonia 08-08-2001 Angry Macedonians staged violent protests Wednesday night after ethnic Albanian guerrillas killed 10 soldiers in an ambush , and the government warned it would strike back at the rebels . Israel 's get-tough policy seen strengthening Hamas 07-08-2001 The policy of assassinating Hamas activists is making it difficult for the Palestinian Authority to exercise power , according to Palestinian minister Gang of white youths attack Kurd 06-08-2001 Police on Humberside are appealing for witnesses to a racially-motivated attack by a gang of up to 20 white youths . A Kurdish man was badly hurt during the attack in Hull . Vigil for murdered asylum seeker 06-08-2001 Hundreds of people in Glasgow have attended a vigil for an asylum seeker who was murdered in the city . Israeli army denies beating Palestinian to death 06-08-2001 Palestinian witnesses said on Monday they had seen an Israeli soldier beat a wounded , off-duty Palestinian policeman to death with gun butts near the West Bank city of Tulkarm , a charge the army immediately denied . Israeli helicopters unsuccessful assaissantion attempt 05-08-2001 Israeli helicopters fired rockets at Palestinian police headquarters in Rafah in the southern part of the Gaza Strip in an attempt to assassinate commander of Palestinian national security in Rafah Colonel Fawzi Zaqouk this morning Israelis shoot 4-year-old child , grandfather , in Tulkarm 04-08-2001 Israeli occupation army ( IOA ) soldiers on Friday shot and seriously wounded a 4-year-old child as he was travelling in a car with his grandfather near the northern West Bank town of Tulkarm . 17 Hindus slain in Kashmir 04-08-2001 Unidentified men killed 17 Hindu villagers on Saturday in occupied Kashmir , a police official said . </text>
<text id="cwbpn" url="http://www.linc4info.org.uk/cms/pages/sitemap.html">
Page introducing you to the LINC core support team members , and giving you the contact information you need What 's New News Events Archives Pages showing details of LINC news , events , deadlines etc . Data Base by Subject theme by South West Locality Access to the collective evidence-base for policy . Resources include ; numeric datasets and narrative documents which can for the appropriate type of resource be graphed , instantly thematic mapped or exported for use in your reports and analysis . Work Groups Population Consultation Safer Communities Social Inclusion Cultural Activity Learning & Skills Business & Economy Planning Health & Welfare Environment ( ERIN ) Advisory Group Management Board Page giving access to sub-pages for display of the material relevant to specific work groups Downloads Page giving access to the LINC database of downloadable resources Links Page giving access to the LINC signposting of web-links Feedback Page for sending comments and feedback to the LINC team </text>
<text id="cwcqx" url="http://www.ccp4.ac.uk/courses/IUCr2005/index.html">
N.6 : A Protein Crystallographic Toolbox : CCP4 Software Suite and PDB Deposition Tools A one day workshop attached to the IUCr 2005 , Florence , August 23rd 2005 The objective of this one-day workshop was not to teach crystallography but to teach people how to use some of the programs distributed with the CCP4 package to do protein crystallography . The workshop was organised by Maeri Howard and Peter Briggs with financial assistance from CCP4/CCLRC . The original workshop programme can be found here . The presentations are available for download below , in either Microsoft Powerpoint or Adobe PDF format . Many thanks to the speakers for giving their time and energy , and for allowing their presentations to be distributed . More information on the CCP4 project can be found at http://www.ccp4.ac.uk / . Back row , L-R : Gwyndaf Evans , M artin Noble , Peter Briggs . Front row , L-R : Liz Potterton , Kyle Burkhardt , Martyn Winn , Maeri Howard , Paul Emsley </text>
<text id="cwdel" url="http://www.perceptive-engineering.co.uk/html/training.html">
Perceptive Engineering offer three day training courses throughout the year . The objectives of these courses are to provide an introduction to the techniques that are available within the monitorMV software package , to demonstrate how this package can be applied to industrial plants in real-time and to highlight the benefits that monitorMV can offer operations and engineering staff . Throughout the course mathematical technicalities are kept to a minimum with greater emphasis being placed on the practical issues of the statistical technology and control within monitorMV . At the end of the course , attendees should be in a position where they are comfortable with the monitorMV software environment , able to analyse process data and capable of developing effective real-time condition monitoring solutions for application to industrial process plant . Structure of the Course The 3-day training course divides itself naturally into three key issues : An overview of multivariate statistical techniques and their exploitation in the monitorMV software package . This issue is addressed in the first half of day one of the course . A detailed exploration of the off-line analysis capabilities of monitorMV is provided which together with a series of hands-on case studies provides the attendee with a thorough understanding of both the capabilities and configuration of the monitorMV package when applied to both continuous and batch operations . Overview of the on-line capabilities of monitorMV and its integration within a complete solution . Please download our training course flyer . Course Dates There are currently places available on the following courses : - 4 - 6 October 2004 To book a place on one of these courses please contact Juliette Cameron : Telephone : +44(0)1925 750170 Fax : +44(0)1925 752464 </text>
<text id="cwhbc" url="http://www.lanpac.co.uk/csi.php">
Initiatives funded in 2005 Click on the policing division listed below to see a description of all the projects funded for that area in the recent Community Safety Initiative process WESTERN DIVISION ( Incorporating Blackpool , St Annes , Lytham and Kirkham ) has been allocated £ 9,423 to support 11 projects . NORTHERN DIVISION ( Incorporating Lancaster , Fleetwood , Morecambe , Carnforth , Poulton-le-Fylde , Cleveleys and Garstang ) has been allocated £ 6,045 to support 5 projects . SOUTHERN DIVISION ( Incorporating Leyland , Chorley , Penwortham , Bamber Bridge , Skelmersdale and Ormskirk ) has been allocated £ 17,013 to support 19 projects . CENTRAL DIVISION ( Incorporating Preston , Fulwood , Lea , Grimsargh and Goosnargh ) has been allocated £ 7,547 to support 11 projects . EASTERN DIVISION ( Incorporating Blackburn , Accrington , Clitheroe , Darwen , Great Harwood and Longridge ) has been allocated £ 7,990 to support 9 projects . PENNINE DIVISION ( Incorporating Burnley , Colne , Rawtenstall , Bacup , Haslingden , Nelson and Padiham ) has been allocated £ 8,517 to support 12 projects . </text>
<text id="cwmaf" url="http://www.chisenhale.org.uk/html/files/501_project_info.html">
Supermarket Oct 2005 Project Info Artist Charlotte Thrane 's project Supermarket set out to create an environment ( installation ) based on a supermarket with the objects , activities , people , sounds and colours that can be found in such places . By creating backdrops , costumes , masks and props and thinking about poses , characters , lighting and atmosphere , pupils from Halley Primary School were encouraged to share their creative processes and make collective decisions . The project culminated in a double live still film image , projected both at the Chisenhale as part of the installation on the final day , and later at Halley Primary School . </text>
<text id="cwzwc" url="http://www.ilnpictures.co.uk/showpage.asp?showdocumentid=196">
We are just beginning to build our online collection . We have over 2 million images so if you ca n't find what you 're looking for , call us on 020 7805 5585 ILN Firsts Like any newspaper of today , a paper 's popularity relied not only on the quality of its writing and the visual appeal of its illustrations , but also for its ability to report on forthcoming events before any other rival . As a weekly paper , it was even more important for The Illustrated London News to have its fair share of journalistic " scoops " ( one of the first was when they published the plans for the Great Exhibition before even Prince Albert had seen them ) . In addition , as a record of other types of " firsts " which today seem commonplace , such as the letter box , the ILN proves to be an invaluable source . Finally , the ILN was the first publication to push forward the boundaries of publishing techniques with the first colour plates ever produced in 1855 and over seventy years later , the novelty of the first 3-D anaglyph . </text>
<text id="cxnko" url="http://www.starlink.rl.ac.uk/star/docs/sun232.htx/node17.html">
There are a few operations applied to all frames . First the raw frame may be displayed . [ general/_DISPLAY_FRAME_IMAGE_ ] Recipes remove any AXIS and blank TITLE components ; the latter to preserve the object name when NDFs are exported to FITS . Next they set the origin of the frame so that frame pixels retain the detector pixel indices . It then becomes possible to use a full-sized bad-pixel mask or flat field on any subset of a detector 's pixel grid . [ _REMOVE_AXES_ , _REMOVE_BLANK_TITLE_ , _SET_ORIGIN_ ] Then recipes determine the displacements of the reference pixel with respect to the centre of the frame and stores the displacements in the referenceoffset calibration system . The reference pixel is where a star would be placed for photometry or the centre of a chopped and nodded pattern . [ _SET_REFERENCE_PIXEL_OFFSET_ , _GET_FRAME_CENTRE_ ] The next step is to switch on history recording . It is recommended to leave this enabled , since it provides a record of the processing steps of your final mosaics . Otherwise the pipeline becomes something of a black box . Use the KAPPA command hislist to list the history records . [ _TURN_ON_HISTORY_ ] For Michelle there is a validation check of the waveform used , comparing the waveform name given in the headers with other metadata , and recipes issue a warning if there is an inconsistency . Also the data range is validated to be between 25000-48000 . [ MICHELLE/_CHECK_WAVEFORM_ , MICHELLE/_VALIDATE_RAW_DATA_ ] For UFTI there is data validation , such that a warning is issued if the clipped mean sky level is below 24 counts per second in K band and 32 counts per second in H . [ UFTI/_CHECK_SKY_COUNTS_ , UFTI/_VALIDATE_RAW_DATA_ ] For UIST data taken before 2002 December 2 and Michelle , raw data units are converted from ADU per second to the UKIRT standard of total ADU per exposure . [ instrument /_INSTRUMENT_HELLO_ , UIST/_DATA_UNITS_TO_ADU_ ] A night log is created or appended in $ ORAC_DATA_OUT for each frame processed . This tabulates the main parameters of the observation having first corrected defective or undefined headers . [ _NIGHT_LOG_ , UIST/_NIGHT_LOG_ , instrument /_FIX_HEADERS_ for Classic Cam , IRCAM , MICHELLE , NIRI , and UFTI ] </text>
<text id="cxxyp" url="http://www.publications.parliament.uk/pa/cm199900/cmhansrd/vo000405/debtext/00405-07.htm">
Mr . Hawkins : The hon . Member for Leyton and Wanstead ( Mr . Cohen ) need not apologise to the House for the way in which he has just moved his amendments . 5 Apr 2000 : Column 988 I hope I do not embarrass him when I say that it is typical of the thoroughness with which he approaches all matters that he has gone through the amendments in detail and explained the seriousness of the issues involved . Not for the first time , I find myself agreeing with much of what he says . He has again provided a classic example of the reason why he is exceptionally popular among Members of Parliament on both sides of the House . He and I have , on occasion , disagreed about one issue--nuclear disarmament--but on almost all other issues , I find myself largely in agreement with him because I know the seriousness with which he approaches important matters . The official Opposition have a great deal of sympathy with the hon . Gentleman 's amendments . He describes them as probing amendments , and he is wise to do so , but I hope that the Under-Secretary of State for the Home Department , the hon . Member for North Warwickshire ( Mr . O'Brien ) , is shortly to tell us that the Government are prepared to consider the issues with a view to making provision for them . The hon . Member for Leyton and Wanstead was present in the Chamber for much of yesterday 's debates , so he will have heard me say that , quite separate from my Front-Bench responsibilities , I have a personal , long-standing interest , arising from my professional work , in the Data Protection Act and its operation . The hon . Gentleman has made many good points . It is possible that the Minister might tell us that not all of the issues addressed by the amendments can be dealt with in the Freedom of Information Bill , but I hope that the Minister will be able to give his hon . Friend and the House an undertaking that the issues will be considered . Issues of protection of personal privacy are enormously important , and the hon . Gentleman is right to highlight the interesting overlap between the Bill and the Human Rights Act 1998 . In due course , the Government might have to admit that they have got the legislative cost assessment completely wrong and that they have colossally underestimated the cost to the taxpayer of the new legislation . We might return to that matter later . I do not want to detain the House . I simply wanted to express the Opposition 's appreciation of the careful approach taken by the hon . Member for Leyton and Wanstead . We have a great deal of sympathy with his arguments . He has made it clear that he does not intend to press the amendment to a Division , but I hope that , either in another place or when the Bill returns to the House of Commons , we hear a great deal more on the subject . I shall be pleased if many of the hon . Gentleman 's proposals are later incorporated in legislation , either in the Freedom of Information Bill or a later measure . The Parliamentary Under-Secretary of State for the Home Department ( Mr . Mike O'Brien ) : Probably for the first time , I agree with the hon . Member for Surrey Heath ( Mr . Hawkins)--that is , in his tribute to my hon . Friend the Member for Leyton and Wanstead ( Mr . Cohen ) for the thorough way in which he has addressed important issues . My hon . Friend described the complex interface between the Data Protection Act 1998 and what will become the Freedom of Information Act ; he might also have mentioned the complex relationship that is superimposed on that by the Human Rights Act 1998 . Each of those pieces of legislation will interplay with the 5 Apr 2000 : Column 989 others in a complex way . My hon . Friend is right to say that we need to be sure that the juxtaposition of those measures does not cause unnecessary confusion . I accept some of my hon . Friend 's points , even though I cannot accept the amendments--I shall explain why not shortly . I accept his arguments about the need to examine precisely how the measures will interrelate and I undertake to consider , while the Bill goes through the other place , ways in which we can simplify and clarify the various relationships , especially that between the Data Protection Act and this Bill . My hon . Friend has highlighted a difficulty : the Data Protection Act protects personal data , but some requests for information under what will be the Freedom of Information Act will be in respect of individuals , and so may affect personal data held by public authorities . Getting right the balance between the public 's right to know , under freedom of information legislation , and the public 's right to privacy , under data protection legislation , is a difficult matter . Struggle as we may , it is possible that we will not get that balance right for all time in this legislation . Over many years we may have to continue to adjust a complex balance . 4.15 pm Mr . Dalyell : It would not occur to me to ask my hon . Friend to answer off the top of his head , but while he is making inquiries , will he look at the position of Members of Parliament and data , particularly in relation to the case long ago of George Strauss v. London Electricity Board , when the Privileges Committee was overturned and it was decided , rightly or wrongly , that Members of Parliament should not have the protection that many thought they had at the time ? These are extremely complex matters , but in the due course of events they should be looked at . Mr . O'Brien : I certainly undertake to my hon . Friend to look at these matters . As he says , they are complex . The best approach that I could take would be to take advice from our lawyers about how the legislation might operate . I shall then write to my hon . Friend setting out how I think it might affect Members of Parliament . In due course it may be appropriate to discuss that advice in a wider context . I shall look carefully at what my hon . Friend the Member for Leyton and Wanstead says . He asks which part of schedule 2 of the 1998 Act can legitimise the processing of personal data about employees . Fair processing of data may take place where the data subject gives his consent , the processing is necessary for the performance of a contract to which the data subject is a party , and if it is necessary for compliance with any legal obligation to which the data controller is subject , other than an obligation imposed by a contract . Those are some of the circumstances in which information may be given . My hon . Friend asked about extending the Data Protection Act to include non-structured personal files . As his contribution showed , he is aware of the way in which we have so far progressed the 1998 Act . Because of the nature of non-structured files--that is , files held neither on computers nor in a filing system--we have taken the view that it is not appropriate for the full impact of the DPA to apply to that information at this time . By definition , such files are not easily searched . We have extended the principles of accessibility and accuracy to those files , but not other principles . These files are not 5 Apr 2000 : Column 990 covered by the DPA at present . It has been determined by the European Union that it would be too burdensome to business to extend full protection to that information . I was therefore a little surprised at the extent of agreement between the Conservative Front-Bench spokesman and my hon . Friend about extending such regulation to business . No doubt they can justify their wish to do so . We have delivered the White Paper broadly as promised , but personal files will be covered by access , to some extent , under the DPA ; other files may well be accessible via the freedom of information legislation . I make no apology for going into a realm of some complexity as my hon . Friend did . It will take some time , but that is necessary in order to deal with an important and complex technical issue . The effect of amendment No . 107 would be to apply clause 13 , the duty to disclose in the public interest , to information which is exempt by virtue of clause 38(2 ) in so far as it relates to the conditions referred to there--that is , disclosing personal information about a third party where disclosure is contrary to the data protection principles in the Data Protection Act 1998 . A disclosure contrary to those principles would be contrary both to EU law and to the European convention on human rights , particularly in relation to article 8 , as my hon . Friend identified . Despite that , the public interest could be taken into account when considering whether disclosure would contravene data protection principles . The amendment is unnecessary , because the public interest could be considered , but not to the extent that my hon . Friend the Member for Leyton and Wanstead seeks , through applying clause 13 to data protection principles . If we extended the provisions of clause 13 , as amended by our proposals , to the Data Protection Act , we would undermine the principles of the data protection directive . I am advised that that would place us in breach of European Union law . We would also be in serious danger of compromising our position in relation to article 8 of the European convention on human rights . My hon . Friend identified those issues . If we are to get the complexities of the Data Protection Act 1998 and the Freedom of Information Bill right , it would be wrong to put ourselves in a position whereby we undermined European Union directives and possibly the Human Rights Act 1998 , which comes into effect on 2 October . It would be unwise to adopt the approach that my hon . Friend suggests . That does not mean that he has not raised substantive and important points . I want to consider the matter further . Perhaps I can advise him in due course about a method of proceeding . We cannot proceed in the way my hon . Friend suggests in the amendment , for the reasons I have given . Perhaps it might be helpful if he and I met to discuss the matter further . Amendment No . 109 covers a slightly different matter . Section 55 of the Data Protection Act makes it an offence for a person knowingly or recklessly to obtain , disclose or procure the disclosure of personal data without the consent of the data controller . It would catch an employee of the controller who disclosed personal data about the controller 's instructions . The data controller is not caught by section 55 . The test of the legitimacy of his actions is whether they are consistent with data protection principles . If the data controller breaches the principles , 5 Apr 2000 : Column 991 the Data Protection Commissioner may issue an enforcement notice against him . Failure to comply with such a notice is an offence . Amendment No . 109 would make it an offence for the controller knowingly or recklessly to obtain or disclose personal data in a way that would seriously breach data protection principles . The amendment therefore conflicts with the general approach to enforcing data protection principles that is already enshrined in the 1998 Act . I understand my hon . Friend 's point that , nevertheless , there may be reasons for doing that . The data protection legislation has operated relatively well so far , however . There have been no substantial problems . The arrangements have worked well , and the commissioner has tried to resolve problems without the need for formal enforcement . She issued only five enforcement notices in 1998-99 . We do not know of any prosecutions for failure to comply with a notice . My hon . Friend identified a genuine problem . The legislation is currently operating reasonably well , but my hon . Friend has raised a serious issue . We cannot accept the amendment because it would conflict with data protection principles . However , as the years pass , we can keep the matter under review and , if we need to enhance the procedures for protecting those who want to ensure that their privacy is not invaded , we shall reconsider the matter . At this point , we are not in a position to accept amendment No . 109 . In many ways , prosecution is a blunt instrument . A conviction is a punishment and it can influence behaviour , but it is not targeted on the specific problem that my hon . Friend identified . Enforcement notices , on the other hand , address the issue in question : they identify the precise steps needed to improve behaviour and they clearly work . Although we could not be persuaded that immediate criminal action would add to them significantly at the moment , we do not have a closed mind for the long term . On that basis , I hope that my hon . Friend will withdraw his amendment , which he has said he is able to do . </text>
<text id="cyyci" url="http://www.dwalker.pwp.blueyonder.co.uk/Fasti%20V.2/p.%20278%20PRESBYTERY%20OF%20PENPONT%20p.%20672.htm">
Previous to the Reformation the church belonged to the Abbey of Holywood . The parish was supplied by JAMES WILLIAMSON , reader , from Beltyn 1568 to 1585 ; and united to Closeburn by the General Assembly 1606 , which union was afterwards ratified by Parliament . 1593 . RICHARD BROWN , continued in 1596 , and was trans . to Kirkconnel in that or the following year . - [ Reg . Assig . , Edin . Presb . Reg . ] 1601 . DAVID ROGERS , A. M . , was laureated at the Univ . of Edinburgh 28th July 1599 , though he had Dot attained his twenty-fifth year , be was adm . ( by the Presb . of Edinburgh , there being no Presb . in Nithsdale ) after 27th May . He was on the Exercise at Lanark 13th Nov . 1602 , continued in 1608 , and was subsequently at Caerlaverock and St . Mungo . - [ Reg . Laur . Univ . Edin . , Edin . Presb . Reg . , Reg . Assig . , Booke of the Kirk , New St . Acc . iv . ] 1612 . ALEXANDER FLEMYNG , probably trans . from Glenholm before this , pres . to the parsonage and vicarage of D. , and also to the vicarage of Closeburn by James VI . 21st Sept . 1612 . He was on the assize and chancellor of the jury in a trial for Hamesucken 8th March 1620 ; trans . to Morton 22d Dee . 1634. - [ Edin . ( Bapt . ) , and Test . Reg . , Reg . Pres . , Pitcairn 's Cr . Trials iii . , New St . Acc . iv . ] DURRISDEER . Previous to the Reformation was a Prebend , and Sub-Chantor of Glasgow . The parish was supplied by LYON BROWN , exhorter , in 1567 . 1570 . PETER YOUNG , pres . to the Sub-Chantorie by James VI . in Aug . ; demitted in 1575. [ Reg . Pres . ] 1575 . JAMES LINDSAY , pres . by James VI . 18th Dec . ( Nothing more appears of him . ) -[Reg . Pres . ] 1576 . ALEXANDER BRYSOUN , pres . by James VI . 15th Jan . ( No farther notice of him . ) [ Reg . Pres ] 1578 . HERCULES STEWART , Reader at Glencairn in 1576 , he had Mortoun , Penpont , and Tynron also in charge in 1578 ; and continued in 1579. - [ Reg . Assig . and Mina . ] 1579 . JAMES BRYSOUN , pres . by James VI . 14th and 26th Nov . ; was appointed by the Privy Council , 6th March 1589 , as one of the Commissioners for the preservation of true religion in Sanquhar or the overpart of Nithsdale , and was a member of the General Assembly May 1586 , June 1587 , Aug . 1590 , and Feb . 1596 ; demitted before 20th May 1601 , and went to Wigton . - [ Reg . Pres . , and Assig . , Edin . Presb . , and Test . Reg . , Excheq . Buik , Pitcairn 's Cr . Trials ii . , Booke of the Kirk , Calderwood 's Hist . ] 1594 . ANDREW JOHNNESTOUN . ( Of him no farther notice has been found . ) -Test . Reg . ] 1601 . THOMAS ABERNETHIE , A. M . , brother of Mr John A. , min . of Jedburgh , attained his degree at the Univ . of Edinburgh 28th July 1596 , adm . on the Exercise ( licen . ) of the Presb . </text>
<text id="czqoj" url="http://www.wessingtoncryogenics.co.uk/serv01.htm">
Did you know that Wessington Cryogenics are able to offer repair / refurbishment facilities which will enable virtually all types of cryogenic storage vessel to be returned to an ' As New ' condition ? These facilities include : - A detailed examination of the vessel to determine the full extent of the repair work required . This includes a helium leak test and a visual check on all valves and safeties by our engineers . A fully equipped workshop which allows us to carry out both external and internal repairs to virtually all types of cryogenic vessels ( excluding aluminium vessels with fibre glass necks ) . A team of engineers experienced in the field of cryogenic vessel manufacture can rebuild even the most badly damaged vessel . Modifications to existing equipment are also available . Highly qualified welders approved , among others , by BEI and TUeV to British , American and German regulations allow for the highest integrity weld repairs to be carried out . Vacuum pumping facilities allow for all vessels to be heated and hard pumped for maximum service life . Helium mass spectrometer leak test to detect even the tiniest of leaks . Experienced fitters can completely rework , rebuild and replace existing pipework , valves and safeties to ensure the vessel performs in a safe and efficient manner . Pressure test facilities which allow us to examine your vessel in accordance with the Pressure Systems Safety Regulations . Wessington can also repair & recertify your ISO Frame tanks . </text>
<text id="czvea" url="http://www.aylesburyvale.gov.uk/avdc/content/index.jsp?contentid=1999276669">
Website visitor performance While we are only required to set targets against the number of unique users and page impressions , we also want to see an increase in the number of visits our unique users make to our website since this demonstrates that they are finding our website helpful in many different situations . Our performance target for 2005/6 is to increase the numbers of visitors , unique visitors and page impressions by 5 % above that of 2004/5 . For more information call 01296 585075 or email </text>
<text id="dagxc" url="http://www.stratford-upon-avon.co.uk/static_481.htm">
Shakespeare 's Stratford on the Web www . s tratford-upon-avon . c o. u k site by QuinSolve : : W - www . q uinsolve . c o. u k : : E - enquiries@quinsolve . c o. u k : : T - +44 ( 0)1608 664774 William Shakespeare 's Birthplace - a watercolur by John Davis ( c ) Shakespeare 's Life History William Shakespeare ( 1564 - 1616 ) was born at Stratford-upon-Avon in a house in Henley Street . This is preserved intact . His mother , Mary Arden , was one of the daughters of Robert Arden , a yeoman farmer of Wilmcote : his father , John Shakespeare , was a glover and wool dealer of good standing who held the office of Bailiff of the Borough in 1568 . From the age of seven to about 14 , he attended Stratford Grammar School receiving an excellent well rounded education . At the age of 18 he married Anne Hathaway , who was seven years his senior and three months pregnant . She was of ' yeoman ' stock - her family owned a farm one mile west of Stratford in Shottery . He endured her until he could stand it no longer and fled to London to become an actor . He then became actor-manager and part-owner in the Blackfriars and afterwards the Globe Theatres . He was a first-rate actor , but it is as a writer of plays that he has achieved lasting world-wide fame . His plays are thought to be the finest ever written in any language . His 37 plays vary in type ; historical romances , light , fantastic comedies , some are tragedies , all including the comical and the farcical . He was a shrewd business man , amassing quite a fortune in his time . He returned to Stratford for his latter years where he died at the age of 52 and now lies at rest in his special grave at Holy Trinity Church . William Shakespeare and Stratford-upon-Avon Reference Material Available : On the Internet Shakespeare Resources on the Internet A Shakespeare book listing Publications Here are a number of publication 's from The Shakespeare Birthplace Trust in association with Sutton Publishing Limited Shakespeare in the Stratford Records , Robert Bearman , 1994 ISBN 0-7509-0632-4 John Hall and his Patients : The Medical Practice of Shakepeare 's Son-in-Law , Joan Lane , 1996 ISBN 0-7509-1095-X The Civil War in Stratford-upon-Avon : Conflict and Community in South Warwickshire 1642-1646 , Philip Tennant , 1996 ISBN 0-7509-1089-5 Family Life in Shakespeare 's England : Stratford-upon-Avon 1570-1630 , Jeanne Jones , 1996 ISBN 0-7509-1261-8 The History of an English Borough : Stratford-upon-Avon 1196-1996 , Robert Bearman , ed . , 1997 </text>
<text id="danug" url="http://www.synergygroup.co.uk/office-support-recruitment/">
Office Support Jobs ¦ Temporary Office Jobs Synergy 's office support recruitment consultants source staffing solutions and office support jobs for all UK office support positions , from secretarial to office manager jobs , in permanent , temporary and temp-perm vacancies . Whoever you are , whatever type of organisation you are and wherever you 're based , you get the same quality of service . Because we 're expert consultants in office support recruitment to the public , private and managed services sectors , we 're able to provide a customised solution each and every time that meets your goals , your deadlines and your budget . With our head office located in the heart of the City , we are ideally placed for West End and City based clients . Office Support Jobs - Charity Sector Jobs - Secretarial Jobs - Admin Jobs - Office manager Jobs - PA Jobs - Technical Office Support Jobs - Temporary Office Jobs Search here for all our office support jobs Public sector office support jobs : Recruiting for office support jobs in the public sector is the largest specialist area in the entire business . Working alongside Housing , Revenues & Benefits and Social Care this team has a proven history of recruiting talented people for all parts of the not-for-profit sector , including local authorities , housing associations and NHS trusts . Whatever roles our clients need to fill - from temporary secretarial vacancies to senior office manager jobs - we 're on hand with our expertise , experience and contacts . We operate an open accounting policy offering generous guarantees for fixed-term/permanent contracts for all our UK office support vacancies . Private sector office support jobs : Our private sector consultants specialise in providing office support recruitment solutions for administration , secretarial vacancies . With over 30 years collective experience our recruitment consultants specialise in building long-term relationships with both clients and candidates and providing staff for support and secretarial jobs which are the cornerstone of every successful business . Combined with our meticulous selection process , we deliver innovative recruitment solutions that guarantee results . We recruit for permanent , contract and temporary office jobs at all levels in the private sector , we work with both Blue Chip and small to medium enterprises . Signs of success When it comes to direct office support recruitment for secretarial , administration and technical support vacancies , we have a first-class mix of permanent as well as temporary office-based professionals on our books - many of whom work exclusively through us . Because of the quality we can guarantee and the competitiveness of our prices , 65 % of the work we 're doing at present is repeat business with proven temporary staff for administration and secretarial jobs . For further information about our office support recruitment solutions or to discuss our office support jobs , please contact us : </text>
<text id="daqqs" url="http://www.sexshop365.co.uk/catalog/product_info.php?products_id=2981">
Whats the world coming too ? ? ? A very well known high street adult store , have just made the name of this toy ( their best seller ) their copyright ... . . Not the toy - the name ! ! ! So what have we done , well ... . renamed it ... reboxed it ... . and put it on sale at £ 10 off ... oh and give you the batteries FREE to fire this bad boy up . We all know its not the name but the price that makes all the difference Vibrating shaft is shaped like a smooth , textured penis for deep penetrating stimulation . A varienty of speeds with just a touch of a button Rotating pleasure beads stimulate the sensitive innermost areas of the vagina for moments of sheer ecstasy Twisting action in two different directions lets you experience endless combinations of erotic stimulation Vibrating rabbit has two long ears which surround the clitoris with waves of exquisitive vibration , heightening and intensifying orgasm Two powerful motors insure long lasting hours of sublime intimate pleasure . Please note : - This item does not currently qualify for free delivery since the special offer on it drops the price below the free delivery threshold of £ 30 </text>
<text id="dawss" url="http://www.honda-racing.co.uk/fourwheels/formula1/article.asp?a=1327">
9-11 July 2004 The hopes of a nation 's Formula One fans rest largely on Lucky Strike B. A . R Honda 's shoulders this weekend as the team prepares to do battle in its home race at Silverstone . The race team hot-footed its way back from Magny-Cours to B. A . R 's Northamptonshire base on Sunday night , ready to put all their efforts into the British Grand Prix , which takes place quite literally on the team 's own doorstep . Every team and driver wants to win their home event and B. A . R Honda and lead driver Jenson Button are no exception . After an excellent first half of the season , in which he has brought home six trophies in ten races , Jenson 's sights are firmly set on that elusive maiden win for himself and the team . There could be no better venue than Silverstone to take the victory spoils , where his legions of British fans will be out in force and practically the entire B. A . R workforce will take over a grandstand for the weekend to will both drivers to glory on home asphalt . Round 11 of the Formula One World Championship is the last of three gruelling back-to-back races in the 2004 calendar , falling just one week after a disappointing French Grand Prix for the team . The problems , which afflicted both Jenson and Takuma last weekend , are the subject of the most rigorous investigations and the team will leave no stone unturned to ensure reliability is not an issue this Sunday . The team consolidated its third place position in the Constructors ' standings last weekend but lost all of the ground it had gained on Renault as a result of Takuma 's retirement and the anti-stall trigger , which cost Jenson precious time and a potential podium in his final pitstop . Jenson geared up for his Silverstone challenge when he raced into London 's Regent Street on Tuesday 6 July . Over 100,000 spectators got a rare opportunity to see Jenson and his B. A . R Honda race car at close quarters , albeit at a rather more sedate pace than the 300km/h plus speeds he will be unleashing next Sunday . Jenson Button on the British Grand Prix " After the disappointment of Magny-Cours , where we had a good chance of a podium , it feels great to be back in Britain to prepare for our home race . We targeted our first win for around this point in the season and it goes without saying that it would be fantastic to achieve that this weekend . This race is special for so many reasons . I love racing here and will never forget my debut F1 race here four years ago when I passed Michael Schumacher on the first lap . He might have been on a different fuel load but that was a fantastic moment nonetheless . It 's incredibly moving to race in front of my home crowd , especially with the sea of Union Jacks down the start-finish straight ! Most importantly , this is a weekend when the whole team get to share in our achievements and I just hope that we have something special to celebrate with them on Sunday night . " Takuma Sato on the British Grand Prix " Obviously Suzuka is my own home race , but I now live in England and this is my second home . I want to do well in front of the team and its many British fans and I hope I have the car to deliver a good result next Sunday . The British Grand Prix is one of the most exciting in my opinion . I also have very fond memories of the circuit from my Junior and Formula 3 days , so I am always very excited to head back there . It 's a shame that we had a slightly disappointing result at the French Grand Prix , however I am still confident from our performance in Indy . Historically , Silverstone is always an exciting race , especially with the unpredictable weather , so it could be very exciting . " Anthony Davidson , B. A . R Honda 's British Third Driver " We have been very quick at Silverstone in general testing this year and both Jenson and Taku topped the timesheets on the days when they ran here . From a personal perspective , this will be the best Friday I 've ever had in terms of recognition and it will be great to get a share of the limelight with the British fans . I live just a few miles from Silverstone so I am very well acquainted with the changeable weather conditions we get here and which always make the British Grand Prix even more exciting ! As always , I 'll be doing my bit to get the team off to a good start on Friday . " David Richards , Team Principal " There is a great deal of expectation on our shoulders as we head into our home race this weekend . Silverstone is in our own backyard with Jenson currently the top British driver , I would anticipate that a large proportion of British F1 fans will be pinning their hopes on us this Sunday . Obviously it would be wonderful to achieve our maiden victory at our home track , but whatever the outcome , it will be a very special weekend . Very few of our staff ever get to go to a race and yet each and every one of them has been integral to the transformation in our performance this season . We have created plenty of opportunities for them to be part of the action this weekend and to see the benefits of their hard work at close quarters . The Regent Street event is a fantastic curtain-raiser for the Grand Prix and the opportunity to bring the fans even closer to the sport and their heroes . However , in the heat of the preparations , we cannot overlook the fact that the French Grand Prix was a disappointment for us and we will be doing everything possible in the days ahead to ensure we are fully on top of any factors which have compromised us . All in all , it will be a very exciting weekend ahead ! " Geoffrey Willis , Technical Director " In Magny-Cours we did not achieve either our full performance potential or reliability and both areas need addressing in the short run up to the British Grand Prix and beyond . The Silverstone circuit requires a harder tyre solution than normal to cope with the very high speed corners and loadings they induce . The harder compounds reduce degradation but this has to be balanced against losing too much grip for the slower speed areas at Club and in the complex . The nature of the corners also requires a car that can be stable under high speed changes of direction without generating lower speed understeer or poor traction . We were able to use the Silverstone test in early June to work on the tyre choices with Michelin and investigate set-up solutions suited to the track . So going into our home race we are confident of fighting for a good result . " Shuhei Nakamoto , Engineering Director , Honda Racing Development " We had a tough weekend in France and we will of course be working very hard to get back into our podium scoring form . The British Grand Prix is a very important race for us - we always enjoy competing on home ground and it 'll be great to race in front of the local fans and many of our staff . " The Circuit Race distance - 60 laps . 191.644 miles ( 308.355km ) Circuit length - 3.195 miles ( 5.141 km ) Race Start - 13.00 GMT This historic circuit , a former airfield , is one of the few remaining venues where Formula One cars can really be unleashed and as a result it is still one of the highlights of the calendar - amply demonstrated by last year 's incredible race . The circuit itself is a thrilling drive , although there is some criticism over a lack of passing places . However , overtaking moves are possible into Vale and Abbey , although cars tend to lose downforce following each other closely through the preceding fast corners . The entry to Becketts is now the quickest corner on the track , a 290 km/h bend , while the slowest section is the 80 km/h , Vale left-hander that leads directly into Club corner . Silverstone has been heavily censured in the past because of the traffic problems that have arisen on the small access roads around the circuit . However , the new road system introduced just in time for the 2002 race seems to have rectified most of these issues once and for all . Honda F1 Highlights - Honda-powered drivers enjoyed four consecutive triumphs at the British Grand Prix in the late 1980s - Nigel Mansell taking victory in 1986 and 1987 , Ayrton Senna in 1988 and Alain Prost in 1989 . - In 1987 Honda savoured its most successful ever Grand Prix at Silverstone when cars powered by its engines came home in first , second , third and fourth positions - Nigel Mansell and Nelson Piquet in Williams Hondas followed by Ayrton Senna and Satoru Nakajima in Lotus Hondas . </text>
<text id="dbbqw" url="http://www.bioinformatics.leeds.ac.uk/~david/docs/api/javax/swing/JSplitPane.html">
Creates a new JSplitPane configured to arrange the child components side-by-side horizontally with no continuous layout , using two buttons for the components . JSplitPane public JSplitPane ( int newOrientation ) Creates a new JSplitPane configured with the specified orientation and no continuous layout . Parameters : newOrientation - JSplitPane . H ORIZONTAL_SPLIT or JSplitPane . V ERTICAL_SPLIT Throws : IllegalArgumentException - if orientation is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT . JSplitPane public JSplitPane ( int newOrientation , boolean newContinuousLayout ) Creates a new JSplitPane with the specified orientation and redrawing style . Parameters : newOrientation - JSplitPane . H ORIZONTAL_SPLIT or JSplitPane . V ERTICAL_SPLIT newContinuousLayout - a boolean , true for the components to redraw continuously as the divider changes position , false to wait until the divider position stops changing to redraw Throws : IllegalArgumentException - if orientation is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT JSplitPane public JSplitPane ( int newOrientation , Component newLeftComponent , Component newRightComponent ) Creates a new JSplitPane with the specified orientation and with the specified components that do not do continuous redrawing . Parameters : newOrientation - JSplitPane . H ORIZONTAL_SPLIT or JSplitPane . V ERTICAL_SPLIT newLeftComponent - the Component that will appear on the left of a horizontally-split pane , or at the top of a vertically-split pane newRightComponent - the Component that will appear on the right of a horizontally-split pane , or at the bottom of a vertically-split pane Throws : IllegalArgumentException - if orientation is not one of : HORIZONTAL_SPLIT or VERTICAL_SPLIT JSplitPane public JSplitPane ( int newOrientation , boolean newContinuousLayout , Component newLeftComponent , Component newRightComponent ) Creates a new JSplitPane with the specified orientation and redrawing style , and with the specified components . Parameters : newOrientation - JSplitPane . H ORIZONTAL_SPLIT or JSplitPane . V ERTICAL_SPLIT newContinuousLayout - a boolean , true for the components to redraw continuously as the divider changes position , false to wait until the divider position stops changing to redraw newLeftComponent - the Component that will appear on the left of a horizontally-split pane , or at the top of a vertically-split pane newRightComponent - the Component that will appear on the right of a horizontally-split pane , or at the bottom of a vertically-split pane Throws : IllegalArgumentException - if orientation is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT Method Detail setUI public void setUI ( SplitPaneUI ui ) Sets the L&F object that renders this component . Parameters : ui - the SplitPaneUI L&F object See Also : UIDefaults . g etUI(javax . s wing . J Component ) getUI public SplitPaneUI getUI ( ) Returns the SplitPaneUI that is providing the current look and feel . Returns : the SplitPaneUI object that renders this component updateUI public void updateUI ( ) Notification from the UIManager that the L&F has changed . Replaces the current UI object with the latest version from the UIManager . Overrides : updateUI in class JComponent See Also : JComponent . u pdateUI( ) getUIClassID public String getUIClassID ( ) Returns the name of the L&F class that renders this component . Overrides : getUIClassID in class JComponent Returns : the string " SplitPaneUI " See Also : JComponent . g etUIClassID( ) , UIDefaults . g etUI(javax . s wing . J Component ) setDividerSize public void setDividerSize ( int newSize ) Sets the size of the divider . Parameters : newSize - an integer giving the size of the divider in pixels getDividerSize public int getDividerSize ( ) Returns the size of the divider . Returns : an integer giving the size of the divider in pixels setLeftComponent public void setLeftComponent ( Component comp ) Sets the component to the left ( or above ) the divider . Parameters : comp - the Component to display in that position getLeftComponent public Component getLeftComponent ( ) Returns the component to the left ( or above ) the divider . Returns : the Component displayed in that position setTopComponent public void setTopComponent ( Component comp ) Sets the component above , or to the left of the divider . Parameters : comp - the Component to display in that position getTopComponent public Component getTopComponent ( ) Returns the component above , or to the left of the divider . Returns : the Component displayed in that position setRightComponent public void setRightComponent ( Component comp ) Sets the component to the right ( or below ) the divider . Parameters : comp - the Component to display in that position getRightComponent public Component getRightComponent ( ) Returns the component to the right ( or below ) the divider . Returns : the Component displayed in that position setBottomComponent public void setBottomComponent ( Component comp ) Sets the component below , or to the right of the divider . Parameters : comp - the Component to display in that position getBottomComponent public Component getBottomComponent ( ) Returns the component below , or to the right of the divider . Returns : the Component displayed in that position setOneTouchExpandable public void setOneTouchExpandable ( boolean newValue ) Sets the value of the oneTouchExpandable property , which must be true for the JSplitPane to provide a UI widget on the divider to quickly expand/collapse the divider . The default value of this property is false . Some look and feels might not support one-touch expanding ; they will ignore this property . Parameters : newValue - true to specify that the split pane should provide a collapse/expand widget See Also : isOneTouchExpandable( ) isOneTouchExpandable public boolean isOneTouchExpandable ( ) Gets the oneTouchExpandable property . Returns : the value of the oneTouchExpandable property See Also : setOneTouchExpandable(boolean ) setLastDividerLocation public void setLastDividerLocation ( int newLastLocation ) Sets the last location the divider was at to newLastLocation . Parameters : newLastLocation - an integer specifying the last divider location in pixels , from the left ( or upper ) edge of the pane to the left ( or upper ) edge of the divider getLastDividerLocation public int getLastDividerLocation ( ) Returns the last location the divider was at . Returns : an integer specifying the last divider location as a count of pixels from the left ( or upper ) edge of the pane to the left ( or upper ) edge of the divider setOrientation public void setOrientation ( int orientation ) Sets the orientation , or how the splitter is divided . The options are : JSplitPane . V ERTICAL_SPLIT ( above/below orientation of components ) JSplitPane . H ORIZONTAL_SPLIT ( left/right orientation of components ) Parameters : orientation - an integer specifying the orientation Throws : IllegalArgumentException - if orientation is not one of : HORIZONTAL_SPLIT or VERTICAL_SPLIT . getOrientation public int getOrientation ( ) Returns the orientation . Returns : an integer giving the orientation See Also : setOrientation(int ) setContinuousLayout public void setContinuousLayout ( boolean newContinuousLayout ) Sets the value of the continuousLayout property , which must be true for the child components to be continuously redisplayed and laid out during user intervention . The default value of this property is false . Some look and feels might not support continuous layout ; they will ignore this property . Parameters : newContinuousLayout - true if the components should continuously be redrawn as the divider changes position See Also : isContinuousLayout( ) isContinuousLayout public boolean isContinuousLayout ( ) Gets the continuousLayout property . Returns : the value of the continuousLayout property See Also : setContinuousLayout(boolean ) setResizeWeight public void setResizeWeight ( double value ) Specifies how to distribute extra space when the size of the split pane changes . A value of 0 , the default , indicates the right/bottom component gets all the extra space ( the left/top component acts fixed ) , where as a value of 1 specifies the left/top component gets all the extra space ( the right/bottom component acts fixed ) . Specifically , the left/top component gets ( weight * diff ) extra space and the right/bottom component gets ( 1 - weight ) * diff extra space . Parameters : value - as described above Throws : IllegalArgumentException - if value is 1 Since : 1.3 getResizeWeight public double getResizeWeight ( ) Returns the number that determines how extra space is distributed . Returns : how extra space is to be distributed on a resize of the split pane Since : 1.3 resetToPreferredSizes public void resetToPreferredSizes ( ) Lays out the JSplitPane layout based on the preferred size of the children components . This will likely result in changing the divider location . setDividerLocation public void setDividerLocation ( double proportionalLocation ) Sets the divider location as a percentage of the JSplitPane ' s size . This method is implemented in terms of setDividerLocation(int ) . This method immediately changes the size of the split pane based on its current size . If the split pane is not correctly realized and on screen , this method will have no effect ( new divider location will become ( current size * proportionalLocation ) which is 0 ) . Parameters : proportionalLocation - a double-precision floating point value that specifies a percentage , from zero ( top/left ) to 1.0 ( bottom/right ) Throws : IllegalArgumentException - if the specified location is 1.0 setDividerLocation public void setDividerLocation ( int location ) Sets the location of the divider . This is passed off to the look and feel implementation , and then listeners are notified . A value less than 0 implies the divider should be reset to a value that attempts to honor the preferred size of the left/top component . After notifying the listeners , the last divider location is updated , via setLastDividerLocation . Parameters : location - an int specifying a UI-specific value ( typically a pixel count ) getDividerLocation public int getDividerLocation ( ) Returns the last value passed to setDividerLocation . The value returned from this method may differ from the actual divider location ( if setDividerLocation was passed a value bigger than the curent size ) . Returns : an integer specifying the location of the divider getMinimumDividerLocation public int getMinimumDividerLocation ( ) Returns the minimum location of the divider from the look and feel implementation . Returns : an integer specifying a UI-specific value for the minimum location ( typically a pixel count ) ; or -1 if the UI is null getMaximumDividerLocation public int getMaximumDividerLocation ( ) Returns the maximum location of the divider from the look and feel implementation . Returns : an integer specifying a UI-specific value for the maximum location ( typically a pixel count ) ; or -1 if the UI is null remove public void remove ( Component component ) Removes the child component , component from the pane . Resets the leftComponent or rightComponent instance variable , as necessary . Overrides : remove in class Container Parameters : component - the Component to remove See Also : Container . a dd(java . a wt . C omponent ) remove public void remove ( int index ) Removes the Component at the specified index . Updates the leftComponent and rightComponent instance variables as necessary , and then messages super . Overrides : remove in class Container Parameters : index - an integer specifying the component to remove , where 1 specifies the left/top component and 2 specifies the bottom/right component See Also : Container . a dd(java . a wt . C omponent ) removeAll public void removeAll ( ) Removes all the child components from the split pane . Resets the leftComonent and rightComponent instance variables . Overrides : removeAll in class Container See Also : Container . a dd(java . a wt . C omponent ) , Container . r emove(int ) isValidateRoot public boolean isValidateRoot ( ) Returns true , so that calls to revalidate on any descendant of this JSplitPane will cause a request to be queued that will validate the JSplitPane and all its descendants . Overrides : isValidateRoot in class JComponent Returns : true See Also : JComponent . r evalidate( ) addImpl protected void addImpl ( Component comp , Object constraints , int index ) Adds the specified component to this split pane . If constraints identifies the left/top or right/bottom child component , and a component with that identifier was previously added , it will be removed and then comp will be added in its place . If constraints is not one of the known identifiers the layout manager may throw an IllegalArgumentException . The possible constraints objects ( Strings ) are : JSplitPane . T OP JSplitPane . L EFT JSplitPane . B OTTOM JSplitPane . R IGHT If the constraints object is null , the component is added in the first available position ( left/top if open , else right/bottom ) . Overrides : addImpl in class Container Parameters : comp - the component to add constraints - an Object specifying the layout constraints ( position ) for this component index - an integer specifying the index in the container 's list . Throws : IllegalArgumentException - if the constraints object does not match an existing component See Also : Container . a ddImpl(Component , Object , int ) paintChildren protected void paintChildren ( Graphics g ) Subclassed to message the UI with finishedPaintingChildren after super has been messaged , as well as painting the border . Overrides : paintChildren in class JComponent Parameters : g - the Graphics context within which to paint See Also : JComponent . p aint(java . a wt . G raphics ) , Container . p aint(java . a wt . G raphics ) paramString protected String paramString ( ) Returns a string representation of this JSplitPane . This method is intended to be used only for debugging purposes , and the content and format of the returned string may vary between implementations . The returned string may be empty but may not be null . Overrides : paramString in class JComponent Returns : a string representation of this JSplitPane . getAccessibleContext public AccessibleContext getAccessibleContext ( ) Gets the AccessibleContext associated with this JSplitPane . For split panes , the AccessibleContext takes the form of an AccessibleJSplitPane . A new AccessibleJSplitPane instance is created if necessary . </text>
<text id="dbhia" url="http://www.ateonline.co.uk/60/66/67/articles/7335.php">
Macclesfield businesses object to third arcade - 15/06/06 Log in to remember this page . Email this Ten businesses in the town of Macclesfield have submitted letters of objection to plans for a new amusement arcade in the city 's town centre , arguing that a third venue could lead to increased anti-social behaviour and that there is no demand for more fruit machines . The licensing committee is currently debating a proposal by Red Rose Leisure for the third amusement arcade in a 900ft pedestrianised stretch of Macclesfield 's town centre , and a Gaming Machine Permit will go before the borough council on Monday . Shipley 's Amusement , one of the already established arcades in the stretch , said : " Looking at the usage of our premises you can safely say there is no demand for further premises offering similar machines . The public interested in this activity in Macclesfield town centre lack for nothing . " A spokesperson for the other arcade , Silver Coin , commented " I do n't think there 's anything more another arcade can offer . I do n't think it 's necessary at all . " It 's just such a small area and there 's only going to be five minutes walking distance between the arcades themselves . " Phil Butterworth , co-owner of Red Rose Leisure , defended the application , saying : " We are not looking to make it an amusement arcade for kids , it 's going to be for 18 or 21-year-olds . " We have two in Kendal within a couple of hundred yards of each other and there 's no problems at all . We can offer something different because we have a unique way in which we run our arcades . " We 're not new to this game , we 're an established business . " </text>
<text id="dbjza" url="http://www.iae.co.uk/news/designedforthejob.htm">
Due to expansive growth over the past few years , IAE has invested significantly in new technologies to improve manufacturing processes and decrease lead times to our customers . A large part of this investment has been within our Planning and Design department , who have been traditionally designing using standard 2D CAD technology . We have recently implemented a 3D CAD product called SolidWorks . IAE selected SolidWorks mechanical design software because of its ease of use , large assembly performance , design tables , configurations , powerful modelling tools and automated BOM generation capabilities . By deploying SolidWorks , IAE Limited has reduced its design cycles , streamlined development , and improved product visualization and communication to our customers . Using SolidWorks has allowed us to meet our customers ' demands quickly and easily . </text>
<text id="dbzic" url="http://www.oaa.org.uk/Case_Studies/studies/Ford3/Ford3.asp">
" We were very pleased with the impact and awareness generated by the Transit Connect launch poster site campaign . There is no doubt that when used in conjunction with TV , specialist press and online activity , outdoor provides a measurable lift to your activities . " John Knight , Communications Co-ordinator , Commercial Vehicle Brand Team , Ford of Britain The Ford Transit has an automatic place on the consideration list for medium commercial vehicles . The aim for the launch of the Ford Transit Connect was to do the same for its little brother in the light and sub one tonne markets . Outdoor worked alongside TV , specialist press and online activity to promote a message that focused on the new van¹s strength and design . Using 96-sheet , 48-sheet and 6-sheet formats the campaign used the tagline " toughness now comes in a brand new shape " to promote the all-new Transit Connect . The slogan " Job Done " and the trademark tick used on Transit campaigns also tied the launch into the parent brand and emphasised the " can-do " functionality of the two models . The research looked to test the impact of the campaign and discover whether the Transit Connect had been recognised as part of the Transit brand and the overall Ford family . Campaign results The campaign reinforced Ford¹s position as a major van manufacturer . It dominated responses to the question " have you seen any advertising for van manufacturers ? " , scoring 36.7 % well ahead of its rivals . Total spontaneous awareness of Ford van advertising hit 83.7 % after the campaign while the Ford Transit Connect activity scored 79.7 % . Outdoor played a key role in building this awareness with 44 % of consumers having seen the posters . Among the key audience of van drivers , owners and operators the figure was even higher at 52 % , all other media showed a decline against this demographic . Brand scores against attributes such as " tough new light van " and having " rugged durability " improved , demonstrating that the new toughness message had been effectively communicated . Outdoor contributed to a highly effective launch campaign , playing a key role in hitting the target audience of van drivers , owners and operators . The creative message was successfully transmitted and awareness was high . </text>
<text id="dccpz" url="http://www.jamesgourmetcoffee.co.uk/product.php?xProd=21&xSec=22">
Brazilian Daterrra Special Reserve Ultimate Single Origin Espresso . This coffee is so limited ... when it 's gone , we have to wait till next season . V acuum of supply since it was the winning coffee at the World Barista Championships . The espresso is grassy , fresh and chocolaty smooth . To my suprise , it even works well with milk , which is really unexpected ... Louis Norbeeto Pascoal , the director of Daterra . He has an infectious passion , which is backed by an incredible knowledge and understanding of chemistry and coffee farming . </text>
<text id="dcont" url="http://www.uservision.co.uk/usability_aboutus/usability_aboutus.asp">
About us User Vision provides services throughout the UK and Europe and was established in 2000 . We are a consultancy dedicated to improving the user experience of your website , software or product . We offer a wide range of services including consulting , testing , reviewing , evaluation and training to help clients produce better products that customers find easier to use . We take a straightforward , practical approach to user needs analysis , problem solving and usability testing , leading to effective design solutions . Whether we become involved at the design stage , or after a system has been in use for some time , we never lose sight of the user 's needs . We can help you : reduce development and support costs reduce the need for expensive redevelopment increase sales Our usability consulting and services are the ideal way to enhance your brand , improve your company 's competitive position , and increase revenues and loyalty . As a reflection of all our excellent service , User Vision was crowned Scotland 's Small Business ofthe Year in November 2004 . The award , sponsored by Parcelforce Worldwide , recognises excellence in UK small businesses and their contribution to the UK economy . User Vision 's consultants are all members of the Usability Professionals Association ( UPA ) . User Vision is also a featured supplier within the e-consultancy 2006 Buyer 's Guide for Usability and Accessibility . </text>
<text id="dcqen" url="http://www.learnenglish.org.uk/crazyworld/series2/crazyworld_story.asp?latestchapter=12&subarea=11">
I have always been fascinated by the 21st century . I wish I had lived then - in the Golden Age , before London drowned . Before robots thought they could think . I have an old map of the London Tube from that distant past . Those words of Dr Webber - ' Jubilee , Bakerloo and Circle ' . They are old Tube lines . They all go through Baker Street . That tunnel where Webber 's prisoners were trapped had pictures of Sherlock Holmes on the tiles . Holmes lived in Baker Street . Also , when we tried to swim into Baker Street station , the platforms had been blocked by strange metal walls . We searched the area until we found a tiny , hidden tunnel in the basement of the Planetarium . We climbed into it . It led us deep underground , until we came , at last , to Baker Street Station . I saw the ancient tiles with their pictures of Sherlock Holmes . And I saw forty or fifty people sat still and lifeless , wearing magnet-hats . Three robot guards appeared . Using robot picture language , I asked them how to put the personalities back into the victims ' brains . They showed me . There was a slot inside each magnet-hat where the crystal fitted . I did n't know which crystal came from which person . We had no time to find out . Dr Webber would be here soon . We quickly placed all the crystals into the magnet-hats and turned the power on . Seconds later , the lifeless people began to move . </text>
<text id="dcspt" url="http://www.guysherratt.co.uk/pages/searchdetails.asp?ID=776">
DORDOGNE . Architect designed barn conversion extremely well done using all the character of the property . Set in small hamlet about 3km from the pretty village of Sorges & 15mins from Perigueux . Spacious house with 4 bedrooms , parking in front , lovely views , enclosed terrace with pool to the rear and barn for storage . No . of Bedrooms : 4 No . of Reception Rooms : 2 No . of Acres : 0 Additional Photos front facade kitchen dining area sitting room mezzanine stairs to mezzanine bedroom bathroom add to folio contact agent arrange viewing request full details view location Superb barn conversion in a lovely position with views to the open countryside and in a small hamlet about 3km from the pretty village of Sorges with some shops , bars & restaurant/hotel . 15mins drive from Perigueux , Bergerac is about 1hr and Limoges is just over an hour , both have airports with flights to all over the UK . It is a very spacious house with lots of light , all in excellent condition with oil fired central heating and double glazing throughout . Lots of exposed beams and stonework , tiled floor throughout the whole of the ground floor . There is a gravelled area in the front of the house with room to park and bread oven attached . The terrace is at the back of the house and gets the sun most of the day , the pool is set in the terrace and it all provides a super area for pleasure and relaxation with french windows accessing most of the rooms on the ground floor . The layout is as follows ( all measurements are as follows ) : GROUND FLOOR : Glazed door into : KITCHEN 48m2 4 french windows - some opening onto terrace , fitted kitchen units , exposed stone wall , 3 fitted cupboards . LARGE OPEN PLANNED SITTING ROOM 36m2 3 french windows , stairs up to huge mezzanine . BEDROOM 1 20m2 1 window , door to small hall , WALK-IN SHOWER all tiled , ideal for handicapped , wash-hand basin , toilet . UTILITY ROOM housing boiler , plumbing for washing machine , cupboard . BEDROOM 2 24m2 1 french window , fitted wardrobes , EN-SUITE BATHROOM 8m2 with bath , wash-hand basin , toilet , all tiled . FIRST FLOOR tiled floor throughout - MEZZANINE with hall 68m2 huge window with superb views , exposed roof timbers , door off hall to : BEDROOM 3 17.5m2 1 window , fitted wardrobe . BEDROOM 4 13.5m2 1 window , exposed beams , fitted wardrobe . BATHROOM 15m2 large velux window , bath , wash-hand basin , fitted cupboards . TERRACE at the rear with steps up to the pool and side terrace . SEPARATE BARN 24m2 which is semi-detached and houses the oil tank . To view the full particulars please </text>
<text id="dddxm" url="http://www.menshealthforum.org.uk/userpage1.cfm?item_id=1913">
Monday , 08 May 2006 Good Lord , it 's MHF patron Kamlesh Congratulations to MHF patron Professor Kamlesh Patel who has , in the parlance , been elevated to the peerage . He was one of the seven new non-party-political peers recommended by the House of Lords Appointments Commission this week . Whatever one 's views on a non-elected second chamber built on patronage and inheritance in a modern democracy , the Commission could not have chosen a better man . The Forum wishes him every success in his new role . Kanmlesh who is Head of the Centre for Ethnicity and Health at the University of Central Lancashire is also Chairman of the Mental Health Act Commission and National Director and Chairman of the Government 's Black and Minority Ethnic Mental Health Programme Board . More on the MHF 's patrons </text>
<text id="ddquk" url="http://www.schoolhouse.org.uk/law/not_enrolled.html">
Child not enrolled at a state school If you decide to home educate in Scotland and your child is not enrolled as a pupil at a ' public ' ( i. e . state ) school , there is no legal obligation to register with , or otherwise inform , your local authority , although you might reasonably expect its officers to request information about your arrangements if you come to their attention . </text>
<text id="decku" url="http://www.womenintothenetwork.co.uk/page/calendar/archive/article.cfm?articleId=52">
Paul Walker CEO of Sage plc The Conference will provide an opportunity for delegates from high growth businesses to receive the help they need in sales , marketing and finance , customer relations and human resources . Complementary to the annual May conference , the new event for SMEs is part of the Forum 's programme aimed at supporting the entrepreneurs behind the region 's growing businesses and to retain wealth and jobs in the North East . The conference will be opened by Paul Walker , CEO of Sage plc . He will be followed by Kwik-Fit founder Sir Tom Farmer , whose passion for emerging business talent is well documented , and others key speakers . Five practical workshops after lunch will be led by : Mike Southon , author of Sales on a Beermat , who will provide advice on sales ; Rod Connors , formerly of Nike and now of The Branded Sports Group , on marketing ; Jeff Macklin of FDUK Ltd , which provides part-time finance directors to businesses , on finance ; Nigel Risner , whose workshop will be on customer relationship management ; and Lorna Moran of NRG plc in association with Jeff Grout of JG Consulting on people . Delegates can choose to attend any two of the 90-minute workshops . The conference is being sponsored by Tyne & Wear Business Link , Tyne & Wear Development Company and TSG . Spaces are limited to 125 and pre-registrations are being taken now on 0870 850 2233 or by emailing </text>
<text id="decpr" url="http://www.lathes.co.uk/beaver/page5.html">
Beaver Miller - Original Model A also badged as " Grimston " Manuals & Parts Lists for most models of Beaver Miller are available Beaver Model A - Click HERE for Detailed Photographs Mk . 1 & Mk . 2 VBRP If any reader has early Beaver Advertising or Maintenance Literature , I would be pleased to hear from them A Beaver Model A owner would like to have contact with fellow owners to discuss head details The Beaver Turret-head vertical miller Model " A " was manufactured by Balding Engineering ( originally jobbing engineers ) of the Old Tramways Power Station , Duke Street , Norwich and then Sweet Briar Road in the same city . A number of this model were also badged as " Grimston " ( a London machine-tool manufacturer and merchant ) and sometimes lacked the cast Beaver badge on the right-hand side of the main column ; the paint finish was also unusual on the Grimston version , a " splatter " mix of dark grey , green and red not dissimilar to that also used on some American ROTEX millers of the same era . In its original form , as introduced during the early 1950s , this little miller proved to be a compact , versatile machine equally at home in the toolroom or on the shop floor - and absolutely ideal when its industrial life was over , for the workshop of the enthusiastic amateur . In 1957 it was succeeded by the very much larger and heavier MK . 1 and Mk 2 and " VBRP " models , details of which ( today the most common " Beaver " on the used market ) can be seen here . In the 1980s , on the back of considerable success in exporting the VBRP range , the company opened a new factory in Peterborough to manufacture a range of CNC lathes to compliment the CNC millers and CNC machining centres already in production ; unfortunately the severe recession in manufacturing industry of 1992 ( when demand for machine tools fell by 50 % in 3 months ) caused the company to close . . The original 1950s miller had a 28 " x 6 " table ( with three 9/16 " T slots ) a longitudinal travel of 15 " , a cross feed of 7.5 " and a vertical movement of 13.75 " . A table power-feed motor was fitted as standard and drove a 4-speed gear box ; to change the rate of table feed " pick-off " gears were used where operator removed a side panel , pulled off the gears on two studs ( they were retained by snap-on wire springs ) and changed them for another pair from the four supplied . The head was driven by a simple and reliable two-stage V-belt arrangement with an adjustable intermediate pulley carried in a T slot ; an over-centre toggle lever released the belt tension to change speeds and the whole of the belt run was guarded by a rather fragile hinged , cast-aluminium cover . The head swung on top of the column , slid in and out of its housing and swivelled through 90 degrees each way - allowing the spindle nose to be brought to within 3.5 " of the column face or moved away to give a maximum clearance of 9.75 " . The quill , with 3 " of travel and a No . 30 International fitting , was fitted with both fine and quick-action feeds and driven by a 0.75 hp 3-phase motor through 7 speeds in two ranges arranged ( through the intermediate pulley ) of 200 , 330 , and 500 on Low-Range and 350 , 1420 , 2200 , 3600 rpm on High . The quill movement was measured by a vertical ruler and adjustable micrometer dial - and fitted with a very useful screw-adjusted ' pre-set ' depth stop . Because the electric motor mounts directly onto the back of a Beaver " headbar " , changing it is a very simple operation . The table power-feed motor , however , is flange-mounted to the back of the knee - and is not such an easy prospect for modification ; however , this type of small 3-phase motor is usually amenable to being run on a single-phase supply by using the old trick of linking two of the three-phase terminals with a suitable capacitor . For the home or smaller professional workshop the Beaver Mill " A " is one of the few machines that combines quality , size and functionality in just the right proportions . A Universal version , the " AH " , was also manufactured - but this is a comparatively rare machine and , unaccountably , used a completely different type of vertical head . Balding also built a 4.5 " x 20 " backgeared , screwcutting lathe of conventional design but robust construction . of which details can be found </text>
<text id="dehfj" url="http://www.hasslefreeminiatures.co.uk/rules.php">
Every competition obviously needs some sets of rules . These rules are n't meant to give some personal advantage to me or my company but some things must be clear beforehand . 1. Entrants can make any race they choose ( not neccessarily a current Hasslefree race , be creative ) , giving it any equipment they like in any pose they desire ... . . so long as it 's 28mm scale ( not neccessarily 28mm tall ) castable and has a basing tag that fits in to a 30mm or 40mm round edged base ( as used by Warmachine and Dark Age ) . The sculpt should ideally be made of an epoxy suitable for vulcanising like green stuff . 2. Using pieces of existing Hasslefree Miniatures is not allowed , other than those from heads and weapon sprues ( head sprues will be available in September ) . 3. Secrecy is not an issue . You can put your WIPs all over the net if you like , so long as you do n't mind people nicking your ideas . 4. We will create categories depending on the entries we receive . Initial judging will be by public vote to determine the top entries . Sally and I and a panel of judges ( who will not be allowed to vote for any entries they make ) will then choose the over all winner . 5. The start date is today , Monday the 15th of August . Since we do n't want to panic anybody there 's no real rush to get your entries completed , the date for all entries to be with me is Jen 's Birthday , December 18th . If it 's still the 18th of December anywhere in the world you can email me your entry . Your pictures need to be sent to kevinjameswhite@totalise . c o. u k . Please send JPEG files compressed to ' best ' quality ( 80-90 % ) and try to make sure your pics are no larger than 150Kb each . 6. The practicality of making the miniature will be judged alongside its degree of craftsmanship . If it 's a bugger to cast or if I 'm going to have to chop it up and put bits on sprues it might lose a few points . 7. Results will be posted on our 2nd anniversary , 7th of January 2006 . 8. The winner will receive a prize and a small amount of fame/notoriety . There is a prize of £ 175 in cold hard cash . I will also make sure that the winner is recognised as the sculptor of the piece where at all possible and also sculpt their name on the back of the basing tag . 9. Entries will need to be original works of art - no copyrighted ideas please , other than recognised Hasslefree IP . Remember a 3D copy of a 2D original is still a violation of copyright , unless the original art is in the public domain or you have received ( written ) permission from the artist . 10 . Age Limit . Since the aim is to cast and sell these figures , contestants must be 18 years or older . If the contestant is under 18 , he or she must be able to produce written parental consent upon demand . 11 . Rule Amendments . Rules are subject to change and/or clarifications without notice , as per the decision of Kev and Sally . Entry categories may be subject to alteration depending on the level of response for each and existing categories may be split or combined . Final category placement of all entries shall be determined by the judges . 12 . Should the number and quality of submissions exceed expectations , we reserve the right to choose exclusively to purchase entries that do n't receive first place for a fee to be agreed upon between us and the Sculptor on an individual basis . No runners up prize offer will be greater than £ 175 and will depend entirely on our finances at the time . In this event all submissions so recognized will be subject to the same conditions as the over all winner . 13 . Should we not be able to agree on a price , the sculptor is free to dispose of the miniature at their discretion unless it contains recognisable components of existing Hasslefree Miniatures or Intellectual Property . Should this be the case , the miniature may not be sold to a party other than Hasslefree Miniatures . 14 . Fair Play . Only original sculpts will be accepted . By entering a figure in this contest you attest on your honour to be it 's creator and holder of all rights to this figure . By doing so you accept all legal consequences that could arise should the figure or the rights to it be part of someone else 's Intellectual Property . Also you will exonerate Hasslefree Miniatures for any legal claims that could result from entering the competition . 15 . Risk Attribution . Hasslefree Miniatures can not take responsibility for winning submissions lost in the mail , the risk lies with the sculptor . The sculptor must be willing to submit his/her sculpt to the mouldmaker 's ministrations . As such , he or she should be aware that a lot of pressure will be exerted on the green during the mouldmaking process . A piece of putty will survive this moulding process in direct relationship to the amount of care and skill used to make the original . 16 . Figure Reproduction . As described in the introduction , castings of the winning entries will be sold by Hasslefree Miniatures as part of our HFP range . To this intent , the sculptor agrees to turn over the rights to reproduce , distribute and display the figure exclusively to Hasslefree under the terms and conditions as specified above . The sculptor will receive 10 copies of the mini and he or she may of course use the IP rights of the green and the mini for personal use . </text>
<text id="deqgv" url="http://www.newworknetwork.org.uk/modules/event/viewevent.php?eveid=109">
Improbable 's Open Space Event DEVOTED AND DISGRUNTLED What are we going to do about theatre ? Facilitated by Phelim McDermott 7th and 8th January 2006 , 10am - 7pm At National Youth Theatre , 443-445 Holloway Road , London , N7 6LW I have been involved with professional theatre and performance since I left college in 1985 . Since that time I have created and co created shows which have ranged from totally improvised and devised work to classical texts for repertory theatres , from puppetry to site specific work and from dance theatre to comedy . I have performed , designed , written , devised , taught , improvised and served on the Board of the Actor 's centre . Yet in all this time I have often felt an outsider in my own profession . There are things I love about theatre and things I find very difficult . . t hings which I wish were different . I find myself both devoted and disgruntled . Over the years I have often found myself gossiping and moaning about how the world I work in could be better . Not just about what we put on the stage but how we produce , manage and administrate our work . How we create it in all aspects and how we treat each other as a creative community . As a result of a NESTA fellowship I have been able to train in and research some new ways of working with groups , learning from other creative and developmental fields . On 7th and 8th of January Improbable will be hosting an Open Space Event , which I will facilitate . It hopes to support some creative ideas and actions around the issues you might feel devoted and disgruntled about . It will address the things you care about and maybe wish could be different in any aspect of our profession . The things , which you feel are important or unaddressed in our community . It will be the first time Improbable has hosted an event like this and I invite you to join us in this new adventure of trying to make change happen , or even if you are just curious about a new way of working with groups in a self organising way . I would like to stress that this event will not just be a discussion or a talking shop . We are aiming to take action and to make a difference . If you care see you there . Phelim Phelim McDermott , Co-Artistic Director , Improbable Although Open Space may be new to you it has been used all over the world with predictable results . It will be an exciting open-ended event that enables a self-organising group to use its collective imagination to deal with complex issues and it will achieve this in an incredibly short space of time . By the end of the event the following will have occurred : - Every issue of concern to anybody will have been raised , if they took responsibility for doing that . - All issues will have received full discussion , to the extent desired . - A full report of issues and discussions will be in the hands of all participants . - And YOU will have taken part in making it happen . A strong point of Open Space is it 's ability to unite groups of enormous diversity , to that end we are encouraging all participants . HOW TO REGISTER : TICKETS : £ 15/person . All proceeds are to cover direct costs of this event including the hire of the space , refreshments and equipment hires . SUBSIDISED TICKETS : We have a number subsidised places available , at a reduced rate of £ 5. If you feel that your circumstances mean that you might qualify for one of these please drop an e-mail to : whatarewegoingtodoabouttheatre@improbable . c o. u k . They will be offered on a first come first served basis . FIVE FOR THE PRICE OF FOUR GROUP DISCOUNT : Apply as a group of five and you can have five tickets for £ 60 . THE DEADLINE FOR REGISTRATION IS THE 9TH DECEMBER . PLEASE SEND THE FOLLOWING INFORMATION TO : Improbable 4th Floor 43 The Aldwych London WC2B 0QY I am writing to reserve ( PLEASE FILL IN AMOUNT OF PLACES ) place/s for the Open Space Event on the 7th and 8th January 2006 . I enclose a cheque for £ ( PLEASE FILL IN AMOUNT ) made payable to Improbable . Please write a sentence or two describing what you do in order to help us get a sense of who is coming . E. g . I am a performer , who makes my own work , and works with different companies . If you are applying as a group to get the group discount please write a sentence on each of you . I am a. ... ... ... ... ... ... . . NAME : E-MAIL ADDRESS : TELEPHONE NUMBER : ADDRESS : National Youth Theatre is an accessible building . Please let us know on application if you have any needs we should be aware of to enable you to attend . -------------------------------------------------------------------------- Tickets will be offered on a first come first served basis so please book early to ensure your place . We regret that we will be unable to offer a refund if you are unable to attend . If the event becomes fully booked we will inform you as soon as possible and return your cheque to you . Need any more info ? Contact Improbable , 020 7240 4556 whatarewegoingtodoabouttheatre@improbable . c o. u k , www . i mprobable . c o. u k or www . c lusterform . c om , launched on 21.11.05 The event is supported by National Youth Theatre and will be facilitated by Phelim McDermott who is a NESTA fellow . </text>
<text id="derjo" url="http://www.cheatgenius.co.uk/cheats/641/Gamecube-cheats/Gamecube-(hardware)-Cheats.html">
Welcome to the Gamecube ( hardware ) Cheat page on Cheat Genius . We strive to get as many Gamecube ( hardware ) Cheats , Cheat Codes , Hints and Tips for the Gamecube as possible ! ! ! If you do not see any cheats below , than we must not be able to find any cheats for this game and we should have some asap ! ! We last found cheats for Gamecube ( hardware ) on 10/02/05 . Ads ( Cheats Below ) Click Here for more Gamecube ( hardware ) Cheats Click Here for more Gamecube ( hardware ) Cheats Ads ( Cheats Below ) Alternate starting sounds : Cheats Hold Z while the Gamecube logo appears to hear new sounds . Hold Z then about one second later hold A to hear another sound . Insert four controllers then hold Z on each of them while the Gamecube logo appears to hear different sounds . Change screen refresh rate : Cheats Hold B while powering on the system until the message " Would you like to switch to 50hz mode ? " appears . This allows you to switch the screen refresh to match that of PAL games . If playing on a PAL system , the message will be " Would you like to switch to 60hz mode ? " , allowing the screen refresh to match that of NTSC games . Control starting logo : Cheats Hold A while the cube bounces down to form the " G " logo to spin it . Set system time and options : Cheats Hold A while powering on the system . Alternately , hold A while the cube rolls around the screen . Alternately , turn on the Gamecube without a disc . Wait until the opening sequence is over and you will be able to set the time and date on the system , delete memory files ( if there is a memory card inserted ) , and set the sound and screen position . </text>
<text id="dfnmt" url="http://www.omega.co.uk/ppt/pptsc.asp?ref=LE902">
OMEGA 's LE902 series linear encoders work on the principle of counting pulses as a series of graduations move past a detector . These graduations are deposited on a low-temperature- coefficient glass ( quartz glass ) and counted using photodetectors . Because the glass is exceptionally stable , the pitch of the graduations does not change , resulting in inherently good long term stability . Signal conditioning is performed in an in-line electronics assembly which converts signals from the probe head to a digital format which can be plugged directly into a digital readout , computer or PLC via an RS-232 adaptor or the LDN101 network card . SPECIFICATIONS Reading Rate/Sec : 1000 Accuracy : ±0.5 µm ( 20 µin ) Resolution : ±0.5 µm ( 2 µin ) Gauging Speed : 0.5 mm/sec ( 0.020 in/sec ) Operating Temp , Probe : 0 to 80°C ( 32 to 175°F ) Electronics Assembly : 0 to 60°C ( 32 to 140°F ) Storage Temp , Probe : -20 to 80°C ( -4 to 176°F ) Electronics Assembly : -20 to 60°C ( -4 to 140°F ) Calibration Temperature : 20°C ( 68°F ) Environmental Rating : IP65 For full product specifications view pdf file in " Related Links " below </text>
<text id="dfoor" url="http://www.fulcrum-anglican.org.uk/forum/poster.cfm?sort=creatasc&poster=101">
Can I just say , having been named by Timothy Sherratt , that I am not ' spinning ' the ' invitation to express regret ' into a much firmer command than it is . I would ask that he read Oliver O'Donovan 's very careful remarks on the subject in his posted piece . ECUSA leadership has been asked not to regret that some were hurt , but to regret that the bonds of affection were breached , in other words that they ought not to have done what they did . So far they have not done this and the Primates will not be fooled by some of the fudgy language they are coming up with . I am also very concerned that Timothy Sherratt uses the emotive and inaccurate language about ' shabby treatment of the orthodox ' and ' the Network has been hung out to dry by the Commission ' . I do n't think Drexel Gomes , Bernard Malango , Josiah Fearon and I -- to look no further -- would have signed a document that did that . Neither I nor my colleagues are labelling anyone as cartoon fundamentalists . Many of the USA orthodox are close friends of mine . It is precisely because of that that I am aware how much all kinds of issues get bundled up together in the USA ( as they do here , but the bundles are often different ) , and how that bundling affects all kinds of things in the debate . It was widely noted , for instance , that in the Presidential Election several states managed to get a question about gay marriages into the polling booths at the same time . I do wish the orthodox in the USA would realise that what the Commission was doing , which was all it could do granted the state of play ( would that we had had doctrinal discipline in the Anglican Communion these many decades , but we have to start where we are , not where we are n't ) , was to investigate the ways forward granted that ECUSA and Canada had ignored Lambeth , ACC , Primates and ABC . If that was what we had to investigate , we could not also ignore the fact that invasive episcopal actions are likewise , AT THAT LEVEL not at the level of moral culpability ! , infringements not only of repeated calls from Lambeth and the rest , but of the canons of all four of the great ecumenical councils ( Nicaea , Constantinople , Ephesus , Chalcedon ) . I am very grateful for Ephraim Radner 's comments which seem wise and well judged . And I do think that if the dissenting parishes are to have their voices heard , as they must do , they must present -- and I have asked for this information -- a detailed account of what exactly is happening . At the moment I hear a confused noise of people withholding funds , of invading bishops , of parishes and clergy threatened with suspension or deposition , of ECUSA bishops acting against parishes exactly as they do not wish the Anglican Communion to act against them , and so on . If the true picture is to emerge we need the details of who is doing what when and where . The question of how to live with bishops with whom you have major theological disagreements is not new . Anglican evangelicals , to look no further , have been doing it for generations . Only in the very recent past has there emerged this new mood of non-payment of parish contributions and the like . I am well aware of my call to ' hang on ' being open to the charge of unreality . My counter-charge is that I believe we are being called at the moment to a time of painful and patient prayer . The world will not fall in , the Kingdom will not disappear , if orthodox believers in ECUSA and elsewhere hold on to this pain in the presence of God and the power of the Spirit until at least the Primates have said whatever they are going to say in February . I would like this all over and done with too -- believe me , I would , I have other work to attend to ! -- but just because we live in a culture which can drop smart bombs on people at a moment 's notice that is no excuse to avoid the gospel call for patience . Meanwhile those of us in a position to do so are , believe me , working literally night and day to find the best way forward for the truth of the gospel and the call to that holiness and integrity of life and witness which alone will confront the principalities and powers with the news that Jesus is Lord . Tom Wright Homosexuality , Scripture and Church 2 [ 536 ] Posted by : Tom Wright Friday 10 February 2006 - 10:55pm A key to this is the mistaken belief that the only form of homosexual practice known in the C1 , and hence available for comment by Paul or other early Christians , was the debased relationships associated with paganism . That view , though widespread , needs more detailed refutation than I can provide here , but a quick read through one of the shortest and easiest of Plato s dialogues , The Symposium , indicates that there was just as full a range of homosexual practice available in the ancient world as in the modern , including one-to-one stable , loving partnerships . One might also consider the first-century evidence for homosexual weddings , for instance that of Nero himself . . . As for lesbians , one of the remarkable things about Romans 1 is precisely that lesbian behaviour is mentioned first . Like the question of why Elijah is mentioned before Moses in the Markan account of the transfiguration , this one admits of various interpretations , but it can hardly be said that lesbianism goes unmentioned . </text>
<text id="dfvlp" url="http://www.la-hq.org.uk/directory/prof_issues/blreview.html">
1.1 The Library Association is the professional body that represents some 25,000 librarians and information workers in the United Kingdom . Under the terms of its Royal Charter , The Association has a duty to promote high quality library and information services and to advise government , employers and others on all aspects of library and information provision . 1.2 Therefore we welcome the opportunity to comment on the Department for Culture , Media and Sport review of the British Library 1.3 The Library Association response is formed by expressions from our membership and is based on their views as both library and information professionals and users of British Library services . The overall impression of the membership is that they appreciate the services provided , they believe the services are of a reasonable standard and that the relationship between the British Library and the library and information profession is good . 1.4 Within that context we offer the following comments for your consideration . 2. Purpose , aims and objectives 2.1 The British Library meets the aims stated in the Department for Culture , Media and Sport background paper supplied with the review questionnaire . However , we are unable to comment fully on the purpose , aims and objectives of the British Library because we are insufficiently aware of them . We are surprised by this lack of awareness within the profession and we would suggest this carries an important message for the British Library . In order to address this apparent problem The Library Association would welcome working with the British Library on a strategy to improve communication throughout the profession . 2.2 The agenda of the British Library should be as broad as that of Government . Therefore the Library should focus on its contribution to lifelong learning , social inclusion , literacy , information skills and employability . Key areas are access , regionalism and partnership . This requires the British Library to work closely with Government departments that carry forward these agendas . 2.3 A further objective for the British Library should be developing formal professional collaboration and partnership . The Library has a role to play in ' joined-up ' library and information provision . By working with other libraries , professional library and information associations , key professional organisations and commercial partners the British Library can provide an important focus for the library and information profession in the UK . 3. Organisation , efficiency and effectiveness 3.1 Establishing and maintaining links with departments and personnel at the British Library is sometimes confusing and difficult . There are often apparent overlaps in the titles and responsibilities of different departments . Communication on a theme , topic or project will sometimes appear to stem from several departments , with no underlying staff responsibility clearly discernible . This can create an impression of bureaucracy : streamlining departmental responsibilities and clarifying job titles and contact routes would improve the effectiveness of the Library 's communications . 3.2 In general it is felt that the British Library 's services offer good value for money , although it must be reiterated that members often do not have an understanding of all of the products and services available . 3.3 The Co-operation and Partnership Programme is a welcome development particularly as it encourages innovation and cross-sectoral partnership . However , the themes for which bids are invited do not reflect the themes in Government policy . 3.4 We welcome the Library 's new premises in St Pancras . We also welcome an attitudinal change over the past year , with a move towards greater openness and willingness to " look beyond St Pancras " . Access to the building has become easier and the building itself has contributed to the regeneration of one of London 's most deprived areas . 3.5 However , there is a developing concern about space within the Euston Road building . One anxiety is the availability of reader seats , particularly in the Humanities Reading Room , as the number of members increase . Another concern is the way in which the role of the British Library as a comprehensive archive is slowly being eroded as a result of the lack of space . This highlights a dilemma for the British Library , that is , the tension between widening access to the collections and maintaining the role of preservation . 4. Customer relations and responsiveness 4.1 Most Library Association members have experience of BLDSC services and their overall impression of these services is favourable . The inter-library loan service is regarded as effective and efficient and , since going on-line , the speed of service has vastly improved . However , one drawback is cost , which many regard as too expensive . In fact it has been pointed out that the most effective communication from the British Library seem to relate to changes in pricing structures . 4.2 As far as customer relations and the quality framework is concerned there seems to be a lack of a coherent mechanism for taking the views of service users , and non-users , into account . Formal evaluation of the services provided should be transparent and the British Library should benchmark its activities against Charter Mark headings . 4.3 The main market for British Library services seems to be the post-18 education and research community . The Library should be looking for ways of engaging a much wider audience . Key areas for consideration are family learning , information skills training , literacy , IT literacy and adult basic skills . 4.4 The collection policy of the British library should also reflect the complex multicultural UK population . Many perceive the British Library as an institution of cultural and heritage significance . Providing access to materials in the mother tongue or concerning the mother country of many UK citizens may be regarded as important for the British Library in fulfilling its cultural role . 5. Links with other organisations 5.1 The directional role of the British Library within the UK library profession cannot be overemphasised . However , there is a need for the Library to redefine its image to a wider audience placing itself at the heart of a national library network , enhancing the image of libraries in general . 5.2 In order to fulfil its role within the context of Government policy the British Library must develop partnerships with a variety of organisations : libraries in all sectors ; museums and archives ; government departments and bodies ; professional associations , commercial companies and the voluntary sector . There is considerable scope for developing creative partnerships , for example , becoming involved with the Children 's Laureate initiative or World Book Day . 5.3 The withdrawal of the British Library cataloguing and conservation grants programme some years ago is still regretted , particularly as the BL Co-operation and Partnership Programme specifically excludes funding for retrospective conversion . It is hoped that the Full Disclosure initiative will address this omission , as the ability of UK libraries to share responsibility with the British Library for coverage of research material depends to a large extent on such material being catalogued . 6. New Technology 6.1 New technology has the potential to allow the British Library to offer services that contribute to , and underpin , lifelong learning . It will facilitate the distribution of services to the network of libraries in the UK ; to schools , colleges and universities ; to the workplace ; and to the home . The British Library can contribute to the national competitiveness and skills agenda by promoting literacy , numeracy and information skills . 6.2 Interoperability and bandwidth issues need careful consideration in the context of achieving inclusion . In view of the bandwidth and computers available to many users , the British Library should concentrate on delivering ' simple ' services as well as bandwidth-hungry digitisation projects . The services provided should be robust and reliable . 6.3 New technology will enhance the worldwide standing of the British Library . By studying best practice among the world 's national library providers and embedding their own technology-based services within an international framework the British Library could open a gateway that would allow global access to resources at a local level . 6.4 At present there seems to be inadequate provision for the preservation of non-book materials . As more materials are produced in non-print format the British Library , as the national library , should be given the resources to preserve the literary and information heritage of the non-print materials produced in the UK . 6.5 BLDSC should minimise the paper-based aspects of the request and supply process . ' Digital signatures ' will obviate the need for signed copyright declarations and will facilitate a seamless supply model of document delivery . 7. Other comments 7.1 The British Library must identify its contribution to an inclusive lifelong learning system by : enhancing access to learning ; enhancing the generation of content to learning networks ; enhancing networked access to resources . 8. Conclusion 8.1 The Library Association appreciates the opportunity to comment on the Department for Culture , Media and Sport review of the British Library . The suggestions we have made are in the spirit of support for the overall aims of the British Library . 8.2 We fully recognise that many of our suggestions have resource implications and we would stress the need for the British Library to be funded adequately to fulfil its important national role . Within that context the Library must reassess its priorities between its traditional roles and the broader challenges of current Government policy . 8.3 We hope that our comments prove useful and welcome the possibility of further engagement in this debate . The Library Association , December 2000 For further information please contact : Kathy Ennis Professional Adviser , Academic and Research Libraries </text>
<text id="dfzyc" url="http://www.billyarmstrong.co.uk/050613_public_urged_to_back_london's_olympic_2012_bid.htm">
Ulster Unionist Assembly Member for Mid-Ulster , Billy Armstrong MLA has pledged his full support for London 's bid to host the 2012 Olympic Games claiming that , ' all Regions of the United Kingdom would benefit economically and culturally were the bid to be successful . ' In a statement Billy said : ' On the 6 th July 2005 , the International Olympic Committee will name the City chosen to host the 2012 Olympics . It is being widely speculated that London and Paris will be in the final shake-up . ' I pledge my full support for London 's bid and I ask that the people of the United Kingdom do likewise . A dedicated website has been up and running for some time , www . l ondon2012 . o rg . The public can demonstrate their support for London 's staging of the games via logging onto the website and giving their details and messages of support . ' The Northern Ireland people have already demonstrated their enthusiasm for the bid when it was found in a recent poll that 87 % of those surveyed supported the London bid , the highest of all UK Regions . ' The United Kingdom Nation has the necessary infrastructure in place to host such a world spectacle . Throughout the UK Regions is located some of the most state of the art sports facilities to be found anywhere in the world . There can be no boubt that the United Kingdom would do the Olympic Games the justice they deserve . ' Our Nation 's people are passionate about sport . It is the medium which has fostered relationships within and between peoples . Our hosting of the Olympic Games would be a natural extension of the excellent work already completed . ' I urge you , the people of the United Kingdom to make your voices heard in the coming weeks , provide the added push London 's bid requires . The benefits for all citizens of the United Kingdom are substantial , we should not squander the chance of demonstrating to the world what we , as a Nation can provide . " </text>
<text id="dgmor" url="http://chat.dailymail.co.uk/dailymail/threadnonInd.jsp?forum=106&thread=9757638&message=11724737">
[ Café ] - Introduce yourself ! - The Café - Feedback - Community announcements - Jokes and trivia - Meets ! - International members - Language and linguistics - Philosophy [ The Daily Mail Book Club ] - The Daily Mail Book Club - General - book chat [ Current affairs ] - Please read [ Entertainment ] - Big Brother - Celebrity gossip - Movies and theatre - Reality television - Music - Soap addicts - Television - Where are they now ? [ femail ] - Beauty - Fashion - I 'm pregnant ! - Losing a loved one - Losing a baby - Menopause - Relationships - Splitting up - Surviving your partner 's affair - Trying for a baby [ You magazine ] - YOU forum [ Health ] - General health - Alternative remedies - Beating addiction - Cancer - Carers - Children 's health - Cosmetic surgery - Depression , stress and anxiety - Diabetes - Disabilities - Dieting - Eating disorders - Keeping fit - Women 's health [ Horoscopes and more ] - Ghosts and guides - Spirituality and healing - Your stars [ Lifestyle ] - Confessions - spilling the beans - Food and drink - Healthy eating - Planning a wedding - Home and garden - Jobs , careers and further education - Let off steam - Hobbies - Motoring - Pet talk - Shopping - Singles [ Parenting ] - Baby talk - Fostering and adoption - School days ( 4-12 years ) - Toddlers and pre-schoolers - Teens and beyond - Step families [ Computers and the Internet ] - Useful websites - You and your computer Your money Travel Click for advanced search The Café Important ! Our house rules « BACK 105 replies WORD ASSOCIATION 255 Posted by : christinewilma on 28/06/06 at 05:10 PM Dawn finished with Drunk I will start with BLIND Christine REPLY Report this post to a moderator 104 replies Re : WORD ASSOCIATION 255 Posted by : geminiglen on 28/06/06 at 05:21 PM MICE --۞-- Gem REPLY Report this post to a moderator 0 replies THREE Posted by : missy2904 on 28/06/06 at 07:12 PM Missy REPLY Report this post to a moderator 102 replies Re : WORD ASSOCIATION 255 Posted by : melinda55 on 28/06/06 at 07:12 PM CHURCH REPLY Report this post to a moderator 101 replies Re : WORD ASSOCIATION 255 Posted by : melinda55 on 28/06/06 at 07:13 PM Oops clashed THREE TRIPLE REPLY Report this post to a moderator 100 replies NUMBER Posted by : bolynne on 28/06/06 at 07:46 PM Sandy evening all REPLY Report this post to a moderator 99 replies PHONE Posted by : christinewilma on 28/06/06 at 08:00 PM Christine REPLY Report this post to a moderator 98 replies MOBILE Posted by : missy2904 on 28/06/06 at 08:04 PM Missy REPLY Report this post to a moderator 97 replies Re : MOBILE Posted by : cruiser2 on 28/06/06 at 08:17 PM CARAVAN Not been on here for a while cruiser2 REPLY Report this post to a moderator 96 replies SITE Posted by : cyclamen on 28/06/06 at 08:25 PM Patti REPLY Report this post to a moderator 95 replies BUILDING Posted by : missy2904 on 28/06/06 at 08:29 PM Missy REPLY Report this post to a moderator 94 replies CONSTRUCTION Posted by : bolynne on 28/06/06 at 09:06 PM sandy REPLY Report this post to a moderator 93 replies Re : CONSTRUCTION Posted by : melinda55 on 29/06/06 at 09:26 AM ERECTION Mornig all , good a lot warmer today and sunny . REPLY Report this post to a moderator 92 replies ELEVATION Posted by : cyclamen on 29/06/06 at 09:43 AM Patti REPLY Report this post to a moderator 91 replies HEIGHT Posted by : geminiglen on 29/06/06 at 02:59 PM --۞-- Gem REPLY Report this post to a moderator 90 replies WEIGHT Posted by : cyclamen on 29/06/06 at 03:14 PM Patti REPLY Report this post to a moderator 89 replies POUND Posted by : geminiglen on 29/06/06 at 03:52 PM --۞-- Gem REPLY Report this post to a moderator 88 replies Re : POUND Posted by : cruiser2 on 29/06/06 at 04:06 PM OUNCE cruiser2 REPLY Report this post to a moderator 87 replies SCALES Posted by : cyclamen on 29/06/06 at 04:09 PM Patti REPLY Report this post to a moderator 86 replies FISH Posted by : kalia on 29/06/06 at 04:18 PM REPLY Report this post to a moderator 85 replies SEA Posted by : cyclamen on 29/06/06 at 04:21 PM Patti REPLY Report this post to a moderator 84 replies CRUISE Posted by : geminiglen on 29/06/06 at 04:31 PM --۞-- Gem REPLY Report this post to a moderator 83 replies LINER Posted by : cyclamen on 29/06/06 at 04:36 PM Patti REPLY Report this post to a moderator 82 replies DRAWER Posted by : christinewilma on 29/06/06 at 04:40 PM Christine REPLY Report this post to a moderator 81 replies KNICKERS Posted by : dawnvf on 29/06/06 at 04:49 PM REPLY Report this post to a moderator 80 replies COTTON Posted by : missy2904 on 29/06/06 at 06:10 PM Missy REPLY Report this post to a moderator 79 replies BUDS Posted by : rannj on 29/06/06 at 07:05 PM rannj REPLY Report this post to a moderator 78 replies Re : BUDS Posted by : cruiser2 on 29/06/06 at 07:57 PM DARLING As in the TV series cruiser2 REPLY Report this post to a moderator 77 replies Re : Grace Posted by : louise66 on 29/06/06 at 07:59 PM Lou . REPLY Report this post to a moderator 76 replies CHARM Posted by : geminiglen on 29/06/06 at 08:04 PM --۞-- Gem REPLY Report this post to a moderator 75 replies Re : CHARM Posted by : melinda55 on 29/06/06 at 08:14 PM BEWITCH REPLY Report this post to a moderator 74 replies MYSTIFY Posted by : cyclamen on 29/06/06 at 08:38 PM REPLY Report this post to a moderator 73 replies PUZZLE Posted by : geminiglen on 29/06/06 at 09:02 PM --۞-- Gem REPLY Report this post to a moderator 72 replies JIGSAW Posted by : missy2904 on 29/06/06 at 10:25 PM Missy REPLY Report this post to a moderator 71 replies Re : JIGSAW Posted by : melinda55 on 30/06/06 at 07:49 AM PIECES Morning all , looks like another sunny and hot day . REPLY Report this post to a moderator 70 replies BITS Posted by : geminiglen on 30/06/06 at 10:25 AM I was doing a jigsaw last night --۞-- Gem REPLY Report this post to a moderator 69 replies PIECES Posted by : dawnvf on 30/06/06 at 04:33 PM This thread has been neglected for a few hours Will be leaving work soon hope you all have a fab weekend & come on England REPLY Report this post to a moderator 68 replies FIVE Posted by : geminiglen on 30/06/06 at 05:03 PM You will have to be a certain age to know what I 'm referring too : Can you guess what it is ? ? ? ? ? --۞-- Gem REPLY Report this post to a moderator 67 replies FAMOUS Posted by : rannj on 30/06/06 at 06:14 PM rannj ( Is is jack stones sometimes called five stones Gem ? ) REPLY Report this post to a moderator 66 replies Re : FAMOUS Posted by : melinda55 on 30/06/06 at 06:28 PM STARS REPLY Report this post to a moderator 65 replies MOON Posted by : missy2904 on 30/06/06 at 07:21 PM Missy REPLY Report this post to a moderator 64 replies Re : B LUE Posted by : christinewilma on 30/06/06 at 07:41 PM Christine REPLY Report this post to a moderator 63 replies RINSE Posted by : rannj on 30/06/06 at 08:55 PM rannj REPLY Report this post to a moderator 62 replies WATER Posted by : missy2904 on 01/07/06 at 08:08 AM Missy Good morning everyone , lovely day ! REPLY Report this post to a moderator 61 replies Re : WATER Posted by : melinda55 on 01/07/06 at 10:08 AM TONIC Morning all , getting very hot . Good Luck England ( but not holding out a lot of hope ) . REPLY Report this post to a moderator 60 replies GIN Posted by : missy2904 on 01/07/06 at 06:27 PM Missy REPLY Report this post to a moderator 59 replies PINK Posted by : rannj on 02/07/06 at 11:33 AM Morning all , rannj REPLY Report this post to a moderator 58 replies CADILLAC Posted by : geminiglen on 02/07/06 at 12:10 PM --۞-- Gem REPLY Report this post to a moderator 57 replies CAR Posted by : rannj on 02/07/06 at 07:47 PM rannj REPLY Report this post to a moderator 56 replies PARK Posted by : geminiglen on 02/07/06 at 07:49 PM --۞-- Gem REPLY Report this post to a moderator 55 replies SWING Posted by : christinewilma on 03/07/06 at 11:30 AM Christine REPLY Report this post to a moderator 0 replies Re : SWING Posted by : melinda55 on 03/07/06 at 12:03 PM BAND Very hot again today , I hate saying this but it 's too hot , but we wait so long for the sun and warmth you feel awful moaning about it . REPLY Report this post to a moderator 53 replies ROPE Posted by : dawnvf on 03/07/06 at 12:03 PM Morning all REPLY Report this post to a moderator 52 replies Re : ROPE Posted by : melinda55 on 03/07/06 at 04:40 PM TRICK REPLY Report this post to a moderator 51 replies MAGIC Posted by : dawnvf on 03/07/06 at 05:22 PM Ta ta peps of home now , c u 2moro REPLY Report this post to a moderator 50 replies WAND Posted by : missy2904 on 03/07/06 at 06:45 PM Missy REPLY Report this post to a moderator 49 replies Re : MASCARA Posted by : hillbills on 03/07/06 at 09:38 PM Hillbills REPLY Report this post to a moderator 48 replies WATERPROOF Posted by : missy2904 on 03/07/06 at 09:48 PM Missy REPLY Report this post to a moderator 47 replies PLASTER Posted by : christinewilma on 03/07/06 at 10:59 PM Christine REPLY Report this post to a moderator 46 replies Re : PLASTER Posted by : melinda55 on 04/07/06 at 08:02 AM CAST Morning all , Very hot even this early but thunder is expected this afternoon ( although here in S/East London we usually miss them . REPLY Report this post to a moderator 45 replies IRON Posted by : missy2904 on 04/07/06 at 04:10 PM Missy REPLY Report this post to a moderator 44 replies CLOTHES Posted by : christinewilma on 04/07/06 at 04:55 PM My most hated job Christine REPLY Report this post to a moderator 43 replies SHIRTS Posted by : dawnvf on 04/07/06 at 05:15 PM The worse REPLY Report this post to a moderator 42 replies TIES Posted by : rannj on 04/07/06 at 05:48 PM rannj REPLY Report this post to a moderator 41 replies Re : TIES Posted by : melinda55 on 04/07/06 at 06:00 PM STRINGS REPLY Report this post to a moderator 40 replies VIOLIN Posted by : christinewilma on 04/07/06 at 10:54 PM Christine REPLY Report this post to a moderator 39 replies CASE Posted by : missy2904 on 04/07/06 at 11:01 PM Missy REPLY Report this post to a moderator 38 replies Re : HISTORY Posted by : jeanniej on 04/07/06 at 11:04 PM Nite jx REPLY Report this post to a moderator 37 replies Re : HISTORY Posted by : melinda55 on 05/07/06 at 08:04 AM EXAMINATION Used to do quite well in those . Morning all , looks as if it might rain , still very muggy . REPLY Report this post to a moderator 36 replies TEST Posted by : kalia on 05/07/06 at 08:06 AM Morning all ... . . Melinda , its a bit cloudy up here as well , and fortunately cooler at the moment REPLY Report this post to a moderator 35 replies MATHS Posted by : rannj on 05/07/06 at 10:14 AM just had some rain and now it 's hot and steamy , rannj REPLY Report this post to a moderator 34 replies NUMBERS Posted by : dawnvf on 05/07/06 at 10:42 AM Very humid & grey here in Kent REPLY Report this post to a moderator 33 replies Re : NUMBERS Posted by : melinda55 on 05/07/06 at 01:17 PM EVEN Extremely dark here in S/East London . REPLY Report this post to a moderator 0 replies ODD Posted by : dawnvf on 05/07/06 at 01:19 PM Pouring down here & it 's my lunch break & I 've got to go to the shop REPLY Report this post to a moderator 31 replies ODD Posted by : dawnvf on 05/07/06 at 01:26 PM Melinda , I just read your in S/East london ! Where are you ? I 'm working in Crayford near Dartford but live in Erith near Woolwich REPLY Report this post to a moderator 30 replies BALL Posted by : missy2904 on 05/07/06 at 01:38 PM Missy REPLY Report this post to a moderator 29 replies BEACH Posted by : christinewilma on 05/07/06 at 03:03 PM Christine REPLY Report this post to a moderator 28 replies SUNNY Posted by : dawnvf on 05/07/06 at 05:25 PM Hot sunshine as it is now Of home now catch you all tomorrow x REPLY Report this post to a moderator 27 replies DAY Posted by : missy2904 on 05/07/06 at 07:14 PM Missy REPLY Report this post to a moderator 26 replies CARE Posted by : jeanniej on 05/07/06 at 07:16 PM j REPLY Report this post to a moderator 25 replies BEAR Posted by : rannj on 05/07/06 at 07:20 PM rannj REPLY Report this post to a moderator 24 replies HUG Posted by : christinewilma on 05/07/06 at 08:19 PM Christine REPLY Report this post to a moderator 23 replies COMFORT Posted by : jeanniej on 05/07/06 at 08:26 PM j REPLY Report this post to a moderator 22 replies Re : LOVE Posted by : hillbills on 05/07/06 at 09:33 PM Hillbills REPLY Report this post to a moderator 21 replies BUG Posted by : jeanniej on 05/07/06 at 09:35 PM J REPLY Report this post to a moderator 20 replies BEAR Posted by : missy2904 on 05/07/06 at 10:16 PM Missy REPLY Report this post to a moderator 19 replies Re : BEAR Posted by : melinda55 on 06/07/06 at 07:57 AM PADDINGTON Morning all - very muggy still . REPLY Report this post to a moderator 18 replies STATION Posted by : christinewilma on 06/07/06 at 09:08 AM Morning all lovely morning here Christine REPLY Report this post to a moderator 17 replies TRAIN Posted by : rannj on 06/07/06 at 12:12 PM It 's getting very dark here in NW Kent . rannj REPLY Report this post to a moderator 16 replies STEAM Posted by : missy2904 on 06/07/06 at 12:48 PM Dry and warm here again , after all that rain ! ! Missy REPLY Report this post to a moderator 15 replies BOIL Posted by : dawnvf on 06/07/06 at 01:50 PM REPLY Report this post to a moderator 14 replies Re : BOIL Posted by : melinda55 on 06/07/06 at 02:33 PM LANCE REPLY Report this post to a moderator 13 replies CUT Posted by : dawnvf on 06/07/06 at 02:59 PM REPLY Report this post to a moderator 12 replies Re : CUT Posted by : moking on 06/07/06 at 03:48 PM OPEN moking REPLY Report this post to a moderator 11 replies PLAN Posted by : missy2904 on 06/07/06 at 04:05 PM Missy REPLY Report this post to a moderator 10 replies ARRANGE Posted by : dawnvf on 06/07/06 at 04:36 PM REPLY Report this post to a moderator 9 replies FLOWERS Posted by : rannj on 06/07/06 at 06:31 PM rannj REPLY Report this post to a moderator 8 replies CUT Posted by : christinewilma on 06/07/06 at 06:38 PM Christine REPLY Report this post to a moderator 7 replies Re : CUT Posted by : melinda55 on 06/07/06 at 09:33 PM PRICE REPLY Report this post to a moderator 6 replies Re : TICKET Posted by : hillbills on 06/07/06 at 09:58 PM Hillbills REPLY Report this post to a moderator 5 replies TRAIN Posted by : missy2904 on 06/07/06 at 10:16 PM Missy REPLY Report this post to a moderator 4 replies TIMETABLE Posted by : jeanniej on 06/07/06 at 10:21 PM Could n't resist a last go tonight . jx REPLY Report this post to a moderator 3 replies BUS Posted by : rannj on 06/07/06 at 10:22 PM rannj REPLY Report this post to a moderator 2 replies Re : BUS Posted by : melinda55 on 07/07/06 at 07:47 AM DEPOT Morning all , sunny with a bit of a breeze . Not so humid . REPLY Report this post to a moderator 1 replies STORE Posted by : dawnvf on 07/07/06 at 11:18 AM Weather is cooler he too - much better in the office REPLY Report this post to a moderator </text>
<text id="dgtix" url="http://www.thebookpeople.co.uk/webapp/wcs/stores/servlet/product_10001_10051_20553_100_10012_10010_category_10010">
Beautifully illustrated by the award-winning artist Anthony Lewis , this atlas is full of colour maps that take you to all the countries of the world and show you the fascinating places you can see there . With a penguin bookmark to accompany you on your travels and a giant pull-out poster of the world at the back of the book , this is our most appealing and child-friendly atlas yet . </text>
<text id="dgwsx" url="http://www.bjhc.co.uk/news/industry/2005/ind505016.htm">
Free lifetime care for printers TallyGenicom has launched its Care for Life initiative , offering firms free onsite service for all its colour and mono laser printers . The service includes free online technical support as well as onsite service , next day business response priority call , printer up-and-running within 48 hours , discounted consumables and printer audit for the whole organisation . ' We want to offer our customers a solution and not just a printer ' , said TallyGenicom 's MD , Robin Edwardes . ' By providing free onsite service we can help our customers better manage their ongoing printer costs , whilst ensuring a fast and environmentally friendly service . ' The Care for Life service is available only to customers who continue to purchase goods from the company 's website and who purchase their printers from a Care for Life partner . </text>
<text id="dgztd" url="http://www.uea.ac.uk/eas/events/litfestspr04.shtml">
CENTRE FOR CREATIVE AND PERFORMING ARTS LITERARY FESTIVAL SPRING 2004 All events begin at 7 p. m . in Lecture Theatre 1 at UEA Wednesday 4 February TOBIAS WOLFF The Barracks Thief , This Boy 's Life , Old School Monday 16 February CAROLINE MOOREHEAD Iris Origo : Marchesa Val D 'Orcia , Martha Gellhorn : A Life Wednesday 10 March RAGEH OMAAR Revolution Day Wednesday 31 March ALAIN DE BOTTON The Romantic Movement , The Art of Travel , Status Anxiety Thursday 6 May MONICA ALI Brick Lane Wednesday 12 May MICHAEL HOLROYD Lytton Strachey , Basil Street Blues , Mosaic Wednesday 26 May JOHN SIMPSON News from No Man 's Land , The War Against Saddam Wednesday 2nd June NIALL FERGUSON Empire : How Britain Made the Modern World , Colossus : The Costs and Benefits of the New American Empire Season Tickets £ 30 ( students and concessions £ 18 ) Individual Tickets £ 5 ( students and concessions £ 3 ) ( Proof of eligibility for concessions will be required ) All tickets available in advance from the Box Office sited in Union House , UEA , Norwich NR4 7TJ Open 10 a. m . - 5 p. m . weekdays Telephone 01603 508050 ( credit and debit card payments are subject to a booking fee ) By Post : Box Office , Union House , UEA , Norwich NR4 7TJ ( cheques payable to SUS ( E. A . ) Ltd . Please enclose stamped addressed envelope . TOBIAS WOLFF is the author of three collections of stories . He won the 1984 PEN/Faulkner Award for his novella The Barracks Thief . His 1989 prize-winning memoir , This Boy 's Life , which was made into a film starring Robert de Niro and Leonardo di Caprio , was followed in 1994 by In Pharaoh 's Army : Memories of the Lost War . His new book , Old School , will be published in January 2004 . He is currently Director of the Creative Writing Program at Stanford University in the US . CAROLINE MOOREHEAD is the biographer of Bertrand Russell , Freya Stark , Over the Rim of the World , and Iris Origo , Iris Origo : Marchesa of Val D 'Orcia . She is well known for her work in the sphere of human rights , and has written a history of the International Committee of the Red Cross . Her most recent book , Martha Gellhorn : A Life , was published in Autumn 2003 . RAGEH OMAAR began his journalistic career in the Africa service of the BBC World Service . In 2000 he was awarded a Prix Bayeux award for his coverage of the Ethiopia-Eritrea War , and from 2001 to 2003 he was BBC TV News Africa correspondent , based in Johannesburg . He won an EMMA award for best TV journalist in 2002 and 2003 . His book , Revolution Day will be published in March 2004 . ALAIN DE BOTTON is the author of three novels : Essays in Love , The Romantic Movement and Kiss & Tell and four works of non-fiction including : How Proust Can Change Your Life , The Consolations of Philosophy and The Art of Travel . His new book , Status Anxiety , will be published in April 2004 , and will be accompanied by a Channel 4 television series . MONICA ALI was born in Dhaka , Bangladesh and as an infant moved to the north of England with her family . She studied politics , philosophy and economics at Oxford University . Her first novel , Brick Lane , set in the Asian community in London 's East End , was met with great critical acclaim . She was included on the highly prestigious Granta list of twenty Best of Young British Writers before the book was published . MICHAEL HOLROYD 's best-selling biographies , Lytton Strachey ( which was made into an award-winning film called Carrington ) , Augustus John , and Bernard Shaw , have won international acclaim . He was awarded the CBE in 1989 . A former chairman of the Society of Authors and Book Trust , and former President of English PEN , he is currently President of the Royal Society of Literature . His autobiography , Basil Street Blues , was published to great acclaim in 2000 . A companion volume , Mosaic , will be published in March 2004 . JOHN SIMPSON became a sub-editor in the BBC 's Radio Newsroom in his mid-twenties . He was later a political editor before becoming Editor of the BBC 's World Affairs Unit . He has twice been the Royal Television Society 's Journalist of the Year . He is the author of Strange Places , Questionable People , A Mad World My Masters : Tales from a Traveller 's Life and News From No Man 's Land . His new book , The War Against Saddam , was published in November 2003 . NIALL FERGUSON is Herzog Professor of Financial History at New York University , and Visiting Professor of History at Oxford University . His books include The Pity of War , The Cash Nexus , and Empire : How Britain Made the Modern World , which accompanied a major television series . His new book , Colossus : The Cost and Benefits of the New American Empire , will also be accompanied by a major two-part Channel 4 series . </text>
<text id="dhebu" url="http://www.kimberry.co.uk/Dotnetlectures/Index.aspx">
Active Directory provides a database that is core to your networking infrastructure and business critical applications . Directory information must be securely and reliably available throughout loosely connected distributed networks . Success is dependent on a solid replication infrastructure . Traditionally Active Directory performance has been enhanced by increasing the number of domain controllers and scaling out . With the advent of 64-bit Windows and its high-performance large scale memory architecture it is possible to scale up for peak performance and server consolidation . </text>
<text id="dhegq" url="http://www.lathes.co.uk/wolfjahnmiller/page2.html">
Model E Wolf , J ahn precision miller with backgear headstock and power longitudinal feed . This machine resembles many others by similar makers of very high-quality machine tools - Mikron , Pratt & Whitney , Rivett , Waltham , Ames , etc . - being based upon a headstock adapted from a lathe . In this case the head has been arranged to slide up and down a vertical slide but is , in all other respects , similar to the simpler horizontal machines illustrated below . Model A Wolf , J ahn precision milling machine which used the headstock assembly from the Model DD lathe with a 15 mm bore ; The 350 mm x 120 mm table had a longitudinal movement of 250 mm , a cross feed of 120 mm and a vertical travel of 170 mm . Another model , the B , a power feed version of which is illustrated below , used exactly the same arrangement of headstock and compound slide , but with a backgeared version of the headstock . With its unsupported spindle the machine was only capable of stub milling and to overcome this drawback Wolf , J ahn offered the more robust and versatile G2 . Model B Wolf , J ahn precision milling machine , based on the Model A above , but with power longitudinal feed and a backgeared headstock . A high-quality vertical miller , jig-borer and jig-driller by an unknown maker - but advertised in the Melhuish catalogue of 1898 and quite possibly a Wolf-Jahn . The machine stood 22.5 inches tall , with a base 22 inches long and 11 inches wide ; The nose of the 3/4-inch diameter , tool-steel spindle stood 3.5 inches clear of the rotary table and ran in hardened double- cone bearings 1 3/16 -inches in diameter ; it was bored clear through and accepted collets tightened by a draw tube , the handwheels of which can be seen in position . The longitudinal travel of the table was 6.75 inches and the traverse movement 5.5 inches ; the machine weighed approximately 165 lbs and cost £ 30 - as much at the time as a fully specified , English-manufactured five-inch centre height Britannia No . 16 backgeared and screwcutting lathe on a treadle stand . </text>
<text id="dhemc" url="http://www.humanism.org.uk/site/cms/newsarticleview.asp?article=2173">
On Radio 4 's Today programme on 10 April , the Church of England Education Officer Canon John Hall argued - inaccurately - that campaigners against faith schools are proposing a ' French model ' , and made flawed claims about the church 's contribution to the development of education . There are , of course , legitimate arguments to be made on both sides of the faith schools debate , but the BHA calls on Canon John Hall to stop muddying the water with false claims . ' The nation 's children deserve a higher standard of debate on the expansion of faith schools . ' said Hanne Stinson , BHA executive director , ' Their future depends on it . ' The French secularist model Canon John Hall , on the Today programme , said : ' The sort of knee-jerk reaction answer to ' how do you educate for life in a diverse multi-cultural society ? ' by some people is that you leave faith outside the door , that you teach about religion but you certainly do n't teach religion . Now frankly , that 's the sort of French secularist model . ' The Canon is entirely incorrect in his assessment of the French system , and his criticism of humanist ( and also religious ) campaigners ' approach to issues of religion and schools is similarly flawed . It is wrong to label as supporters of a French-type system those who call for inclusive community schools that accommodate those of all beliefs instead of religiously segregated schools . The French ignore religion ; faith schools evangelise about it . The middle road is objective , fair and balanced teaching about religions and non-religious beliefs that does not set out to persuade but to educate . This is what the BHA has long advocated and set as policy . This approach also has the support of many religious people - the Christian think tank Ekklesia , for example , has criticised John Hall 's comments ( click here ) History of church schools Canon John Hall said : ' Of course , the churches founded the educational system - and 4700 schools are Church of England , another two and a half thousand are Catholic - so 7000 - there they are - and they 've been there since well before the state started doing anything . ' Clearly the only sensible approach to take to the debate over faith schools and academies today is to look at current circumstances . Because the Church of England in particular , however , has made great play of the longstanding involvement of the church in education as a defence of its continued involvement , we feel that the glowing narrative of church school history must be challenged . Most of today 's church schools as institutions and the great majority as buildings were in fact created with public money . Since 1944 the church has contributed nothing to either running or building costs of voluntary-controlled schools and nothing to running costs and now only ( at most ) 10 % to building costs of voluntary-aided schools - but nothing , under recent government policies , to the current programme of rebuilding of secondary schools . The church in fact is the recipient of huge state aid , as are and will be the other religious groups as they gain their own faith schools . The church actually opposed state involvement in schools throughout the 19th century until it was finally forced to compromise in 1870 . When in 1798 Joseph Lancaster opened the first monitorial school in Southwark it aroused antagonism from the Church of England for its offering of non-sectarian education . In 1808 Bishops in the House of Lords opposed a Bill proposing a measure of free education . Small Government grants were introduced in the 1830s but when in 1839 the government proposed that the grants be conditional on inspection of schools and proposed also the formation of a non-sectarian State normal school for training of teachers , it was strongly opposed by the Church of England . The Church also defended its right to impose Anglican education on all by opposing bitterly the minimal conscience clause suggested by the government and sought by non-conformists , The introduction of a system of publicly funded education in 1870 was bitterly contested by the churches , who secured an interval to create new schools before the local school boards were allowed to start their own . In 1876 Joseph Chamberlain said that the Church party were trying everywhere ' to stunt the programme of the board school system , to prevent the erection of new schools and the provision of sufficient accommodation , to prevent the reduction of the cost of education [ ie school fees ] to the parents and to prevent the expenditure necessary to secure the efficiency of the schools ' . A notably sympathetic history , Church and State in English Education by Marjorie Cruickshank , states that ' Attempts to secure State intervention were baulked for many years by religious antagonisms . ' Brian Gates , in Faith Schools - Consensus or Conflict ? , says , ' Arguably , it was the tussling between [ the Anglican National Society and the non-conformist British and Foreign Schools Society ] that delayed the introduction of a fully comprehensive school system funded by public taxation . ' So the Churches have nothing to be proud of in their pre-1870 record . Rather , they held back education in England and Wales so that our position was notably worse than that of most of Europe and way behind that in Scotland , largely because of the religious beggar-my-neighbour opposition to any state intervention in schools . Note for editors : For more information and comment , contact Andrew by email or by telephone on 020 7079 3584 or 07855 380633 The British Humanist Association has been campaigning against faith schools and academies controlled by religious interest groups for many years , and published a widely-regarded policy paper in 2001 which has been revised and reissued this year . You can read it and about it here and about the BHA 's views on the Government 's Education and Inspections Bill here We welcome the current renewed interest in faith schools , stimulated by the threats posed by the Government 's Education Bill , and by the concerns of teachers , expressed through their unions , in the current conference season . </text>
<text id="dhowh" url="http://www.anweb.co.uk/l_04_c3/c3a10.htm">
Mark Gavillet , ' no conferring ' , 1999 . Steel , fabric , foam , office chairs . A beginner 's guide to shameless self-promotion 1. Start exhibiting as soon as possible , preferably before you leave college . The key to getting work shown is to have a history of having shown work . The more diverse your CV , the more appealing it is . Aim above your expectations . There is always compromise involved - make sure it is on your side . Do not however expect to be paid . 2. Consider exhibiting abroad . Use the novelty of being a foreign artist to your advantage . A list of international exhibitions on your CV gives the impression that your career is at a more advanced stage than it actually is . 3. Do your homework and find out who can help you . Go to as many openings as possible until you meet that person . You are in a much better position when talking to someone who has enjoyed too much complimentary wine than you are when you phone their office . Discreetly work into the conversation who you are , what you do , and arrange to meet them at a later date . The art world can be a very incestuous place to be . Jump on the bandwagon . </text>
<text id="news1" url="http://observer.guardian.co.uk/international/story/0,,631931,00.html">
They flee here for safety but are sent back to face death Zimbabwe 's democrats live in fear of beatings and murder . But if they seek asylum in Britain , they risk being bundled onto the first flight to Harare - where Mugabe 's agents lie in wait . Paul Harris and Martin Bright Sunday January 13 , 2002 The Observer They were waiting for him at the airport , just as he feared . Gerald Muketiwa was still recovering from the eight-hour flight to Harare when British immigration officers handed him over to their Zimbabwean counterparts . But the airport officials were not what they seemed . They were members of Zimbabwe 's feared Central Intelligence Organisation . Muketiwa was a youth organiser for the opposition Movement for Democratic Change ( MDC ) and had tried to claim asylum in Britain . Instead of offering sanctuary , Britain deported him . The Zimbabwean secret police had been monitoring his progress and now was their chance . As he was whisked off for interrogation , one of the CIO men leaned over and told Muketiwa with a smile : ' We 've been looking for you , Mr Muketiwa . You have sold out our country and you are going to prison for a long time . What have you been saying in the UK ? ' Muketiwa 's tale , recounting last week from a secret location in South Africa , sounds extraordinary , but an Observer investigation has discovered that scores of members of opposition parties in Zimbabwe face being sent back to President Mugabe 's regime with little regard for their safety . Some already have been . Most of them justifiably say they face imprisonment , torture or death upon their return . The CIO monitors every flight to Harare from London , looking for deportees . Passenger lists are passed to agents in the airport before landing . They are then met as they come off the planes . Such facts have been ignored by the British Government . Attempts are made almost daily to send card-carrying MDC members back to Harare from Gatwick and Heathrow . In many cases the deportees ' claims have been rejected outright as ' manifestly unfounded ' , despite their MDC credentials and the clear evidence of killings and beatings meted out to MDC supporters in Zimbabwe . This has brought calls from many campaigners for deportations to be suspended . In other cases deportees are put on flights before they have had time to call their lawyers or are discouraged from speaking publicly about their plight . Some deportees say they have been lied to in order to persuade them onto flights . Despite Foreign Office warnings of the deteriorating situation in Zimbabwe , the Home Office is using its own assessment , which has not been updated since October . Even some Labour politicians warn that the Home Office is now out-of-date and ignoring the growing dangers . ' The Home Office tends to be slow to change . It is self-evident that there is a major difference between the Foreign Office and Home Office view on what is going on in Zimbabwe , ' said Neil Gerrard , Labour head of parliament 's refugee group . The result is a processing system that human rights groups claim is designed to send back Zimbabweans as quickly as possible with little regard for their lives . ' It is hard to imagine that a Home Office official could feel happy in their own mind about sending them to Zimbabwe . It is a nearly catastrophic situation , ' said a spokesman for Amnesty International . People who try to work against the system are even more forthright . Lawyer Zoe Stevens has eight MDC Zimbabwean clients . All their claims were immediately rejected . She is fighting their appeals . She believes she might be fighting for their lives . ' We might as well cut out the middlemen and torture them ourselves . I feel ashamed about it all , ' she said . For Godfrey Dube the experience of British justice was brutal . An MDC member bearing scars from government mob beatings he received in Zimbabwe , Dube was refused asylum and led onto a British Airways flight on Christmas Eve . Terrified of being sent home he struggled and was beaten . Eventually , handcuffed and bleeding he was put on the plane where he begged passengers to help him . In the end a concerned BA hostess insisted he could not fly . ' When she saw I was bleeding , she made a fuss and took me off . Then I rang home to my mother that night and she said they ( the CIO ) had been waiting for me , ' Dube said . But such stories do not stop the attempted deportations . They happen almost every night . Last Wednesday Paul Chidziva , an opposition activist for the small Bulawayo-based Liberty Party , was just minutes from being bundled onto a South African Airways plane when the airline refused to take him . He believes his chances would have been small had he been sent back . Mugabe 's men would have pounced . ' Only 1 per cent of people get out of their hands , ' he said . Chidziva was then told he had five days to speak to his lawyers . Yet a second attempt was made to deport him less than 24 hours later . This time Virgin Atlantic refused to take him and contacted Amnesty International to complain . Despite on Friday being given the right to a judicial review , immigration officials again sought to deport him that night . Only after a last-minute phone call from The Observer was he taken off a flight for the third time in a week . Not all are so lucky . Last Monday night three Zimbabweans were deported . They were sent to Harare . It is not known what happened to them . There are around 180 Zimbabweans stranded in British detention centres . Their stories are similar . Most are low-ranking MDC members , usually teachers or journalists , who have fled the relentless pressure of Mugabe 's thugs . They end up in places like Yarl 's Wood Immigration Detention Centre . Sited at the end of a long and winding country lane near Bedford , the former army base is a grim and forbidding place . Even the system is against them . Last week campaigner Lord Avebury officially complained about vital faxes from lawyers being delayed by up to 36 hours before they are handed to detainees . As some claimants are only given 24 hours notice before being put on planes , such a delay could be a matter of life and death . Contact with the outside world is discouraged . All phone calls have to be paid for . Avebury recently phoned and asked one detainee to compile a list of Zimbabweans inside Yarl 's Wood . That night the detainee was woken at 1.45am to be quizzed on the call and then had his right of movement restricted . Avebury has launched a complaint about this treatment , too . Even social visitors to Yarl 's Wood are not allowed to take any possessions with them to meet the detainees . When The Observer visited Ngulube last week , not even a notebook was allowed in . No reason was given . Such conditions , coupled with the boredom , a regimented lifestyle and poor food , can have a devastating effect on the inmates , most of whom are young professionals who have fled for their lives . ' I know people in here who are now addicted to sleeping pills . We are all used to having our own lives , working . It 's terrible being in here and just doing nothing , ' Ngulube said . But the greatest fear is still the dreaded CIO . And they have a long reach . Speaking from inside Campsfield Immigration Detention Centre near Oxford , one Zimbabwean detainee detailed allegations that a fellow inmate was a CIO spy , posing as an asylum-seeker to gain information on MDC members detained in Britain . Kenneth , who would only agree to his first name being used , said his suspicions were raised when a fellow Zimbabwean detainee took him aside . ' He started saying that the immigration authorities were asking questions about me and when I checked this out I discovered it was not true , ' he said . Kenneth said he then told Campsfield officials about the incident and they admitted that they knew infiltration was a problem . The suspected agent later disappeared from the centre . It is not known if he was removed by the authorities to another centre or deported . Immigration officials said they could not comment on individual cases . Detainees who spoke to The Observer said CIO agents came to Britain to claim asylum knowing full well that they will be detained and enter the detention system . They said the spies have been known to pass information to the Zimbabwean embassy and threaten dissidents with reprisals should they return home . It is an allegation being taken seriously . The Refugee Council believes that several foreign intelligence agencies have infiltrated Britain 's asylum system hunting for dissidents who have escaped their grasp at home . They believe it is only to be expected that the CIO would be one of them . ' It clearly happens . There will be people in the system who are working for their governments , ' said Nick Hardwick , chief executive of the Refugee Council . Since mid-December Amnesty International has documented at least 10 killings of opposition supporters by pro-government militia . They include Laban Chiweta , burned to death in the town of Trojan Mine , and Milton Chambati , whose head was hacked off by so-called war veterans . Things are getting worse . Mugabe has to call a presidential election before the end of March . A brutal crackdown is in place , stamping on the remaining civil liberties in the economically devastated country . ' It is almost a civil war situation , ' an Amnesty spokesman said . Not that the Home Office agrees . There are no plans to consider a suspension of deportations until the situation becomes safer , despite a flood of appeals to do so from politicians of all parties and from some of the largest human rights groups in the world , including the United Nations High Commission for Refugees . ' There is a very real and immediate threat to the lives and safety of some of those who return . It is more serious than any other country 's situation at the moment , ' Hardwick said . Returning could be a death sentence . Gerald Muketiwa almost discovered that . In the airport police station where he was being held he asked to use a toilet . To his amazement they agreed . Then , folding up already tattered and torn clothes , he squeezed through a tiny window and ran for his life . ' I had to get out of there . I just knew I had to take my chance . These were CIO and these people are no joke , ' he said . Muketiwa escaped with his life . Others may not , say critics , and Britain will be to blame . · Some names have been changed in this article to protect identities . Britain 's Zimbabwe shame 13.01.2002 : Britain in dock over expulsions 13.01.2002 : They flee here for safety but are sent back to face death Asylum seekers speak out 13.01.2002 : Soccer hero - I 'll be killed as a traitor at home 13.01.2002 : Gerald 's story : How I was handed back to Mugabe 's men 13.01.2002 : Kenneth 's story : they spy on us in detention here 06.01.2002 : Exiles cry freedom over the airwaves More on Zimbabwe Special report : Zimbabwe 20.03.2002 : Sunder Katwala : Zimbabwe and the Commonwealth 11.01.2002 : Andrew Meldrum : Defying Mugabe 09.01.2002 : Mark Oliver : Zimbabwe press review 02.12.2001 : Fury as Zimbabweans sent to ' certain death ' 30.12.2001 : Mugabe regime tortures activist deported by UK 23.12.2001 : Mugabe defiant despite Bush sanctions 16.12.2001 : Mugabe declares ' total war ' on rivals 25.11.2001 : Bill Saidi : Where journalists are ' terrorists ' 28.10.2001 : John Prendergast : Only sanctions can stop Mugabe 19.08.2001 : Jason Burke in Zimbabwe : Mugabe 's war on his own people 19.08.2001 : Leader : Mugabe 's target Special reports Special report : Zimbabwe Asylum : myths and reality - Observer special </text>
<text id="news2" url="http://news.bbc.co.uk/2/hi/middle_east/5136988.stm">
Gazan butcher Mohammed Hadad opens the door to a walk-in fridge , releasing a pungent smell of rotting meat into his shop . The military action has come as Gaza suffers food shortages With Gaza facing rolling power cuts after an Israeli airstrike hit Gaza City 's only power plant , Mr Hadad 's refrigerators are no longer operational . Large cuts of lamb hanging from steel hooks are spoiling . Until now , Mr Hadad has been moving the meat between his home and shop depending on where there is electricity . But now he is stumped - there is no power in either building . " In three hours it will be completely spoilt , " he says , standing under a motionless roof fan . " We need to find a solution to this . " Guns and butter Palestinians in the Gaza Strip are feeling more besieged than usual as the tense stand-off continues with Israel over the fate of a captured soldier held in the territory . Butcher Mohammed Hadad is seeing his meat turn rotten The international community cut aid to the Palestinians in March when Hamas took office . Palestinians will tell you things have got worse . Every few hours , sonic booms rattle the city , waking people from their sleep and setting off car alarms . Israel has shelled targets in the territory . With no supplies coming into the territory from Israel , food and fuel is running short here , and some international aid agencies are warning of a possible humanitarian crisis if the blockade continues . Israel says its military operation will end if the kidnapped Cpl Gilad Shalit is freed and there is an end to rocket attacks into Israel from northern Gaza . Israel says it is hoping to pressurise the militants into releasing the soldier . But until now this has not happened . Deal hope Like Mr Hadad , many Palestinians want an end to their latest hardship . But most believe that Israel must release Palestinian prisoners in exchange for the 19-year-old soldier 's life . Petrol supplies are running low " There needs to be more negotiations , " says Mr Hadad . " A prisoner exchange is the only way to resolve this crisis . " Across the city , people have been looking for fuel for their cars and also to power their generators . Ataf Timraz , 30 , whose family owns two petrol stations and supplies fuel to 30 others , says that they have run out of fuel . As he sits in his office , a worker hoses down the garage forecourt and waves customers away . " People think we have stored petrol , that we 're hiding it , " says Mr Timraz , explaining people 's frustrations . Family history Most Palestinians are trying to carry on with their daily lives , but the threat looms of a major Israeli military operation . Why should we release the soldier for nothing ? Zami Shalouf Beit Hanoun In Beit Hanoun , a town in northern Gaza , residents are tense about a major Israeli military operation . This is the site from where many of the rockets are fired by Palestinians into Israel . Zamil Shalouf , 27 , whose house lies 100 metres from the border , says his wife and one-year-old son left the house three days ago to live with a relative . They were fearful of a possible major military incursion . But Mr Shalouf insists that those holding the soldier must extract a price from Israel . " An Israeli shell killed my brother in his house , " he says . " He was n't a militant . Why should we release the soldier for nothing ? " </text>
<text id="news3" url="http://news.bbc.co.uk/2/hi/asia-pacific/2181151.stm">
Thursday , 8 August , 2002 , 15:53 GMT 16:53 UK Turkmen leader to rename calendar Niyazov spends lavishly on spectacular palaces Turkmenistan President Saparmurat Niyazov has announced his intention to officially rename all 12 months of the year in commemoration of the country 's heroes and most potent national symbols . It seems like he lives on another planet Turkmen man Mr Niyazov proposes to rename January Turkmenbashi after his official name , which means Head of all the Turkmen . Other months will be renamed to honour famous Turkmen poets and writers . He also wants the seven days of the week to be renamed , with uplifting phrases such as Young Day for Tuesday and Spirituality Day for Saturday . Mr Niyazov , who was attending Turkmenistan 's annual People 's Council , also said he wants to call the month of April " Mother " . In response , a speaker at the council suggested calling the month by the full name of the president 's deceased mother , Gurbansoltan , which the president said he would consider . Public opinion Mr Niyazov already has several schools , cities , airports and even a meteorite named after him . Niyazov has ruled Turkmenistan unchallenged since 1985 Many people on the streets of Turkmenistan seemed unperturbed , but others were bitter regarding their leader 's latest plans . " This is a joke , the entire civilized world lives by the same calendar but Niyazov decides to set us apart once again , " one man told the AFP news agency . " It seems like he lives on another planet . " Cult of personality The People 's Council also called on Thursday for the eccentric leader to remain in power until his death , rejecting Mr Niyazov 's proposal to step down and hold elections in 2010 , Reuters news agency reported . He was made president for life in 1999 . Mr Niyazov has ruled the country since he was appointed Communist Party chief in 1985 when it was still part of the Soviet Union . He quickly developed a cult of personality surrounding himself , suppressing legitimate political opposition . He has spent vast sums of money on lavish palaces and statues of himself , despite the country 's increasing poverty . Much of the cash for such grandiose projects is thought to stem from deals involving Turkmenistan 's rich oil and gas reserves . </text>
<text id="news4" url="http://news.bbc.co.uk/2/hi/business/2235352.stm">
Wednesday , 4 September , 2002 , 06:06 GMT 07:06 UK Ex-WorldCom chiefs were warned Two of WorldCom 's top executives were warned in March that " questions " had been raised about its accounts , according to investigators looking into the fraud which led to the giant 's downfall . Ebbers was not a detached , unknowing chief executive Financial Services Committee spokeswoman Peggy Peterson An email sent on 18 March informed former chief executive Bernard Ebbers and former chief financial officer Scott Sullivan of concerns about accounting issues related to the preparation of WorldCom 's annual report , the US House Financial Services Committee said . During the same month , Salomon Smith Barney 's former telecoms analyst , Jack Grubman , warned Mr Sullivan that his firm was dropping WorldCom from a list of recommended shares before the information was released to investors . In an email sent on 12 March , Mr Grubman insisted that he had not been the one responsible for removing the firm from the list . " This is our strategist , not us . Which is why I hate ever having a name on that list , " Mr Grubman said in the email . In the know Mr Grubman 's warning was forwarded by Mr Sullivan to his boss , Mr Ebbers , the investigators said . Mr Sullivan could be sent to prison for 65 years A third email which was sent in May revealed that Mr Sullivan had tried to brush off an inquiry from the credit rating agency Moody 's Investors Service . " Overall , what all this has in common is it shows how Mr Ebbers , Mr Sullivan and Mr Grubman dealt with questions about WorldCom : They obfuscated every time , " Financial Services Committee spokeswoman Peggy Peterson said . " Ebbers was not a detached , unknowing chief executive . " Mr Sullivan , who is free on $ 10m bail , stands accused of being the head man in a conspiracy to hide WorldCom 's expenses . Last week , he was indicted by a grand jury . He faces up to 65 years in prison if he is convicted on charges of securities fraud , conspiracy and filing false statements with the SEC . WorldCom made US history as the country 's largest corporate bankruptcy on 21 July this year after admitting that it had falsely inflated its profits by $ 3.9bn . Citigroup hit Shares in Salomon Smith Barney 's parent company , Citigroup , were hit on Tuesday after Prudential Securities analyst Mike Mayo recommended that investors sell the stock . Mr Mayo warned that Citigroup is facing a massive legal and regulatory risk due to its involvement , via Salomon , with WorldCom and because of its involvement with the failed energy giant Enron . Citigroup fell 10.3 % to close down $ 3.36 at 29.39 . </text>
<text id="news5" url="http://money.guardian.co.uk/news_/0,,,00.html">
Npower announces further price increase Energy supplier npower today announced plans to increase domestic fuel prices by up to 17.2 % , its third round of price increases this year . OFT to investigate overdraft charges Fees charged by banks when a customer goes overdrawn without permission are to come under the spotlight , the Office of Fair Trading ( OFT ) announced today . Watchdog fines Carphone Warehouse Mobile phone retailer the Carphone Warehouse has been fined £ 245,000 by the financial services watchdog for failing to send out important documents to customers who bought insurance . House prices rise again House prices rose by 1 % in August , figures showed today , suggesting last month 's interest rate rise had little impact on homebuyers . Poor hit hardest by dearer oil , says study Research rejects myth of high middle-class inflation , as it is revealed that low earners spend a bigger slice of their income on energy Financial advisers do n't give sound advice , says Which ? Two-thirds of financial advisers are failing to give sound advice , according to the consumer body Which ? . Female bosses gain in small firms Female directors in smaller companies are for the first time earning more than their male counterparts , according to a survey from the Chartered Management Institute . September 6 Government cashes in on stamp duty Rising property prices helped swell the government 's coffers by £ 1bn between April and June , as buyers paid an average of £ 3,735 in stamp duty , a building society said today . Inheritance tax labelled unfair Only a tiny proportion of British people think inheritance tax is fair , figures showed today . Three-quarters of respondents said the tax was unfair , while just 8 % thought it was fair . Unions attack ' upstairs-downstairs ' pensions divide Directors of Britain 's top companies are accused of insulating themselves from the country 's pensions crisis after figures revealed they had amassed pensions worth nearly £ 1bn . Insurers fear savings scheme will be baffling Britain 's insurers will warn the government today that a proposed pension savings scheme targeted at low and medium-income workers risks becoming a white elephant . September 5 Women fear workplace discrimination A growing number of women believe companies are biased in favour of men and most feel intimidated because of their gender , according to a report published today . Motoring costs exceed £ 2,200 The average motorist spends £ 2,200 running their car each year , and the cost is likely to carry on rising , according to figures published today . Debt advice firm 's profits soar Advice firm Debt Free Direct highlighted the problems facing thousands of people with credit card and other outstanding bills when it forecast a surge in profit growth for this year . City trader 's £ 5m claim puts spotlight back on bonuses Bonus payments in the City will come under further scrutiny after it was revealed that a bond trader demanded more than 7.5m ( £ 5m ) he claimed he was owed from a single trade . September 4 Alliance & Leicester raises interest rates Bank 's decision to offer its current account customers a 6.1 % interest rate is the latest move in the ongoing battle by smaller banks to win business from the big five . Poor hit by rising energy costs The poor are suffering more than wealthier sections of British society from spiralling energy costs , a coalition of charities and consumer groups said today . September 3 Influx of EU immigrants pumps up buy-to-let market Property boss Nigel Terrington argues that new workers will provide a firm foundation for the rented sector . New data theft scandal rocks subcontinent 's call centres Leading British and American companies face being dragged into an emerging fraud scandal at a call centre company in India . Fury over pensions bonanza for bosses Britain 's top businessmen will collect up to £ 1m while companies axe final salary schemes for employees . September 2 10 years with Scottish Widows leaves saver £ 200 down Devastated saver appeals to financial ombudsman . September 1 Provider axes credit card cheques One of the country 's biggest credit card providers has said it will no longer issue credit card cheques following a trial suspension earlier in the year . Report finds more students working to fund studies Students are increasingly forced to find part-time work during their holidays to help pay off worsening debt levels , according to union report . Abta travel bond scheme loses OFT approval The Office of Fair Trading has removed the Association of British Travel Agents from its list of approved bodies after it said it was reducing the level of protection it gave consumers . August 31 Car insurance costs set to increase Drivers today faced the prospect of more expensive car insurance as the UK 's biggest insurer Norwich Union announced it was increasing premiums . House prices continue to rise House prices rose by 0.8 % in August , figures showed today , suggesting the recent interest rate rise has not yet had an impact on the market . Employers attempt to water down pension reforms The government is under pressure from employers to dilute its pension reforms following claims that the scheme would prove an administrative headache for thousands of businesses . Average Briton has £ 7,548 in savings , says bank Average Britons have enough cash saved to last them 167 days , a study has revealed . August 30 Travellers warned of parking scams Holidaymakers are falling foul of off-airport parking scams , trading standards chiefs warned today . Businesses oppose maternity plans The majority of businesses are opposed to the government 's plans to extend paid maternity leave , according to latest figures . Mortgage lending hits three-year high There were further signs of a strengthening housing market today as official data revealed mortgage lending hit a three-year high in July . Air Berlin to sell flights at supermarket checkouts In a bold move that could be the beginning of a partnership between supermarkets and budget airlines , Air Berlin is to sell cut-price flights next month at Lidl checkouts . Daily Mail expands web base by buying Simplyswitch The publisher of the Daily Mail continues its online spending spree by buying the consumer website Simplyswitch for £ 22m . Is there a demand for the divi ? The co-operative is relaunching to appeal to a new generation , losing the capital C and gaining a new ' profit share ' scheme . August 29 Associated buys price website for £ 22m Associated Newspapers has acquired price comparison website SimplySwitch in a £ 22m deal . Law firms accused of homophobia City law firms were accused today of having " undertones of homophobia " because of their emphasis on out-of-hours hard drinking and visits to lap dancing clubs . Asda job applicants no longer asked their age The supermarket chain Asda announced yesterday that it would no longer ask people applying for a job at its stores to give their date of birth on their application form . Sainbury 's Bank moves to beat cash machine fraud Sainsbury 's Bank is to invest £ 3.5m on security around its 885 cash machines in a bid to halt fraud which , it believes , has risen by 260 % over the past five years . </text>
<text id="news6" url="http://football.guardian.co.uk/Match_Report/0,,1536875,00.html">
Dominic Fifield at Darius and Girenas Stadium Wednesday July 27 , 2005 The Guardian Liverpool supporters have seen it all now . Most are still pinching themselves after seeing their side lift the European Cup in May . Some , perhaps unjustly , are flinching at the £ 7m paid to Southampton for Peter Crouch . But all must have reeled in disbelief here last night at the sight of Jamie Carragher scoring a goal . The centre-half 's reward , his first in six years and only the third goal of his career , helped establish a lead in this tie which should see Liverpool safely through to the third qualifying stage . It was timely , too . The holders trailed briefly and , on an awkward surface against spirited opponents , flirted with disaster before , eventually , their class told . Article continues A two-goal advantage going into next week 's return should prove sufficient to ensure progress , with the draw for the final qualifying phase to be made on Friday . The possibility of facing Everton at that stage looms large , though for the moment Liverpool can take heart at a job half done . Rafael Benítez leaves the Baltic encouraged that , if he can prise a goal from Carragher , he is a miracle worker indeed . " It 's been such a long time it 's a little bit embarrassing really but I 'm delighted to get that monkey off my back , " admitted the 27-year-old , whose last goal had come in the 7-1 thrashing of Southampton in January 1999 . " Hopefully I can add to that now . The manager said after the game he wants another three or four this season . That 's the target . I probably deserve the match ball after that . Me scoring one is like someone else getting a hat-trick . " Liverpool needed him to break that long duck . Preparation , by Benítez 's standards , had been sketchy for this tie and , confronted by the Lithuanians ' eager early aggression , the holders briefly teetered . For six minutes embarrassment threatened after Arturas Rimkevicius gathered from a throw-in and flummoxed the ponderous Sami Hyypia near the touchline . The striker tore towards the area and pulled back to the top of the six-yard box where Giedrius Barevicius ' mis-hit shot wrong-footed José Reina and dribbled in . The giddy reality of their lead took time to sink in with the locals and , had their striker Andrius Velicka been fit , they might have prospered further . Yet it always looked a temporary upset of the natural order . By the interval Liverpool were ahead . First Boudewijn Zenden 's looping cross was nodded down by the debutant Crouch , a signing of real stature who provided no little elegance in his ground-play . Mindaugas Baguzis could have cleared but he dithered near the penalty spot and Djibril Cissé spun and thumped the equaliser into the corner . Kaunas 's spirit momentarily drained and , while heads were down , Steven Gerrard 's corner was headed in for Carragher 's rare party piece . Cissé should have added a third before the interval , bursting on to Xabi Alonso 's threaded pass and skimming a shot beyond Eduardas Kurskis only for Irmantas Zelmikas to scramble the ball from the line . The Frenchman missed again when clean through near the end but Liverpool 's dominance had long since been established . There was real promise in the combination of Crouch and Cissé , the reassurance of Fernando Morientes emerging from the bench and Alonso 's clever passing alongside Gerrard 's purring menace in midfield . The hapless Baguzis tripped the galloping captain in the area nine minutes into the second period and Gerrard dispatched the penalty himself , his 15th European goal . " We 're strong favourites and 90 % certain of going through after that but we 'll still need to find the other 10 % now , " added Carragher . " We 'll show them respect because we always do . " Even so , a professional performance in what should prove a formality of the return next Tuesday and Liverpool , seeded and warming up nicely , will be one stage away from the Champions League proper . </text>
<text id="news7" url="http://news.bbc.co.uk/2/hi/asia-pacific/5133220.stm">
Chinese President Hu Jintao has opened the world 's highest railway , describing it as a " magnificent feat " . The Qinghai-Tibet line boasts high-tech engineering to stabilise tracks over permafrost and sealed cabins to protect passengers from the high altitude . China says the 1,140km ( 710-mile ) line will bring major opportunities to a poor region . But critics fear it will be used by China to assert its control over a contested border region . They also say the railway line threatens not only the delicate Himalayan environment , but also the ancient Tibetan culture . Red ribbon Mr Hu cut a red ribbon before the first train left Golmud in China 's Qinghai province , carrying 900 passengers to the Tibetan capital , Lhasa . Follow the route of the China-Tibet railway " This is a magnificent feat by the Chinese people , and also a miracle in world railway history , " Mr Hu said . He said it showed China 's people were " ambitious , self-confident and capable of standing among the world 's advanced nations " . There have been protests against the railway , such as this in India Musicians in traditional Tibetan and Chinese dress banged drums and cymbals as thousands of workers who helped to build the line looked on . Minutes later , state TV showed another train departing Lhasa for Golmud . On Friday , three foreign activists were briefly detained at Beijing 's central railway station on Friday after unfurling a banner that read : " China 's Tibet Railway : Designed to Destroy . " At its highest point , the railway will reach 5,072m ( 16,640ft ) - beating by 225m a route through the Peruvian Andes that was previously the world 's highest railway , the China Daily newspaper reports . In parts , the train line has been built on bridges elevated above the most unstable permafrost . Elsewhere , cooling pipes have been sunk into the ground to ensure it remains frozen to stabilise the tracks . QINGHAI-TIBET RAILWAY Connects Lhasa to existing China rail network New 1,140km stretch cost $ 4.2bn World 's highest railway , reaching 5,072m Oxygen to be pumped into each carriage Restaurant car 's rice cooked in pressure cookers , to mitigate effects of high altitude Beijing to Lhasa to take 48 hours , cost $ 50-$160 one way In pictures : New railway Railway raises fears Send us your comments The train carriages have windows with ultra-violet filters to keep out the sun 's glare , as well as carefully regulated oxygen levels with spare supplies to combat the thin air . Zhu Zhensheng of the Chinese railway ministry called the new line a " major achievement " that will " hugely boost local development and benefit the local people " . But exiled Tibetan Lhadon Tethong said the railway was " engineered to destroy the very fabric of Tibetan identity " . " China plans to use the railway to transport Chinese migrants directly into the heart of Tibet in order to overwhelm the Tibetan population and tighten its stranglehold over our people , " he said on a Free Tibet Campaign statement . The Dalai Lama , Tibet 's spiritual leader in exile since 1959 , was more circumspect . " The railway line itself is not a cause of concern for the Tibetan people , " his spokesman , Thupten Samphel , said . " How it will be used is the main concern . " </text>
<text id="news8" url="http://news.bbc.co.uk/2/hi/europe/4263426.stm">
Many in Croatia regard Gen Gotovina as a national hero The Vatican is helping Croatia 's most wanted war crimes suspect evade capture , a top UN prosecutor alleges . Carla del Ponte , chief prosecutor for war crimes in the former Yugoslavia , has said she believes Gen Ante Gotovina is hiding in a monastery in Croatia . Ms del Ponte 's spokeswoman told the BBC News website that the Vatican had refused to help in the search for him , despite being in a position to do so . A spokesman for the Croatian Catholic Church rejected the charges . In a statement later the Vatican said that Archbishop Giovanni Lajolo , responsible for the city-state 's foreign relations , had asked Ms del Ponte for further details of her assertions . Chief spokesman Joaquin Navarro-Valls said Ms del Ponte had not yet responded to requests for further information . Divided opinions Gen Gotovina has been charged with the deaths of 150 Serb civilians in 1995 . Earlier this year , the European Union cited Zagreb 's failure to arrest him as the reason behind delaying talks on Croatia 's entry into the bloc . Forces under Gen Gotovina 's command are accused of killing scores of Serbs and expelling up to 200,000 from the Krajina region , now part of Croatia . Many in Croatia regard him as a national hero . Ms del Ponte wants the authorities to act against war criminals Croatian authorities have insisted they are doing everything in their power to deliver Gen Gotovina to the UN 's war crimes tribunal in the Hague . The Croatian Bishops ' Conference , which heads the Croatian Roman Catholic Church , dismissed Ms del Ponte 's allegations . Its spokesman Antun Suljic said the conference " has no knowledge or indications of the whereabouts " of Gen Gotovina . Vatican ' refusal ' Ms del Ponte wrote to Pope Benedict XVI in July this year in an effort to secure the Vatican 's co-operation , her spokeswoman told the BBC News website . The Pope has yet to reply to the prosecutor 's request for a meeting , the spokeswoman said . Ms del Ponte earlier told British newspaper The Daily Telegraph she believed Gen Gotovina was " hiding in a Franciscan monastery and so the Catholic Church is protecting him " . " I have taken this up with the Vatican and the Vatican totally refuses to co-operate with us , " she said . Archbishop Lajolo told Ms del Ponte the Vatican did not know of Gen Gotovina 's whereabouts and was not obliged to help her , she was quoted as saying . Her spokeswoman , Florence Hartmann , told the BBC News website that " the law applies to everyone , including the Vatican " . She said UN prosecutors faced similar difficulties in tracking down the Bosnian Serb war crimes suspect Radovan Karadzic , who is thought to have sought refuge among Orthodox Christian monks in Montenegro . " We 're fully ecumenical , " she said . E-mail this to a friend Printable version FROM OTHER NEWS SITES : Sydney Morning Herald * Vatican denies shielding accused war criminal - 6 hrs ago New York Times Church Denies Hiding War Crimes Suspect - 35 hrs ago Washington Post * U. N . Prosecutor Faults Vatican in Fugitive Hunt - 35 hrs ago Independent UN prosecutor sparks fury with claim Vatican is hiding alleged war criminal - 39 hrs ago ABC Online Vatican accused of shielding war crimes suspect - 39 hrs ago </text>
<text id="news9" url="http://news.bbc.co.uk/2/hi/business/2769931.stm">
Contributions have risen from £ 5.3bn to £ 6bn in a year Employers ' contributions to pension schemes have risen by 25 % during the past two years , according to research published on Monday . PENSIONS IN CRISIS 75 % of final salary schemes will close within five years ( Hermes ) Only a fifth of people under 34 are concerned about their future retirement ( Mercer ) People from ethnic minorities are at higher risk of pensioner poverty ( Pensions Minister ) Get more from BBC News Online 's pensions website And in the past year they increased to £ 6bn from £ 5.3bn , the survey of 339 schemes suggested . Incomes Data Services said its study showed the " vast scale " of company money flowing into pension schemes . However , IDS says the rise is nothing to do with generosity on the part of the companies concerned . Instead , it reflects the way many companies took £ 18bn in " pension holidays " during the 1990s boom , using the rising price of investments to justify halting their contributions or even taking money out of their funds . More than a quarter of the total payout in the 24 months under review was for " special contributions " , to make up for shortfalls and to cover early retirement and other contingencies . Those " special contributions " account for more than the total rise in overall contributions . Radical action The survey also highlights the fact that one out of every 10 schemes receive no employer contributions at all . Pensions have become a major concern of trade unions following the closure of many schemes that guaranteed employees a fixed proportion of their final salaries on retirement . And Britain 's biggest manufacturing union , Amicus , is holding a conference in March to press for better schemes . Joint general secretary Derek Simpson said : " Employers have a moral obligation , as do employees , to make provision for retirement income . Pensions minister Andrew Smith has said the government will consider " radical and concerted action " to shore up final salary pension schemes . But Mr Simpson said : " The government must legislate to make this happen . " The consequences of not doing so will be disastrous for individuals and the economy . " </text>
<text id="newsa" url="http://news.bbc.co.uk/2/hi/uk_news/education/2191422.stm">
Friday , 16 August , 2002 , 02:36 GMT 03:36 UK Teachers get advice on violence Teachers are increasingly concerned about violent pupils A teachers ' union is so concerned about the growing incidents of violence and disruption in schools , it has issued its members with new guidance for their own protection . For the first time , diaries sent to all National Association of Schoolmasters Union of Women Teachers ( NASUWT ) members this week will outline how teachers can best tackle the problem . It is unacceptable that teachers should face violence at work Eamonn O'Kane , NASUWT The guidelines urge teachers to report all incidents of actual or threatened assault or criminal damage to the police . The advice also recommends staff be given training in avoiding and managing dangerous situations . The NASUWT calls on head teachers to introduce a code of " zero tolerance " towards pupils who have been excluded And parents who have been abusive or violent towards staff should be banned from school premises . A failure by schools to put in place adequate protection for teachers may lead to risk assessments for violent and disruptive pupils and a refusal to teach those who pose a real danger , the union warns . Violent pupils NASUWT general secretary Eamonn O'Kane said : " It is unacceptable that teachers should face violence at work . " " NASUWT guidance highlights options available to limit the threat . By including this in the diary , every member can carry round details of the steps necessary to protect themselves in school . " Although the numbers of pupils excluded last year went up for the first time in the past six years , NASUWT remains concerned that governing bodies continue to readmit violent and disruptive pupils . " Last month the Department for Education issued posters to all schools in England warning parents they faced prosecution if they threatened or abused staff . The posters , similar to those found in hospitals and on public transport , were accompanied by a " toolkit " setting out the legal position on parental violence . </text>
<text id="newsb" url="http://news.bbc.co.uk/2/hi/africa/2909769.stm">
Several hundred people have been killed since September The United Kingdom has warned a UK company against recruiting mercenaries to work in Ivory Coast . Foreign Secretary Jack Straw said such an enterprise would seriously undermine the Ivorian peace process . He said he was gravely concerned at reports that Northbridge Services Group - a security company - was recruiting ex-servicemen from Britain , South Africa and France . But a release denied that they were a mercenary firm . " This contract was to provide humanitarian support and increased governmental security " , the statement said . Services the company website says it offers , includes demilitarisation of warring factions , mine clearance , and special forces to counter terrorists and narcotics . Cabinet meeting Mercenaries from eastern Europe , South Africa and Angola have been accused of fighting on the side of the government since September 's military uprising against the government of President Laurent Gbagbo . IVORY COAST CONFLICT Hundreds killed More than a million displaced 3,000 French peacekeepers Nation divided in two Power sharing deal still to work New role for mercenaries A peace agreement was signed in January and a power-sharing government has been named . The rebels have so far refused to attend cabinet meetings citing security concerns but now say they will be present at Thursday 's meeting . The government has denied claims this week by the opposition Le Patriote newspaper that it has hired 1,000 South Africans to fight on its side . Reuters news agency quotes diplomats in Ivory Coast as saying that they have heard of the hiring of 300 fresh mercenaries . " Any deployment of foreign military units at this time would seriously undermine the peace process and the efforts of the UK and the wider international community , " Mr Straw said . But Northbridge says Mr Straw 's comments " come as a great surprise when it was he that strongly supported the use of private military companies in a office Foreign and Commonwealth Office " . document . Ivory Coast , the world 's largest cocoa producer , is now a divided country with the three groups of rebels controlling the north and a big part of the west of the country . The government controls the rest , including the economic capital Abidjan and the main capital Yamoussoukro . </text>
<text id="newsc" url="http://news.bbc.co.uk/2/hi/uk_news/2509561.stm">
Monday , 25 November , 2002 , 15:06 GMT Lords defy Blunkett on life sentences Jail terms ' should be determined by judges ' The home secretary 's power to increase the minimum sentence handed down to convicted murderers is " incompatible " with human rights laws , the Law Lords have ruled . This is the first step towards taking away the powers home secretaries have to extend the length of time murderers must serve before they can apply for parole in England and Wales . Murderers ' cases that could be reviewed : Dennis Nilsen - killed 15 men Rose West - murdered 10 young women , including her eldest daughter Heather , 16 . Arthur Hutchinson - killed a solicitor , his wife and their son and raped their daughter during a burglary Jeremy Bamber - killed his adoptive parents , his step-sister and her six-year-old twin sons In a test case affecting 225 prisoners , a specially convened panel of seven Law Lords accepted the argument by defence lawyers that judges should be handed back the task of fixing minimum tariffs for prisoners serving life for murder . Lord Bingham said the power exercised by the home secretary to decide how long sentences should be , was " incompatible " with article six of the European Convention on Human Rights - the right of a convicted person to have a sentence imposed by an independent and impartial tribunal . But Home Secretary David Blunkett has promised new laws to establish a set of principles which judges will use to fix minimum tariffs in the future . Killers ' case Home Office Minister Hilary Benn says Parliament must still have a say in the penalties for certain crimes . " In certain cases , the most heinous crimes , for example , the sexual and sadistic murder of children - life should mean life , " he told BBC News 24 . " And we need to make sure that Parliament retains accountability for the framework of sentencing , while recognising that judges will in future hand down sentences for individual cases . " Raising killers ' hopes ? Click here to read The test case was brought by three convicted killers , including double murderer Anthony Anderson , who was jailed in 1988 . Mr Anderson claimed his human rights have been breached by the increase of his minimum prison sentence to 20 years , after his trial judge had recommended 15 . His success could open the way for appeals by 70 prisoners who have already served the minimum tariff set out by the trial judge , but who are now serving additional time set by the home secretary . Many prisoners could sue the government . Whiting : Likely to die in jail It could also open the way for more than 20 murderers with " whole life " tariffs to have new minimum terms decided by the Lord Chief Justice , Lord Woolf . Mr Blunkett has insisted that he would not see the most notorious killers , like Harold Shipman , released from prison . He believes " life means life " and if this judgement goes against him , he will simply change the law . Brady : Unlikely to ever be released On Saturday , Mr Blunkett announced that Roy Whiting - convicted of murdering eight-year-old Sarah Payne - should serve a 50-year minimum jail term . However the House of Lords ruling is unlikely to affect Whiting since his original trial judge , Mr Justice Richard Curtis , said at the time that it was a rare case in which he would recommend a life sentence meaning life . Staying inside Rose West was jailed in 1995 for a minimum of 25 years for the " house of horrors " murders of 10 women , but the home secretary later decided on a whole life tariff . This ruling has no imminent impact on Rose . She has said that she does not want to come out . Leo Goatley Rose West 's solicitor Her solicitor , Leo Goatley , told BBC News Online : " This ruling has no imminent impact on Rose . She has said that she does not want to come out . " The case comes too late for Moors murder Myra Hindley , who died in prison earlier this month for her part in the killing of five children . Her partner in crime , Ian Brady , would be an unlikely candidate for appeal . The judge in Brady 's case recommended he serve a whole-life tariff . Shadow home secretary Oliver Letwin said he thought the current system had been " operating well " . The government 's current predicament was as a result of its introduction of human rights legislation , he said . </text>
